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

Amazon web services AWS上ejabberd和Riak群集的CPU和内存利用率差异,amazon-web-services,distributed-computing,ejabberd,riak,amazon-elb,Amazon Web Services,Distributed Computing,Ejabberd,Riak,Amazon Elb,我正在运行一个2节点的ejabberd集群(在一个弹性负载平衡器后面),它依次连接AWS上的一个3节点Riak集群(同样,通过一个ELB)。当我通过Tsung(创建了50万个用户注册)加载测试平台时,我注意到ejabberd节点的CPU利用率彼此相差约10%。对于Riak节点,节点之间的CPU和内存利用率相差约5% 节点具有相同的配置,因此想知道是什么导致了这些利用率上的非平凡差异。有人能在这里给我点灯吗 这是由于负载平衡器造成的吗?还是网络影响?我希望一旦形成集群(ejabberd或Riak

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

节点具有相同的配置,因此想知道是什么导致了这些利用率上的非平凡差异。有人能在这里给我点灯吗

这是由于负载平衡器造成的吗?还是网络影响?我希望一旦形成集群(ejabberd或Riak KV),节点的行为都是相同的,特别是对于ejabberd,整个数据库在集群中复制

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


非常感谢。

弹性负载平衡机制

  • DNS服务器使用DNS循环来确定特定可用性区域中的哪个负载平衡器节点将接收请求
  • 所选负载平衡器检查“粘性会话”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路由算法支持连接或未完成请求最少的后端实例

资料来源:


希望有帮助。

相差10%意味着你能给出两个节点ejabberd群集的实际数字吗?您好@error2007s-百分比分别为50%和62%…非常感谢@error2007s。。。非常感谢您的详细说明。注意到sticky sessions的概念很有趣-我不太清楚。也就是说,我仍然不希望重用任何负载平衡器生成的cookie,因为在负载测试期间,每个用户只发送一个用户创建请求,而不发送任何后续请求。因此,理想情况下,负载平衡器对于2个ejabberd实例(已经在不同的AZ中)的行为应该是相同的(至少在理论上是相同的)。如果您理解这些差异,请将我的答案标记为正确。