消息传递与Web钩子:构建高效分布式系统
1. 最终一致性系统设计
最终一致性是一种弱一致性形式,即如果不对对象进行更新,最终对该对象的所有访问都将返回相同的值。设计支持最终一致性的系统,对程序员来说是一项挑战,因为这类系统不支持事务,也缺乏锁定值的能力,这使得实现唯一性约束和避免写入冲突变得困难。
1.1 字段值检查
在异步写入系统中,写入冲突是一个常见问题。以书店库存管理为例,当一个客户订购一本书时,库存数量应减1。在常规数据库系统中,这可以通过事务来完成,即读取库存数量并更新为减1后的值。但在SR/AW系统中,可能会出现写入冲突。
为解决这个问题,可以采用以下两种方法:
- 写入前值检查 :将字段的前一个值和新值一起写入写入交换区。当写入者收到消息时,在常规事务中检查前一个值。如果出现错误,可以通知客户或使用当前数据重试操作。
- 增量或减量操作符 :在写入中包含增量或减量操作符。消费者指定要增加或减少的数量,写入者在自己的系统内的事务中执行该操作。
1.2 值唯一性
值唯一性在最终一致性系统中也难以实现,常见的用例包括用户名或用户资料路径。在SR/AW系统中,可以采用以下两种策略来实现名称唯一性:
- 乐观锁定 :当用户请求用户名或其他唯一值时,应用程序先同步请求检查该名称是否可用。如果可用,将写入发布到消息系统。写入者在写入时再次验证唯一性。如果出现问题,通知用户选择新名称。
- 锁定服务 :创建一个基于同步HTT
超级会员免费看
订阅专栏 解锁全文
2

被折叠的 条评论
为什么被折叠?



