2011-12-29 11 views
8

¿Alguien tiene experiencia en ejecutar servidores agrupados Tigase XMPP en Amazon EC2, principalmente deseo saber algo que me pueda hacer tropezar y que no sea obvio. (Por ejemplo, aparentemente ejecutar Ejabberd en EC2 puede causar problemas debido a Mnesia).Escalado de servidor Tigase XMPP en Amazon EC2

O si tiene algún consejo general para instalar y ejecutar Tigase en Ubuntu.


información adicional:

El sistema que estoy desarrollando usos XMPP sólo para comunicarse (en tiempo casi real) entre una aplicación móvil y el servidor (s).

La cantidad de usuarios inicialmente será pequeña, pero ojalá crezca. Esta es la razón por la cual el sistema necesita ser escalable. Presumiblemente para unos pocos miles de usuarios, ¿no necesitaría una instancia de cc1.4xlarge EC2? (De lo contrario, va a ser muy costoso de ejecutar!)

Planeo utilizar una base de datos MySQL alojada en Amazon RDS para la base de datos del servidor XMPP.

También planeo crear un componente XMPP externo escrito en Python, usando SleekXMPP. Será este componente externo el que haga todo el 'trabajo' del servidor, ya que la aplicación que estoy realizando es bastante diferente de la mensajería instantánea. Para esta parte no he resuelto cómo conectar un componente XMPP externo escrito en Python a un servidor Tigase. El documentation parece sugerir que los componentes están escritos específicamente para Tigase, y no para un servidor general XMPP, usando XEP-0114: Jabber Component Protocol, como esperaba.

Con esta información adicional, si puede pensar en cualquier otra cosa que deba saber, estaría encantado de saberlo.

Gracias :)

Respuesta

25

Tengo mucha experiencia. Creo que hay una gran cantidad de problemas no obvios. Al igual que la única instancia confiable para ejecutar aplicaciones como Tigase es cc1.4xlarge. Otros causan problemas con la disponibilidad de CPU y esto es solo una lotería si tienes la suerte de ejecutar tu servicio en un servidor que no está ocupado con otras personas.

También necesita una instancia con la E/S más alta posible para asegurarse de que pueda hacer frente al tráfico de la red. La alta E/S se aplica especialmente a la instancia de la base de datos.

No estoy seguro si esto es obvio o no, pero existe este problema con los nombres de host en EC2, cada vez que inicia la instancia, el nombre de host cambia y la dirección IP cambia. El clúster Tigase es bastante sensible a los nombres de host. Hay una forma de forzar/cambiar el nombre de host para la instancia, por lo que podría ser una forma de evitar el problema.

Por supuesto que estoy hablando de un clúster para millones de usuarios en línea y muy alto tráfico de 100k paquetes XMPP por segundo o más. En general, para instalaciones grandes, es mucho más barato y eficiente tener servidores dedicados.

Generalmente, Tigase funciona muy bien en Amazon EC2, pero realmente necesita el último código SVN, ya que tiene muchas optimizaciones agregadas especialmente después de las pruebas en la nube. Si proporciona más detalles sobre su servicio, es posible que tenga algunas sugerencias más.

Más comentarios:

Si se trata de costos, un servidor dedicado es la opción más barata para el servicio siempre funcionando constantemente. A menos que planee activar/desactivar los servidores cada hora, le recomendaría ir a algún servicio dedicado. Los costos son más bajos y el rendimiento es mucho más predecible.

Sin embargo, si realmente quieres/necesidad de atenerse a Amazon EC2 te voy a dar algunos números concretos, a continuación se muestra una lista de instancias y el número de línea a los usuarios la agrupación fue capaz de manejar de forma fiable:

  • 5 * cc1.4xlarge - 1mln 700k usuarios
  • 1 * c1.xlarge - 118 duodecies usuarios
  • 2 * c1.xlarge - 127K usuarios
  • 2 * m2.4xlarge (con 5 GB de RAM para Tigase) - 236k usuarios en línea
  • 2 * m2.4xlarge (con 20 GB de RAM para Tigase) - 315K usuarios
  • 5 * m2.4xlarge (con 60 GB de RAM para Tigase) - 400k usuarios
  • 5 * m2.4xlarge (con 60 GB de RAM para Tigase) - 312k usuarios
  • 5 * m2.4xlarge (con 60 GB de RAM para Tigase) - 327K usuarios
  • 5 * m2.4xlarge (con 60 GB de RAM para Tigase) - 280K usuarios

unos más comentarios :

  1. ¿Por qué cantidad de memoria importa tanto? Esto se debe a que la potencia de la CPU es muy poco fiable e incoherente en todas las instancias excepto cc1.4xlarge. Tienes 8 CPU virtuales, pero si miras el comando superior, a menudo ves que una CPU está funcionando y el resto no. Esta insuficiente potencia de la CPU hace que las colas internas crezcan en Tigase. Cuando la potencia de la CPU vuelve, Tigase puede procesar los paquetes en espera. Cuanta más memoria tiene Tigase, más paquetes se pueden poner en cola y se maneja mejor las deficiencias de la CPU.
  2. ¿Por qué hay 5 * m2.4xlarge 4 veces? Esto se debe a que repetí las pruebas muchas veces en diferentes días y horas del día. Como puede ver, dependiendo de la hora y la fecha, el sistema podría manejar diferentes cargas. Supongo que esto se debe a que la instancia de Tigase compartió la potencia de la CPU con algunos otros servicios. Si estaban ocupados, Tigase sufría de CPU bajo el poder.

Dicho esto, creo que con la instalación de hasta 10k usuarios en línea, debería estar bien. Sin embargo, otros factores como el tamaño de la lista son muy importantes ya que afectan el tráfico y la carga. Además, si tiene otros elementos que generan un tráfico significativo, esto cargará su sistema.

En cualquier caso, sin algunas pruebas es imposible saber cómo se comporta realmente su sistema o si puede manejar la carga.

Y la última pregunta con respecto componente:

Por supuesto Tigase es compatible con XEP-0114 y XEP-0225 para conectar componentes externos. Entonces esto no debería ser un problema con los componentes escritos en diferentes idiomas. Por otro lado, recomiendo usar la API de Tigase para escribir componentes. Se pueden implementar como componentes internos de Tigase o como componentes externos y esto es transparente para el desarrollador; no tiene que preocuparse por esto en el momento del desarrollo.Esto es parte de la API y el marco. Además, puede utilizar todos los productos de Tigase framework, capacidades de scripting, monitoreo, estadísticas, un desarrollo mucho más fácil ya que puede implementar fácilmente su código como componente interno para las pruebas. Realmente no tiene que preocuparse por ningún material específico de XMPP, simplemente completa el cuerpo del método processPacket (...) y listo. Debe haber suficiente documentación en línea para todo esto en el sitio web de Tigase.

Además, sugiero leer sobre el soporte de Python para multi-threading y cómo se comporta bajo una carga muy alta. Solía ​​ser no tan bueno.

+0

Gracias por su respuesta (y por hacer Tigase!) He agregado algunos detalles más sobre lo que estoy desarrollando :-) –

+0

Solo para verificar, sería la versión 'tigase-server-5.1.0-beta3-b2667. tar.gz '(de http://www.tigase.org/node/2474/2199) estar bien, ¿o sería mejor si realmente fuera el último checkout de SVN? –

+0

Impresionante, gracias por la excelente idea de Tigase y las instrucciones. –