书接上文,我们在电商平台下单等场景下的时候是需要强一致性的?比如A下一单,写节点1,商品库存减1恰好变为0。这时候B下一单,写节点2,发现库存还有1也减1变0。
这时候商家就没有货可以发了,这种其实还好,但是如果是转账操作,那导致的问题就更严重了。
WARO
那需要强一致的时候该怎么做呢?上文说到写某个节点的时候,等待这条写指令同步到所有节点后再返回写入成功,这种方式称为Write All Reay One,毫无疑问,从名字上就可以看出,这种策略是读优写差的。
还是那个问题,两个100分不可能,100分 + 0分不可取,两个60分则更优。
Quorum
假设一共有10个节点,写的时候我们要求其中6个节点都更新为最新的数据,读的时候我们要求读5个节点,取其中版本最新的数据(引入version字段)。
这样子就使得读写均衡了,也可以控制读写节点数量,来控制读写效率,这种策略被称之为Quorum。