Implantar um Aplicativo de Vídeo Conteinerizado Usando GraphQL e NoSQL

Considere um aplicativo de streaming de vídeo sob demanda. Ele transmite vários shows de clientes em todo o mundo assistir. Os shows podem ter várias temporadas, e uma temporada pode ter vários episódios. Você precisa de um armazenamento de metadados moderno e persistente para acompanhar essa atividade do cliente.

Em geral, os clientes estão interessados em rastrear coisas como os episódios que assistem, o tempo de exibição por episódio, o número total de temporadas assistidas e assim por diante. Os clientes também querem que os aplicativos de streaming comecem a transmitir de onde pararam de assistir - afinal, quem quer começar do início novamente?

Essa arquitetura orienta você por um aplicativo de streaming de vídeo sob demanda composto por vários microsserviços usando vários serviços do Oracle Cloud Infrastructure. Nesta arquitetura, o foco está em um microsserviço de rastreamento de atividades. O backend do aplicativo de streaming coleta dados para gerar relatórios, como os shows mais populares e o tempo médio de exibição por show.



Arquitetura

Esta aplicação usa uma arquitetura de três camadas, representando os cérebros da aplicação. Os recursos desses serviços permitem que você crie um aplicativo de produção sem servidor altamente disponível, escalável e seguro. Os aplicativos podem usar milhares de servidores, no entanto, aproveitando o paradigma serverless, você não precisa gerenciar um único.

Recentemente, o REST se tornou o padrão para projetar APIs da web. O estilo arquitetônico REST permite a execução em servidores sem monitoramento de estado e oferece acesso estruturado a recursos. No entanto, as APIs REST mostraram-se inflexíveis ao acompanhar os requisitos em rápida mudança dos clientes que as acessam, como aumento do uso de dispositivos móveis, dispositivos de baixa potência e redes desleixadas.

Para esses aplicativos, procuramos uma solução que minimizasse os dados transferidos pela rede e permitisse que os usuários consultassem os dados facilmente usando diretamente uma API.

GraphQL é uma consulta de dados de código aberto e uma linguagem de manipulação para APIs que você pode codificar em muitas linguagens diferentes. O GraphQL fornece uma descrição completa e fácil de entender dos dados em sua API, ao mesmo tempo em que fornece recursos de runtime para preencher consultas com dados existentes. Embora GraphQL seja muitas vezes confundido com uma tecnologia de banco de dados, GraphQL não está vinculado a nenhum banco de dados ou mecanismo de armazenamento específico, mas é apoiado por seus dados existentes.

Os desenvolvedores de aplicativos modernos têm muitas opções quando se deparam com a decisão de quando e como persistir um dado. Nos últimos anos, os bancos de dados NoSQL tornaram-se cada vez mais populares e agora são vistos como uma das ferramentas necessárias que todos os desenvolvedores de aplicativos devem ter à sua disposição. Embora os bancos de dados relacionais "tentados e verdadeiros" sejam ótimos para resolver problemas clássicos de aplicações, como normalização de dados, consistência estrita e consultas arbitrariamente complexas para acessar esses dados, os bancos de dados NoSQL adotam uma abordagem diferente.

A execução de aplicativos conteinerizados pode exigir uma sobrecarga considerável da instanciação de máquinas virtuais, da instalação de componentes para executar imagens de contêiner (e todas as dependências para suportá-las, incluindo atualizações de software e sistema operacional) e do monitoramento de aplicativos para garantir que estejam em execução de maneira ideal, estejam disponíveis e não comprometidos.

Como desenvolvedor, você pode se conectar com o Oracle NoSQL Database Cloud Service e trabalhar com tabelas NoSQL usando os SDKs NoSQL disponíveis em muitas linguagens de programação. O Oracle Cloud Infrastructure Container Service é um serviço totalmente gerenciado e adequado para cargas de trabalho em contêineres que não exigem uma plataforma de orquestração de contêiner como o Kubernetes para a implantação do aplicativo GraphQL. Use o OCI Kubernetes Engine (OKE) quando sua equipe de desenvolvimento quiser criar, implantar e gerenciar de maneira confiável aplicativos nativos da nuvem.

O Oracle Cloud Infrastructure API Gateway permite que você publique APIs com pontos finais privados acessíveis na sua rede, que você pode expor com endereços IP públicos se quiser que eles aceitem o tráfego da internet. Os pontos finais suportam validação de API, transformação de solicitação e resposta, CORS, autenticação/autorização e limitação de solicitação.

Tudo isso oferece uma experiência sem servidor que permite que os clientes se concentrem em agregar valor aos seus aplicativos, em vez de implementar e gerenciar a infraestrutura.

Veja alguns dos benefícios de usar o Oracle NoSQL Database Cloud Service:

  • Modelagem de Dados: O Oracle NoSQL Database Cloud Service suporta modelagem baseada em esquema e sem esquema (JSON). Ele oferece uma maneira intuitiva de desenvolver aplicativos baseados em GraphQL. O esquema GraphQL é projetado usando estruturas de dados aninhadas, correspondendo ao que os desenvolvedores usarão ao fazer a Modelagem de Dados NoSQL. Uma escolha nativa.
  • Ciclo de Vida de Desenvolvimento Mais Rápido: Os desenvolvedores gravam seus aplicativos. A Oracle executa o gerenciamento de banco de dados, o gerenciamento de armazenamento, a alta disponibilidade e a escalabilidade, para ajudar os desenvolvedores a se concentrarem no fornecimento de aplicativos de alto desempenho. Os desenvolvedores implantam e gerenciam tabelas, ou hierarquias de tabelas, não clusters ou bancos de dados para seus microsserviços GraphQL.
  • Gerenciamento e Acesso a Identidades: O Oracle NoSQL Database Cloud Service usa o Oracle Cloud Infrastructure Identity and Access Management para permitir acesso seguro ao Oracle Cloud. O Oracle Cloud Infrastructure Identity and Access Management permite criar grupos dinâmicos e conceder permissão para inspecionar, ler, usar ou gerenciar tabelas do Oracle NoSQL Database Cloud Service.
  • Segurança de Dados em Redundância: O Oracle NoSQL Database Cloud Service armazena dados em vários domínios de disponibilidade (ADs) ou domínios de falha (FDs) em regiões de AD únicas. Se um AD ou FD se tornar indisponível, os dados do usuário ainda poderão ser acessados por meio de outro AD ou FD. As solicitações para um ponto final de região não são específicas para DA/DF, portanto, a indisponibilidade de DA/FD é transparente.
  • Alto Desempenho e Capacidade de Previsão: O Oracle NoSQL Database Cloud Service aproveita as tecnologias de componentes mais recentes no Oracle Cloud Infrastructure fornecendo alto desempenho em escala. Os desenvolvedores sabem que seus aplicativos retornam dados com latências previsíveis, mesmo que seus requisitos de throughput e armazenamento aumentem.
  • Totalmente Gerenciado com Zero Administração: Os desenvolvedores não precisam administrar servidores de dados ou a infraestrutura e a segurança subjacentes. A Oracle mantém o hardware e o software que permite aos desenvolvedores se concentrarem em criar aplicativos.
  • Provisionamento de Throughput e Armazenamento sob Demanda: o Oracle NoSQL Database Cloud Service é dimensionado para atender aos requisitos de desempenho de throughput com latência baixa e previsível. À medida que as cargas de trabalho aumentam com flutuações periódicas nos negócios, os aplicativos podem aumentar seu throughput provisionado a fim de manter uma experiência consistente para o usuário. À medida que as cargas de trabalho diminuem, os mesmos aplicativos podem reduzir o throughput provisionado, resultando em despesas operacionais menores. Com a capacidade sob demanda, você não precisa provisionar as capacidades de leitura ou gravação para cada tabela. Você só paga pelas unidades de leitura e gravação realmente consumidas.

O diagrama a seguir ilustra essa arquitetura de referência.



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

A arquitetura tem os seguintes componentes:

  • Tenancy

    Uma tenancy é uma partição segura e isolada que a Oracle configura no Oracle Cloud quando você se inscreve no Oracle Cloud Infrastructure. Você pode criar, organizar e administrar seus recursos no Oracle Cloud em sua tenancy.

    Uma tenancy é sinônimo de uma empresa ou organização. Normalmente, uma empresa terá uma única locação e refletirá sua estrutura organizacional dentro dessa locação. Uma única tenancy geralmente é associada a uma única assinatura, e uma única assinatura geralmente só tem uma tenancy.

  • Região

    Região do Oracle Cloud Infrastructure é uma área geográfica localizada que contém um ou mais data centers, denominada domínios de disponibilidade. As regiões são independentes de outras regiões, e grandes distâncias podem separá-las (entre países ou até mesmo continentes).

  • Compartimento

    Os compartimentos são partições lógicas entre regiões em uma tenancy do Oracle Cloud Infrastructure. Use compartimentos para organizar seus recursos no Oracle Cloud, controlar o acesso aos recursos e definir cotas de uso. Para controlar o acesso aos recursos em um determinado compartimento, você define políticas que especificam quem pode acessar os recursos e quais ações eles podem executar.

  • Domínio de disponibilidade

    Domínios de disponibilidade são data centers stand-alone e independentes dentro de uma região. Os recursos físicos de cada domínio de disponibilidade são isolados dos recursos de outros domínios de disponibilidade, o que oferece tolerância a falhas. Os domínios de disponibilidade não compartilham infraestrutura como energia ou refrigeração ou a rede interna do domínio de disponibilidade. Portanto, uma falha em um domínio de disponibilidade não deve afetar os outros domínios de disponibilidade na região.

  • Domínio de falha

    Um domínio de falha é um agrupamento de hardware e infraestrutura dentro de um domínio de disponibilidade. Cada domínio de disponibilidade tem três domínios de falha com energia e hardware independentes. Quando você distribui recursos entre vários domínios de falha, seus aplicativos podem tolerar falha no servidor físico, manutenção do sistema e falhas de energia dentro de um domínio de falha.

  • Rede virtual na nuvem (VCN) e sub-redes

    Uma VCN é uma rede personalizável definida por software que você configura em uma região do Oracle Cloud Infrastructure. Como as redes tradicionais de data center, as VCNs oferecem controle sobre seu ambiente de rede. Uma VCN pode ter vários blocos CIDR não sobrepostos que você pode alterar após a criação da VCN. Você pode segmentar uma VCN em sub-redes, com escopo definido para uma região ou para um domínio de disponibilidade. Cada sub-rede consiste em um intervalo contíguo de endereços que não se sobrepõem a outras sub-redes da VCN. Você pode alterar o tamanho de uma sub-rede após a criação. Uma sub-rede pode ser pública ou privada.

  • Lista de segurança

    Para cada sub-rede, você pode criar regras de segurança que especifiquem a origem, o destino e o tipo de tráfego que deve ser permitido dentro e fora da sub-rede.

  • Gateway de serviço

    O gateway de serviço fornece acesso de uma VCN a outros serviços, como o Oracle NoSQL Database Cloud Service. O tráfego da VCN para o serviço Oracle percorre a malha da rede Oracle e nunca passa pela internet.

  • Gateway de internet

    O gateway de internet permite o tráfego entre as sub-redes públicas em uma VCN e a internet pública.

  • Gateway de API

    O Oracle API Gateway permite que você publique APIs com pontos finais privados acessíveis na sua rede e que você pode expor à internet pública, se necessário. Os pontos finais suportam validação de API, transformação de solicitação e resposta, CORS, autenticação e autorização e limitação de solicitação.

  • Serviço IAM (Identity and Access Management)

    O Oracle Cloud Infrastructure Identity and Access Management (IAM) é o plano de controle de acesso do Oracle Cloud Infrastructure (OCI) e do Oracle Cloud Applications. A API do serviço IAM e a interface do usuário permitem gerenciar domínios de identidades e os recursos dentro do domínio de identidades. Cada domínio de identidades do OCI IAM representa uma solução de gerenciamento de identidade e acesso independente ou uma população de usuários diferente.

  • Políticas

    Uma política do Oracle Cloud Infrastructure Identity and Access Management especifica quem pode acessar quais recursos e como. O acesso é concedido no nível de grupo e compartimento. Isso significa que você pode gravar uma política que dá a um grupo um tipo específico de acesso em um compartimento específico ou à tenancy.

  • NoSQL Banco de Dados

    O Oracle NoSQL Database Cloud Service torna mais fácil para os desenvolvedores criar aplicativos usando modelos de banco de dados de documentos, colunas e valores-chave, oferecendo tempos de resposta previsíveis de um dígito em milissegundos com replicação de dados para alta disponibilidade. O serviço oferece transações ACID, dimensionamento sem servidor, segurança abrangente e baixo preço de pagamento por uso para os modos de capacidade sob demanda e provisionada, incluindo 100% de compatibilidade com o Oracle NoSQL Database local.

  • Oracle Cloud Infrastructure - Serviço de Contêiner

    O Oracle Cloud Infrastructure Container Service é um serviço de computação sem servidor que permite executar contêineres instantaneamente sem gerenciar nenhum servidor.

  • Mecanismo do Kubernetes do OCI

    O Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes Engine ou OKE) é um serviço totalmente gerenciado, escalável e altamente disponível que você pode usar para implantar seus aplicativos em contêineres na nuvem. Você especifica os recursos de computação necessários, e o serviço Kubernetes Engine os provisiona no Oracle Cloud Infrastructure em uma tenancy existente. O OKE usa o Kubernetes para automatizar a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres entre clusters de hosts.

Recomendações

Use as recomendações a seguir como ponto de partida. Seus requisitos podem ser diferentes da arquitetura descrita aqui.
  • Gateway de API

    O Gateway de API pode ser usado para fornecer um nível inicial de controles de triagem e uso, como:

    • Autenticação e autorização de serviço
    • Controles de serviço, como limitação de taxa
    • Captura de análise de uso de serviço

    O Gateway de API (não o firewall ou o balanceador de carga) deve executar roteamento sensível à solução para que qualquer ponto final não atendido pelos recursos GraphQL possa ser direcionado para o local correto. Deve-se considerar limites de taxa razoáveis, com base na capacidade máxima de desempenho suportada pelas soluções de back-end, bem como no direito de pico de qualquer usuário de serviço.

Considerações

Considere o seguinte ao implantar essa arquitetura de referência.

  • Segurança

    Você deve abordar a segurança no nível do aplicativo no Gateway de API. Você pode abordar a segurança específica refinada de GraphQL (por exemplo, acesso no nível do atributo) utilizando diretivas GraphQL, como @auth.

Implante

Para implantar essa arquitetura, siga as instruções para a implantação do aplicativo de rastreamento de atividades neste Live Lab:

Explorar Mais

Saiba mais sobre a implantação de um aplicativo de vídeo em contêiner usando GraphQL e Oracle NoSQL Database Cloud Service.

Revise estes recursos adicionais:

Recursos do Oracle Cloud Infrastructure:

Reconhecimentos

Autores:

  • Dario Vega
  • Michael Brey