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 :-)
fuente
Respuestas:
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.
fuente
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?
fuente