1

我在使用 Cassandra 时遇到了一个奇怪的问题。我的理解是 Cassandra 对于插入是可扩展的。这意味着如果我使用 2 个服务器的集群获得 1500 次写入/秒,我可以将其增加到 4 台服务器并接近 1500 次写入/秒。我知道 writes/s 可能不会随着集群中的节点数量线性增加,但我目前看到添加更多节点时 writes/s 的数量没有增加。

我目前的设置是这样的:

使用 Pycassa 批量插入,批量大小为 20 行。复制因子为 2 持久写入

一些 ColumnFamilies 有普通的列,一些有高达几十万列的宽列。具有宽列的 ColumnFamilies 的插入是分批插入的,而不是 100,000 列的 20 行。

cassandra 集群是托管在 EC2 中的 2 节点集群,使用 m1.xlarge 和 SSD 驱动器(无 raid),提交日志与 sstables 位于同一驱动器上。

我尝试将集群扩展到 10 多个节点,并且获得与 2 个节点相同的性能。我还尝试增加导入数据的实例数量,性能是相同的,只是每次写入操作的延迟要高得多。但无论我做什么,我都无法让写入速度超过 1500/s。

4

1 回答 1

3

听起来您的客户没有使 Cassandra 饱和。如果 Cassandra 不是 CPU、i/o 或网络绑定,这就是你的问题。

经验法则是 2 台 Cassandra 服务器大约需要 1 台客户端计算机才能在一个副本上饱和。(因此,2 的比例约为 1:4。)如果您不使用像 Java 这样的“快速”语言,请将客户端数量乘以 5-10;对于 Python,由于 GIL,您还需要付出一些努力在每台机器内的多个进程之间进行并行化。

TLDR 不断添加客户端机器,直到数量停止上升。

(我还建议使用 OpsCenter 之类的东西进行监控,这会突出使用 ByteOrderedPartitioner 等问题,或者没有正确地将请求负载分散到集群中。)

于 2013-03-25T17:50:53.390 回答