Certificação OCI Foundations Associate 2024 (Módulo 3 – Computação)

Neste módulo do preparatório para a certificação Foundations Associate da Oracle Cloud, vamos abordar os pontos relativos a Computação no ambiente da OCI, no que diz respeito a instâncias como servidores virtuais, servidores bare metal, containeres e OKE, que é o Kubernetes da OCI.

COMPUTE

A OCI disponibiliza servidores no formato de servidores virtuais (instâncias) e servidores físicos (bare metal) e Host Dedicado como recursos de computação para atender os mais diversos tipos de cargas de trabalho, visando escalabilidade, alta disponibilidade e baixo custo.

A arquitetura de CPU nestes ambientes de servidores da OCI são disponibilizados em OCPUs arquitetura (x86/64) com processadores Intel e AMD, e ARM, onde você pode customizar OCPUs e memória no shape da sua máquina de acordo com a sua necessidade. Diferente de ambientes como a AWS, na OCI você pode ajustar a memória a sua necessidade independente de ser obrigatório mudar o shape da CPU e vice-versa.

Abaixo um exemplo de como pode ser customizado o seu shape no momento da configuração da sua instância.

Na imagem acima veja que na tela de customização, para cada tipo de shape você tem os valores máximos de OCPU e memória que podem ser configurados, além da arquitetura do processador que você possui em cada tipo de shape.

Quando você seleciona o shape já irá notar que irá aparecer uma caixa como esta abaixo com os valores estimados ao seu tipo de shape selecionado.

Diferenças entre os tipos de servidores na OCI

Servidores Virtuais

Nos servidores virtuais você tem a facilidade de ter um ambiente Multi Tenant, e baixo custo, possibilidade de uma customização variada de shape, forte isolamento de segurança e estão em um ambiente compartilhado de recursos.

Servidores Bare Metal

Nos servidores Bare Metal você tem um sistema operacional diretamente instalado para execução das suas aplicações e cargas de trabalho.

Host Dedicado

Nos Hosts Dedicados você tem a possibilidade de executar suas VMs internas dentro dele como um Hypervisor, disponibilizando um ambiente dedicado para suas VMs, e neste ambiente somente as suas VMs são executadas.

Recomendo dar uma olhada na documentação de Shapes de Computação da OCI sobre o assunto.

https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/compute-cloud-at-customer/topics/compute/compute-shapes.htm#compute-shapes

A OCI oferece servidores com 3 opções de arquitetura de processadores, AMD Epic, Intel Xeon e ARM Ampere Altra. E você pode perceber nas comparações de Benchmark fazendo algumas pesquisas que os processadores ARM Ampere tem um desempenho maior que processadores AMD e Intel, nos quais podem ser observados em testes com servidores web, API gateways e microserviços.

Obs.: Testes de benchmark feitos com sysbench cpu

Na OCI você tem possibilidade de criar VMs com recursos preemptivos, onde você pode executaruma carga maior quando você tem a execução de maiores cargas de trabalho, um tempo de vida mais curto, mais direcionada a execução de cargas específicas, mantendo um custo menor por não ter a necessidade de manter a configuração de carga disponível durante todo o tempo, garantindo um custo geralmente até 50% menor.

Ao criar a sua instância, você tem a opção de fazer vários ajustes na configuração do seu shape.

Você tem os tipos de capacidade On-demand, que disponibiliza sua VM em tempo integral na configuração do shape escolhido, Capacidade Preemptiva, onde você pode utilizá-la para execução de cargas específicas com um custo menor, Capacidade Reservada que permitem reservar instâncias com antecedência para que a capacidade esteja disponível para suas cargas de trabalho quando você precisar, Host Dedicado que permite a você ter uma máquina com recursos totalmente dedicados para execução das suas aplicações com todos os recursos dela dedicados e sem opção de compartilhamento do processamento com outros clientes e Cluster de Computação que disponibiliza um grupo de computação de alto desempenho (HPC), GPU ou instâncias otimizadas que estão conectadas a uma rede de alta largura de banda e latência ultrabaixa.

Abaixo vou detalhar melhor cada um destes tipos.

On-Demand

Pague apenas pela capacidade de computação que você usa. Com a capacidade sob demanda, você paga pela capacidade computacional por segundo e, dependendo do formato, paga apenas pelas horas em que suas instâncias estiverem em execução. A disponibilidade de capacidade não é garantida ao lançar grandes cargas de trabalho.

Preemptiva

A capacidade preemptiva permite economizar dinheiro usando instâncias preemptivas para executar cargas de trabalho que só precisam ser executadas por breves períodos ou que podem ser interrompidas quando a capacidade for recuperada. As instâncias preemptivas se comportam da mesma forma que as instâncias de computação regulares, mas a capacidade é recuperada quando é necessária em outro lugar e as instâncias são encerradas.

Reserva de Capacidade

Reserve capacidade para uso futuro e garanta que a capacidade esteja disponível para criar instâncias do Compute sempre que você precisar delas. A capacidade reservada é usada quando você executa instâncias na reserva. Quando estas instâncias são encerradas, a capacidade é devolvida à reserva e a capacidade não utilizada na reserva aumenta. A capacidade reservada não utilizada é medida de forma diferente da capacidade reservada utilizada.

Host Dedicado

Execute instâncias de VM em servidores dedicados que sejam de um único locatário e não sejam compartilhados com outros clientes. Esse recurso permite atender aos requisitos regulatórios e de conformidade para isolamento que impedem o uso de infraestrutura compartilhada. Você também pode usar esse recurso para atender aos requisitos de licenciamento baseados em nó ou host que exigem o licenciamento de um servidor inteiro.

Cluster de Computação

Um cluster de computação é um grupo de computação de alto desempenho (HPC), GPU ou instâncias otimizadas que estão conectadas a uma rede de alta largura de banda e latência ultrabaixa. Cada nó no cluster é uma máquina bare metal localizada próxima fisicamente dos outros nós. Uma rede de acesso remoto direto à memória (RDMA) entre nós fornece latência tão baixa quanto microssegundos de um dígito, comparável a clusters HPC locais.

Ao criar um cluster de computação, você cria um grupo de rede RDMA vazio. Após a criação do grupo, você poderá adicionar instâncias ao grupo ou excluir instâncias do grupo. Os clusters de computação permitem gerenciar instâncias no cluster individualmente e você pode ter diferentes tipos de instâncias no cluster.

Domínio de Falha (Fault Domain)

A OCI disponibiliza recursos de Domínio de Falha, que são zonas de disponibilidade dos recursos baseados na região de escolha no qual você executa seus recursos.

No exemplo abaixo eu estou mostrando a opção dos domínios de falha na região de saopaulo-sa, onde temos a opção de selecionar qual domínio de falha Domain ou deixar que a OCI escolha o melhor domínio de falha para você.

Um domínio de falha é um agrupamento de hardware e infraestrutura dentro de um domínio de disponibilidade. Cada domínio de disponibilidade contém três domínios de falha. Os domínios de falha fornecem antiafinidade: eles permitem distribuir suas instâncias para que elas não fiquem no mesmo hardware físico em um único domínio de disponibilidade. Uma falha de hardware ou evento de manutenção de hardware de computação que afeta um domínio de falha não afeta instâncias em outros domínios de falha.

Para controlar o posicionamento de suas instâncias de computação, instâncias de sistema de BD bare metal ou instâncias de sistema de BD de máquina virtual, você pode especificar opcionalmente o domínio de falha para uma nova instância ou pool de instâncias no momento da execução. Se você não especificar o domínio de falha, o sistema selecionará um para você. O Oracle Cloud Infrastructure faz um posicionamento antiafinidade de melhor esforço em diferentes domínios de falha, ao mesmo tempo em que otimiza a capacidade disponível no domínio de disponibilidade. Para alterar o domínio de falha de uma instância de computação, edite o domínio de falha. Para alterar o domínio de falha de uma instância de sistema de BD bare metal ou de máquina virtual, encerre-a e inicie uma nova instância no domínio de falha preferencial.

Use domínios de falha para fazer o seguinte:

Proteja-se contra falhas inesperadas de hardware.
Proteja-se contra interrupções planejadas devido à manutenção de hardware de computação.

Desenho sobre a computação básica na OCI.

No desenho acima partimos do conceito que você tem a sua instância com seus recursos atachados nela, mas que estão em um modo de alta disponibilidade, pois como sabemos, hardwares falham a todo o momento, então seguindo uma abordagem em que os recursos são atachados mas não dependentes de estarem no mesmo hardware, você garante alta disponibilidade e fácil migração, mudanças de configurações e shapes.

Scaling

As instâncias na OCI podem ter o scaling tanto verticalmente quanto horizontalmente.

O Scaling vertical, você pode definir ajustando o shape de sua instâncias definindo os novos CPU Types, quantidade de OCPUs e memória, como mostrado na imagem abaixo.

Você pode fazer o scaling do seu shape aumentando ou diminuindo as configurações, e este shape precisa seguir os mesmos requisitos de hardware, por exemplo, se você tiver uma instância rodando Ubuntu em ARM, não poderá trocar o shape dela para Intel ou AMD e vice-versa.

Lembrando, que neste tipo de scaling, você tem um downtime, pois é necessário desligar sua instância para alterar o shape.

Autoscaling

Você tem a forma de dimensionar o seu scaling de forma horizontal, fazendo com que sejam adicionados mais instâncias da mesma forma que você possui uma instância para que elas trabalhem em conjunto, de forma horizontal. E neste caso você pode também aumentar ou diminuir a quantidade de instâncias.

Você pode utilizar escalonamento horizontal para prevenir problemas com sua máquina, problemas com sobrecarga de recursos, colocando mais máquinas trabalhando em paralelo com seus recursos, podendo atender mais demanda de acessos ao seu site/ambiente.

O recurso de Autoscaling na OCI não tem custo adicional, somente os recursos que você utiliza de computação e load balance adicionais.

Você pode criar um config, que é template de um recurso que esteja rodando como uma VM, que incluem seus recursos como shape, subnet, VNICs, metadados, storage, etc. Com seu template criado então você cria um pool de instâncias, no qual você tem o controle total, podendo dar o start/stop, terminate em todas elas ao mesmo tempo, podendo ainda colocar em diferentes domínios de disponibilidades, diferentes data centers.

Então com seu pool criado, você pode escrever suas regras de scaling, definindo tamanho inicial e tamanho máximo, definindo se a CPU ou memória atingirem um percentual X estipulado por você, então são iniciados novos recursos ou removidos recursos sem uso, tudo de forma automática.

Os recursos de computação da OCI possuem ainda uma variedade de sistemas operacionais como Windows Server, Oracle Linux, Ubuntu e outros sistemas operacionais na lista de configuração do Shape e também no Marketplace.

Oracle OKE (Oracle Kubernetes Engine)

O OKE é o recurso de uso de Containeres na OCI utilizando o Kubernetes. Se você ainda não tem conhecimento sobre Conteineres, Docker e Kubernetes, recomendo fortemente que acesse o conteúdo do canal Linuxtips do Jeferson Fernando, pois lá é um ótimo conteúdo para referência e aprendizado de Docker e Kubernetes.

Referência de Docker e Kubernetes

https://github.com/badtuxx/DescomplicandoDocker

https://github.com/badtuxx/DescomplicandoKubernetes

https://www.youtube.com/channel/UCJnKVGmXRXrH49Tvrx5X0Sw

Enfim, vamos colocar aqui uma definição básica da diferença entre VMs e Containeres.

Nas máquinas virtuais, você tem um SO e recursos alocados para cada uma das suas VMs, para então poder ter as dependências/bibliotecas e então ter a sua aplicação, com tudo isso consumindo recursos para ter replicado em cada uma das VMs de cada aplicação.

No Conteiner, você não tem a camada do Hypervisor, ao invés dele você já tem o Conteiner Runtime junto com o SO da sua máquina e a partir de então você tem as dependências/bibliotecas necessárias para a sua aplicação diretamente no seu conteiner, enconomizando diversos recursos que seriam destinados ao SO, otimizando muito o uso do seu hardware, economizando recursos de CPU, memória e storage, além de redução de tempo de inicialização, pois sua aplicação é iniciada em segundos, sem ter que carregar um novo sistema operacional da VM para iniciar.

Além de todos os benefícios de economia de recursos e tempo, o que mais levamos em consideração é a portabilidade extremamente fácil, pois você tem uma imagem com toda a sua aplicação e dependências necessárias para sua inicialização, e uma vez que você gerou essa imagem, você pode executar ele em qualquer outro ambiente.

Uma vez que você criou seus conteineres, você precisa garantir a comunicação entre eles, e você poderá aumentar ou diminuir a quantidade de conteineres de acordo com a sua carga. Então você poderá implantar, gerenciar, aumentar, reduzir de acordo com sua necessidade de forma automática, e para isso você utilizará um orquestrador de conteineres, é neste momento que entra o Kubernetes. E com o Kubernetes você poderá executar aplicativos em conteineres em qualquer escala de tempo sem interrupção alguma.

Você pode dimensionar aplicativos em conteineres assegurando a utilização ideal de forma orquestrada e simplificada.

O Kubernetes é um serviço gerenciável, escalável e de alta disponibilidade, desenvolvido em código aberto, utilizado para criação de clusters, suporte a CLI/API, suporte a instâncias ARM e GPUs, suporte a autoscaling e atualizações do cluster.

Na estrutura de um cluster, você tem o Node (nó), que é a máquina na qual o Kubernetes está instalado, depois você tem o Worker Node (nó de trabalho) que é onde os conteineres são iniciados pelo Kubernetes, e os Node Pool que são os grupos de nós, e você tem os Pods que são os grupos de um ou mais conteineres com armazenamento compartilhado e os recursos de rede e um arquivo de especificação para executar os conteineres dentro do Pod.

Com essa estrutura a Oracle gerencia, programa e monta a alta disponibilidade no ambiente gerenciado pela própria Oracle Cloud com o Control Plane Node.

Este serviço de gerenciamento não é cobrado pela Oracle, e ele mesmo gerencia o schedule, autoscaling, falha de nós e disponibilidade. E como o etcd é gerenciado pela Oracle, ele se encarrega de backup do cluster que está armazenado lá.

Você tem 2 tipos de cluster de OKE na OCI, o Enhanced Clusters (Cluster Aprimorado), com o SLA da Oracle e o Basic Clusters (Cluster Básico) que possuem funcionalidades básicas e nenhum recurso aprimorado e com um SLA menor.

Quando você cria os seus Nodes, você tem duas opções também, os Nodes Virtuais, no qual os updates e patches de segurança são gerenciados pela pela própria Oracle, e também os Nodes Gerenciados, onde voc6e tem o controle total das suas configurações para utilizar de acordo com suas necessidades, mas as atualizações e toda a gestão é feito por sua conta.

Container Workload na OCI

Os conteineres se tornaram o modelo preferido para implantar as aplicações, devido a facilidade de empacotamento, padronização e escalabilidade. Você pode fazer seus testes em conteineres, quando seu aplicativo ainda não é grande e não est[a em uma fase de consumo de muitos recursos, portanto, com conteineres você pode usar de maneira simples, rápida e segura.

Você pode provisionar uma máquina virtual mesmo que não vá utilizar o Kubernetes, colocando o SO, camada de conteiner runtime, o que lhe gera mais complexidade, pois precisará cuidar de patches, gerenciar e monitorar sua VM.

Com a instância de conteiner você fica somente com a sua camada de aplicação, não precisando se preocupar com todo o resto do gerenciamento, focando somente na sua aplicação.

Com as instâncias de conteiner você elimina a complexidade operacional, sem precisar gerenciar uma infraestrutura. Você somente fornece a imagem do seu conteiner e a OCI se encarrega de todos os recursos para que você possa executar, isso já com todas as configurações, requisitos, bibliotecas, etc. Sabe aquela frase “Na minha máquina funciona”? Então… vai exatamente igual.

E você pode executar vários conteineres dentro de uma instância de conteiner, isso tudo é projetado para execução de diversas cargas de trabalho. Em questão de segurança, um ponto forte é o isolamento completo do seu ambiente.

Serveless com Functions OCI

Oracle Cloud Infrastructure (OCI) Functions é um serviço baseado em contêiner que permite aos desenvolvedores criar, executar e escalar funções sem precisar gerenciar a infraestrutura subjacente. O Functions é uma implementação de computação serverless que se integra perfeitamente com outros serviços OCI.

Serverless é uma arquitetura de computação em nuvem que permite aos desenvolvedores criar e executar aplicativos sem a necessidade de gerenciar a infraestrutura subjacente. Em uma arquitetura serverless, a alocação e gerenciamento de servidores são completamente abstraídos do desenvolvedor, permitindo foco total no desenvolvimento do código e na lógica de negócios.

Qual é o principal propósito do Oracle Cloud Infrastructure Functions?

O principal propósito do Oracle Cloud Infrastructure (OCI) Functions é permitir que os desenvolvedores criem, executem e escalem funções de forma automatizada e sem a necessidade de gerenciar a infraestrutura subjacente. Este serviço de computação serverless executa código em resposta a eventos ou solicitações HTTP, oferecendo escalabilidade automática e cobrança baseada no uso.

Uma ilustração do funcionamento e recursos de Functions na OCI.

Funcionamento do Functions OCI

  1. Criação e Implementação:
    • Os desenvolvedores escrevem código em linguagens suportadas (como Python, Java, Node.js, Go) e empacotam-no como uma função.
    • Essa função é implementada em um ambiente gerenciado pela OCI, onde pode ser executada sob demanda.
  2. Escalabilidade Automática:
    • Functions escala automaticamente com base no número de solicitações recebidas, garantindo que as funções sejam executadas eficientemente sem intervenção manual.
  3. Eventos e Triggers:
    • As funções podem ser acionadas por uma variedade de eventos, como mudanças em um bucket do Oracle Object Storage, mensagens em um stream, ou diretamente através de uma API HTTP.
  4. Cobrança por Uso:
    • A cobrança é baseada na quantidade de recursos utilizados durante a execução da função, proporcionando um modelo de pagamento por uso que pode resultar em economia significativa.

Comparação com Outras Soluções

  1. Servidores Bare Metal:
    • Complexidade de Gerenciamento: Bare metal requer gestão completa de hardware e software, incluindo instalação, configuração e manutenção.
    • Escalabilidade Manual: A escalabilidade é manual e pode ser demorada, exigindo planejamento antecipado.
    • Custo: Pode ser mais caro devido ao uso constante de recursos, mesmo quando o servidor está ocioso.
  2. Máquinas Virtuais (VMs):
    • Gestão Parcial de Infraestrutura: As VMs reduzem a complexidade em comparação com bare metal, mas ainda requerem gerenciamento de SO, patches e capacidade.
    • Escalabilidade Manual: Embora mais flexível que bare metal, a escalabilidade das VMs ainda pode ser menos ágil do que soluções serverless.
    • Custo: O custo é baseado no tempo de execução da VM, independentemente do uso real dos recursos.
  3. Contêineres:
    • Orquestração Necessária: Contêineres oferecem flexibilidade e eficiência, mas requerem sistemas de orquestração como Kubernetes para gerenciar a escalabilidade e disponibilidade.
    • Escalabilidade Gerenciada: Embora escalável, a complexidade de gerenciamento e orquestração pode ser alta.
    • Custo: Pode ser mais eficiente em termos de recursos, mas ainda exige pagamento por capacidade provisionada.
  4. Functions OCI:
    • Infraestrutura Abstrata: Não há necessidade de gerenciar servidores ou contêineres; a OCI gerencia a infraestrutura.
    • Escalabilidade Automática: Escala instantaneamente com base na demanda sem intervenção manual.
    • Modelo de Preços Eficiente: Paga-se apenas pelo tempo de execução da função, resultando em potencial economia significativa.

Pontos Positivos do Uso de Functions na OCI

  1. Simplicidade: Desenvolvedores podem focar no código e lógica de negócios sem se preocupar com a infraestrutura subjacente.
  2. Eficiência de Custo: O modelo de cobrança por uso garante que você só paga pelos recursos que realmente usa.
  3. Escalabilidade: A escalabilidade automática assegura que as funções possam lidar com variações de carga sem necessidade de intervenção manual.
  4. Integração: Fácil integração com outros serviços OCI, facilitando a construção de soluções completas e eficientes.
  5. Segurança: Beneficia-se da segurança integrada e das práticas recomendadas da OCI, incluindo gerenciamento de identidade e acesso (IAM) e isolamento de rede.

Conclusão

OCI Functions proporciona uma solução poderosa e flexível para execução de código em uma arquitetura serverless, permitindo que desenvolvedores construam aplicações de maneira eficiente e escalável, reduzindo a complexidade de gerenciamento de infraestrutura e otimizando custos.

Rolar para cima