CPU AWS 上 ejabberd 和 Riak 集群的内存利用率差异

CPU and memory utilization discrepancies for ejabberd and Riak clusters on AWS

我是 运行 一个 2 节点 ejabberd 集群(在弹性负载均衡器后面),它又连接到 AWS 上的一个 3 节点 Riak 集群(同样,通过 ELB)。当我通过 Tsung 对平台进行负载测试时(创建 50 万用户注册),我注意到 ejabberd 节点的 CPU 利用率在它们之间相差大约 10%。对于 Riak 节点,节点之间的 CPU 和内存利用率相差大约 5%。

节点具有相同的配置,因此想知道是什么导致了这些重要的利用率差异。任何人都可以在这里给我一些启发/教育我吗?

是负载均衡器的问题吗?还是网络影响?我希望一旦集群形成(无论是 ejabberd 还是 Riak KV),节点的行为都是相同的,尤其是对于整个数据库在集群中复制的 ejabberd。

并不是说这些差异是个问题,但了解集群的内部工作原理会很好...

非常感谢。

弹性负载均衡机制

  • DNS 服务器使用 DNS 循环来确定特定可用区中的哪个负载均衡器节点将接收请求
  • 所选负载均衡器检查 "sticky session" cookie
  • 所选负载均衡器将请求发送到负载最少的实例

更详细的信息:

可用区不太可能是你的情况

默认情况下,负载均衡器节点将流量路由到同一可用区内的后端实例。为确保您的后端实例能够处理每个可用区中的请求负载,重要的是每个可用区中的实例数量大致相等。例如,如果您在可用区 us-east-1a 中有十个实例,在 us-east-1b 中有两个实例,流量仍将在两个可用区之间平均分配。因此,us-east-1b 中的两个实例必须提供与 us-east-1a 中的十个实例相同的流量。

会话数很可能是你的情况

默认情况下,负载均衡器将每个请求独立路由到负载最小的服务器实例。相比之下,粘性会话将用户的会话绑定到特定的服务器实例,以便在会话期间来自用户的所有请求都将发送到同一服务器实例。

AWS Elastic Beanstalk 在为应用程序启用粘性会话时使用负载均衡器生成的 HTTP cookie。负载均衡器使用一个特殊的负载均衡器生成的 cookie 来跟踪每个请求的应用程序实例。当负载均衡器收到请求时,它首先检查请求中是否存在此 cookie。如果是,则将请求发送到 cookie 中指定的应用程序实例。如果没有cookie,则负载均衡器根据现有的负载均衡算法选择一个应用实例。 cookie 被插入到响应中,用于将同一用户的后续请求绑定到该应用程序实例。策略配置定义了一个 cookie 过期时间,它确定了每个 cookie 的有效期。

路由算法不太可能是你的情况

负载均衡器节点使用 leastconns 路由算法将请求发送到同一可用区内的健康实例。 leastconns 路由算法有利于连接最少或未处理请求最少的后端实例。

来源:Elastic Load Balancing Terminology And Key Concepts

希望对您有所帮助。