【问题标题】:Cassandra and read latencyCassandra 和读取延迟
【发布时间】:2018-01-04 05:09:04
【问题描述】:

我从https://bitnami.com/stack/cassandra 在云机器上安装了cassandra。我克隆了这台机器,所以我得到了 2 台机器。一个运行 cassandra 服务器(1 个节点 cassandra 集群),另一个充当客户端并向第一个(服务器)发出查询。

我使用 YCSB - https://github.com/brianfrankcooper/YCSB 来执行基准测试。我观察到的是服务器上的读取延迟非常低几微秒(大约 50/100 us 对于第 99 个百分位和 MAX),如使用“nodetool cfhistograms ”和“nodetool cfstats " - 很可能所有数据都来自缓存,即所有 sstable 都在缓存中。

但使用 YCSB 基准测试从客户端(其他节点)观察到的端到端延迟很高 - 平均延迟 = 2000 us。所以我想知道为什么端到端延迟如此之高 2000 us 而不是 100 us(在服务器上)。此外,网络延迟也很低,约为 200 us(如使用 PING 所见)。我希望 cassandra 服务器尽快/立即响应。有人可以帮忙吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    因此,从 cfhistograms 开始测量本地读取延迟,这是将 memtables 与 sstables 合并的唯一时间。这不包括协调,用于检查代理直方图。

    即使这样,您也应该预料到与客户时间的偏差。除了网络延迟之外,还有内核延迟和客户端反序列化时间。传入网络时间和服务器端 cql 反序列化也不包括在内。如果此时发生 Full/YGC,它也可能不包括在 C* 延迟时间(很容易为 1-500 毫秒)中。根据版本/配置,客户端也会进行一些请求合并(最多 10us)。您可以很容易地期望 jvm 延迟 1 毫秒,只是为了达到 ygc 的安全点或撤销偏差(如果启用,取决于版本),如果在我们记录请求的“开始时间”之前发生,则不包括在内。 tcp 网络上低于 1ms 的延迟确实会随着 naggle(如果启用)和 tcp 窗口而改变,因此看到平均 200us 可能与 icmp ping 和实际 tcp 往返时间不一致。

    【讨论】:

    • 嗨,Chris,proxyhistograms 显示 READ 延迟(200 us)是 cfhistograms READ 延迟(100 us)的两倍。 10us 的客户端合并看起来不错。 Serde 确实增加了开销。您是否建议禁用 tcp 网络的 naggle 以实现低于 1 毫秒的延迟? tcp-network 或 cassandra 的其他可能配置是什么,我可以使用/设置以实现低于 1 毫秒的延迟?
    • 如果您担心亚毫秒速度,我会专注于调整您的 jvm 垃圾收集。你肯定会有 100 毫秒的延迟。乱用 TCP 只会损害吞吐量。
    • 是否有我可以使用的非 java cassandra 客户端/基准?不知道cassandra (server)/cql 本身是不是用java实现的?
    • Cassandra 是用 java 实现的。有各种驱动程序cassandra.apache.org/doc/latest/getting_started/drivers.html,但我会推荐 datastax 的驱动程序。
    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2018-06-04
    • 2021-11-27
    • 2021-04-12
    • 2018-04-15
    • 2019-04-21
    • 2018-07-12
    • 2017-03-29
    相关资源
    最近更新 更多