Cassandra原型,延迟问题

时间:2013-11-17 11:04:37

标签: cassandra

我们正在尝试为Cassandra Datastax社区版和java驱动程序创建原型。 我尝试使用Cassandra Java Driver(simplex密钥空间)中的Sample测量简单检索和更新的延迟。

我有两个数据中心,每个数据中心有一个Rack。每个机架包含3个节点。 我总共有6个节点(VM)。

我已将key_cache_size_in_mb配置​​为10,以便调整检索/更新操作。

总之,我们正在尝试调整示例操作,以便为读取/更新操作获得大约5 ms的延迟。

遵循我们设法实现的延迟:

检索播放列表表格已过去19毫秒。

标题专辑艺术家
特纳表演Mick Jager的备忘录

更新simplex.playlist 更新歌曲表已过去14毫秒。

检索歌曲表已经过了14毫秒。

标题专辑艺术家标签
La Petite Tonkinoise'Bee ByeBlackbird'JosŽphineBaker

为了提高性能并实现比上述更好的延迟,应该进行哪些调整?

您的指导/见解将受到高度赞赏。

提前致谢, 欧文

1 个答案:

答案 0 :(得分:1)

一些性能优化提示/最佳实践:

节点数量越多,分布越好,C *表现越好

64位JVM的性能优于32位(至少使用Oracle JVM 1.6)

物理环境,最小为8GB,但16-32 GB,8核处理器之间的任何东西

至少有两个磁盘,一个用于提交日志,另一个用于数据目录

在相同卷上提交日志+数据目录 - 避免这种情况。写入的最大性能提升是将提交日志放在单独的磁盘驱动器中。提交日志是100%顺序的,而数据读取是从数据目录中随机的。提交日志和提交之间的I / O争用SSTable可能会恶化提交日志写入和SSTable读取。但这不适用于SSD或EC2。

JVM参数调整(在8GB RAM系统上)

堆调整

-Xms $ {MAX_HEAP_SIZE}    -Xmx $ {MAX_HEAP_SIZE} - 默认为可用物理内存的40-50% - 4 GB    -Xmn $ {HEAP_NEWSIZE} - 默认为java堆的25% - 1GB

GC调整

-XX:+ UseConcMarkSweepGC    -XX:+ CMSParallelRemarkEnabled    -XX:+ UseParallelGC    -XX:SurvivorRatio = 4    -XX:MaxTenuringThreshold = 0

同步所有节点上的时钟 - 当C *为每个coumn值添加时间戳t时,必须使用NTP守护程序或脚本在环上同步时钟。已知NTP可以跨数据中心漂移时钟。

谨慎使用密钥缓存,因为它只占用内存占用最少的性能,因为它只存储密钥和数据位置。保存一个文件I / O搜索。 使用keys_cached = 50000;

更新列族my_column_family

使用RF = 3 ,这是最佳做法,写入/读取一致性级别= QUORUM 是最佳做法

在Linux上,您可以找到cassandra.sh,它用于启动Cassandra进程。这是我们添加GC参数以及JVM内存设置的地方。 (首先备份文件)我假设你有4GB分配给cassandra进程。假设您有8GB系统内存,请将-Xmx4096m分配给Cassandra进程。

https://github.com/apache/cassandra/blob/trunk/conf/cassandra-env.sh?source=cc

您可以调整“#GC调整选项”

部分中编码的选项

key_cache_size_in_mb - 此设置可在cassandra.yaml文件中找到,适用于密钥空间中的所有列系列,或者设置为CF级别。您需要知道行的大​​小,并计算出计算结果。例如对于要缓存的100万行,平均行大小为100字节,每列有25个列,每个4字节,需要将其设置为100 mb(1 mn * 100 bytes)