基于最终收敛的分布式系统设计讨论2
问题描述
假如我们有一个service,提供了数据访问和修改的API。比如update() 来进行数据的修改,get()来进行数据的访问。现在我们仍然使用AWS来实现这个系统如下:
如果我们想要更新DDB中的一条记录时,我们一般仅仅更新部分信息。普遍的工作流程如下:
- 使用get()从DDB读取一条记录
- 根据读取的记录更新其中部分信息
- 使用update()讲更新过的记录写回到DDB
现在我们假设仍然使用eventual consistency。那我们就会遇到一个问题,我们在读记录时无法保证一定读到最新的记录,这样我们在写回时可能会覆盖掉更新的记录。事实上我们再仔细想一想这个问题,即便使用了strong consistency来读取记录同样会有这样的问题,这是因为可能有多个client并行的对同一条记录进行更改。只是使用了eventual consistency会使这个更加严重而已。那么我们应该如何来解决这个问题呢?
解决方案讨论
我们在此仅仅讨论一种笔者心中的最