用于在两个系统中更新记录的系统设计:并行与串行?

问题描述

我们有一个将数据存储在RDBMS中的系统。 UI或APP正在访问此数据。随着系统的扩展,获取此数据的等待时间正在增加

为了扩展系统并提供更好的搜索选项,我们计划还将这些数据存储在Elastic Search或SOLR中。 新数据将插入到主系统中,并通过Kafka发送到ES / SOLR。 App / UI将从ES / SOLR获取此数据。

现在,App和UI可以更新此数据。我想要输入有关如何设计此更新流程的信息。

  • 如果将更新发送到主系统,然后通过Kafka传递给ES,则可能会有滞后,并且UI / App可能因此而获得陈旧记录。

  • 如果将更新并行发送到两个系统,则将解决陈旧记录问题。但是,当其中一个系统的更新失败并通过其他过程时,如何处理异常?

解决方法

应用程序防御机制应该可以为您提供帮助。尝试Netflix hystrix

步骤:

  1. 获取将要更新的现有记录。
  2. 执行hystrix库:
    • 更新RDBMS中的记录。如果失败,则抛出带有代码的异常。假设在这里使用了code1。
    • 更新ES中的记录。如果失败,则将异常与代码一起抛出。假设在这里使用了code2。
  3. 如果执行有异常,则执行回退:
    • 如果为code1,则将异常返回给调用客户端。
    • 如果为code2,则将RDBMS中的值还原(更新)为旧记录。

Netflix hystrix基本上为应用程序防御机制提供了各种功能。试试吧。