Entendendo a cultura DevOps e seus paradigmas

Cultura DevOps e seus paradigmas

Este artigo discute sobre a cultura DevOps e seus paradigmas. O que é DevOps? Quais ferramentas estão envolvidas? Quais são os pontos positivos e negativos desta cultura que todos nós da área de TI em algum momento na vida já nos deparamos? Por que existem tantas oportunidades nessa área e poucos profissionais especializados neste assunto atualmente? E quais as tendências dessa “nova” cultura?

Cultura DevOps e seus paradigmas

1. O que é cultura DevOps?

Conforme definição da Amazon, cultura DevOps é:

A combinação de filosofias culturais, práticas e ferramentas que aumentam a capacidade de uma empresa de distribuir aplicativos e serviços em alta velocidade: otimizando e aperfeiçoando produtos em um ritmo mais rápido do que o das empresas que usam processos tradicionais de desenvolvimento de software e gerenciamento de infraestrutura.

Uma das principais diferenças nessa cultura é que não temos mais somente o papel do especialista e nem da separação das equipes por “silos”, ou seja, equipes especializadas em determinada torre, como por exemplo equipe de banco de dados, equipe de aplicação ou equipe de sistemas operacionais. A tendência é que uma única pessoa ou uma única equipe seja responsável por todas as torres.

Outra diferença gritante é a quebra de barreira entre equipes, principalmente entre equipes de desenvolvimento (Dev) e operação (Ops). Essas duas devem trabalhar totalmente integradas para otimizar a produtividade, ao invés do modelo tradicional, onde uma equipe demanda a outra.

A imagem em destaque neste artigo mostra que a cultura DevOps trabalha com uma integração contínua, sempre visando a melhoria. São dividas em 7 fases:

000 - Cultura DevOps e seus paradigmas
  • Plan: Planejar. Efetuar o levantamento dos requisitos e das necessidades da Operação.
  • Create: Criar. Criar ou melhorar a solução em si.
  • Verify: Verificar. Efetuar testes da solução desenvolvida.
  • Package: Pacote. Após todos os testes, entregar o produto para a Operação, inclusive com documentação e manuais de operação.
  • Release: Lançamento. A Operação recebe todas as informações da fase anterior.
  • Configure: Configurar. Configurar e preparar o ambiente para implementar o novo serviço em produção. Efetuar ajustes finos.
  • Monitor: Monitorar. Monitorar o comportamento do novo serviço, analisar performance e reportar possíveis melhorias ou problemas para o Desenvolvimento.

Para obter essa alta velocidade, precisamos inserir alguns novos conceitos e utilizar ferramentas que otimizem os processos:

1.1 Virtualização

Graças a virtualização temos uma abstração da camada de hardware e por consequência uma padronização em relação a configuração de dispositivos, ou seja, não precisamos mais se preocupar com drivers específicos de determinados fabricantes. Ferramentas como VMWare, VirtualBox e KVM são exemplos de virtualização. Sem essa padronização, a cultura DevOps ficaria impossibilitada de desenvolver novas soluções de forma ágil.

Também é bom deixar claro que virtualização NÃO É computação em nuvem. Mas a computação em nuvem utiliza virtualização para fornecer serviços com elasticidade, disponibilidade e flexibilidade através da Internet. Um exemplo de ferramenta de computação em nuvem é o OpenStack.

Outro termo bastante utilizado em relação a virtualização é a orquestração, que nada mais é que a criação ou configuração de várias máquinas virtuais ao mesmo tempo. Isso é possível graças ao próximo conceito apresentado abaixo.

1.2 Automação e infraestrutura como código

Automação, também conhecido como infraestrutura como código (IaaC – Infrastructure as a Code), é a utilização de scripts e ferramentas que automatizam processos repetitivos e reduzem a interação humana. Na cultura DevOps, tudo que é repetitivo é passível de automação.

Por exemplo, provisionar um servidor virtual, efetuar a configuração de uma aplicação, definir regras de segurança no sistema operacional (gerenciamento de configuração), entre outros. Segundo definição da Red Hat:

A automação de TI, às vezes chamada de automação de infraestrutura, é o uso de software para criar instruções e processos reproduzíveis capazes de substituir ou reduzir a interação humana com os sistemas de TI. O software de automação trabalha dentro dos limites dessas instruções, ferramentas e estruturas para executar tarefas com pouca ou nenhuma intervenção humana.

Para a automação de TI, existem várias ferramentas disponíveis atualmente, algumas delas são:

Ansible

O Ansible gerencia várias máquinas de uma só vez via conexões SSH. Trabalha com o conceito de agentless, ou seja, não precisa de instalação de agentes em suas máquinas para execução do Ansible. Utiliza uma linguagem própria “humanamente legível” baseada em YAML e Python. Trabalha com os conceitos de inventário (lista de máquinas que serão gerenciadas), playbooks (comandos ou passo-a-passo a ser executado) e roles (modularização do código). Atualmente o Ansible pertence a Red Hat. O Ansible é mais indicado para provisionamento de novas máquinas e configurações temporais.

Puppet

O Puppet também gerencia várias máquinas de uma só vez, mas necessita de agente instalado (puppet agent) na máquina a ser gerenciada e, na maioria dos casos, também precisa de um servidor central para gerenciá-los (puppet server). Utiliza linguagem declarativa baseada em Ruby e trabalha muito bem com abstração de recursos.

O Puppet possui uma comunidade bem interessante no Brasil chamada Puppet-Br que possui um material bem completo sobre o assunto em pdf. O Puppet é mais indicado para gerenciamento de configuração, já que seus puppet agents rodam por padrão a cada 30 minutos, mantendo a configuração das máquinas gerenciadas conforme o que é determinado pelo puppet server.

Chef

O Chef também gerencia várias máquinas de uma só vez, mas possui uma arquitetura um pouco diferente do Ansible e do Puppet. Trabalha com o conceito de workstation, server e nodes. O workstation é onde são desenvolvidos os códigos que serão aplicados nas máquinas a serem gerenciadas.

Esses códigos também são conhecidos como receitas, ou recipes em inglês e o conjunto de receitas é conhecido como cookbook. O server é o responsável por gerenciar as receitas ou cookbooks e aplicá-las nas máquinas gerenciadas.

Os nodes são as máquinas gerenciadas em si. O Chef utiliza linguagem baseada em Ruby e Erlang. Bem como o Puppet, o Chef é mais indicado para gerenciamento de configuração.

Futuramente detalharemos mais sobre cada uma dessas ferramentas. Lembrando que todas as ferramentas citadas acima possuem versões gratuitas e pagas. As indicações feitas são experiência própria do autor, mas é possível fazer a mesma coisa com as 3 ferramentas, como orquestração, gerenciamento de configuração

Vagrant

O Vagrant é uma ferramenta que permite o provisionamento de máquinas virtuais de forma rápida para efetuar testes. É possível integrar o Ansible, Puppet e Chef no provisionamento destas máquinas. Basicamente, o Vagrant baixa imagens de máquinas virtuais prontas da Internet (boxes) e a configuração automatizada pode ser feita pelas ferramentas citadas. Abaixo temos mais artigos sobre o Vagrant:

Jenkins

O Jenkins é uma ferramenta de integração contínua feito em Java. Com ele é possível efetuar testes contínuos do produto desenvolvido, com vários cenários e gerando relatórios de performance (teste ocorreu com sucesso ou não).

E para programar esta infraestrutura como código, nada mais justo utilizar um sistema de controle de versões de código distribuído chamado GIT. Abaixo alguns artigos sobre o assunto aqui no SUP:

1.3 Containers

Outro conceito muito utilizado na cultura DevOps é a utilização de containers. Um container pode ser considerado “um empacotamento completo da aplicação”, tornando a aplicação completamente portável. A ferramenta mais utilizada para isso é o Docker. As imagens abaixo ilustram como funciona o conceito de container e sua diferença com a virtualização:

006 - Cultura DevOps e seus paradigmas
Arquitetura em containers com o Docker. Fonte: https://www.docker.com/resources/what-container
007 - Cultura DevOps e seus paradigmas
Arquitetura de virtualização com Hypervisor. Fonte: https://www.docker.com/resources/what-container

Ou seja, na virtualização, cada máquina virtual precisa ter um sistema operacional instalado (Guest Operating System). Já com aplicações em container somente é necessário ter o Docker instalado, evitando assim problemas relacionados ao ambiente da aplicação. Com o Docker é possível definir limitações de recursos por container, por exemplo memória, CPU, I/O.

Também podemos utilizar as duas arquiteturas em simultâneo (virtualização + containers), ou seja, aplicações em containers rodando em cima de máquinas virtuais. Para facilitar na criação de containers, também podemos utilizar uma ferramenta de orquestração de containers chamada Kubernetes. Futuramente escreveremos mais sobre este assunto.

2. Aspectos positivos da cultura DevOps

A cultura DevOps apresenta vários aspectos positivos, entre eles:

  • Aumento na velocidade no desenvolvimento de novas soluções de TI.
  • Diminuição da burocracia, já que a comunicação entre desenvolvimento e operação deve ser o mais integrado possível.
  • Busca sempre melhorias de forma continuada, já que trabalha como um ciclo infinito.
  • Racionalização de recursos humanos e físicos, graças a automatização de processos, virtualização e orquestração.

3. Aspectos negativos da cultura DevOps

Mas, como nem tudo são flores, a cultura DevOps também implica em alguns paradigmas e aspectos negativos, entre eles:

  • A migração da cultura tradicional para a cultura DevOps pode trazer alguns “traumas“. A cultura DevOps não é somente o aprendizado de novas ferramentas, mas também uma mudança de cultura. Dependendo do ambiente de trabalho e de como os processos são adotados em determinadas empresas, esta mudança pode não ser tão simples assim e nem tão bem aceita. A migração da cultura tradicional para a DevOps deve ser de forma gradativa para não gerar barreiras ou “aversão ao novo”.
  • O paradigma da redução de interação humana. A cultura DevOps prega que tudo que é repetitivo pode ser automatizado. Por consequência, isso causa a diminuição da necessidade de recursos humanos. Então isso causará a demissão de várias pessoas e a extinção de vários cargos, principalmente aqueles administradores de sistema “apertadores de botão”, que sempre fazem a mesma coisa.
  • Mudança na carreira profissional.  Devido ao paradigma citado acima, é necessária uma mudança na carreira profissional, principalmente em relação à capacitação e aprendizado. Sabemos que não é fácil absorver essa quantidade gigantesca de novas ferramentas e novos conceitos que a cultura DevOps nos ensina, mas nunca é tarde para começar.

4. Cursos gratuitos para DevOps

Abaixo alguns sites que fornecem cursos gratuitos sobre o assunto cultura DevOps:

Nota do autor: Os cursos citados são gratuitos, mas fazem referência a ferramentas que podem ser pagas. A minha ideia para indicação destes cursos é entender a cultura DevOps e não se apegar a determinado software.

5. Tendências DevOps

A cultura DevOps já é realidade em várias empresas como por exemplo Amazon, Google e Microsoft. Segundo estudo da CA Tecnhologies, em 2016 o Brasil foi quarta maior referência global em DevOps. Em sites de ofertas de emprego como por exemplo o Apinfo, vemos que existem diversas vagas relacionadas a DevOps (Desenvolvedor, Analista, Especialista). Tudo isso nos mostra que a cultura DevOps é uma grande tendência para o futuro do mercado de Tecnologia da Informação.

Em conclusão, esperamos que este artigo sobre cultura DevOps e seus paradigmas tenha explicado um pouco mais sobre essa evolução dos processos na área de TI, com pontos de vista positivos e negativos, apresentado algumas ferramentas que automatizam esses processos como o Ansible, Puppet e Chef e inserido novos conceitos como containers e Infraestrutura como Código.