Questions tagged «eventual-consistency»

5
微服务:处理最终一致性
假设我们有一个更新用户密码的功能。 单击“更新密码”按钮后,会将UpdatePasswordEvent发送到预订了3个其他服务的主题: 实际更新用户密码的服务 一种更新用户密码历史记录的服务 发出电子邮件通知用户其密码已更改的服务。 根据我对最终一致性的了解,所有这些服务(消费者)将同时接收事件并分别处理它们,在良好的情况下,这将导致数据保持一致。 但是,如果服务无法处理事件怎么办?例如突然断开连接,数据库错误等...处理这些事务失败的好的模式/做法是什么? 我当时正在考虑创建一个RollbackTopic,如果任何事件都无法处理,将在一个主题中创建一个RollbackEvent,其中“ rollback services”将完成其工作并将数据还原

8
如何针对最终一致的服务编写测试?
我正在Google App Engine数据存储区上构建服务,这是最终一致的数据存储区。对于我的应用程序,这很好。 但是,我正在开发测试,这些测试执行的操作类似PUT对象,然后执行GET对象,并检查返回对象的属性。不幸的是,因为数据存储最终是一致的,所以这些简单的测试无法重现。 您如何测试最终一致的服务?

3
从“快照”投影而不是事件存储中补水聚合
因此,尽管我从未有机会在实际项目中应用这些模式,但我一直在调动Event Sourcing和CQRS一段时间。 我了解将读取和写入问题分开的好处,并且感谢事件搜寻如何使将状态更改轻松地投影到与事件存储区不同的“读取模型”数据库中变得容易。 我不清楚的是,为什么您会从Event Store自身中重新添加聚合。 如果将更改投影到“读取”数据库很容易,为什么不总是将更改投影到其架构与您的域模型完全匹配的“写入”数据库呢?这实际上将是快照数据库。 我想这在野外的ES + CQRS应用程序中一定很常见。 在这种情况下,事件存储仅在由于架构更改而重建“写”数据库时有用吗?还是我想念更大的东西?

2
在分布式,事件源系统中维护一致性的模式?
我最近一直在阅读事件源,非常喜欢它背后的想法,但是仍然遇到以下问题。 假设您有N个并发进程,它们接收命令(例如Web服务器),结果生成事件并将它们存储在集中存储中。我们还假设通过依次应用来自存储的事件,所有瞬态应用程序状态都保留在各个进程的内存中。 现在,我们有以下业务规则:每个不同的用户必须具有唯一的用户名。 如果两个进程收到一个针对相同用户名X的用户注册命令,则它们都将检查X是否不在其用户名列表中,该规则将对这两个进程进行验证,并且它们都会在存储中存储“具有用户名X的新用户”事件。 现在,由于违反了业务规则(存在两个具有相同用户名的不同用户),我们进入了不一致的全局状态。 在传统的N服务器<-> 1 RDBMS样式系统中,数据库被用作同步的中心点,这有助于防止此类不一致。 我的问题是:事件源系统通常如何解决此问题?它们是否只是简单地按顺序处理每个命令(例如,将可写入存储的处理量限制为1)?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.