问题描述
我们有一个将数据存储在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基本上为应用程序防御机制提供了各种功能。试试吧。