我正在用CQRS和事件源开发一个微服务。当将事件保存到事件存储区时,服务当前还将更新的聚合根保存为单独表中的JSON对象。到目前为止,我已经将写模型与读取模型分离开来(尽管不是在单独的数据存储中)。
我想更进一步。我希望为写入模型提供一个微服务,为读取模型提供另一个微服务,以解决可伸缩性问题。每个服务都有自己的数据库。我希望使用消息传递来维护写入和读取模型之间的最终一致性。
我担心这种方法会如何影响这个后端的前端应用程序中的用户体验。
假设用户创建了一个post。写服务返回ok,然后(根据设计)用户立即被重定向到显示新创建的post及其内容的页面。
但是,由于消息传递的异步性质,读取模型可能与写事务不一致,因此,在前端试图调用它时,读取服务还没有包含新创建的post。
处理这种情况的常规/行业标准方法是什么?
发布于 2019-11-20 21:36:55
基本上,在执行重定向之前,您要等到可以读取回数据为止。“最终”是描述一致性模型的一个不幸的词,因为它意味着要等待很长时间。在绝大多数情况下,您可以度量它不一致的时间(毫秒)。如果延迟时间比这长,那么要么集群中出现了严重问题,要么您故意这样设计它,以便利用批处理或现货定价,或者是因为需求,比如限制对上游服务的速率。
https://softwareengineering.stackexchange.com/questions/401352
复制相似问题