cassandra 连接峰值负载问题

cassandra connections spikes load issue

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

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

这会导致 cassandra 负载激增并导致读写延迟。 我注意到每次连接 opens/close 都有大量来自 system_auth.roles 和 system_auth.role_permissions 的读取。

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

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

  • 创建 Cluster/Session 对象,在开始时保存一次。会话的初始化是非常昂贵的操作,它增加了 Cassandra 和您的应用程序的负担
  • 您可以增加每个连接的同时请求数,而不是打开新连接。协议允许每个连接最多有 32k 个请求。但是,如果您有太多的请求在进行中,那么这表明您的 Cassandra 跟不上工作量并且不能足够快地回答。参见 documentation on connection pooling