分布式系统中的一致性设计与Web钩子应用
1. 最终一致性系统设计
1.1 最终一致性概述
最终一致性是一种弱一致性形式,若不对对象进行更新,最终对该对象的所有访问都将返回相同的值。设计支持最终一致性的系统,应用程序员需付出一定努力。最终一致性系统不支持事务,也缺乏锁定值的能力,这使得支持唯一性约束和避免写入冲突变得困难。
1.2 字段值检查
在异步写入系统中,写入冲突是一个常见问题。以商店中某本书的库存为例:
- 传统数据库系统 :将读取书籍库存数量并更新为减1的操作封装在一个事务中。
- SR/AW系统 :读取库存数量并将减1后的数量写入消息系统。在此期间,若另一个客户在第一次写入完成前下单,系统会再次尝试写入减1后的数量,导致库存数量比实际库存多一本。
为解决此问题,可采用以下方法:
- 写入前值检查 :将字段的前一个值和新值一起写入写入交换区。写入者收到消息后,在常规事务中检查前一个值。若出现错误,可通知客户或让其他进程使用当前数据重试操作。
- 增量或减量操作 :在写入中包含增量或减量运算符。消费者指定增量或减量的数值,从写入交换区接收消息的写入者可在其系统内的事务中执行该操作。例如,发布到写入交换区请求增量的消息可以是以下两种形式:
{
"id": 23,
"balance.inc": 678
}
<
超级会员免费看
订阅专栏 解锁全文
9

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



