cassandra 写入吞吐量和可扩展性

cassandra write throughput and scalability

这听起来像是一个愚蠢的问题,但我仍然想要 someone/expert 到 answer/confirm 这个问题。

假设我有一个 3 节点的 cassandra 集群。假设我有一个数据库,只有一个 table。对于这个 table 假设我使用 3 节点 cassandra 获得了 1K writes/second 的吞吐量。如果明天我在此 table increases/scales 上的写入负载达到 10K 或 20K,我是否能够通过将集群的大小增加 10 倍或 20 倍来处理此写入负载?

我对 cassandra 的理解说这是可能的(因为 cassandra 是读写可扩展的)但需要专家确认。

Datastax 表示:

What are the benefits of Apache Cassandra?

Massively scalable ring architecture: Based on the best of Amazon Dynamo and Google BigTable, Cassandra’s peer-to-peer architecture overcomes the limitations of master-slave designs and allows for both high availability and massive scalability.

Linear scale performance: Nodes added to a Cassandra cluster (all done online) increase the throughput of your database in a predictable, linear fashion for both read and write operations.


所以答案是,这是可能的。添加新节点和重新分配令牌可能需要一些时间。但它会随着您更改节点数而扩展。

如果您需要更多信息以了解它将如何扩展,请查看以下链接:

  1. Benchmarking Cassandra Scalability on AWS
  2. Adding nodes to Cassandra
  3. Adding, replacing, moving and removing nodes

是的,是这样的,但是有一个单一的评论。您应该考虑复制因子 (RF) 和一致性级别 (CL),因为它们也会影响缩放行为。
例如,如果您最初有 10 个 RF=3 的节点,然后将相同 RF=3 的节点数增加到 20 个,您将获得写入吞吐量的线性增加。
但是如果要提高读吞吐量,就需要提高RF。随着 RF 的增加,您必须降低写入一致性级别以提高写入吞吐量。
总而言之,您无法使用相同的 RF 和 CL 参数以线性方式增加读取和写入吞吐量。

- 但前提是你的数据被正确建模 - 特别是你的数据需要在你的分区键之间均匀分布(因为它们映射到特定的副本节点)以避免热斑点。鉴于此,是的,cassandra 将很好地水平扩展。

cassandra 中的一个 "table" 分布在集群中的所有节点中。每个节点负责一系列令牌,这些令牌是主键的分区键部分的哈希值。

现在,例如,如果您将节点数加倍 - 现有令牌范围将分成两半并在引导新节点时分发。所以每个节点只能处理一半的初始请求。如果您之后将请求加倍,则每个节点的负载与以前大致相同。

对于读取密集型请求 - 选择较高的复制因子有助于您暂时使用陈旧数据(例如,以低一致性级别读取和写入)。

这里有来自 DataStax 的优秀教程 https://academy.datastax.com/

是的,Cassandra 具有线性可扩展性。

如下图所示,可扩展性是线性的。每个客户端系统每秒产生大约 17,500 个写入请求,并且在我们扩展流量时没有瓶颈。每个客户端 运行 200 个线程来生成跨集群的流量。

来源:https://medium.com/netflix-techblog/benchmarking-cassandra-scalability-on-aws-over-a-million-writes-per-second-39f45f066c9e