【问题标题】:cassandra connections spikes load issuecassandra 连接峰值负载问题
【发布时间】:2020-09-03 14:38:10
【问题描述】:

我根据以下结构使用 cassandra: 21 个节点,AWS EC2 i3.2xlarge,版本 3.11.4。

应用程序正在使用 datastax java 连接驱动程序为每个节点打开大约 5000 个连接(因此每个集群有 100k 个连接)。 应用程序正在使用自动缩放并经常打开/关闭连接。 应用服务器一次打开的连接数可以达到每个节点最多 500 个(同时在所有节点上同时打开 - 因此它的 10k 连接在整个集群中同时打开)

这会导致 cassandra 上的负载峰值并导致读取和写入延迟。 我注意到每次打开/关闭连接时都会有大量来自 system_auth.roles 和 system_auth.role_permissions 的读取。

如何防止加载并解决此问题?

【问题讨论】:

    标签: cassandra connection load latency


    【解决方案1】:

    您需要修改您的应用程序以使用尽可能少的连接。您需要牢记以下几点:

    • 在启动时创建集群/会话对象并保留它。会话的初始化是一项非常昂贵的操作,它会增加 Cassandra 以及您的应用程序的负载
    • 您可以增加每个连接的同时请求数,而不是打开新连接。协议允许每个连接最多有 32k 个请求。虽然,如果你有太多的请求在进行中,那么这表明你的 Cassandra 不能满足工作量并且不能足够快地响应。见documentation on connection pooling

    【讨论】:

    • 谢谢亚历克斯,问题是 cassandra 对于每个节点的连接数的最佳做法是什么,或者连接数的通用性(打开/关闭)如何 - 我将相应地设置最大连接数跨度>
    • 标准方法是每个应用程序每个主机有 1 个连接 + 控制连接(请参阅我链接的文档)。关于打开/关闭 - 建议在应用程序启动时打开,并在关闭时关闭...打开/关闭非常昂贵,因为驱动程序正在执行大量初始化任务等。另外,您也失去了有效使用准备好的能力语句,因为它们在您关闭连接时被丢弃
    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2018-11-28
    • 2018-11-14
    • 2020-06-02
    • 1970-01-01
    • 2017-06-16
    • 2011-10-08
    相关资源
    最近更新 更多