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
- Criado pela Wildbit é um workflow completo para escrever, revisar e deployar código, portanto, o desenvolvedor não precisa se preocupar com o hosting e deployment do código.
- Na AWS é oferecido como Elastic Beanstalk: “Basta fazer o upload de seu aplicativo e o Elastic Beanstalk automaticamente gerencia os detalhes de fornecimento de capacidade, balanceamento de carga, escalabilidade e monitoramento do status do aplicativo. O Elastic Beanstalk usa serviços altamente escaláveis e confiáveis que estão disponíveis no Nível gratuito da AWS. O Elastic Beanstalk é compatível com aplicativos desenvolvidos em Java, PHP, .NET, Node.js, Python e Ruby, e com diferentes tipos de contêiner de cada linguagem”.
Docker
- Lançado em 2008, com tecnologia open source, é atualmente o projeto e o método mais famoso para implantar e gerenciar containers Linux.
Atualmente, a Red Hat e o Docker, além de muitas outras organizações, são membros da Open Container Initiative (OCI), cujo objetivo é padronizar as tecnologias de containers no setor open source.
Statefull x Stateless
- Statefull (tem estado); Stateless (não tem estado). Ter estado significa uma ligação direta entre o cliente e o servidor por um determinado tempo (exemplo de Estado: logado, não logado, faturando, comprando, etc).
- No statefull, tem-se o controle de estado. Possui a mesma instância nas diferentes requisições do mesmo cliente (é armazenado na sessão do usuário), portanto, a aplicaçåo possui alto vínculo com a máquina. Por esta razão, não são candidatas naturais a rodar com instancias spot.
- No stateless, perde-se o estado entre as requisições, ou seja, em cada requisição é uma instância nova do bean. Nada garante que em uma próxima requisição ainda existirão os mesmos dados anteriores. Essas aplicações guardam uma relação muito direta com a configuração da máquina, portanto, o risco de descontinuidade é alto se a instância se perder (ex banco de dados em geral).
- Há banco de dados, como o Apache Cassandra e o MongoDB (No SQL) que conseguem fazer réplicas do servidor principal em vários nós, o que garante maior tolerância a falhas. São considerados statefull avançados, portanto, passíveis de rodar em instâncias spot.
Elasticidade
- Conceito relativo a crescer ou decrescer um ambiente computacional (CPU, memória, disco, etc) a partir de limites pré-definidos. Por exemplo, caso a CPU atinja x% de utilização, acrescenta-se (ou reduz-se) máquinas (escalabilidade horizontal).
- Num ambiente corporativo tradicional, a escalabilidade mais comum e conhecida é a vertical, ou seja, quando adiciona-se mais recursos (CPU, memória, etc).
- Na escalabilidade horizontal, usamos mais do mesmo, ou seja, acrescenta-se máquinas ao sistema.
OpenStack
- É um software de código aberto, capaz de gerenciar os componentes de múltiplas infraestruturas virtualizadas. Assim como o sistema operacional gerencia os componentes de nossos computadores, o OpenStack é chamado de Sistema Operacional da Nuvem.
- É considerado uma plataforma de software pois fornece APIs que, em conjunto, são capazes de controlar todos os recursos disponíveis na oferta dessa infraestrutura: máquinas virtuais, rede, armazenadores e balanceadores de carga.
- A Rackspace (provedor de infraestrutura americano) e a NASA (agência espacial americana) foram os principais contribuidores iniciais para o projeto. A Rackspace forneceu sua plataforma "Cloud Files" para implementar o aspecto de armazenamento (Object Storage) do OpenStack, enquanto que a NASA entrou com o "Nebula" para implementar o lado computacional (Compute)
- O consórcio OpenStack, desde então, agregou mais de 100 membros em menos de um ano, incluindo a Canonical (responsável pelo Ubuntu), Dell, Citrix, Red Hat, IBM, Cisco, HP, SUSE, VMware, Yahoo, etc
- O OpenStack apresenta seus serviços através de APIs compatíveis com os serviços EC2 e S3 da Amazon AWS e, portanto, aplicações escritas para estes serviços do AWS podem ser usados com OpenStack também.