在Amazon EC2上扩展Tigase XMPP服务器

时间:2011-12-29 16:12:32

标签: amazon-ec2 xmpp tigase

有没有人有在亚马逊Tigase上运行群集EC2 XMPP服务器的经验,主要是希望了解任何可能让我失望的事情,这是不明显的。 (例如,显然在EC2上运行Ejabberd可能会因Mnesia而导致问题。)

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


额外信息:

我正在开发的系统使用XMPP只是为了在移动应用程序和服务器之间进行通信(几乎是实时的)。

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

我计划在Amazon RDS中托管一个用于XMPP服务器数据库的MySQL数据库。

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

有了这些额外的信息,如果你能想到我应该知道的任何其他事情,我会很高兴知道。

谢谢:)

1 个答案:

答案 0 :(得分:26)

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

此外,您需要具有最高I / O的实例,以确保它可以应对网络流量。高I ​​/ O尤其适用于数据库实例。

不确定这是否显而易见,但EC2上的主机名存在此问题,每次启动实例时主机名都会更改,IP地址也会发生变化。 Tigase集群对主机名非常敏感。有一种方法可以强制/更改实例的主机名,因此这可能是解决问题的方法。

当然,我所说的是数百万在线用户的群集,以及每秒高达100k XMPP的流量。通常,对于大型安装,使用专用服务器会更便宜,更有效。

一般情况下,Tigase在Amazon EC2上运行得非常好,但您确实需要最新的SVN代码,因为它已经添加了大量优化,特别是在云测试之后。如果您提供有关服务的更多详细信息,我可能会提供更多建议。

更多评论

如果涉及成本,专用服务器总是更便宜的选择,以持续运行服务。除非您计划每小时打开/关闭服务器,否则我建议您去寻求一些专门的服务。成本较低,性能更具可预测性。

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

  • 5 * cc1.4xlarge - 1百万700k在线用户
  • 1 * c1.xlarge - 118k在线用户
  • 2 * c1.xlarge - 127k在线用户
  • 2 * m2.4xlarge(Tigase为5GB RAM) - 236k在线用户
  • 2 * m2.4xlarge(Tigase为20GB RAM) - 315k在线用户
  • 5 * m2.4xlarge(Tigase为60GB RAM) - 400k在线用户
  • 5 * m2.4xlarge(Tigase为60GB RAM) - 312k在线用户
  • 5 * m2.4xlarge(Tigase为60GB RAM) - 327k在线用户
  • 5 * m2.4xlarge(Tigase为60GB RAM) - 280k在线用户

还有一些评论:

  1. 为什么内存量会那么重要?这是因为CPU功率非常不可靠,并且除了cc1.4xlarge实例之外的所有实例都不一致。您有8个虚拟CPU但是如果查看top命令,您经常会看到一个CPU正在运行,其余的则没有。 CPU功率不足导致内部队列在Tigase中增长。当CPU电源恢复时,Tigase可以处理等待的数据包。 Tigase拥有的内存越多,可以排队的数据包就越多,它就能更好地处理CPU缺陷。
  2. 为什么 5 * m2.4xlarge 4次?这是因为我在一天的不同日期和时间多次重复测试。正如您所看到的,系统可以根据时间和日期处理不同的负载。我想这是因为Tigase实例与其他一些服务共享CPU能力。如果他们很忙,Tigase就会受到CPU的影响。
  3. 那说我认为安装多达10k的在线用户你应该没问题。但是,其他因素如名册大小非常重要,因为它们会影响流量和负载。此外,如果您有其他元素产生大量流量,这将会给您的系统带来负担。

    在任何情况下,如果没有一些测试,就无法确定系统的行为,或者它是否能够处理负载。

    关于组件的最后一个问题:

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

    另外,我建议阅读Python对多线程的支持以及它在非常高的负载下的行为。它曾经不是那么好。