【问题标题】:NoSQL quorum comparing to virtual shardingNoSQL 仲裁与虚拟分片的比较
【发布时间】:2015-05-02 22:00:01
【问题描述】:

在阅读了一些 NoSQL 技术之后,我发现 QuorumVirtual Sharding 相比失败了。虚拟分片允许可扩展性并且不会增加整个系统的读/写量。还有什么不好的是我绝对找不到仲裁比分片有任何好处。

问题: 您能否从数据一致性/性能/可扩展性的角度作为仲裁技术的倡导者,并阐明它比分片更好的情况?

以下是我对这些东西的看法:

法定人数:

假设我有一个需要高度数据一致性的预订系统。使用 NoSQL 实现数据一致性的方法之一是 quorum,表示R + W > N,其中R - 读取节点,W - 写入节点和N - 节点总数。

据我了解,如果您使用仲裁而不是写入一行,您的数据库需要执行写入操作W 次。还要阅读您的数据库需要做的R 读取的内容。 对吗?

虚拟分片:

据我了解,sharding - 当存在类似于 hashmap 的东西时,根据某些标准,它会告诉您收入数据应该存储在哪里/应该从哪里读取。假设您有N 节点。 Virtual 意味着为了避免可伸缩性问题,哈希映射将大于N,但假设10*N。这允许在添加新节点时轻松重新配置。

它的优点是它不需要像仲裁这样的任何复制!当然,为了可用性/故障转移,您可以为每个节点带来一个主从备份。但这不会增加系统中的读/写量。

【问题讨论】:

    标签: cassandra replication sharding horizontal-scaling nosql


    【解决方案1】:

    这里需要做出的关键区别在于,“仲裁”是一个用于分区中副本之间最终一致性的概念,其中“分片”是数据分区的概念,并不意味着复制。

    在像 cassandra 这样的系统中,复制不是必需的。您可以仅将 cassandra 用于数据分区/分片,将令牌分配给您的节点以建立环中数据的所有权。 Cassandra 使用一个名为 consistent hashing 的概念来跨集群中的节点分发数据。

    在向 cassandra 读写数据时,Quorum 是一个可用的consistency level。当您写入 cassandra 时,所有副本都会接收并处理写入请求,而不管使用的一致性级别如何。但是,只要有足够的副本成功处理写入以满足一致性级别,cassandra 就会响应请求。对于读取,该过程有些不同,因为所有节点都会对数据创建摘要,而只有满足一致性级别的足够多的节点会执行读取(在正常情况下)。

    正如您所指出的,如果没有多个副本,可用性是一个问题。如果您的示例中的每个分片都有一个主从配置,那么您实际上是在两次写入数据。这取决于数据库的解决方案和配置,即数据库在主处理写入时是否响应写入,或者是否也需要完成对从属的写入。

    Cassandra 在分区/分片和复制方面都表现出色。其他AP nosql 解决方案也是如此。此外,由于 cassandra 通过一致性级别支持可调一致性,这使您可以在应用程序的可用性和一致性之间找到理想的平衡。通过使用仲裁一致性级别,您可以在副本丢失的情况下幸存下来(即,使用 3 个副本,您可以在分区中丢失 1 个节点的情况下幸存下来),同时您的应用程序继续工作。

    在 cassandra 中使用 quorum 一致性(或任何其他一致性)进行复制相对于其他解决方案中的分片+备份的优势在于,如果分片/分区的主节点发生故障,则该分区将不可用,直到备份变为活动状态.在副本失败的 AP 系统(如 cassandra)中,只要满足一致性级别,系统就会继续正常工作。不需要经常不透明的“主动-被动切换”(实际上取决于数据库解决方案)。此外,如果您有足够高的复制因子,您可以支持在一个分区中丢失多个节点(即使用具有 5 个节点的 RF 的 QUORUM 允许您在一个分区中丢失 2 个节点)。最后一个优点是,由于您可以在一个分区中拥有许多活动副本,它们都可以同时服务请求,而在主从设置中,只有主服务读取/写入。这可能会带来更好的大规模性能。

    【讨论】:

      猜你喜欢
      • 2014-11-28
      • 2015-11-18
      • 2012-10-17
      • 2017-10-29
      • 2014-08-28
      • 1970-01-01
      • 2017-01-28
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多