Alguns Conceitos Sobre Arquitetura Cloud Services, Micro Serviços, Containers, Openstack e Kubernete

No universo da computação em Nuvem há inúmeros conceitos, contudo, separei alguns que por estarem relacionados às nossas ofertas, ajudam no seu maior entendimento:



Arquitetura/Aplicação Monolítica


- É uma única aplicação de software num único programa, a partir de uma única plataforma.

- Uma aplicação monolítica é autônoma e independente de outras aplicações. Possui fácil deploy e minimiza duplicidade de código, mas se um módulo falhar (ex memória), cai tudo. Como o código é longo, dificulta a manutenção.



Arquitetura de Micro serviços


- A proposta desta arquitetura é desenvolver sistemas que sejam mais flexíveis, escaláveis e com manutenção mais simples do que as arquiteturas de sistemas monolíticas normalmente utilizadas.

- Permite disponibilizar novos processos ou serviços sem impacto nos processos e serviços existentes, sem a necessidade de parada de todo sistema. Também otimiza o uso da infraestrutura de nuvem.

- Ao contrário da monolítica ela SEPARA as macro-funcionalidades em sub-sistemas, que interagem com um sistema core. Ex: uma loja virtual (core), interage com sistemas de Logística, emissão de NFs, carrinho de compras, etc. Portanto, cada sistema precisa ser mantido e deployado separadamente.





















               Monolítica                                                      Micro serviços





Containers x Virtual Machines


- Um container é um software que é executado em um SO (Windows ou Linux) e que aproveita deste (ou seja, compartilha) códigos, ferramentas, bibliotecas, tudo aquilo que se pode instalar num servidor.

- Com o uso de container, não precisamos de um sistema operacional virtualizado. Assim:

-> Virtualização: Infra (cloud, rede, etc) / SO Host / Hypervisor / 1 Guest SO para cada App

-> Containers: Infra / SO / Containers / Diversas Apps (Não é necessário virtualizar o SO).





- Ele consistente (*) durante todas as etapas (dev/teste/produção), por isso, é possível desenvolver um aplicativo num laptop e portá-lo para teste/produção, ems ambientes corporativos da empresa.

- Ao carregar um contêiner temos uma “imagem” do sistema operacional host, cada contêiner tem seus próprios processos, registro, endereço IP, etc

- O SO do host compartilha com o(s) container(s) o mesmo kernel.

- Contêiners são bem mais leves e rápidos que VMs.


(*) este conceito está associado à característica de Manutenibilidade, que é a capacidade do software ser mantido. Uma modificação consiste, por exemplo, em uma correção do produto ou da adaptação a mudanças de requisitos, como mudanças de legislação. 



Kubernetes


- Lançado em Jun 2014 pela Google, são sistemas de código aberto para gerenciadores dos aplicativos em containers, que rodam em um ou vários clusters.

- Oferecem uma plataforma para automatização de deploy, balanceamento de carga, escalonamento e operação de containers. Ou seja, seu grande objetivo é facilitar a implantação de aplicativos na perspectiva dos microsserviços, através da automação e orquestração dos aplicativos em containers.



Beanstalk