如何解决用于在两个系统中更新记录的系统设计:并行与串行?
我们有一个将数据存储在RDBMS中的系统。 UI或APP正在访问此数据。随着系统的扩展,获取此数据的等待时间正在增加。
为了扩展系统并提供更好的搜索选项,我们计划还将这些数据存储在Elastic Search或SOLR中。 新数据将插入到主系统中,并通过Kafka发送到ES / SOLR。 App / UI将从ES / SOLR获取此数据。
现在,App和UI可以更新此数据。我想要输入有关如何设计此更新流程的信息。
-
如果将更新发送到主系统,然后通过Kafka传递给ES,则可能会有滞后,并且UI / App可能因此而获得陈旧记录。
-
如果将更新并行发送到两个系统,则将解决陈旧记录问题。但是,当其中一个系统的更新失败并通过其他过程时,如何处理异常?
解决方法
应用程序防御机制应该可以为您提供帮助。尝试Netflix hystrix。
步骤:
- 获取将要更新的现有记录。
- 执行hystrix库:
- 更新RDBMS中的记录。如果失败,则抛出带有代码的异常。假设在这里使用了code1。
- 更新ES中的记录。如果失败,则将异常与代码一起抛出。假设在这里使用了code2。
- 如果执行有异常,则执行回退:
- 如果为code1,则将异常返回给调用客户端。
- 如果为code2,则将RDBMS中的值还原(更新)为旧记录。
Netflix hystrix基本上为应用程序防御机制提供了各种功能。试试吧。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。