segunda-feira, 16 de março de 2020

Arquitetura de Nuvem Básica


Alguns conceitos que todos desenvolvedor deveria saber antes de iniciar no mundo da nuvem.

O diagrama abaixo é uma representação de uma aplicação web básica bem estruturada, caso você não seja um desenvolvedor da nuvem, provavelmente achará complicado.


A seguir vamos conhecer cada um desse componente e dar uma introdução para que você possa ter o conhecimento necessário quando incluí-lo na arquitetura do projeto. 

1. DNS

A sigla DNS (Domain Name System), é a tecnologia que permite a internet. Esse componente permite que todos os IP e domínios possa ser referenciados e encontrados. Imagine uma gigante lista telefônica da internet, é através dela que é possível encontrar onde está um determinado  endereço. Quando informamos um domínio em nosso navegador, por exemplo  www.pudim.com.br, esse endereço será pesquisa nesta lista telefonica para encontrar onde deve ser direcionado a navegado, por trás é sempre um IP, no caso desse endereço é o 54.207.20.104.

2. LOAD BALANCE

O Load Balance é um componente essencial para a arquitetura de nuvem, uma das principais características das aplicações em nuvem é sua escabilidade horizontal, ou seja, podemos criar inúmeras instâncias (replicas) das aplicações para atender um grande demanda de requisições, garantindo assim a disponibilidade. E neste cenário que o Load Balance entra, porque ele será o responsável por distribuir essa demanda entre todas as instâncias existentes, garantir um as regras neles definidas sejam atendidas para evitar sobrecarga em determinada instância e prover alta performance das requisições.

3. WEB APP SERVER

Esse são os servidores de aplicativos web, basicamente é onde a aplicação está instalada e responderá ao usuário através do recebimento da requisição e fornecerá uma resposta HTML. Por ser o cérebro da aplicação, será responsável por se comunicar com uma variedade de outros componentes, como banco de dados, filas, cachês, microserviços e muito mais. As implementações no servidor requer uma escolha de uma linguagem (C# .NET , Node.js, Ruby,  Scala, Java, etc). 

4. DATABASE

Basicamente todo aplicativo utiliza banco de dados para armazenar informações. É através deles que podemos armazenar e atualizar os dados capturados ou gerados pela aplicação. No modelo nuvem, principalmente com microserviços, é bem comum utilizarmos vários banco de dados. Além disso atualmente existe duas versão de banco de dados, sendo a mais utilizada o banco relacional (SQL Server, Oracle, MySql, etc) e banco não relacional (CosmoDB, MongoDB , DynamoDB, etc), basicamente a diferença é que o relacional oferece maior consistência e confiabilidade e não relacional tem como vantagem uma escalabilidade maior, com a informação agrupada e armazenada no mesmo registro. 

5. CACHE SERVER

O serviço de cache basicamente fornece a consulta e persistência de dados em praticamente tempo real. Os aplicativos geralmente utilizam consulta ao banco de dados que são executadas várias vezes e retornam o mesmo valor, para evitar o processamento dessa informação, o cachê armazena esse resultado em memória e o mantêm disponível pelo tempo configurado para a aplicação, efetuando assim um grande ganho de performance. 

6. JOBS

A maioria dos aplicativos da precisa trabalhar de forma assíncrona, ou seja, que não esteja associada à resposta à solicitação de um usuário. Para isso são utilizado as "filas de trabalho", é através delas que rotinas são agendadas para serem executadas de tempos em tempos para realizar trabalhos que não necessitam que aconteçam diretamente associados a usuários. As opções de linguagem e estruturas subjacentes são tão numerosas quanto para os servidores da web e na sua grande maioria podem ser criados no conceito "serverless ", que são algoritmos que são executados sem servidor e com orientação para eventos. 

7. STORAGE

Esse repositórios são uma maneira simples e escalável de armazenar e acessar dados na nuvem. Eles são perfeitos para qualquer tipo de informação que você armazenaria num sistema de arquivos local, com o beneficio de ser acessível por meio de http de qualquer local. E ainda pode contar com a configuração de redundância para garantir sua alta disponibilidade. 

8. CDN

A CDN (Content Delivery Network) é uma tecnologia que oferece uma maneira de permitir o acesso a arquivos estáticos (html, css, javascript, imagens, etc) mais rapidamente do que permitir que o usuário tenha que chegar até a aplicação web para receber seu conteúdo. Basicamente ele funciona distribuindo uma cópia do conteúdo mais atual entre muitos servidores em todo mundo, assim quando um usuário efetuar o acesso ao aplicativo web, esse conteúdo será entregue pela CDN mais próxima ao usuário e evitando assim consumo de tráfego do servidor, isso irá garantir uma latência bem menor para o usuário e uma melhor experiência.

Trabalhar com a nuvem é simples e complexo ao mesmo tempo. Esses elementos apresentados são uma pequena parte das inúmeras possibilidades que existem para montar uma arquitetura, porém espero que seja útil para dar o ponta pé inicial na sua utilização. Acredite que o futuro das aplicações será inevitavelmente estar na nuvem.

Marcelo Goberto de Azevedo 💫
Arquiteto na GFT Brasil
//marcelogoberto.com.br/