首页 文章

Cassandra原型,延迟问题

提问于
浏览
0

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

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

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

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

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

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

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

更新simplex.playlist已经过了14毫秒来更新歌曲表 .

检索歌曲表已过去14毫秒 .

Headers 专辑艺术家标签
La Petite Tonkinoise' Bye Bye Blackbird'JosšphineBaker

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

您的方向/洞察力将受到高度赞赏 .

提前谢谢,欧文

1 回答

  • 1

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

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

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

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

    at least two disks, one for the commit log and the other for the data directories

    Commit Log + data directory on same volumes – avoid this. 写入的最大性能增益是将提交日志放在单独的磁盘驱动器中 . 提交日志是100%顺序的,而数据读取是从数据目录中随机的 . 提交日志和SSTable之间的I / O争用可能会恶化提交日志写入和SSTable读取 . 但这不适用于SSD或EC2 .

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

    Heap tuning

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

    GC tuning

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

    Synch the clocks on all nodes - 当C *为每个coumn值添加时间戳时,必须使用NTP守护程序或脚本在环上同步时钟 . 已知NTP可以跨数据中心漂移时钟 .

    Use Key cache sparingly ,因为它只存储密钥和数据位置,因此在内存占用最少的情况下具有最高的性能提升 . 保存一个文件I / O搜索 . 使用keys_cached = 50000更新列族my_column_family;

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

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

    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)

相关问题