1) Diseñe la aplicación como una colección de servicios.
Las aplicaciones en la nube se implementan mejor como una colección de servicios en la nube o API. Se acumula a partir de los datos en los servicios y luego se combinan en servicios compuestos o en aplicaciones compuestas completas.
Esta es una arquitectura basada en servicios u orientada a servicios, en esencia. Si bien muchos entienden los conceptos, los desarrolladores aún tienden a crear aplicaciones estrechamente acopladas que se centran en la interfaz de usuario, en lugar de exponer las funciones subyacentes como servicios que pueden aprovechar de forma independiente.
- Estoy gastando dinero en varios servicios en la nube sin garantía de seguridad, como la clave de cifrado privada. ¿Es hora de configurar una Mac Mini en la nube?
- ¿Son útiles los cursos de computación en la nube para aquellos que no tienen habilidades informáticas anteriores?
- ¿Cómo cobran los proveedores de servicios en la nube por los servicios que brindan?
- ¿Cuáles son algunos de los mejores blogs de alojamiento en la nube?
- Si es posible, ¿cómo puedo alojar un AngularJS SPA completamente estático (enrutamiento incluido) desde un Google Cloud Bucket?
Cuando se desarrolla una arquitectura de aplicación para la nube, se trata de sistemas distribuidos complejos que pueden aprovechar aplicaciones acopladas libremente creadas en muchos servicios que también se pueden desacoplar de los datos (consulte “Desacoplar los datos” a continuación). Puede separar físicamente los servicios de la aplicación, ejecutar en las instancias de máquina adecuadas, y los administradores de servicios / API y la tecnología de gobierno que proporcionan directorios de servicios pueden ayudar a rastrear los muchos servicios que componen su aplicación.
Los beneficios adicionales pueden incluir la reutilización de servicios de otras aplicaciones o servicios más generales. Puede dividir las aplicaciones en cientos de servicios subyacentes que tienen valor cuando son utilizadas por otras aplicaciones. De esta manera, no reinventa la rueda cada vez que crea una aplicación. Considere el ejemplo de un servicio de verificación de crédito que utilizan muchas aplicaciones. Combine estos en un solo servicio y la aplicación se vuelve mucho más eficiente.
2) Desacoplar los datos
Si acopla estrechamente los datos a la aplicación, no encontrará un buen hogar en la nube. Las nubes privadas y públicas son sistemas distribuidos complejos que funcionan mejor con arquitecturas de aplicaciones que dividen el procesamiento y los datos en componentes separados.
Desacopla los datos por el mismo motivo por el que desea compilar la aplicación a partir de los servicios. Una vez desacoplado, tiene la opción de almacenar y procesar los datos en cualquier instancia de nube pública o privada. Por ejemplo, muchas empresas insisten en que sus datos permanezcan en los servidores locales, pero desean aprovechar las instancias de máquinas virtuales básicas dentro de una nube pública.
Debes considerar el rendimiento. Las lecturas y escrituras de bases de datos a través de Internet abierto pueden causar latencia, y las comunicaciones de la base de datos pueden determinar qué tan cerca están sus datos de los servicios y aplicaciones que necesitan aprovecharlos.
Considere el uso de sistemas de almacenamiento en caché. Estos proporcionan un rendimiento adicional de la base de datos al almacenar localmente los datos a los que se accede comúnmente, reduciendo así todas las solicitudes de lectura de la base de datos a la base de datos física. Sin embargo, estos se integran mejor en la aplicación y deben probarse con los datos de la aplicación para determinar qué tan eficiente será el caché. Los sistemas que constantemente leen datos nuevos no se benefician tanto de los cachés de bases de datos.
3) Considerar las comunicaciones entre los componentes de la aplicación.
El desacoplamiento de aplicaciones, tanto de datos como de servicios, no significa que su aplicación esté diseñada correctamente para la nube. Los componentes de la aplicación Chatty que se comunican constantemente entre sí disminuirán el rendimiento de la aplicación en general, dado que generalmente se distribuyen a través de una red o Internet abierto, donde es deseable la tolerancia a una alta latencia.
Concéntrese en diseñar aplicaciones que optimicen las comunicaciones entre los componentes de la aplicación. Por ejemplo, combine las comunicaciones en una sola secuencia de datos o un grupo de mensajes, en lugar de comunicarse constantemente como si los componentes de la aplicación residen en una sola plataforma.
4) Modelo y diseño para rendimiento y escala
Extienda las consideraciones sobre cómo se comunican los componentes de la aplicación para incluir también el rendimiento general. Esto incluye comprender cómo la aplicación escalará bajo una carga creciente.
Diseñar para el rendimiento significa primero construir un modelo que represente cómo se comporta la aplicación bajo una carga creciente. Si 1000 o más usuarios inician sesión al mismo tiempo, ¿cómo manejará la aplicación el aumento del tráfico en la red, la mayor carga en los servidores de aplicaciones y la carga colocada en las bases de datos de fondo? Debe comprender cómo los componentes de la aplicación manejan la carga a medida que el número de usuarios aumenta a 1,000 o más usuarios.
Este ejemplo podría aumentar la carga en los servidores de aplicaciones en un 80 por ciento, la carga en la red en un 10 por ciento y la carga en la base de datos en un 40 por ciento. Dado eso, agregar 1,000 usuarios más probablemente saturará los servidores de aplicaciones que ha aprovisionado, y necesitará activar más instancias de servidores de aplicaciones. La capacidad de la red puede permanecer igual, pero el número de instancias de la base de datos puede tener que aumentar para manejar cualquier carga adicional.
Armado con este modelo, puede descubrir la mejor manera de escalar la aplicación al girar automáticamente las instancias de recursos que se necesitan. En algunos casos, los proveedores de servicios en la nube ofrecen capacidades de escalado automático, donde el aprovisionamiento se produce automáticamente. Sin embargo, la ruta más eficiente radica en comprender el perfil de carga de trabajo de la aplicación y definir la ruta para escalar la aplicación, así como establecer mecanismos para garantizar que, de hecho, se escalará.
Finalmente, supervise el rendimiento general de la aplicación utilizando herramientas de supervisión del rendimiento compatibles con la aplicación y cree interfaces dentro de la aplicación para permitir una mejor supervisión del rendimiento. Cómo los recursos de provisiones y des-provisiones de la aplicación también deben ser innatos a la aplicación.