[pt-BR] DevOps e Computação em Nuvem - #1
Published: 2022-03-25 22:28:25



Neste artigo, vamos conhecer a cultura **DevOps** e falar rapidamente sobre os benefícios que ela oferece para o desenvolvimento de software.

Além, disso, vamos aprender o que é a **Computação em Nuvem** e conhecer os modelos de serviços Iaas, Paas e Saas oferecidos pelos provedores de cloud do mercado.

1. Cultura DevOps
   - A vantagem do DevOps
   - 4 bases do DevOps

2. Cloud Computing
   - Modelos de serviços de Nuvem

--- 

> Esse conteúdo foi baseado na Aula 1 de Infraestructure e Cloud Computing da [pós-graduação de MBA em Desenvolvimento FullStack da Impacta](https://www.impacta.edu.br/mba/full-stack-developer).

--- 

# 1. Cultura DevOps

Esse é mais um dos assuntos do mundo de TI que demonstra o quanto desenvolvedores não podem ser apenas máquinas de escrever códigos.

Um dev que conhece pelo menos um pouco de arquitetura, infraestrutura, engenharia e hardware está sempre um passo a frente daquele que só pensa em linguagem. 

Quanto mais a gente se abre para conhecer o que está além do código, mais adquirimos habilidades e repertório para desenvolver com qualidade e segurança. 

Não é necessário ser especialista em todos os assuntos, mas é importante conhecer e aprender um pouco das responsabilidades de outras frentes.

Mesmo não sendo nossa área de especialização, aprender do outro nos movimenta a agir com mais empatia.

E é aí que podemos encaixar a cultura DevOps, que vem de certa forma para ajudar a resolver possíveis atritos entre as diversas camadas do mundo de TI com métodos, ferramentas e dialogando muito bem com a cultura ágil.

## A vantagem do DevOps

Vamos imaginar uma empresa que decide construir seu próprio Data Center. Para isso, precisou montar um bom espaço físico com sistema de refrigeração especializado, comprar vários servidores, hardwares de storage e rede, etc. 

Esta empresa ainda vai precisar contratar diversas pessoas para criar times responsáveis por manter e gerenciar toda essa infraestrutura física, como passar cabos, monitorar servidores, configurar redes.

Além disso precisará de uma operação constante para atender demandas dos desenvolvedores como por exemplo criar servidores, subir aplicações, configurar máquinas e etc. 

Esses desenvolvedores tem seu próprio prazo a cumprir, assim como as operações e as demais áreas.

Se nenhuma metodologia for implementada, esse processo que demanda muito tempo e recursos entre as operações pode até causar atritos entre as equipes, e trazer diversos tipos de prejuízos em vários níveis.

A cultura DevOps vem então para ajudar a resolver esse atrito e, de maneira mais simples, seu objetivo é remover as barreiras entre as duas equipes tradicionalmente separadas em silos: devs e operações.

Essa cultura traz métodos e ferramentas de modo a auxiliar as partes a trabalharem de forma linear, ágil e harmonizada, encurtando o intervalo entre a idealização do projeto e a entrega.

É necessário uma mudança de mentalidade, entretanto, a longo prazo, deve-se verificar um aumento a eficiência na comunicação e integração entre as equipes de modo a otimizar a produtividade dos desenvolvedores e a confiabilidade das operações.

## 4 bases do DevOps 

De maneira prática, podemos separar o devOps em 4 bases, que conversam com o ciclo de vida do desenvolvimento de software. Vamos ver um pouquinho de cada uma dessas etapas. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ujevvc3y419m3zd56xh5.png)

### Agile Development

Etapa de desenvolvimento de forma iterativa e incremental com métodos ágeis. É a fase que requisitos, produto, backlogs, desenvolvimento, que usam os frameworks de trabalho como Scrum, Kanbam, etc. 

### Continuous Integration (CI)

Etapa de junção do código produzido e avaliação da qualidade do repositório. Cada componente da equipe entrega uma parte do código e é preciso depois juntar tudo e trabalhar na consistência dele, utilizar métodos e ferramentas para avaliar se está bom, se funciona, se compila. **Exemplos de ferramentas: Jenkins, Azure DevOps, CodePipeline, etc.**

### Continuous Testing (CT)

Etapa de testes automatizados, como este de unidade, integraçao, aceitação para validar se aquilo que estamos levando para o usuário tem qualidade. Tem um casamento perfeito com a CI, o código está sendo compilado e testado o tempo todo. **Exemplos de ferramentas: JUnit, Selenium, Appium, JMeter, etc.**

### Continuos Delivery (CD)

É essa etapa que diz respeito a infraestrutura, que leva a aplicação a um ambiente (homol, prod). São utilizadas ferramentas e métodos para facilitar e trazer conforto a gestão da infra, como Infraestructure as code (IaC), Ferramentas de provisionamento e Gestão de Repositórios.  **Exemplos de ferramentas: Terraform, Ansible, Docker, Kubernetes, Vagrant, etc.**

___

# 2. Cloud Computing

Clouding Computing é a prática desse processo que traz agilidade e redução e custo no provisionamento de infraestrutura e operação.

Quando falamos de nuvem, falamos de um conforto e facilidade para gerenciar a infraestrutura, que demanda menos tempo, menos recursos humanos e traz cada vez mais segurança ao ciclo de vida dos sistemas. 

O IaC acaba sendo um processo que abstrai a infraestrutura, traz escabilidade conforme demanda, e controla a tolerância a falhas. Um exemplo prático do IaC, é escrever um arquivo, como se fosse uma receita de bolo. Por exemplo:

- Preciso ter 2 servidores com comunicação TCP
    - O servidor 1
        - é de aplicação web
        - tem acesso a internet
        - tem phyton
    - O servidor 2
        - é de banco de dados
        - mySQL na versão tal
        - etc

Obviamente que na vida real não será escrito desta forma, mas esse é um exemplo do quão fácil seria configurar alguns servidores ao utilizar o desenvolvimento em nuvem. Agora conseguimos criar uma série de automações que não eram possíveis no passado.

## Modelos de serviços de Nuvem

O provedores de nuvem mais conhecidos e utilizados hoje em dia são Azure, AWS e Google Cloud Platform, e cada um tem seus próprios serviços, pacotes e consultorias.

Entretanto, podemos elencar 3 modelos de serviços que encontramos em todos eles: Iaas, Saas e Paas.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/54b9dui8i2vvzy5usccp.png)


Mas antes de conhece-los, vamos começar com uma analogia para ilustrar o modelo tradicional e nos dar base para entender os modelos em nuvem.

### On-premise

Vamos imaginar um cenário da compra de um carro próprio. Antes mesmo de começar a dirigir, é necessário que a pessoa tire carta, pague o IPVA, faça seguro, realize manutenção constante, coloque gasolina, etc. Ou seja, é preciso muito recurso e muito esforço antes mesmo de comprar o carro, e durante o uso desse transporte.

Da mesma forma é quando a empresa tem o próprio data center, chamado de ambiente on-premise. É necessário desembolsar uma super grana para comprar servidor, para montar uma estrutura de refrigeração com ar-condicionado, sobrepiso, etc.

Além disso, a empresa precisa de gente que saiba passar cabo, verificar energia elétrica, subir software, virtualizador, instalar java, python, msql dentro de uma máquina virtual.

Entretanto, esse modelo é o que traz mais autonomia para a empresa, pois ela pode fazer o que quiser já que todos os recursos são próprios.

Em seguida veremos os modelos de serviços de nuvem existentes, e quando mais a gente avança, menos autonomia a empresa vai ter ao contratar o serviço.

### Iaas (Infraestructue as a Service)

O modelo Iaas é a porta de entrada para o serviço de nuvem e é como se fosse um carro por assinatura onde não é necessário comprar o carro, mas pagar um valor mensal que já consta o uso do carro, IPVA, seguro, etc.

A empresa recebe máquinas virtuais e a única coisa que precisará se preocupar é em colocar  ferramentas e softwares lá dentro.

Da máquina virtual pra baixo, aqueles requisitos de data center como infraestrutura, refrigeração ou cabeamento fica por responsabilidade do serviço de nuvem contratado.

- **Responsabilidade do serviço de nuvem:** data center + máquinas virtuais
- **Responsabilidade do cliente:** receber as máquinas virtuais, fazer toda a instalação e gestão de ferramentas e usá-las para desenvolver os softwares

### Paas (Platform as a Service)

O modelo Paas é como se fosse um taxi. Não é necessário se preocupar se tem gasolina, se tem seguro ou em pagar o IPVA, a única preocupação é informar o trajeto. Mas o carro não é próprio, então há menos liberdade.

O Paas é quando o serviço de nuvem me entrega uma ferramenta como serviço. Como por exemplo, o ambiente para eu rodar meu java, um banco de dados já instalado e pronto para ser utilizado. 

- **Responsabilidade do serviço de nuvem:** data center + máquinas virtuais + ferramentas
- **Responsabilidade do cliente:** usar as ferramentas para desenvolver os softwares

### Saas (Software as a Service)

O modelo Saas é como se fosse um ônibus. Assim como o taxi, não é necessário se preocupar com gasolina, IPVA ou seguro, entretanto, o ônibus não muda seu percurso pela demanda. É mais barato, mas há ainda menos liberdade.

O Saas entrega software pronto para funcionar como serviço, como por exemplo Gmail, Google Meeting, Google Classroom. Não há controle nenhum sobre as features do software e nenhum tipo de personalização.

Esse modelo também é multitenant (permite multilocação), ou seja, vários clientes podem ser acomodadas no mesmo servidor, mas cada um recebe seu próprio serviço e isolado. 

- **Responsabilidade do serviço de nuvem:** data center + máquinas virtuais + ferramentas + software
- **Responsabilidade do cliente:** utilizar os softwares


---

Continua na parte 2 👉🏼 [clique aqui](https://dev.to/dxwebster/pt-br-infraestrutura-e-computacao-em-nuvem-parte-2-4bnb) 

-- 

Referências:
https://csrc.nist.gov/publications/detail/sp/800-145/final
https://br.pinterest.com/pin/766737905309531976/?mt=login