2

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

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

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

法定人数:

假设我有一个需要高数据一致性的预订系统。使用 NoSQL 实现数据一致性的方法之一是quorum,means R + W > N,where R- read nodes,W- write nodes 和N- total amount of nodes。

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

虚拟分片:

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

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

4

1 回答 1

3

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

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

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

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

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

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

于 2015-03-02T16:31:10.347 回答