Despliegue de una aplicación de vídeo en contenedores con GraphQL y NoSQL

Considere una aplicación de transmisión de video bajo demanda. Transmite varios programas que los clientes de todo el mundo ven. Los shows pueden tener varias temporadas, y una temporada puede tener varios episodios. Necesita un almacén de metadatos moderno y persistente para realizar un seguimiento de la actividad de este cliente.

En general, los clientes están interesados en rastrear cosas como los episodios que ven, el tiempo de reloj por episodio, el número total de temporadas vistas, etc. Los clientes también quieren que las aplicaciones de transmisión comiencen a transmitir desde donde dejaron de ver, después de todo, ¿quién quiere comenzar de nuevo desde el principio?

Esta arquitectura lo guía por una aplicación de transmisión de video bajo demanda compuesta por varios microservicios que utilizan varios servicios de Oracle Cloud Infrastructure. En esta arquitectura, el enfoque se centra en un microservicio de seguimiento de actividades. El backend de la aplicación de transmisión recopila datos para generar informes como los programas más populares y el tiempo medio de visualización por programa.



Arquitectura

Esta aplicación utiliza una arquitectura de tres niveles, que representa los cerebros de la aplicación. Las funciones de estos servicios permiten crear una aplicación de producción sin servidor de alta disponibilidad, escalable y segura. Las aplicaciones pueden utilizar miles de servidores, sin embargo, al aprovechar el paradigma sin servidor, no tiene que gestionar uno solo.

Recientemente, REST se ha convertido en el estándar para diseñar API web. El estilo arquitectónico REST permite la ejecución en servidores sin estado y ofrece acceso estructurado a los recursos. Sin embargo, las API de REST han demostrado ser inflexibles al mantenerse al día con los requisitos en constante cambio de los clientes que acceden a ellas, como el aumento del uso móvil, los dispositivos de baja potencia y las redes descuidadas.

Para esas aplicaciones, buscamos una solución que minimizara los datos transferidos a través de la red y permitiera a los usuarios consultar datos fácilmente mediante el uso directo de una API.

GraphQL es un lenguaje de consulta y manipulación de datos de código abierto para las API que puede codificar en muchos idiomas diferentes. GraphQL proporciona una descripción completa y fácil de entender de los datos de la API, al tiempo que proporciona capacidades de tiempo de ejecución para satisfacer consultas con los datos existentes. Aunque GraphQL se suele confundir con una tecnología de base de datos, GraphQL no está vinculado a ninguna base de datos o motor de almacenamiento específico, sino que está respaldado por los datos existentes.

Los desarrolladores de aplicaciones modernas tienen muchas opciones a la hora de decidir cuándo y cómo conservar una parte de los datos. En los últimos años, las bases de datos NoSQL se han vuelto cada vez más populares, y ahora se consideran una de las herramientas necesarias que cada desarrollador de aplicaciones debe tener a su disposición. Si bien las bases de datos relacionales "probadas y verdaderas" son excelentes para resolver problemas clásicos de la aplicación, como la normalización de datos, la coherencia estricta y las consultas arbitrariamente complejas para acceder a esos datos, las bases de datos NoSQL adoptan un enfoque diferente.

La ejecución de aplicaciones en contenedores puede requerir una sobrecarga considerable en la creación de instancias de máquinas virtuales, la instalación de componentes para ejecutar imágenes de contenedor (y todas las dependencias para admitirlas, incluidas las actualizaciones de software y sistema operativo), y la supervisión de aplicaciones para garantizar que se ejecuten de manera óptima, estén disponibles y no se vean afectadas.

Como desarrollador, puede conectarse a Oracle NoSQL Database Cloud Service y trabajar con tablas NoSQL mediante los SDK NoSQL disponibles en muchos idiomas. El servicio de contenedor de Oracle Cloud Infrastructure es un servicio totalmente gestionado y adecuado para cargas de trabajo en contenedores que no requieren una plataforma de orquestación de contenedores como Kubernetes para el despliegue de la aplicación GraphQL. Utilice OCI Kubernetes Engine (OKE) cuando el equipo de desarrollo desee crear, desplegar y gestionar de forma fiable aplicaciones en la nube.

Oracle Cloud Infrastructure API Gateway permite publicar API con puntos finales privados accesibles desde la red, que se pueden exponer con direcciones IP públicas si desea que acepten tráfico de Internet. Los puntos finales admiten la validación de API, la transformación de solicitud y respuesta, CORS, la autenticación/autorización, y la limitación de solicitudes.

Todo esto proporciona una experiencia sin servidor que permite a los clientes centrarse en agregar valor a sus aplicaciones en lugar de desplegar y gestionar la infraestructura.

Estas son algunas de las ventajas de utilizar Oracle NoSQL Database Cloud Service:

  • Modelado de datos: Oracle NoSQL Database Cloud Service soporta el modelado basado en esquema y sin esquema (JSON). Ofrece una forma intuitiva de desarrollar aplicaciones basadas en GraphQL. El esquema GraphQL se diseña mediante estructuras de datos anidadas, que coinciden con lo que utilizarán los desarrolladores al realizar el modelado de datos NoSQL. Una opción nativa.
  • Ciclo de vida de desarrollo más rápido: los desarrolladores escriben sus aplicaciones. Oracle realiza la gestión de bases de datos, la gestión del almacenamiento, la alta disponibilidad y la escalabilidad, para ayudar a los desarrolladores a concentrarse en la entrega de aplicaciones de alto rendimiento. Los desarrolladores despliegan y gestionan tablas o jerarquías de tablas, no clusters ni bases de datos para sus microservicios GraphQL.
  • Identidad de acceso y gestión: Oracle NoSQL Database Cloud Service utiliza Oracle Cloud Infrastructure Identity and Access Management para proporcionar acceso seguro a Oracle Cloud. Oracle Cloud Infrastructure Identity and Access Management permite crear grupos dinámicos y permitir la inspección, lectura, uso o gestión de tablas de Oracle NoSQL Database Cloud Service.
  • Seguridad de datos en redundancia: Oracle NoSQL Database Cloud Service almacena datos en varios dominios de disponibilidad (AD) o dominios de errores (FD) en regiones de AD únicas. Si un AD o un FD no está disponible, todavía se puede acceder a los datos de usuario desde otro AD o FD. Las solicitudes a un punto final de región no son específicas de AD/FD, por lo que la falta de disponibilidad de AD/FD es transparente.
  • Alto rendimiento y previsibilidad: Oracle NoSQL Database Cloud Service aprovecha las tecnologías de componentes más recientes de Oracle Cloud Infrastructure y proporciona un alto rendimiento a medida. Los desarrolladores saben que sus aplicaciones devuelven datos con latencias predecibles, incluso cuando aumentan sus requisitos de rendimiento y almacenamiento.
  • Totalmente gestionado con administración cero: Los desarrolladores no tienen que administrar los servidores de datos ni la seguridad ni la infraestructura subyacentes. Oracle mantiene el hardware y el software, lo que permite a los desarrolladores centrarse en la creación de aplicaciones.
  • Aprovisionamiento de almacenamiento y rendimiento on-demand: Oracle NoSQL Database Cloud Service se amplía para cumplir los requisitos de rendimiento de la aplicación con una latencia baja y predecible. A medida que las cargas de trabajo aumentan debido a las fluctuaciones periódicas del negocio, las aplicaciones pueden aumentar el rendimiento aprovisionado para mantener una experiencia de usuario coherente. A medida que disminuyen las cargas de trabajo, las mismas aplicaciones pueden reducir su rendimiento, lo que resulta en gastos operativos más bajos. Con la capacidad a demanda, no es necesario aprovisionar las capacidades de lectura o escritura para cada tabla. Solo paga por las unidades de lectura y escritura que realmente se consumen.

El siguiente diagrama ilustra esta arquitectura de referencia.



containerized-video-app-graphql-nosql-architecture.zip

La arquitectura tiene los siguientes componentes:

  • Tenancy

    Un arrendamiento es una partición segura y aislada que Oracle configura en Oracle Cloud al registrarse en Oracle Cloud Infrastructure. Puede crear, organizar y administrar sus recursos en Oracle Cloud dentro de su arrendamiento.

    Un arrendamiento es sinónimo de una compañía u organización. Normalmente, una compañía tendrá un único arrendamiento y reflejará su estructura organizativa dentro de ese arrendamiento. Un único arrendamiento suele estar asociado a una única suscripción, y una única suscripción normalmente solo tiene un arrendamiento.

  • Región

    Una región de Oracle Cloud Infrastructure es un área geográfica localizada que contiene uno o más centros de datos, denominados dominios de disponibilidad. Las regiones son independientes entre sí y puede haber grandes distancias que las separen (entre países e incluso continentes).

  • Compartimento

    Los compartimentos son particiones lógicas entre regiones dentro de un arrendamiento de Oracle Cloud Infrastructure. Utilice compartimentos para organizar los recursos en Oracle Cloud, controlar el acceso a los recursos y definir cuotas de uso. Para controlar el acceso a los recursos de un compartimento determinado, debe definir políticas que especifiquen quién puede acceder a los recursos y qué acciones pueden realizar.

  • Dominio de disponibilidad

    Los dominios de disponibilidad son centros de datos independientes dentro de una región. Los recursos físicos de cada dominio de disponibilidad están aislados de los recursos de los otros dominios de disponibilidad, lo que proporciona tolerancia a fallos. Los dominios de disponibilidad no comparten infraestructura, como la alimentación o la refrigeración, ni la red interna del dominio de disponibilidad. Por lo tanto, un fallo en un dominio de disponibilidad no debería afectar a los otros dominios de disponibilidad de la región.

  • Dominio de errores

    Un dominio de errores es una agrupación de hardware e infraestructura dentro de un dominio de disponibilidad. Cada dominio de disponibilidad cuenta con tres dominios de errores con energía y hardware independientes. Al distribuir los recursos entre varios dominios de errores, las aplicaciones pueden tolerar fallos físicos del servidor, mantenimiento del sistema y fallos de energía en un dominio de errores.

  • Red y subredes virtuales en la nube (VCN)

    Una VCN es una red personalizable y definida por software que puede configurar en una región de Oracle Cloud Infrastructure. Al igual que las redes de los centros de datos tradicionales, las redes virtuales le proporcionan el control de su entorno de red. Una VCN puede tener varios bloques de CIDR no superpuestos que puede cambiar después de crear la VCN. Puede segmentar una VCN en subredes, las cuales se pueden acotar a una región o a un dominio de disponibilidad. Cada subred está formada por un rango contiguo de direcciones que no se solapan con las demás subredes de la VCN. Puede cambiar el tamaño de una subred después de la creación. Una subred puede ser pública o privada.

  • Lista de seguridad

    Para cada subred, puede crear reglas de seguridad que especifiquen el origen, el destino y el tipo de tráfico que se debe permitir dentro y fuera de la subred.

  • Gateway de servicio

    El gateway de servicios proporciona acceso desde una VCN a otros servicios como Oracle NoSQL Database Cloud Service. El tráfico desde la VCN al servicio Oracle recorre el tejido de red de Oracle y no Internet.

  • Gateway de Internet

    El gateway de Internet permite el tráfico entre las subredes públicas de una VCN y la red pública de Internet.

  • Gateway de API

    Oracle API Gateway permite publicar API con puntos finales privados accesibles desde la red y que se pueden exponer a la red pública de Internet si es necesario. Los puntos finales admiten la validación de API, la transformación de solicitud y respuesta, CORS, la autenticación y autorización, y la limitación de solicitudes.

  • Identity and Access Management (IAM)

    Oracle Cloud Infrastructure Identity and Access Management (IAM) es el plano de control de acceso para Oracle Cloud Infrastructure (OCI) y Oracle Cloud Applications. La API de IAM y la interfaz de usuario le permiten gestionar los dominios de identidad y los recursos dentro del dominio de identidad. Cada dominio de identidad de OCI IAM representa una solución independiente de gestión de identidad y acceso o una población de usuarios diferente.

  • Políticas

    Una política de Oracle Cloud Infrastructure Identity and Access Management especifica quién puede acceder a qué recursos y de qué modo. El acceso se otorga en el nivel de grupo y compartimento, lo que significa que puede escribir una política que proporcione a un grupo un tipo específico de acceso dentro de un compartimento específico o al arrendamiento.

  • Base de datos NoSQL

    Oracle NoSQL Database Cloud Service facilita a los desarrolladores la creación de aplicaciones mediante modelos de base de datos de documentos, columnas y clave-valor, lo que ofrece tiempos de respuesta predecibles de milisegundos de un solo dígito con replicación de datos para alta disponibilidad. El servicio ofrece transacciones ACID, escalado sin servidor, seguridad completa y precios bajos de pago por uso para los modos de capacidad tanto bajo demanda como aprovisionada, incluida una compatibilidad del 100 % con Oracle NoSQL Database local.

  • Servicio de contenedor de Oracle Cloud Infrastructure

    El servicio de contenedor de Oracle Cloud Infrastructure es un servicio de cálculo sin servidor que le permite ejecutar contenedores de forma instantánea y sin tener que gestionar servidores.

  • OCI Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes Engine u OKE) es un servicio totalmente gestionado, escalable y disponible que puede utilizar para desplegar las aplicaciones en contenedores en la nube. Especifique los recursos informáticos que necesitan sus aplicaciones y Kubernetes Engine los provisionará en Oracle Cloud Infrastructure en un arrendamiento existente. OKE utiliza Kubernetes para automatizar el despliegue, la ampliación y la gestión de aplicaciones en contenedores en clusters de hosts.

Recomendaciones

Utilice las siguientes recomendaciones como punto de partida. Sus requisitos pueden diferir de la arquitectura descrita aquí.
  • Gateway de API

    API Gateway se puede utilizar para proporcionar un nivel inicial de filtrado y controles de uso, como:

    • Autenticación y autorización de servicios
    • Controles de servicio como el límite de frecuencia
    • Captura de análisis de uso de servicio

    El gateway de API (no el firewall ni el equilibrador de carga) debe realizar un enrutamiento adaptado a la solución para que cualquier punto final que no se cumpla con las capacidades de GraphQL se pueda dirigir a la ubicación correcta. Se deben tener en cuenta los límites de frecuencia razonables, en función de la capacidad de rendimiento máximo soportada por las soluciones de backend, así como el derecho máximo de cualquier usuario de servicio.

Consideraciones

Tenga en cuenta lo siguiente al desplegar esta arquitectura de referencia.

  • Seguridad

    Debe abordar la seguridad de nivel de aplicación en API Gateway. Puede abordar la seguridad específica detallada de GraphQL (por ejemplo, acceso de nivel de atributo) mediante directivas GraphQL, como @auth.

Despliegue

Para desplegar esta arquitectura, siga las instrucciones para el despliegue de la aplicación de seguimiento de actividad en este Live Lab:

Explorar más

Obtenga más información sobre el despliegue de una aplicación de video en contenedores mediante GraphQL y Oracle NoSQL Database Cloud Service.

Revise estos recursos adicionales:

Recursos de Oracle Cloud Infrastructure:

Confirmaciones

Autores:

  • Dario Vega
  • Michael Brey