并行与串行两种系统中记录更新的系统设计



我们有一个在RDBMS中存储数据的系统。用户界面或应用程序正在访问此数据。随着系统的扩展,获取这些数据的延迟也在增加。

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

现在,应用程序和用户界面可以更新这些数据。我想要关于如何设计这个更新流的输入。

  • 如果更新被发送到主系统,然后通过Kafka传递给ES,可能会出现滞后,UI/App可能会因此获得过时的记录。

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

应用程序防御机制应该会对您有所帮助。试试Netflix hystrix。

步骤:

  1. 获取即将更新的现有记录
  2. 执行hystrix库:
    • 更新RDBMS中的记录。如果失败,则引发带有代码的异常。假设这里使用了code1
    • 更新ES中的记录。如果失败,则引发异常并返回代码。假设这里使用了code2
  3. 如果执行出现异常,则执行回退:
    • 如果为code1,则将异常返回给调用客户端
    • 如果代码为2,则将RDBMS中的值恢复(更新(为旧记录

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

最新更新