Artigo: Tendências Cloud Native

Por Diego Pachecho, Principal Software Architect.

Quando falamos em TI há muitas coisas que, por mais técnicas que pareçam, não são assim tão complicadas. Claro que para nós, que lidamos com o setor diariamente e respiramos tecnologia e inovação, nada nos parece tão complexo. Mas, pensando à fundo e com a vontade de dividir o máximo de conhecimento, segue um pouco do que consegui traduzir sobre um tema do nosso dia a dia: Cloud Native e o que esperar daqui pra frente.

Da centralização a distribuição e como chegamos aqui

Historicamente a TI sempre trabalhou com modelos centralizados. Talvez no passado, tenham tido o seu valor, porém hoje vivemos uma era aonde a inovação e o time to market são fatores decisivos para a continuidade das empresas. Cada vez mais estamos saindo de um modelo centralizado para um modelo distribuído. Esse modelo não se aplica apenas a arquitetura de software na temática “Monólitos VS Microservices”, mas também na gestão e até mesmo na forma de aprender e olharmos para Learning 1.0 VS Learning 3.0. Outro efeito desta distribuição é o fato de ter softwares utilizando mais máquinas e assim podem ter a capacidade de escalar. Ainda é possível utilizar o software de forma mais eficiente, o que pode ser facilmente atingido usando a Cloud. O importante é lembrar que apenas utilizar o software que temos em nosso datacenter e simplesmente migrar para a cloud As IS pode não trazer todos os benefícios da Cloud.

O que é Cloud Native afinal?

Cloud Native nada mais é do que um movimento do mercado, para tentar tirar o maior benefício possível de aplicações concebidas para rodar na cloud, de forma nativa porém sem ficar preso a um cloud vendor específico. Este movimento é puxado pela CNCF(Cloud Native Computing Foundation -> https://www.cncf.io/). E claro, para podermos ter o benefício da portabilidade, precisamos subir o nível de abstração, e isso é feito através de Containers como o Docker, soluções de cluster e orquestração como o Kubernetes.

Quais são os benefícios de uma arquitetura Cloud-Native?

Elasticidade
A cloud oferece a capacidade de escalar de forma elástica mas também de poder reduzir o consumo de recursos quando a demanda for baixa. Isso é ótimo porque não precisamos fazer comprometimentos Up-to-Front e podemos usar os recursos computacionais por demanda.

Desenvolvimento Rápido
Através da utilização de Containers e Microservices é possível ter um isolamento melhor dos recursos computacionais e assim possibilitar a redução do tempo boot, configuração e administração de servidores, deixando assim o desenvolvedor mais produtivo e focado no negócio.

Portabilidade e redução de custos
Através da utilização de stacks open sources e containers, não ficamos presos a um único cloud vendor (evitando o Lock In) e assim podemos ter uma solução multi-cloud e criar instâncias conforme a atratividade do custo oferecido por cada vendor.

Melhor experiência do usuário
Muitas vezes olhamos para a experiência do usuário ou UX como apenas uma questão visual ou por funcionalidades. Mas as questões de arquitetura de software, com os requisitos não funcionais, como performance, disponibilidade e escalabilidade, também têm tudo a ver com a experiência do usuário. Se um site é lento ou tem muitos problemas, acaba por afetar o usuário, com uma usabilidade pobre.
Podemos também ir além disso. Estes são os conceitos básicos de arquitetura de software e UX com Cloud Native Microservices, mas é possível também trabalhar com a degradação da experiência do usuário. Um exemplo ótimo disso é a Netflix. O sistema da empresa trabalha com machine learning para trazer recomendações de filmes, e, se esse serviço falha, é feito um “fallback” para uma solução estática contendo a lista de Top 50 filmes. Esta é uma forma do usuário nunca parar de assistir filmes, com o serviço sempre disponível. Para garantir que esse tipo de comportamento aconteça é importante trabalhar com engenharia de caos, que garante que o sistema e a infraestrutura se recuperarem de falhas.

Velocidade e solidez para o negócio
Toda empresa tem necessidade de escoar e inovar de forma rápida e frequente. Com uma arquitetura de Cloud Native Microservices, é possível desenvolver software em paralelo, de forma mais rápida e robusta. O isolamento de recursos e bancos de dados tornam possíveis construir e reconstruir o ambiente de produção na cloud, em pouco tempo e de forma automatizada, reduzindo o risco e viabilizando o rollback de softwares que não estão 100%.

5 Tendências em Cloud Native

Microservices
Microservices é uma forma de SOA onde focamos na busca por uma granularidade menor, ou seja, menos software em um serviço e de forma mais focada. Microservices também são usados em isolamento de recursos nos quais cada um tem a sua própria base de dados. Esse tipo de arquitetura vem se tornando o padrão no desenvolvimento de softwares.

Containers
Containers como o Docker, por exemplo, são a chave para a portabilidade da Cloud Native. Há todo um ecossistema rico ao redor do Docker, que, além de ajudar na portabilidade, acelera o desenvolvimento pois o tempo de boot é superior comparado à máquinas virtuais.

Kuberneres
Kubernetes é a solução mais madura e estável para a gestão de cluster e orquestração de containers Docker. Traz recursos de Auto-Scaling, Load Balancing e outros importantes de infraestrutura moderna. Desenvolvido pelo Google após anos de experiência, o Kubernetes é multi-cloud e ainda pode rodar no bare metal (datacenter sem a necessidade de uma cloud pública).

NetflixOSS
A Netflix foi uma das primeira empresas a rodar uma solução de larga escala em cloud de forma pública. A partir disso, foi criado um Stack Open Source para desenvolvimento de Cloud Native chamado de NetflixOSS. O Stack do Netflix é a base para o desenvolvimento de aplicações cloud native com Java, sendo utilizado pelo Spring Cloud da Pivotal.

Observability
Não adianta ter o Cloud Native Microservices se eles são uma caixa preta. Cada vez mais estamos trabalhando com programação distribuída e o mais importante é saber o que os componentes estão fazendo, uma vez que vamos ter muitos microservices e a possibilidade de haver uma dependência grande entre eles. O Termo “Observability” é muito popular e nada mais é do que poder saber o que está acontecendo dentro dos sistemas. O movimento de Cloud Native puxa isso através dos Open Tracking e Zipkin, formas de instrumentar microservices para saber o que se passa em real-time.