我在云计算机上安装了来自https://bitnami.com/stack/cassandra的cassandra。我克隆了这台机器,以便我得到2台机器。一个正在运行的cassandra服务器(1个节点cassandra集群)和其他作为客户端并向第一个(服务器)发出查询。
我使用YCSB - https://github.com/brianfrankcooper/YCSB来执行基准测试。我观察到的是,使用“nodetool cfhistograms<'db'><'table'>”观察到,服务器上的READ延迟非常低,只有几微秒(第99百分位数和MAX的50/100左右)。和“nodetool cfstats<'db'>” - 很可能所有数据都来自缓存,即所有sstables都在缓存中。
但是,使用YCSB基准测试从客户端(其他节点)观察到的端到端延迟是高平均延迟= 2000 us。所以我想知道为什么端到端延迟是如此之高2000 us而不是100 us(在服务器上)。此外,网络延迟也在200 us左右(如使用PING所见)。我希望cassandra服务器尽可能快速/即时响应。有人可以帮忙吗?
答案 0 :(得分:0)
因此,从cfhistograms开始,测量本地读取延迟,这是只有时间来完成与sstables合并的memtables。对于该检查代理组合图,这不包括协调。
即便如此,您应该期望与客户时间的偏差。除了网络延迟之外,内核中存在延迟,客户端中存在反序列化时间。此外,还不包括传入网络时间和服务器端cql反序列化。如果在该时间内发生Full / YGC,则其也可能不包括在C *延迟时间内(可以容易地为1-500ms)。根据版本/配置,客户端也会执行一些请求合并(最多10个)。你可以很容易地期望jvm延迟1ms只是为了达到ygc或撤销偏差的安全点(如果启用,取决于版本),如果在我们记录请求的“开始时间”之前发生,则不包括在内。 tcp网络上的1ms延迟可以通过naggle(如果启用)和tcp窗口真正改变,因此从icmp ping和实际tcp往返时间看,平均200us可能不一致。