Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se cadastrar em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Processar Arquivos no Oracle Cloud Infrastructure Object Storage com um Fluxo Nativo da Nuvem Escalável
Introdução
Em nossos aplicativos, muitas vezes precisamos processar grandes quantidades de arquivos. No passado, isso foi feito em lote, mas com as novas tecnologias e o advento da nuvem, agora somos capazes de transformar muitos processos seriais em paralelos. O uso de filas de mensagens, clusters Kubernetes e arquiteturas orientadas a eventos são algumas das tecnologias e arquiteturas amplamente usadas para obter o melhor do processamento de grande volume.
A Oracle Cloud Infrastructure (OCI) tem recursos para permitir escalabilidade e redução de custos. Vamos explorar os serviços nativos da nuvem.
-
O OCI Object Storage permite que os clientes armazenem com segurança qualquer tipo de dados em seu formato nativo. Com redundância integrada, o OCI Object Storage é ideal para criar aplicações modernas que exigem escala e flexibilidade, pois podem ser usadas para consolidar várias fontes de dados para fins de análise, backup ou arquivamento.
-
O serviço OCI Streaming é uma plataforma de streaming de eventos em tempo real, sem servidor e compatível com o Apache Kafka para desenvolvedores e cientistas de dados. O Streaming é totalmente integrado com OCI, Database, GoldenGate e Integration Cloud. O serviço também oferece integrações prontas para uso para centenas de produtos de terceiros em categorias como aplicativos DevOps, bancos de dados, Big Data e SaaS.
-
O OCI Events Service rastreia alterações feitas em recursos usando eventos que atendem ao padrão de eventos de nuvem CNCF (Cloud Native Computing Foundation). Os desenvolvedores podem responder às alterações feitas em tempo real acionando código com o OCI Functions, gravando no OCI Streaming ou enviando alertas usando o OCI Notifications.
-
O OCI Functions é um serviço de computação sem servidor que permite aos desenvolvedores criar, executar e dimensionar aplicativos sem gerenciar qualquer infraestrutura. O OCI Functions tem integrações nativas com outros serviços do OCI e aplicativos SaaS. O OCI Functions se baseia no projeto Fn de código-fonte aberto; portanto, os desenvolvedores podem criar aplicativos que podem ser facilmente portados para outros ambientes de nuvem e locais. O código baseado em funções normalmente é executado por curtos períodos de tempo, é sem monitoramento de estado e é executado para uma única finalidade lógica. Os clientes só pagam pelos recursos que usam.
-
O Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) é um serviço Kubernetes gerenciado que simplifica as operações do Kubernetes de nível empresarial em larga escala. Ele reduz o tempo, o custo e o esforço necessários para gerenciar a infraestrutura complexa do Kubernetes. O OKE permite implantar clusters do Kubernetes para garantir operações confiáveis no plano de controle e nos nós de trabalho com dimensionamento, atualizações e patches de segurança automáticos. Além disso, o OKE oferece uma experiência de Kubernetes totalmente serverless com nós virtuais.
Neste tutorial, veremos uma maneira muito comum de processar grandes quantidades de arquivos, em que as aplicações podem depositar seus arquivos em um bucket no OCI Object Storage e quando esses arquivos são depositados, um evento é gerado permitindo que uma função seja acionada para gravar o URL desse arquivo no OCI Streaming.
Observação: Podemos imaginar essa solução apenas com algum aplicativo de origem salvando o conteúdo dos arquivos no OCI Streaming enquanto nosso aplicativo apenas lê esse conteúdo, mas não é uma boa prática transferir grandes volumes de dados em uma fila do Kakfa. Para fazer isso, nossa abordagem usará um padrão chamado Claim-Check, que fará exatamente como nossa proposta. Em vez de enviar o arquivo pela fila de mensagens, enviaremos a referência a esse arquivo. Vamos delegar a leitura do arquivo para o aplicativo que será responsável pelo processamento.
Este tutorial apresentará estes componentes: OCI Object Storage, Events Service, Functions e Streaming.
No final desta cadeia, teremos o aplicativo consumindo a fila de streaming, no entanto, não discutiremos como o arquivo será processado.
Objetivos
- Implemente uma arquitetura de evento escalável que permitirá processar um grande número de arquivos por meio do uso do OCI Object Storage, Events Service, Functions e Streaming.
Pré-requisitos
-
VNC, sub-rede(s) e todas as definições de segurança configuradas para bucket, função e streaming.
-
Usuário do Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) configurado para gerenciar buckets, serviço de eventos, função e streaming.
Tarefa 1: Criar a Instância do OCI Streaming
O OCI Streaming é um serviço de streaming gerenciado do tipo Kafka. Podemos desenvolver aplicativos usando as APIs Kafka e SDKs comuns no mercado. Nesta tarefa, criaremos uma instância do OCI Streaming e a configuraremos para execução em ambos os aplicativos para publicar e consumir um alto volume de dados.
-
Faça log-in na Console do OCI, clique em Análise e IA e Streams.
-
Selecione Compartimento e clique em Criar Stream.
-
Informe o Nome do Stream da instância do stream e mantenha os outros parâmetros com os valores padrão. Clique em Criar para inicializar a instância e aguardar o status Ativo.
Observação:
-
No processo de criação de streaming, podemos selecionar Criar automaticamente um pool de streams padrão para que o pool padrão seja criado automaticamente.
-
Você pode criar sua instância de stream em uma sub-rede privada. Nesse caso, a atenção para a função na Tarefa 4 deve estar na mesma sub-rede privada ou em uma sub-rede que tenha acesso à instância de fluxo de sub-rede privada. Verifique sua VCN, sub-redes, listas de segurança, gateway de serviço ou outros componentes de segurança. Certifique-se de que sua função possa acessar a instância do OCI Streaming.
-
-
Clique no link DefaultPool.
-
Clique em Definições de Conexão do Kafka e exiba as definições de conexão. Anote as informações conforme necessário nas próximas tarefas.
Tarefa 2: Criar um Bucket do OCI Object Storage
Precisamos criar um bucket. Os buckets são contêineres lógicos para armazenar objetos; portanto, todos os arquivos usados para esta demonstração serão armazenados neste bucket.
-
Abra a Console do OCI e navegue até Storage, Buckets. Na seção Buckets, selecione Compartimento. O compartimento será o mesmo da instância do OCI Streaming criada na Tarefa 1.
-
Clique em Criar Bucket e informe um Nome do Bucket. Mantenha os outros parâmetros com os valores padrão e clique em Create.
Podemos ver o bloco criado.
Observação: Verifique as Políticas do OCI IAM para o bucket. Você precisa configurar as políticas se quiser usar esses buckets em seus aplicativos de demonstração. Para obter mais informações, consulte Visão Geral do Serviço Object Storage e Políticas do OCI IAM.
Tarefa 3: Ativar o Bucket do OCI Object Storage para Serviços do OCI Events
Precisamos ativar o bucket para emitir eventos. Portanto, clique nos detalhes do bucket e procure o link Emitir Edição de Eventos de Objeto e ative-o.
Tarefa 4: Criar Funções do OCI
Para executar a seguinte tarefa, faça download do código aqui: OCI_Streaming_Claim_Check.zip.
-
Entender o Código
Há dois arquivos de código, o código principal
HelloFunction.java
e o código do produtor do OCI StreamingProducer.java
.-
HelloFunction.java
.Nesta parte do código, precisamos capturar dados provenientes do OCI Events Services, para que haja 3 origens.
- Contexto: Essa propriedade cria uma cópia da variável RuntimeContext e usamos a variável
REGION
. - Dados do Evento: O OCI Events Services produz dados como
resourceName
. - Dados Adicionais de Detalhes do Evento: O OCI Events Services para o OCI Object Storage produz dados como
namespace
ebucketName
.
Podemos montar o URL do arquivo do OCI Object Storage.
E o código principal pode passar o URL para o produtor do OCI Streaming.
- Contexto: Essa propriedade cria uma cópia da variável RuntimeContext e usamos a variável
-
Producer.java
.Essa é a estrutura de classe
Message
para produzir as informações do Kafka para o padrão Claim-check. Apenaskey
evalue
.E este é o código básico para produzir para o streaming.
-
-
Criar e implantar o OCI Function
Nesta etapa, precisaremos usar a CLI do OCI para criar o OCI Functions e implantar código na tenancy do OCI. Para criar um OCI Functions, consulte Functions: Get Started using the CLI, siga as etapas e procure a opção Java. É necessário criar sua função com as informações a seguir.
Application: ocistreaming-app (follow the link Functions: Get Started using CLI) fn create app ocistreaming-app --annotation oracle.com/oci/subnetIds='["<the same OCID of your streaming subnet>"]' Context Variable: REGION=<your streaming region name, ex: us-ashburn-1> fn config app ocistreaming-app REGION=us-ashburn-1
Lembre-se do compartimento no qual você implantou sua função. Você precisará dessas informações para configurar o Serviço OCI Events.
Tarefa 5: Configurar o OCI Events
Vamos configurar uma Regra de Evento para acionar sua função para obter as informações do bucket e enviá-las ao OCI Streaming.
-
Selecione o mesmo compartimento para a regra e clique em Criar Regra.
-
Digite as seguintes informações.
-
Na seção Condição das Regras.
- Condição:
Event Type
. - Nome do Serviço:
Object Storage
. - Tipo de Evento:
Object-Create, Object-Delete, Object-Update
.
- Condição:
-
Na seção Ação.
- Tipo de Ação:
Functions
. - Compartimento da Função:
<your function compartment name>
. - Aplicativo de Função:
<your function app, in this example ocistreaming-app>
. - Função:
fn_stream
.
- Tipo de Ação:
-
Tarefa 6: Testar seu Circuito de Eventos
Observação: Para redes privadas, o código de teste precisa ser executado em um bastion conectado à mesma sub-rede privada do OCI Streaming.
No pacote de código-fonte OCI_Streaming_Claim_Check.zip, podemos encontrar uma pasta chamada monitoring
e um arquivo chamado consume.py
. Podemos usar esse código para monitorar e testar se a solução funciona corretamente.
Precisamos configurar o código.
Depois de configurar seus parâmetros de fluxo, você pode executar o código e verificar o circuito, que é bucket, evento, função e streaming.
Links Relacionados
Confirmações
- Autor - Cristiano Hoshikawa (Engenheiro de Soluções da Oracle LAD A-Team)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Process Files on Oracle Cloud Infrastructure Object Storage with a Scalable Cloud Native Flow
F94115-01
March 2024
Copyright © 2024, Oracle and/or its affiliates.