Servicio en la nube y asesoramiento de protocolo de mensajería instantánea, para una aplicación móvil de backend a chat grupal

8

Descripción general
Voy a desarrollar una aplicación en Android e iOS. Permitirá a los usuarios configurar 'salas de chat' grupales y hablar en salas de chat configuradas por otros usuarios. El servicio debe ser altamente escalable, de modo que pueda acomodar un aumento masivo de usuarios durante la noche (solo podemos soñar).


Información general
Anteriormente he usado principalmente Java y Python, pero se deben usar los lenguajes más apropiados para esta tarea. No me importa aprender muchas habilidades nuevas.

Requisitos de
chat El protocolo de chat debe ser flexible: debe permitir determinar quién puede ver / publicar en 'salas de chat' en función de los factores determinados por el primer afiche / creador de la 'sala de chat' en particular. También debería permitir a los usuarios simplemente instalar la aplicación y comenzar a usar el servicio, después de solo proporcionar un apodo simple (que podría cambiarse más adelante).


Planes de protocolo de chat
Después de mirar alrededor, creo que el protocolo XMPP es el mejor candidato. En particular, la extensión de chat multiusuario se parece a lo que necesitaré. ¿Sería esto más adecuado para mis requisitos, o conoces otra solución potencial?

Actualización: desde entonces he investigado el Protocolo para conferencias sincrónicas y parece encajar perfectamente con mis necesidades. Sin embargo, no estoy seguro de qué tan bien documentado está o cómo realmente lo implementaría.


Servicio en la nube
que he estado decidiendo entre Amazon Web Services, Google App Engine y Windows Azure. Estoy llegando a la conclusión de que Azure será el mejor, ya que es más fácil de administrar que AWS (la facilidad de escalabilidad será un factor clave en el diseño), creo que puede ser menos restringido que GAE, además Azure pronto tendrá kits de herramientas para permitir una fácil interfaz con teléfonos Android e iOS.

Actualización: al analizarlo más a fondo, parece que AWS sería más barato y que tienen disposiciones, como Elastic Load Balancing y Auto Scaling , que hacen que el trabajo adicional necesario para mantener la escalabilidad sea insignificante.

¿Es esta la decisión que habría tomado, o recomendaría / buscaría en otros servicios en la nube?


Requisitos generales
Cualquier componente debe estar bien documentado, ser confiable y, preferiblemente, de alto nivel, siempre que sea posible. Por ejemplo, preferiría usar un complemento para implementar el protocolo de chat en lugar de escribirlo yo mismo, dejándolo a disposición de personas más experimentadas.


Gracias
Gracias por leer, y cualquier consejo que tenga sobre cualquier aspecto sería muy apreciado :-)

Jon Cox
fuente
Al analizar otros aspectos más, llegué a la conclusión de que todavía no tengo idea de qué proveedor de la nube elegir. Parece que AWS puede ser más barato que Azure, y después de una inspección más cercana, tiene algunas buenas herramientas para la escalabilidad de administración automática.
Jon Cox
No estoy seguro de estar completamente seguro de lo que estás buscando. ¿Podrías hacer preguntas más específicas? "¿Es esta la decisión que habrías tomado?" Es bastante subjetivo. Pides consejo sobre el protocolo (bueno), pero todo se lee como un RFC en lugar de una buena pregunta SE.
Greg Jackson
Tenía la impresión de que programmers.stackexchange es el lugar para preguntas subjetivas sobre el desarrollo de software. Como tal, hay muchas posibles soluciones a las cosas que he preguntado, y estaría muy interesado en las opiniones de diferentes personas sobre cualquiera de ellas :)
Jon Cox
Es cierto, pero de acuerdo con las preguntas frecuentes , "solo debe hacer preguntas prácticas y que respondan en función de los problemas reales que enfrenta. Las preguntas charlatanas y abiertas disminuyen la utilidad de nuestro sitio y hacen que otras preguntas salgan de la página principal". En otras palabras, cuanto más específico, mejor. Puede ser tanto subjetivo como específico, por lo que las preguntas directas son aún mejores que las RFC. La diferencia está aquí, podría sugerirle que aclare su pregunta, mientras que en SO, estaría cerrada (aunque, sí, ya es demasiado subjetiva para SO, sin importar cuán específica sea).
Greg Jackson
No me malinterpreten, es una muy buena pregunta, pero aún podría ser mejor.
Greg Jackson

Respuestas:

2

Protocolo

Sí, esto va a sonar como una evasión, pero realmente depende de ti. Honestamente, lo que ha descrito suena muy parecido a IRC, pero XMPP es bastante extensible y ampliamente utilizado, por lo que es probablemente la forma más sencilla de no IRC para trabajar y obtener soporte. Podrá encontrar muchos ejemplos para ambas plataformas, y probablemente incluso bibliotecas ya preparadas, si quiere ir en esa dirección. No voy a recomendar ninguno, pero una búsqueda rápida debería ser una herramienta muy útil aquí. No hay una respuesta correcta, pero XMPP ciertamente no es una mala elección.

Servicio de almacenamiento en la nube

Tanto Azure como AWS son muy buenos servicios. En cada una de ellas se ejecutan muchas aplicaciones importantes o de alto perfil. Sin embargo, una de las razones por las que tiendo a favorecer Azure en lugar de AWS es que Microsoft realmente trata de facilitarle la obtención. Si aún no lo ha hecho, buscaría en Bizspark , que, si lo aprueban, le dará, entre otras cosas, una pequeña instancia gratuita de Azure. Para ser justos, Amazon hace el mismo tipo de cosas , pero parecen darte un poco menos, y solo por un año (Bizspark es por 3 años). Por otro lado, Bizspark realmente requiere que te aprueben, mientras que Amazon realmente te lo da con bastante facilidad.

Con todo, cualquiera de los dos es realmente un buen servicio, y tanto Microsoft como Amazon tienden a estar muy comprometidos a ayudar a los desarrolladores a hacer las cosas, por lo que no puede equivocarse de ninguna manera. La mejor manera de decidir es mirar las características que ofrecen en comparación con lo que necesita, y los precios para sus niveles mínimos e ideales. Por ejemplo, si quisiera admitir Windows Phone, Azure podría ser una mejor opción, porque funcionan bien juntos, pero si desea aprovechar los servicios de cumplimiento y enviar camisetas o tazas de café o algo por el estilo, Amazon podría ser el mejor opción (Nota: no lea ninguno de estos; elegí a propósito dos escenarios que no mencionó solo para dar un ejemplo de algunas de las características únicas de los servicios).

En cuanto al Elastic Load Balancing y Auto Scaling, eso es solo la marca de AWS lo que hacen los servidores en la nube en general. Todos los servicios en la nube decentes harán que la escala de su sistema sea tecnológicamente insignificante, al menos desde su lado (si tiene un código incorrecto que no se escala bien, realmente no se puede culpar a ellos ...). Entonces sí, esas son cosas buenas, pero todos las tienen, por lo que no deberían tomar decisiones.

Greg Jackson
fuente
Gracias por su respuesta. Definitivamente me ayudó a pensar más sobre lo que realmente se requerirá, y aclaró mis pensamientos sobre otras áreas. Salud.
Jon Cox
IRC fue lo primero que me vino a la cabeza también. Es un protocolo extremadamente bien documentado y simple, y bien diseñado para escalar a un gran número de usuarios.
Cercerilla
0

No sé nada sobre los protocolos de chat, así que pasaré al bit de la nube.

No me gusta la idea de alojar una presencia completa en la nube.

¿Por qué no comenzar con la configuración de 2 servidores virtuales pequeños en modo de conmutación por error? Hay proveedores que ofrecen suficientes instalaciones para equilibrar geográficamente 2 pequeñas instancias virtuales por $ 40 al mes.

A medida que crezca, aumente / disminuya el tamaño / cantidad de su instancia virtual según sea necesario mientras usa la nube para estallar. VPS es más barato que las instancias por hora utilizadas a tiempo completo.

Me parece que su sistema se puede particionar fácilmente en función de las salas de chat. Diferentes recursos alojan diferentes salas de chat, y se mueven en función del número de usuarios concurrentes para acercarse a una distribución casi óptima.

Esto deja dos desafíos técnicos: 1: ¿Cómo migra una sala a un nuevo servidor de flujo medio? 2: ¿Cómo hacer frente a una sala que necesita más recursos que una sola unidad de cómputo / unidad vps?

Jonno
fuente