Aula 01 – DEVelopment OPerationS – DevOps
Aula 01 – DEVelopment OPerationS – DevOps
Voltar para página principal do blog
Todas as aulas desse curso
Aula 02
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
DEVelopment OPerationS – DevOps
O termo DevOps vem da junção das palavras “desenvolvimento” (development) e “operações” (operations), é uma prática da engenharia de software.
Hoje em dia é uma necessidade praticamente absoluta para empresas de vários setores.
Livros relacionados:
Evolução do desenvolvimento de software
Vamos começar falando um pouco sobre a evolução do desenvolvimento de software ao longo dos anos.
Falaremos sobre como as metodologias e estratégias mudaram em relação ao tempo e as necessidades.
Depois vamos ver como o Facebook usou e continua usando DevOps, e por que eles pararam de seguir o modelo ágil.
Em seguida vamos então falar sobre DevOps em detalhes e os diferentes estágios no ciclo de vida de desenvolvimento DevOps.
Por último, veremos algumas ferramentas para DevOps.
Metodologias e estratégias tradicionais
Cascata
O modelo em cascata foi o primeiro modelo usado para desenvolvimento de software.
Etapas:
- Reunir e documentar requisitos;
- Projetar;
- Codificar e fazer testes unitários;
- Realizar o teste do sistema;
- Executar o teste de aceitação do usuário;
- Corrigir qualquer problema;
- Entregar o produto acabado.
O software era desenvolvido com a ideia de que vai ficar estável por muitos anos.
Com o tempo, as pessoas descobriram que esse modelo era muito lento e os desenvolvedores demoravam muito tempo para desenvolver o software.
Às vezes, o desenvolvimento era tão lento que, na hora em que o software real era entregue, os requisitos do cliente já tinham mudado, e eles não queriam o software da forma como estava.
Ágil
Aí então, surge o desenvolvimento ágil.
A diferença no ágil, é que o software não é entregue de uma só vez, mas, dividido em pequenos pedaços de recursos e funcionalidades entregáveis, em intervalos fixos, como por exemplo, toda semana ou uma vez a cada duas semanas, com várias iterações.
Levantar os recursos da Sprint nesses intervalos fixos, deu aos usuários finais ou clientes, mais satisfação com relação aos progressos alcançados no desenvolvimento, além da flexibilidade para alterar requisitos no meio do caminho, permitindo ao desenvolvedor incorporar os feedbacks dados pelo cliente.
Com isso, economiza-se tempo e dinheiro para fazer quaisquer alterações solicitadas.
Apesar de ter reduzido o tempo de desenvolvimento drasticamente, faltava a agilidade nas operações, foi aí que surgiu o DevOps.
DevOps é a prática de trazer agilidade para ambos, desenvolvimento e operações.
Todas as principais empresas começaram a adotar este modelo porque eles perceberam que desenvolvimento e operações caminhavam de mãos dadas para criar um software de qualidade.
Então, vamos entender a necessidade de DevOps com o caso de uso clássico do Facebook.
Caso do Facebook
Em 2011, o Facebook lançou vários recursos como: linha do tempo, música e ticker suddenly, disponível para toda a base de usuários.
Esta implementação global causou problemas para eles.
O Facebook nessa época tinha cerca de 500 milhões usuários e a maioria deles eram usuários ativos.
Então, quando os usuários perceberam que de repente existiam novas funcionalidades como: linha do tempo e música, eles começaram a explorar os recursos, usando o Facebook massivamente e intensamente.
O alto tráfego do site, levou ao colapso do servidor.
Bem, por essa razão, houve um impacto negativo para o site, o Facebook caiu em pouquíssimo tempo.
Esta foi uma situação catastrófica para uma empresa tão grande.
Eles tiveram que descobrir as falhas e incorporar comentários de usuários e clientes.
Foi aí que perceberam que deviam fazer mudanças na forma como seus softwares estavam sendo implantados.
Surge o que eles chamaram de lançamento escuro (dark launching)
De fato, muitas empresas agora estão usando o Dark Launching: Facebook, Google, Amazon e Netflix são apenas algumas delas.
Dark Launching
Dark Launching é uma técnica na qual os recursos são implantados em uma pequena base de usuários.
Esta base de usuários é continuamente monitorada, e através do feedback, os recursos são melhorados de forma contínua, desenvolvendo e testando.
Uma vez que os recursos estejam estáveis, eles então, são implantados para o resto dos usuários em vários lançamentos.
Agora vamos aprender o lançamento escuro em mais detalhes, entendendo como o Facebook implementou.
De acordo com a técnica Dark Launching os recursos são implantados apenas em uma pequena base de usuários.
No diagrama apenas um pipeline de entrega está atualmente ativo, há muitas entregas no fluxo da linha de produção, isto é, o pipeline, no entanto, todos eles estão desligados nesse primeiro momento.
Depois, o que o Facebook faz é monitorar continuamente esses usuários específicos dessa base na qual os recursos foram implantados, para identificar os erros e obter o feedback deles.
Os bugs são corrigidos e o feedback é incorporado por desenvolvimento e teste contínuo.
Agora, esses recursos atualizados são então implantados de volta na mesma base de usuários e esse processo continua até que as funcionalidades estejam estáveis e os usuários felizes com o(s) recurso(s).
Então, uma vez que a estabilidade é alcançada, esses recursos são implantados em várias bases de usuários, ativando diferentes pipelines de entrega.
Se os usuários não gostarem do(s) novo(s) recurso(s), o Facebook pode reverter e remover a(s) funcionalidade(s) completamente.
Dessa forma o Facebook tem sob controle, um estável mecanismo para o desenvolvimento de novas funcionalidade para a sua enorme base de usuários.
Infra estrutura e Servidores escaláveis
Isso também ajuda a preparar seus servidores para implantação escalável, prevendo a atividade do usuário em seu site, podendo ampliar seus servidores conforme a necessidade.
Existem muitas terminologias mencionadas neste processo todo: desenvolvimento contínuo, teste contínuo, integração contínua, implementação contínua e monitoramento contínuo.
Essas atividades não podem ser realizadas usando o modelo ágil.
Portanto, a metodologia de integração foi o caminho a seguir.
Não é apenas o Facebook que usa esse processo para liberar funcionalidades, o Google, Amazon e Netflix também usam.
O Google inicialmente lançou o gchat só para seus funcionários, e em várias iterações e feedback de equipes diferentes, eles vieram com a funcionalidade impecável quando liberam para todos, mas, o gchat acabou em 25 de junho de 2017 e foi substituído pelo Hangouts.
Netflix fez uma coisa parecida, eles inventaram algo chamado exército símio.
Consistia em diferentes macacos como macacos do caos, macacos da latência e assim por diante.
O macaco do caos foi o primeiro da série.
Era basicamente um código que quando implantado podia derrubar uma instância de um servidor e causar interrupção.
Essa ferramenta foi mais como um desafio para o desenvolvedores e para o Netflix, porque servidores eram derrubados aleatoriamente durante o horário comercial e os desenvolvedores tinham que trabalhar em tempo real para corrigir o problema, durante as horas em que os usuários mais usavam o site e eles não poderiam ter nenhuma interrupção durante a transmissão do filme ou programas de TV.
Isso ajudou o pessoal da Netflix a aprender sobre a fraqueza de seu sistema e conseguir construir mecanismos para recuperação automática.
Contexto de Aplicação do DevOps
São para esses contextos que se aplica DevOps, no cenário atual da era cloud, big data, internet das coisas, aprendizado de máquina, sistemas distribuídos, infraestrutura como serviço, aliás, tudo como serviço, foi necessária ter uma abordagem de desenvolvimento de software que envolve desenvolvimento contínuo, teste contínuo, integração contínua, implementação contínua e monitoramento contínuo do software ao longo do ciclo da vida de seu desenvolvimento.
Este é exatamente o processo adotado por todas as principais empresas para desenvolver software de alta qualidade em ciclos de vida de desenvolvimento mais curtos, resultando em maior satisfação do cliente.
Ferramentas
Vamos agora ver algumas ferramentas que são usados para automatizar esses estágios.
Para gerenciamento de código fonte com Git e SVN temos: Github, Gitlab, BitBucket, CloudForge, CodeBase,
Beanstalk, entre outros.
Essas ferramentas nos ajudam a manter o código ao longo do ciclo da vida do desenvolvimento.
Revisões diferentes do código pode ser armazenado e se quisermos reverter todas as alterações, podemos apenas chamar a essa versão anterior do código e subir em produção.
Para a construção, ou seja, para os builds, temos ferramentas como: Maven, Ant e Gradle.
Eles ajudam a compactar seu código em arquivos executável que podem ser produzidos em ambiente de teste.
Para teste contínuo, temos ferramentas como selenium, Testsigma, Tricentis, Junit, etc.
Para integração contínua, temos: Jenkins, codeship, Buddy, Urbancode deploy, Bamboo, Circle CI, entre outros.
A integração contínua significa que você pode testar alterações e depois testar alterações com outras alterações.
A próxima etapa é o estágio de implementação contínua.
Para isso temos ferramentas: como puppet, chef, saltstack e ansible.
Quando o código está testado e pronto, é enviado para a produção ou a uma máquina comum, de não desenvolvedor.
E finalmente o monitoramento contínuo, New Relic, sensu e Nagios.
Essas ferramentas ajudam a monitorar os servidores de perto e verificar a saúde do sistema.
Tudo pode acontecer com seu servidor a qualquer momento, por isso, é importante que eles sejam monitorados proativamente em vez de reativamente.
Eles também melhoram a produtividade, aumentam a confiabilidade do sistema e possivelmente, economizam muito dinheiro e custos de suporte de TI.