我是首尔国立大学的博士研究生。我叫崔石元我对研究论文印象深刻(网络分区故障分析)。我希望在实验室研讨会时向我的实验室成员介绍这篇论文。
但是,我阅读了您的研究论文和演示幻灯片。我有一个问题。
为什么读取操作读取VoltDB中的Y值?实际上复制失败,所以写入失败。为什么要更新本地存储中的Y值?
和读取操作读取本地更新的值Y?
我认为读取操作应该读取提交值(成功写入:在这种情况下->值X)。
我尝试找到VoltDB文档。它可以允许在VoltDB中进行脏读。为什么在VoltDB中进行网络分区时允许脏读?
有什么理由要这样工作吗?
我附上了网络分区时脏读的图片
谢谢
最好的问候
答案 0 :(得分:3)
VoltDB不允许脏读。在您的图片中,您显示了一个3节点群集,其中1个节点与其他2个节点进行了分区,而单个节点是分区主节点。
事件1:网络分区 事件2:写入少数(并且您显示写入失败,这是正确的) 事件3:从少数族裔读取(并且您显示的是脏读,这是不正确的)。
事件3是不可能的。从其他两个分区中分离出来的单个节点将关闭其客户端接口,然后崩溃,从不允许事件3发生。
几年前,我们进行了Jepsen测试,并修复了V6.4中的一个缺陷,该缺陷在某些情况下会允许从事件#3中读取脏内容。有关VoltDB提供的担保,我们进行的Jepsen测试以及为通过测试而修复的缺陷的完整详细信息,请参见https://aphyr.com/posts/331-jepsen-voltdb-6-3和https://www.voltdb.com/blog/2016/07/12/voltdb-6-4-passes-official-jepsen-testing/。
披露:我为VoltDB工作。