Visión General de Patrones

Cree su aplicación web o móvil como un conjunto de microservicios que pueden probarse, desplegarse y ser propiedad de diferentes equipos de aplicaciones de forma independiente. Muestre los servicios como API de REST y comuníquese con otros microservicios mediante API.

Los requisitos más importantes para una aplicación web o móvil son:

  • Debe admitir una serie de clientes, como exploradores y dispositivos móviles
  • Debe ser seguro
  • Debe ofrecer disponibilidad 24/7/365
  • Debe escalarse para responder a los picos de demanda
  • Debe manejar una baja latencia de red
  • Debe tener un tiempo de inactividad cero cuando se actualiza o modifica

Oracle Cloud Infrastructure (OCI) proporciona una infraestructura escalable, segura, fiable y de alto rendimiento para las aplicaciones web y móviles más exigentes. Este documento presenta los principios de diseño para diseñar una aplicación web o móvil, y arquitecturas de referencia basadas en esos principios.

Principios de diseño

Utilizar marcos ligeros de código abierto y lenguajes de programación maduros

Utilice Graal Development Kit for Micronaut o Helidon para crear su aplicación. Ambos proporcionan funciones como el registro, la telemetría, la seguridad y la configuración, así como patrones comunes como la creación de API de REST.

Utilice Java: un lenguaje portátil e independiente de la plataforma con un amplio conjunto de bibliotecas que utilizan millones de desarrolladores para crear aplicaciones escalables, resilientes y seguras.

Cree aplicaciones como servicios que se comuniquen mediante API

Crea tu aplicación como un conjunto de microservicios que se pueden probar de forma independiente, desplegar y ser propiedad de diferentes equipos de aplicaciones. Muestre servicios, así como API de REST bien definidas y comuníquese con otros servicios mediante estas API. Utilice OCI API Gateway como punto de entrada único para todos los clientes y, a continuación, direccione las solicitudes de API al servicio adecuado.

Utilice OCI Service Mesh para simplificar y proteger la comunicación entre servicios alojados en el cluster de Oracle Container Engine for Kubernetes (OKE). OCI Service Mesh también permite observar todo el tráfico de red entre sus servicios a través de las métricas y los logs emitidos por su componente de proxy que se ejecuta como un sidecar en los pods de aplicaciones.

Automatice la creación, las pruebas y el despliegue

Proporcione código con frecuencia y, a continuación, despliegue la aplicación de forma que se minimice el tiempo de inactividad. Utiliza OCI DevOps para establecer una forma coherente y automatizada de desarrollar, crear, empaquetar, probar y desplegar tus aplicaciones. Utilice Oracle Cloud Infrastructure Resource Manager para aprovisionar de forma fiable elementos de su infraestructura, como gateway de API, equilibradores de carga, bases de datos, clusters de Kubernetes y otros servicios.

Utilice servicios totalmente gestionados para eliminar la complejidad del desarrollo de aplicaciones, los tiempos de ejecución y la gestión de datos

Utilice servicios totalmente gestionados como Oracle Container Engine for Kubernetes (OKE), Oracle Cloud Infrastructure Object Storage y Oracle Autonomous Database: estos servicios maximizan la disponibilidad y la escalabilidad para responder a las demandas cambiantes de su aplicación. Un servicio totalmente gestionado garantiza la disponibilidad de la aplicación y la protege si se produce un fallo en el centro de datos que aloja la infraestructura de la aplicación.

Mantener el nivel de aplicación sin estado

Siempre que sea posible, mantenga los componentes de capa media de la aplicación sin estado. Si es necesario, utilice Oracle Autonomous Database para almacenar el estado de la aplicación para conseguir consistencia, durabilidad y capacidad de recuperación rápida.

Utilice bases de datos convergentes con soporte completo en todos los datos

Tu aplicación puede utilizar datos en una variedad de formatos como tabular (relacional), no estructurado, XML, JSON, espacial o gráfico. Tradicionalmente, esta variedad requería un tipo diferente de base de datos para cada formato de datos, por ejemplo, una base de datos relacional para datos relacionales, un almacén de documentos para datos no estructurados o una base de datos gráfica para datos vinculados jerárquicamente. Sin embargo, el uso de varias bases de datos a menudo genera una complejidad operativa adicional y una incoherencia de datos. En su lugar, utilice una única instancia de Oracle Autonomous Database de varios modelos para almacenar, indexar y buscar varios tipos y formatos de datos.

Instrumento de seguimiento y seguimiento de extremo a extremo

Es tentador para los equipos de desarrollo desarrollar sus propias herramientas de observabilidad para obtener visibilidad de los servicios y las aplicaciones que poseen. Tu aplicación puede contener cientos de servicios, propiedad de diferentes equipos de aplicaciones y negocios. En lugar de que cada equipo cree sus propias herramientas, centralice la solución con Oracle Cloud Observability and Management Platform: supervisa todas las capas de toda la pila para encontrar y solucionar problemas en su aplicación.

Elimine el punto único de fallo mediante la replicación de datos automatizada y la recuperación de fallos

Tu aplicación debe ser resiliente, recuperarse de fallos y minimizar el tiempo de inactividad y la pérdida de datos. Elimine un único punto de fallo mediante la implementación de redundancia de las siguientes maneras:

  • En OKE, configure pools de nodos con un mínimo de tres nodos, cada uno en un dominio de disponibilidad independiente, en una región de dominio de disponibilidad múltiple.
  • En una sola región de dominio de disponibilidad, configure pools de nodos en OKE con un mínimo de tres nodos, cada uno en un dominio de errores independiente.
  • Utilice un único equilibrador de carga público y varios equilibradores de carga privados con varios controladores de entrada para la redundancia en OKE.
  • Diseñe una topología piloto de recuperación ante desastres para reiniciar aplicaciones y restaurar cargas de trabajo rápidamente en una región en espera si se produce un desastre en la región principal donde se aloja la aplicación.
  • Configure el pipeline de integración y despliegue continuos para desplegar la aplicación en una región en espera y recuperarse de los fallos de la región.
  • Replicar los volúmenes de almacenamiento de bloques entre regiones mediante la replicación de volúmenes de almacenamiento de bloques y la replicación de almacenamiento de objetos.
  • Aprovisione la infraestructura necesaria en la región en espera mediante Oracle Cloud Infrastructure Resource Manager si falla la región principal.
  • Configure Oracle Autonomous Database para obtener la máxima disponibilidad mediante Autonomous Data Guard a fin de minimizar el tiempo de inactividad operativo y la pérdida de datos.

Además, prueba la resiliencia para ver cómo se comporta tu aplicación en condiciones anormales que ocurren de forma intermitente. Por ejemplo, puede adoptar el marco de Chaos Monkey para las pruebas de caos. Utilice también mecanismos de limitación, disyuntores y reintentos para implementar una aplicación resistente.

Implemente un enfoque de defensa en profundidad para proteger el ciclo de vida de la aplicación

Debes diseñar tu aplicación con suficiente seguridad para protegerte de los ataques de entidades maliciosas. Revisa tu app, código del lado del cliente y código de terceros para comprobar si hay comportamientos sospechosos. Utilice reglas de filtrado y configure la protección DDoS mediante el firewall de aplicaciones web (WAF) para proteger su aplicación del tráfico no deseado.

Almacene información confidencial, como contraseñas y tokens de autenticación/autorización, en Oracle Cloud Infrastructure Vault. Configure el cifrado de secretos de Kubernetes en etcd. Rota y establece breves vidas en los certificados que utiliza tu aplicación para hacer que sea más difícil para un atacante hacerse pasar por una entidad de confianza.

Siga el principio de privilegio mínimo para asegurarse de que los usuarios y las cuentas de servicio solo tengan el privilegio mínimo necesario para realizar sus tareas. Controle quién tiene acceso a la aplicación y sus componentes mediante Oracle Cloud Infrastructure Identity and Access Management (IAM). Utilice la autenticación multifactor en IAM para aplicar una autenticación compleja para que los administradores restrinjan el acceso a la aplicación y sus componentes.

Arquitectura

Este patrón de arquitectura se recomienda para una aplicación web o móvil compuesta por microservicios desplegados como contenedores en un cluster de Kubernetes en OKE. La persistencia de datos se logra mediante Oracle Autonomous Database. Los archivos multimedia y de imagen de la aplicación se almacenan en Object Storage.

En el siguiente diagrama se ilustra esta arquitectura.



arquitectura-maf-web-mobile-oracle.zip

La arquitectura tiene los siguientes componentes:

  • Web Application Firewall (WAF)

    WAF protege las aplicaciones frente al tráfico de Internet malicioso y no deseado. Puede proteger cualquier punto final orientado a Internet, lo que proporciona un cumplimiento de reglas consistente en todas las aplicaciones.

  • Gateway de API de Oracle Cloud Infrastructure

    OCI API Gateway es un servicio de gateway de API regional totalmente gestionado que proporciona puntos finales de API RESTful protegidos para OKE y cualquier otro servicio o punto final que se ejecute en Oracle Cloud Infrastructure. En esta arquitectura, las solicitudes se direccionan a un equilibrador de carga privado que reenvía las solicitudes a un servicio que se ejecuta en OKE.

  • Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)

    OCI IAM proporciona autenticación multifactor, conexión social, autorregistro para usuarios finales, gestión de identidades, conexión única y gobernanza de identidades para aplicaciones.

  • Load balancer

    El servicio de equilibrio de carga proporciona una distribución automática del tráfico desde un único punto de entrada a varios servidores a los que se puede acceder desde la red virtual en la nube, como los nodos de OKE de microservicios en contenedores en la arquitectura

  • Oracle Autonomous Database

    Oracle Autonomous Database es un entorno de base de datos totalmente gestionado que se escala de forma flexible, ofrece un rápido rendimiento de consultas y no requiere administración. No necesita configurar ni gestionar ningún hardware ni instalar ningún software.

  • Object Storage

    Object Storage proporciona acceso rápido a grandes cantidades de datos estructurados y no estructurados de cualquier tipo de contenido, incluidas copias de seguridad de base de datos, datos analíticos y contenido enriquecido, como imágenes y vídeos. Utilice el almacenamiento estándar para el almacenamiento de caliente al que debe acceder de forma rápida, inmediata y frecuente. Utilice el almacenamiento de archivo para el almacenamiento en frío que conserva durante largos períodos de tiempo y al que rara vez accede.

    En esta arquitectura, los activos de medios de la aplicación se almacenan en Object Storage en un bloque de la clase de almacenamiento estándar.

  • Container Engine para Kubernetes (OKE)

    OKE es un servicio totalmente gestionado, ampliable y altamente disponible para desplegar las aplicaciones en contenedores en la nube. Especifique los recursos informáticos que necesitan sus aplicaciones y OKE los aprovisiona en OCI en un arrendamiento existente. Container Engine utiliza Kubernetes para automatizar el despliegue, el ajuste y la gestión de aplicaciones en contenedores en clusters de hosts.

  • Service mesh

    Oracle Cloud Infrastructure (OCI) Service Mesh es una capa de infraestructura de aplicaciones gestionada por OCI para la comunicación de servicio a servicio. Optimiza el desarrollo y el despliegue de aplicaciones nativas en la nube mediante la definición de estándares para la observabilidad, la seguridad y la gestión del tráfico. Service Mesh se implementa como una matriz de proxies ligeros que se despliegan en los pods de los clientes junto con el código de la aplicación sin necesidad de que la aplicación los tenga en cuenta.

Alternativas

El uso de microservicios no es la única forma de crear aplicaciones móviles o aplicaciones web. Este patrón de arquitectura alternativa muestra una topología de tres niveles que consta de un equilibrador de carga, un nivel de aplicación/web de escala automática y una base de datos de alta disponibilidad.

Todos los recursos se despliegan en un único dominio de disponibilidad en una región de OCI. Los niveles están aislados en subredes independientes en una única red virtual en la nube (VCN). Las listas de seguridad sirven como firewalls para regular el tráfico de red hacia y desde los recursos de cada nivel. Una tabla de rutas asociada a cada subred contiene reglas para dirigir el tráfico a destinos fuera de la VCN.

Se pueden considerar otras arquitecturas alternativas como arquitectura de página única, aplicaciones web progresivas (PWA) o JAMStack, pero no se muestran aquí.

El siguiente diagrama ilustra esta arquitectura alternativa.



arquitectura-maf-web-mobile-alternative-oracle.zip

Ejemplo de caso de uso

En este caso de uso se describe un sistema de órdenes de cliente para una tienda que vende GPU en línea.

En el siguiente diagrama, se muestra la arquitectura de este caso de uso.



arquitectura-maf-web-móvil-ejemplo-oracle.zip

El tráfico de la red pública de Internet lo enruta el servicio DNS a través de un firewall de aplicaciones web (WAF) a un gateway de Internet, que reenvía las solicitudes entrantes a un microservicio de entrada (Nginx) a través del equilibrador de carga. La aplicación está compuesta por un servicio de front-end, un servicio de pedidos, un servicio de mensajería y un servicio de inventario. Todos estos servicios están en contenedores y se encuentran en el cluster de OKE. Cada uno de estos servicios expone sus interfaces mediante API de REST. Los datos se almacenan en bases de datos autónomas.

El cliente realiza un pedido de GPU mediante el servicio Front-End desde una aplicación web o una aplicación en un dispositivo móvil. El servicio de pedidos y el servicio de inventario se comunican entre sí mediante el servicio de mensajería de código abierto NATS. El servicio Orders lee y escribe datos de pedidos en la base de datos de conexión de pedidos (PDB). El servicio Inventory lee y escribe datos de inventario en la PDB de Inventory. El servicio de pedidos envía una notificación mediante el servicio de notificaciones para que el cliente pueda ser informado del estado del pedido por correo electrónico o Slack. El cliente puede recuperar el estado de la orden desde el front-end, que busca la orden mediante la API de REST para el servicio Orders.

Despliegue

Universal Health Organization (UHO) es una aplicación de ejemplo que se adhiere a los principios del marco de desarrollo de aplicaciones moderno. En particular, implementa elementos de los patrones de arquitectura web o móvil, de mensajería y controlada por eventos y está disponible en GitHub.
  1. Vaya a GitHub.
  2. Clone o descargue el repositorio en la computadora local.
  3. Siga las instrucciones del documento README.

Log de Cambios

Este log muestra cambios significativos:

Confirmaciones

  • Autoras: Raghavendra Prasad, Sajan Parihar
  • Contribuyentes: Hassan Ajan, Matthias Brantner, James Emerson, Harshad Kasture, Parvez Syed Mohamed, Jeff Schering, Joshua Stanley