弱一致性的问题
看了BANQ对弱一致性的讨论,引用了PPT里面的卖票的用例。票包含了很多状态。这样可以将一个事物操作表示成一个事物的过程。每一个步骤都有对应的状态。还有一个卖咖啡的例子也是。但是这里有一个问题:利用弱一致性达到大吞吐量和性能提升,但是带来的问题就是弱安全性,我们必须通过一种机制来保证数据一致(最终一致性)。实际弱一致性就是并不一定要在处理过程中保持一致,而是在过程处理完成的时候达到了一致(最终一致即可)。
所以在选择恢复机制的时候是有讲究的。比如undo,retry,give up等等。
但是对于undo ,retry的情况我的疑问就是:因为这两个操作也可能存在异常的情况,那么当异常出现的时候,如何来处理,可能,因为没有了事物的控制,所以又可能带来数据的丢失等情况,比如卖票的情况,到了一个状态 prcessing,然后需要等待用户付款后,然后再更新到saled,但是在更新的时候报错,此时状态仍然是Processing,那么我们需要利用一个操作将processing变为available,但是这个操作也有可能出现失败的危险,所以仍然无法保证,好像到了一个死循环里面一样。
但是可以通过后台一个线程去扫描状态中间状态,将值批量更新回来。但是仍然感觉很奇怪。。不知道这样一种情况该如何处理。
实际本人某些时候还是被数据库事务的思想束缚着。望banq指点迷津。。。。