首页 > 解决方案 > 询问 cassandra 基准测试结果

问题描述

我最近在 openstack 上使用了 9 个 cassandra VM 来测试我们的产品。每个 VM 有 16 个 vCPU、50GB SSD 和 20GB 内存,但我发现每个节点在 70% CPUu 下只能承受 10000+ 操作/秒,即 9 个节点的 90000 操作。

数据模型是普通表上的简单读/写混合场景,在测试过程中我没有看到任何明显的性能瓶颈。从互联网上我可以看到有些人在 AWS T2 中型节点(只有 2 个 vCPU)上可以达到 4000 操作/秒,一些 cassandra 培训材料说他们可以达到每秒 6000-12000 次交易。

任何人都可以在 apache cassandra 上分享您的基准测试结果吗?

标签: cassandracassandra-3.0

解决方案


首先,亚历克斯是对的。模式(特别是主键定义)很重要。该答案的其余部分假设您已经构建了该反模式免费。

因此,我用于 OpenStack 的标准部署映像是 16GB RAM w/8 CPU (@ 2.6GHz)。这比我为大多数生产部署推荐的 RAM 量要少,除非您有一些额外的时间来设计效率。是的,有些集群还不够,我们必须使用更多 RAM 构建。但这在很大程度上是我们大约 4 年的标准。

许多小节点的方法效果很好。我建立的一些集群可以维持 250k ops/sec。

使用 70% 的 CPU

TBH,我发现带有 Cassandra 的 CPU 并不像其他数据库那样重要。当它变高时,通常表明另一个问题。

在测试期间我没有看到任何明显的性能瓶颈。

在共享资源环境(如 OpenStack)中,嘈杂的邻居是最大的问题之一。我们的存储团队对已配置的磁盘施加了 IOP 限制,以防止重负载影响其他磁盘。因此,我们性能最好的集群需要特殊配置的卷,以允许高于通常允许的 IOP 级别。

Cassandra 的指标可以告诉您磁盘延迟是否很高。如果您发现您的磁盘(读取或写入)延迟为两位数毫秒,那么您的磁盘可能会限制您的速率。

要查看的另一件事是您的表格的直方图(带有nodetool)。这可以为您提供各种好的信息,特别是关于延迟和分区大小等方面的信息。

bin/nodetool tablehistograms stackoverflow.stockquotes
stackoverflow/stockquotes histograms
Percentile      Read Latency     Write Latency          SSTables    Partition Size        Cell Count
                    (micros)          (micros)                             (bytes)
50%                     0.00              0.00              0.00               124                 5
75%                     0.00              0.00              0.00               124                 5
95%                     0.00              0.00              0.00               124                 5
98%                     0.00              0.00              0.00               124                 5
99%                     0.00              0.00              0.00               124                 5
Min                     0.00              0.00              0.00               104                 5
Max                     0.00              0.00              0.00               124                 5

如果您查看常用分区的大小,您可以了解如何优化表的块大小。此值表示表用于与磁盘交互的构建块的大小。

AND compression = {'chunk_length_in_kb': '64',
 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}

例如,在上面的例子中,我可以通过将我的分区设置chunk_length_in_kb1(最小值)来节省很多磁盘负载,因为我的分区都小于 1024 字节。

无论如何,看看你的磁盘统计数据,看看那里是否有一些“胜利”。


推荐阅读