elasticsearch 可调一致性在弹性搜索或Cassandra等分布式系统中是如何工作的?,elasticsearch,solr,cassandra,couchbase,distributed,elasticsearch,Solr,Cassandra,Couchbase,Distributed" /> elasticsearch 可调一致性在弹性搜索或Cassandra等分布式系统中是如何工作的?,elasticsearch,solr,cassandra,couchbase,distributed,elasticsearch,Solr,Cassandra,Couchbase,Distributed" />

elasticsearch 可调一致性在弹性搜索或Cassandra等分布式系统中是如何工作的?

elasticsearch 可调一致性在弹性搜索或Cassandra等分布式系统中是如何工作的?,elasticsearch,solr,cassandra,couchbase,distributed,elasticsearch,Solr,Cassandra,Couchbase,Distributed,可调一致性意味着当主节点接收到更新时,主节点无需等待所有副本节点复制相同的更新。用户可以配置需要同步的副本数量 如果上述是真的,那么考虑下面的场景: 一个系统有一个主副本和5个副本,可调一致性设置为2 更新到达主机并写入主机和1个副本 主机无法写入任何其他复制副本,即使它们处于联机状态 由于不满足可调一致性,因此主服务器更新失败 已成功复制更新的复制副本会发生什么情况 请注意,我故意避免指定任何特定的分布式系统,因为这是许多系统(如Elastic Search、Solr、Couchbase和Ca

可调一致性意味着当
主节点
接收到更新时,主节点无需等待所有
副本节点
复制相同的更新。用户可以配置需要同步的
副本数量

如果上述是真的,那么考虑下面的场景:

  • 一个系统有一个主副本和5个副本,可调一致性设置为2
  • 更新到达主机并写入主机和1个副本
  • 主机无法写入任何其他复制副本,即使它们处于联机状态
  • 由于不满足可调一致性,因此主服务器更新失败
  • 已成功复制更新的复制副本会发生什么情况

  • 请注意,我故意避免指定任何特定的分布式系统,因为这是许多系统(如Elastic Search、Solr、Couchbase和Cassandra)中的常见模式。这些系统是否具有像数据库一样的回滚功能?

    您提出的是一个特定于实现的问题,故意避免指定任何特定的系统。在卡桑德拉的例子中,如果主人知道(通过流言蜚语)突变发生时没有足够的复制品可用,它将立即失败。如果它认为它有足够的备份副本,然后它们超时/失败,那么它可能会部分应用(一些副本可能具有写入功能,但其他副本可能不具有写入功能)。Jeff,我不想知道每个系统的实现情况,为了举个例子,列出了这些系统。这个问题对于许多分布式系统来说已经足够普遍了,我假设它们中的大多数都会以相同的方式处理它(否则会有多少种不同的方式?只要提到这些方式就好了)。我针对Cassandra提出的问题是:“Cassandra如何确保从成功的副本中删除失败的更新?如果它不起任何作用,系统很快就会变得不一致。”我的建议是,您的问题不够笼统。答案必然是特定于实现的,并且依赖于错误的前提(即存在主节点)。对于Cassandra,它不会尝试确保从副本中删除失败的更新。现有的工具(LWT/BATCH)提供了更好的保证,但它们不是默认工具。有趣的是,Cassandra只允许失败的更新保留在副本中。如果存在两种这样的情况,那么每个副本在任何时候都会彼此不同。我猜其他系统,如ES、Solr等也会做同样的事情,因为它们也没有回滚命令。您可能对cassandra中的主节点/副本节点有误解。协调器确定谁是分区的主要所有者以及复制副本属于谁,然后同时将数据发送给所有人。如果任何节点关闭,则数据将存储在提示表中,直到节点备份或过期(默认值=3小时)。我知道您不想特定于实现,但了解cassandra的基本知识是很有帮助的。您提出的是特定于实现的问题,故意避免指定任何特定的系统。在卡桑德拉的例子中,如果主人知道(通过流言蜚语)突变发生时没有足够的复制品可用,它将立即失败。如果它认为它有足够的备份副本,然后它们超时/失败,那么它可能会部分应用(一些副本可能具有写入功能,但其他副本可能不具有写入功能)。Jeff,我不想知道每个系统的实现情况,为了举个例子,列出了这些系统。这个问题对于许多分布式系统来说已经足够普遍了,我假设它们中的大多数都会以相同的方式处理它(否则会有多少种不同的方式?只要提到这些方式就好了)。我针对Cassandra提出的问题是:“Cassandra如何确保从成功的副本中删除失败的更新?如果它不起任何作用,系统很快就会变得不一致。”我的建议是,您的问题不够笼统。答案必然是特定于实现的,并且依赖于错误的前提(即存在主节点)。对于Cassandra,它不会尝试确保从副本中删除失败的更新。现有的工具(LWT/BATCH)提供了更好的保证,但它们不是默认工具。有趣的是,Cassandra只允许失败的更新保留在副本中。如果存在两种这样的情况,那么每个副本在任何时候都会彼此不同。我猜其他系统,如ES、Solr等也会做同样的事情,因为它们也没有回滚命令。您可能对cassandra中的主节点/副本节点有误解。协调器确定谁是分区的主要所有者以及复制副本属于谁,然后同时将数据发送给所有人。如果任何节点关闭,则数据将存储在提示表中,直到节点备份或过期(默认值=3小时)。我知道您不想针对具体的实现,但了解cassandra的基本知识是很有帮助的。