我在6节点集群上使用DataStax Cassandra 1.2.3,每个集群都有四核3GHz处理器和8GB RAM。最近,我开始使用VNodes功能,首先将num_tokens设置为256,然后设置为128.我观察到我正在使用的架构的性能下降[写入请求数/秒]。我大多数都有一个标准化的架构,混合了宽大的表格和计数器列族。
是否有人发现使用VNodes的性能下降?是否有任何已知的优化技术可以更好地利用VNode?
是否可以为给定的硬件配置/节点派生num_tokens的最佳值?
此外,我看到群集几乎是平衡的,一个节点自动占用更高的负载,尽管我有一个同类群集。在使用VNode之前,我会手动平衡Murmer3Partitioner的集群,性能很好。
谢谢, VS
答案 0 :(得分:8)
(这是我的帖子的修改版本:http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Why-so-many-vnodes-td7588267.html)
选择每个节点的令牌数量(让我们称之为T和节点数量N)256,以便为大多数群集大小的随机令牌分配提供良好的负载平衡。对于小T,随机选择初始令牌在大多数情况下会导致数据分布不佳。 T越大,分布越均匀,概率越大。
此外,对于小T,当添加新节点时,它将没有很多要分割的范围,因此无法获取均匀的数据片段。
因此T应该很大。但如果它太大,就会有太多的切片无法跟踪,因此性能会受到影响。找到哪些密钥在哪里变得更昂贵的功能以及处理各个vnode的操作例如修复变慢。 (一个极端的例子是SELECT * LIMIT 1,当没有数据时,必须依次扫描每个vnode以搜索单行。这是O(NT),即使很小的T也需要几秒钟才能完成。)
因此选择256是合理的平衡。我不认为大多数用户会发现它太慢;具有极大群集的用户可能需要增加它。