尽管我读了整本书,但我还是找不到一个问题。考虑一个分布式系统,其中数据库在五个服务器上复制。某一时刻,复制服务器之间的网络使三台服务器与其余两台服务器隔离。涉及对已复制数据库的读写操作的事务是否仍有可能提交?动机
如果您能回答这个问题,我将不胜感激
这是一个一般性的问题。当我重新表述您的问题时,您问分布式数据库中出现脑裂时会发生什么。
答案是取决于;-)
真的。这取决于您使用哪种类型的分布式数据库。从较高的角度来看,这取决于数据库从CAP中选择了哪些折衷方案-数据库CA还是CP系统?(为简洁起见,我使用这种区分,请参阅https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html)
如果它是一个CA系统,那么可以确定您可以读写任何分区。解决裂脑问题后,数据库将提供一些恢复工具,可将分区修复为一致状态。否则,数据库可能会将此责任留给用户,用户将获得一组可能的值,而他必须决定哪个是正确的。
如果是CP系统,那么我们可以说,这取决于您是否使用由3台服务器(每台5台服务器组成)组成的分区(使用大多数服务器)。然后,您可以读写。如果您的客户端连接到次分区(2个服务器,每5个服务器),则可能不允许您进行读写。但这取决于您要求的一致性。如果您需要线性化,那么客户端既不能读取也不能写入。