与虚拟分片相比,NoSQL仲裁

时间:2015-03-02 14:02:09

标签: cassandra replication sharding horizontal-scaling nosql

在阅读了几篇NoSQL技术之后,我发现 Quorum 无法与 Virtual Sharding 进行比较。虚拟分片允许可扩展性,并且不会增加系统中的读/写量。还有什么不好的,我绝对不能发现法定人数对分片的任何好处。

问题: 您是否可以从数据一致性/性能/可扩展性的角度充当仲裁技术的倡导者,并为那些比分片更好的情况提供帮助?< / em>的

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

仲裁:

假设我有一个要求高数据一致性的预订系统。作为NoSQL实现数据一致性的方法之一是 quorum ,意味着R + W > N,其中R - 读取节点,W - 写入节点和{{1} } - 节点总数。

据我所知,如果你使用仲裁而不是写一行,你的数据库需要执行写操作N次。还要读取数据库需要执行的W读取操作。

虚拟分片:

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

它不会要求任何复制如法定人数,这是非常好的!当然,为了可用性/故障转移,您可以为每个节点带来一个主从备份。但这不会增加系统中的读/写量。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

使用仲裁一致性(或任何其他一致性)在cassandra中进行复制而不是在另一个解决方案中进行分片+备份的优势是,如果分片/分区的主服务器出现故障,则该分区在备份变为活动状态之前不可用。在副本故障的AP系统(如cassandra)中,只要满足一致性级别,系统就会继续工作而不会出现问题。不需要主动 - 被动切换&#39;这往往不是透明的(实际上取决于数据库解决方案)。此外,如果您具有足够高的复制因子,则可以支持分区中多个节点的丢失(即使用带有5个节点的RF的QUORUM允许您在分区中丢失2个节点)。最后另一个优点是,由于您可以在分区中拥有许多活动副本,因此它们可以同时为请求提供服务,而在主从设置中,只有主服务读/写。这可以带来更大规模的性能。