2011-12-29 71 views
8

有没有人在亚马逊的EC2上运行集群Tigase XMPP服务器的经验,主要是我想知道任何可能让我感到不知所措的东西。 (例如显然运行在EC2上Ejabberd可能会由于Mnesia的问题。)在亚马逊EC2上缩放Tigase XMPP服务器

或者,如果你有安装和运行在Ubuntu上Tigase任何一般建议。


的额外信息:

系统我正在开发一个移动应用程序和服务器(S)之间使用XMPP只是沟通(以接近实时的)。

用户数量最初很小,但有望增长。这就是系统需要可扩展的原因。假设只有几千个用户,你不需要cc1.4xlarge EC2实例? (否则这将是非常昂贵的运行!)

我打算使用托管在Amazon RDS托管的XMPP服务器数据库MySQL数据库。

我还计划创建Python编写的外部XMPP组件,使用SleekXMPP。这将是这个外部组件完成服务器的所有“工作”,因为我正在制作的应用程序与即时消息传递完全不同。对于这部分,我还没有弄清楚如何将用Python编写的外部XMPP组件连接到Tigase服务器。如我所料,documentation似乎暗示组件是专门为Tigase编写的,而不是像一般的XMPP服务器那样使用XEP-0114: Jabber Component Protocol

有了这笔额外的信息,如果你能想到的任何东西,我应该知道我很高兴知道。

谢谢:)

回答

25

我有很多经验。我认为有一些非显而易见的问题。就像运行像Tigase这样的应用程序的唯一可靠实例是cc1.4xlarge。其他人会导致CPU可用性问题,这只是一个抽奖,无论您是否有幸在不忙于其他人工作的服务器上运行您的服务。

此外,您还需要一个具有尽可能高的I/O的实例,以确保它能够应对网络流量。高I ​​/ O特别适用于数据库实例。

不知道这是明显与否,但有这个问题,在EC2上的主机名,每次启动实例的主机名的变化和IP地址的变化。 Tigase集群对主机名非常敏感。有一种方法可以强制/更改实例的主机名,所以这可能是解决问题的方法。

当然我说的是数以百万在线用户和每秒以上的非常高的流量100K XMPP包集群。通常对于大型安装来说,拥有专用服务器会更便宜,更高效。

一般Tigase运行得很好在Amazon EC2上,但你真的需要最新的SVN代码,它有很多特别是在云测试后添加优化。如果你提供一些关于你的服务的更多细节,我可能会有更多的建议。

更多评论:

如果涉及到成本,专用服务器是持续运行的服务总是更便宜的选择。除非您打算每小时开启/关闭服务器,否则我会建议您参加一些专门的服务。成本更低,性能更可预测。

但是,如果你真的想/需要坚持到Amazon EC2让我给你一些具体的数字,下面是实例的列表,以及有多少在线用户群能够可靠地处理:

  • 5 * cc1.4xlarge - 1mln 700K在线用户
  • 1 * c1.xlarge - 118K在线用户
  • 2 * c1.xlarge - 127K在线用户
  • 2 * m2.4xlarge(具有5GB RAM用于Tigase) - 236K在线用户
  • 2 * m2.4xlarge(20GB与RAM对Tigase) - 315K在线用户
  • 5 * m2.4xlarge(与60GB的RAM Tigase) - 400K在线用户
  • 5 * m2.4xlarge(与60GB的RAM Tigase) - 312K在线用户
  • 5 * m2.4xlarge(与60GB的RAM Tigase) - 327K在线用户
  • 5 * m2.4xlarge(与60GB的RAM Tigase) - 280K在线用户

一些更多的评论:

  1. 为什么内存的数量很重要?这是因为除了cc1.4xlarge实例之外,CPU功耗非常不可靠并且不一致。你有8个虚拟CPU,但如果你看看上面的命令,你经常会看到一个CPU工作,其余的不是。 CPU功率不足导致内部队列在Tigase中增长。当CPU电源回来时,Tigase可以处理等待的数据包。更多的内存Tigase有更多的数据包可以排队,它更好地处理CPU缺陷。
  2. 为什么有5 * m2.4xlarge 4倍?这是因为我在不同的日子和时间多次重复测试。正如你所看到的取决于时间和日期,系统可以处理不同的负载。我想这是因为Tigase实例与其他一些服务共享CPU的能力。如果他们忙于Tigase受到CPU的影响。

这就是说,我认为安装多达10K的在线用户,你应该没问题。但是,其他因素如名单大小会影响流量和负载,因此非常重要。此外,如果您有其他元素产生显着的流量,这会给您的系统带来负担。

在任何情况下,如果没有一些测试中,它是不可能告诉你的系统如何真正的行为,或是否能够处理负载。

和关于分量的最后一个问题:当然

中Tigase不支持XEP-0114和XEP-0225用于连接外部组件。所以这不应该是用不同语言编写的组件的问题。另一方面,我建议使用Tigase的API来编写组件。它们可以作为内部Tigase组件部署,也可以作为外部组件部署,这对开发人员来说是透明的,在开发时您不必担心。这是API和框架的一部分。 此外,您可以使用Tigase框架中的所有商品,脚本功能,监控,统计数据,更容易开发,因为您可以轻松地将代码部署为测试的内部组件。 你真的不必担心任何XMPP特定的东西,你只需填充processPacket(...)方法的主体,就是这样。 在Tigase网站上应该有足够的在线文档来解决所有这些问题。

此外,我会建议阅读关于Python支持多线程以及它如何在非常高的负载下运行。它曾经不是很好。

+0

感谢您的回复(以及制作Tigase!)我已经添加了一些关于我正在开发的内容的更多详细信息:-) – 2011-12-29 20:30:04

+0

只需检查一下版本tigase-server-5.1.0-beta3-b2667即可。 tar.gz'(来自http://www.tigase.org/node/2474/2199)可以 - 或者如果它真的是SVN的最新结账,会更好吗? – 2011-12-30 01:32:32

+0

真棒,感谢您对Tigase和说明的出色洞察。 – 2012-01-01 16:07:33