Alojar el backend de tu aplicación móvil

Muy pocas aplicaciones en estos días no requieren ningún tipo de servicio backend. Con esta publicación, estoy compartiendo algunas experiencias que hemos recopilado para calcular la configuración óptima para alojar un servidor para su aplicación móvil.

¿Por qué descubrir el derecho de backend es tan importante para nosotros en Appzio?


Appzio es una plataforma para desarrollar aplicaciones nativas solo desde el backend. El cliente móvil descarga toda su configuración del servidor y se basa en el backend para su lógica de negocios y vistas. Es por eso que la capacidad de respuesta y el rendimiento de nuestros servicios backend son cruciales para la buena experiencia del usuario final.

Escogiendo TU backend
Si está desarrollando una aplicación como una aplicación nativa regular, con ReactNative o utilizando alguna otra herramienta, generalmente necesitará un backend para su aplicación. El primer paso es determinar la complejidad del backend requerido. Para el almacenamiento y recuperación de datos simples, Firebase de Google proporciona probablemente la mejor relación calidad-precio en este momento.

Firebase es, por defecto, una solución escalable y de alto rendimiento, pero desafortunadamente en el momento de la escritura, no es multirregión. Además, si su aplicación requiere una lógica de negocios más compleja, pronto se encontrará con las limitaciones de Firebases, simplemente no se ha creado para crear una lógica de negocios compleja. Puede solucionar esto con Cloud Functions hasta cierto punto, pero para backends complejos, no sería mi herramienta preferida. Un inconveniente obvio de Firebase es que dependerá totalmente de Google con esta configuración y que su backend a otro proveedor de servicios es una tarea importante.

Dado que la mayoría de las aplicaciones móviles utilizan una interfaz tranquila para comunicarse con el servidor, puede desarrollar su backend con cualquier lenguaje de programación con el que se sienta cómodo si requiere una lógica más compleja.

Si está utilizando Appzio para desarrollar su aplicación, proporcionamos un servicio de alojamiento escalable utilizando Google Cloud u otra nube de su elección. Y puedes desarrollar las aplicaciones con PHP y pronto también con NodeJS.

Alojamiento multiregión
Si su aplicación está dirigida a un solo país o continente, puede omitir esta parte. Sin embargo, si planea lanzar su aplicación globalmente, la ubicación de su back-end es muy importante. La latencia y el rendimiento de la red entre el servidor y el cliente juega un papel importante en la experiencia general de la aplicación.

También; Si se encuentra dentro de la UE, existen regulaciones bastante estrictas sobre dónde pueden residir los datos si hay información personal guardada en el backend de su aplicación. Sencillamente, si tiene datos personales y servicios a clientes de la UE, los datos deben estar en la UE. Todos los proveedores de nube y alojamiento pueden proporcionar alojamiento en la UE, pero luego, para los usuarios fuera de la UE, el proveedor de alojamiento que elija es muy importante. Lea más sobre GDPR aquí .

Las aplicaciones de Appzio se alojan principalmente en la nube de Google, porque Google proporciona la mejor latencia en todas las regiones. Los datos intercontinentales viajan dentro de la propia red de Google, lo que proporciona un rendimiento y una latencia de red incomparables.

Entonces, antes de elegir su proveedor de alojamiento, asegúrese al menos de hacer una prueba de ping simple desde diferentes ubicaciones. Desea que los resultados de su ping se vean como esto (haga ping en uno de nuestros servidores, usando https://tools.keycdn.com/ping )

Como puede ver, las llamadas subsiguientes tienden a ser más rápidas que las primeras. Hay varias razones para esto, pero un problema que a menudo se pasa por alto es la calidad del servicio DNS. Entonces, si realiza la configuración de su hosting correctamente, no deje el dominio de hosting colgado en goMama.com u otro proveedor que no tome en serio el dns hosting.

Servidor único de hosting
A menos que espere que su aplicación llegue a cientos de miles de usuarios en muy poco tiempo, la configuración más sencilla sería con una sola instancia de servidor. Esto impone un único punto de falla, pero si su backend se configura correctamente, se realiza una copia de seguridad con regularidad y está alojado en un proveedor confiable, normalmente no tendrá problemas con este enfoque.

Para alojar servidores virtuales, las mejores experiencias que hemos tenido son con DigitalOcean . Proporcionan una manera fácil de escalar su servidor a medida que su uso crece y las herramientas de administración de DigitalOcean para servidores son muy fáciles de usar. Para servidores de uso pesado y metal abierto, hemos tenido excelentes experiencias con IBM SoftLayer . Lo que desea buscar con esta configuración es que la instancia de su servidor tiene recursos garantizados, buena conectividad de red rápida y buenas herramientas para monitorear la carga.

Una buena configuración básica con un backend que no tiene un gran procesamiento de datos, admitirá fácilmente decenas de miles de usuarios mensuales, incluso hasta un millón de usuarios mensuales si su backend no es demasiado pesado en el procesamiento de datos.

Así es como empezamos a alojar aplicaciones de Appzio inicialmente, pero pronto surgió de esta configuración a medida que los requisitos y el uso de la aplicación seguían creciendo.

¿Necesita más bang de su configuración de servidor único?
El siguiente paso más sencillo para ampliar es dividir el servidor de aplicaciones, el almacenamiento de datos y posiblemente el almacenamiento en caché en diferentes servidores. Si solo está alojando un backend, también puede comenzar agregando un equilibrador de carga sin una configuración de clúster más complicada.

Sin embargo, hay que tener en cuenta que, tan pronto como empieces a lanzar más servidores en la mezcla, la latencia interna de la red consumirá parte de tu rendimiento. Nada es tan rápido, como una sola configuración de metal desnudo.

Ampliar
La infraestructura actual de Appzio se basa en Kubernetes para la organización de servidores de aplicaciones, servidores de bases de datos y servicios auxiliares. Para configurar diferentes nubes y servidores, utilizamos Ansible para automatizar las tareas de administración del servidor. Con Ansible, hemos logrado que nuestra configuración en la nube se pueda clonar con un trabajo de una hora razonable.

Nuestra implementación se basa en Gitlab , donde también alojamos todos nuestros repositorios de git privados y públicos. Gitlab también está conectado directamente con nuestros servidores de aplicaciones para proporcionar la creación automática de repositorios para los módulos personalizados del cliente, la creación de clientes Android y para muchas otras cosas.

Al crear una nueva versión del backend, Gitlab construye una nueva imagen de docker, extrae la versión correcta del código de backend de GIT y luego la implementa en los pods de Kubernetes. Esto hace posible revertir fácilmente la versión anterior del backend y agregar fácilmente más pods a medida que el tráfico crece. Todo el tráfico pasa a través de equilibradores de carga de proveedores de nube

Almacenamiento de datos
Si bien el uso compartido de archivos de la red se resuelve fácilmente con el uso compartido de archivos en red de los proveedores de la nube (recuerde que también debe probar el rendimiento aquí), la escala de la base de datos es más complicada de resolver.

Dependiendo de la aplicación, la aplicación puede utilizar un servidor de base de datos compartido, un servidor de base de datos dedicado o una configuración de base de datos agrupada. El almacenamiento de datos de Appzio es MariaDB, que viene con un soporte integrado para la agrupación de bases de datos. Sin embargo, debido a la forma en que la mayoría de las bases de datos SQL funcionan con las configuraciones de clúster, es posible que no funcione de manera inmediata para el alojamiento multirregional.

Para darle una idea de cuándo comenzar a cambiar a la configuración distribuida, aquí hay una instantánea de uno de nuestros servidores de bases de datos que da servicio a más de 100k usuarios activos mensuales:

En otras palabras, debe mover grandes cantidades de datos antes de superar una configuración de nodo de base de datos única y potente.

Si la agrupación de bases de datos estándar funciona para una configuración de varias regiones depende en gran medida de si hay muchas escrituras de base de datos. Las instrucciones SELECT son fáciles, pero la inserción y actualización de datos requiere un bloqueo, lo que puede ralentizar considerablemente las cosas si necesita cruzar regiones. Nuevamente, diferentes proveedores tienen grandes diferencias en su desempeño intercontinental interno.

Aquí, si puede vivir sin el soporte de relaciones, el alojamiento escalable se vuelve más fácil de resolver. MongoDB es una excelente opción para el almacenamiento de valor-clave. Y si no le teme al bloqueo de Google, el Cloud Spanner de Google es una de las cosas más interesantes que suceden en el espacio de la base de datos en mucho tiempo.

Para el alojamiento escalable compatible con MySQL, eche un vistazo a Percona.

Alojamiento de activos
Si su aplicación se basa en muchos recursos descargables (imágenes, imágenes, videos, fuentes, etc.), vale la pena analizar el uso de una red CDN . Si ya tiene sus archivos en la unidad de red compartida de algunos proveedores de la nube, la mayoría de los proveedores tienen una opción fácil para propagar los recursos compartidos de archivos directamente en CDN.

Con las aplicaciones Appzio, se puede habilitar CDN con un solo clic en una casilla de verificación.

La comparación de diferentes proveedores para el precio y la cobertura de CDN puede ser sorprendentemente difícil. Esta ingeniosa y pequeña herramienta puede ayudar en eso, pero desafortunadamente no incluye, por ejemplo, Google, Azure y Rackspace.

Resumen
A menos que realmente necesite más, vaya con una configuración de servidor único o una opción de back-end como servicio.

Si necesitas más, no te quedes sin una herramienta de orquestación adecuada ( Kubernetes , Marathon , Docker Swarm, etc.). Y aunque aprenderlos no es ciencia espacial, hay muchas advertencias, así que busque ayuda profesional para mantener su cordura.

Con una configuración de orquestación adecuada, pasa menos tiempo administrando granjas de servidores en todo el mundo con el menor esfuerzo que solía tomar para administrar un solo servidor. Sí, el salto en la productividad es realmente tan loco.

Y recuerde, no todos los proveedores de alojamiento y de nube son iguales en términos de rendimiento y características. Hemos visto una diferencia 4x en la latencia de la red interna entre dos proveedores líderes en la nube. Eso es mucho.