有没有人有在Amazon的Tigase上运行群集的EC2 XMPP服务器的经验,主要是我想了解任何可能使我绊倒的不明显的事情。 (例如,显然在EC2上运行Ejabberd可能会因Mnesia而引起问题。)

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

附加信息:

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

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

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

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

有了这些额外的信息,如果您能想到其他我应该知道的信息,我将很高兴知道。

谢谢 :)

最佳答案

我有很多经验。我认为有很多非显而易见的问题。像Tigase这样运行应用程序的唯一可靠实例是cc1.4xlarge。其他人则导致CPU可用性出现问题,这是否很幸运,是否足以让您在不忙于其他人工作的服务器上运行服务。

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

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

当然,我所谈论的是一个群集,该群集具有数百万在线用户和每秒100k XMPP数据包或更高的高流量。通常,对于大型安装,拥有专用服务器会更便宜,更高效。

通常,Tigase在Amazon EC2上可以很好地运行,但是您确实需要最新的SVN代码,因为它添加了很多优化功能,尤其是在云上进行测试之后。如果您提供有关服务的更多详细信息,我可能会提供更多建议。

更多评论:

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

但是,如果您确实想要/需要使用Amazon EC2,请给我一些具体数字,以下是实例列表以及集群能够可靠处理的在线用户数量:

  • 5 * cc1.4xlarge-700万在线用户100万
  • 1 * c1.xlarge-118k在线用户
  • 2 * c1.xlarge-127k在线用户
  • 2 * m2.4xlarge(为Tigase提供5GB RAM)-236k在线用户
  • 2 * m2.4xlarge(带有20GB RAM用于Tigase)-315k在线用户
  • 5 * m2.4xlarge(带有60GB RAM用于Tigase)-40万在线用户
  • 5 * m2.4xlarge(带有60GB RAM用于Tigase)-312k在线用户
  • 5 * m2.4xlarge(为Tigase提供60GB RAM)-327k在线用户
  • 5 * m2.4xlarge(带有60GB RAM用于Tigase)-280k在线用户

  • 其他一些评论:
  • 为什么内存量那么重要?这是因为,除了cc1.4xlarge实例之外,所有其他实例上的CPU能力都非常不稳定且不一致。您有8个虚拟CPU,但是如果查看top命令,通常会看到一个CPU在工作,而其余的则不在。 CPU功率不足会导致Tigase中的内部队列增加。当CPU电源恢复供电时,Tigase可以处理等待的数据包。 Tigase的内存越多,可以排队的数据包就越多,并且可以更好地处理CPU不足。
  • 为什么有 5 * m2.4xlarge 4次?这是因为我在不同的日期和一天中的不同时间多次重复测试。如您所见,根据时间和日期,系统可以处理不同的负载。我猜这是因为Tigase实例与其他一些服务共享CPU功能。如果他们很忙,Tigase会遭受CPU供电的困扰。

  • 就是说,我认为安装多达1万名在线用户应该没问题。但是,诸如名册大小之类的其他因素也非常重要,因为它们会影响流量和负载。同样,如果您还有其他产生大量流量的元素,这将给您的系统带来负担。

    无论如何,如果不进行一些测试,就不可能说出系统的实际运行情况或它是否可以处理负载。

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

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

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

    关于amazon-ec2 - 在Amazon EC2上扩展Tigase XMPP服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8670234/

    10-11 00:54