cassandra - 询问 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 上分享您的基准测试结果吗?
解决方案
首先,亚历克斯是对的。模式(特别是主键定义)很重要。该答案的其余部分假设您已经构建了该反模式免费。
因此,我用于 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_kb
为1
(最小值)来节省很多磁盘负载,因为我的分区都小于 1024 字节。
无论如何,看看你的磁盘统计数据,看看那里是否有一些“胜利”。
推荐阅读
- python - /accounts/profile/'User'对象的Django AttributeError在更新配置文件时没有属性'get'
- python - Python 类型:如何在类型提示中引用动态创建的类
- z3 - 是否有可能证明这个定义的函数是 z3 中的对合?
- python - 不和谐机器人编程
- r - 如何使用 stat_density 和时间序列(x 轴上的 Posixct)?
- angular - 从角度 10 的反应形式的输入数组中获取数据
- swift - 如何快速将用户名、密码安全地保存在钥匙串中
- node.js - TypeError:URL 不是构造函数 - react-dev-utils/getPublicUrlOrPath.js
- wordpress - style_loader_tag 过滤器正在转换特殊字符,即使禁用 wptexturize
- web-component - 如何替换 web 组件中的 shadowRoot