【问题标题】:cassandra write throughput and scalabilitycassandra 写入吞吐量和可扩展性
【发布时间】:2017-07-19 07:36:14
【问题描述】:

这听起来像是一个愚蠢的问题,但我仍然希望有人/专家回答/确认。

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

我对 cassandra 的理解表明这是可能的(因为 cassandra 具有读写可扩展性),但希望专家确认。

【问题讨论】:

    标签: cassandra scalability throughput


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        【解决方案3】:

        Datastax 声明:

        Apache Cassandra 有什么好处?

        可大规模扩展的环架构:Cassandra 的点对点架构基于 Amazon Dynamo 和 Google BigTable 的优点,克服了主从设计的限制,同时实现了高可用性和大规模可扩展性.

        线性扩展性能:添加到 Cassandra 集群的节点(全部在线完成)以可预测的线性方式提高数据库的吞吐量,用于读取和写入操作。


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

        如果您需要更多信息来了解它的扩展方式,请查看以下链接:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】: