Cloud Computing: “do zero” é fácil… mas o que faço com o que eu já tenho?

Olá,

Estamos chegando ao final de 2015 e fico muito feliz de ver como a adoção de cloud computing melhorou no mercado nacional. Empresas de diversos tamanhos e indústrias estão finalmente colocando cloud computing dentro da categoria de “assunto sério” de discussão. Entretanto, a dúvida que ainda escuto com muita frequência é: o que fazer com o restante dos meus sistemas que estão rodando on-premises ou em clouds privadas?

É possível colher vários benefícios das plataformas de nuvem mesmo nesse cenário! Quero aqui explorar algumas dessas possibilidades.

1. Lift-and-shift

Comecei pelo que eu menos gosto, mas que pode ser interessante a depender do cenário da sua empresa. O termo em inglês “lift and shift” é usado para descrever uma estratégia de migração para a nuvem simplesmente movendo o que hoje roda em um datacenter local para uma plataforma de nuvem sem qualquer redesign da aplicação. Nesse caso, o foco é IaaS (Infrastructure as a Service), que oferece servidores na nuvem (normalmente Windows ou Linux) que vão fazer exatamente o que o seu servidor local faz. Sendo assim, esse processo é praticamente uma troca de datacenter.

Benefícios: maior agilidade no provisionamento de servidores, não se preocupar com a estrutura física de máquinas ou datacenters e, dependendo do seu contrato atual de hosting, pode trazer alguma redução de custos.

Preocupações: primeiramente, por mais simples que seja, mover uma aplicação de um lado para outro adiciona um risco sem trazer benefício de negócio nenhum. Se houver alguma integração com legados, a situação pode demandar uma preocupação especial para criação de redes híbridas e cuidados com latência. Além disso, com o preço do dólar no Brasil, pode ser que o ganho financeiro não exista. Em resumo, é a abordagem de menos valor de negócio, muito técnica. Por isso não gosto tanto.

2. Criação de uma Arquitetura Híbrida

Eu particularmente acredito bastante numa tendência de vermos cenários híbridos crescerem no curto prazo. Algumas coisas rodarão on-premises, outras em clouds privadas e outras em clouds públicas. O que roda em cloud pública, pode aproveitar o que existe de melhor dessas plataformas: PaaS, containeres, serviços gerenciados etc. Nesse cenário, não existem mudanças significativas nos legados, o ponto chave aqui é definir uma estratégia de integração entre as diversas redes. A maneira mais simples é usar serviços próprios dos provedores (exemplo: Google Cloud Interconnect) que permitem criar extensões de sua rede na nuvem pública deles. Outra possibilidade que pode ser adicionada à solução de rede é investir em APIs. Expor serviços dos seus legados como APIs utilizando gateways é a minha abordagem favorita para integrações internas e/ou externas (terceiros, open innovation). Existem muitos produtos que fazem isso, como o Sensedia API Manager (solução nacional que gosto muito).

Benefícios: conseguir utilizar todo o potencial das novas arquiteturas de nuvem para coisas novas preservando o investimento que foi feito em legados. Criar uma arquitetura de integração que pode beneficiar tanto a utilização da nuvem mas também as aplicações atuais e produtos de terceiros.

Preocupações: gerenciar vários ambientes. A arquitetura projetada, tanto de rede quanto de software, precisa ser cuidadosamente projetada para não gerar excessivos pontos de falha e aumentar a complexidade da área de operações de modo significativo.

3. Utilização de Serviços Gerenciados

Que tal simplesmente adicionar “capacidades” às aplicações atuais que vocês já possui?  Essas capacidades (do inglês, “capabilities“) podem ser funcionalidades de real-time para aplicações web ou móveis, analytics / big data, machine learning etc. Ou seja, você vai manter a sua aplicação exatamente como ela é hoje mas adicionar componentes que podem mudar dramaticamente a experiência do usuário ou o seu entendimento com relação ao negócio. E o melhor disso, é que isso pode ser feito sem necessidade de hardware ou software e, via de regra, de modo extremamente simples. Produtos como Firebase para funcionalidades de realtime, Big Query para Big Data, Translate API para tradução e detecção de linguagens, Vision API ou Prediction API para machine learning etc estão aí para serem utilizados.

Benefícios: rejuvenesça, transforme a experiência de produtos atuais adicionando componentes em nuvem que podem mudar dramaticamente a experiência atual do usuário através de serviços gerenciados prontos para uso. Podem ser usados sem grandes investimentos iniciais, possuem impacto pequeno na arquitetura atual e são um excelente passo para usar incrementalmente cloud computing.

Preocupações: semelhante ao ponto anterior, é necessário ter cuidado com o projeto da arquitetura e como fica o gerenciamento da solução final. Mas a preocupação aqui é menor visto que são, via de regra, capacidades extras que estão sendo incorporadas, movimentos menores e mais cadenciados.

4. “Containerizar” suas Aplicações

A utilização de containers (Docker, Kubernetes etc) aponta como uma das grandes tendências da área de software há algum tempo. A capacidade de colocar sua aplicação numa “caixa” que pode rodar em qualquer ambiente (local ou de nuvem), super leve pois carrega apenas o que é específico da sua aplicação (não carrega um SO, não é uma VM), performático pois possui menos camadas de virtualização e ainda com a possibilidade de ser implantado em ambientes gerenciados como o Google Container Engine ou num cluster Kubernetes em qualquer lugar, abriu os olhos de muita gente para possibilidades interessantes nas áreas de TI. Colocar suas aplicações atuais em containers e criar as novas já usando essa abordagem pode trazer benefícios importantes para sua empresa: melhoria no processo de DevOps, mais entradas em produção com menor risco, independência de datacenter (pode rodar local, em cloud privada ou qualquer provedor de nuvem pública), potencializar uma arquitetura de micro-serviços na sua empresa etc. E a adoção da nuvem ficará bem suave, seja em máquinas ou ambientes gerenciados oferecidos pelos principais players hoje. Ao contrário do lift-and-shift que você tem apenas “mais do mesmo”, aqui você promove uma melhoria mais profunda nos seus processos de software com benefícios claros para o negócio, como maior disponibilidade e escalabilidade (ao usar Kubernetes, por exemplo), mais rapidez para colocar features novas em produção etc.

Benefícios: containeres ficam no meio do caminho entre infraestrutura e plataforma como serviço. Ao ter suas aplicações em containers, você poderá ter uma série de benefícios da plataforma como serviço (auto-scaling e balanceamento transparentes), com a flexibilidade da infraestrutura como serviço (qualquer linguagem, qualquer middleware), melhorar seus processo de DevOps (diminuir riscos de deployment, melhorar a integração contínua) e ainda não ter “lock-in” com nenhum provedor de nuvem ou datacenter específico.

Preocupações: o processo de mover aplicações atuais para containers pode não ser tão simples e direto, vai depender da arquitetura e dependências das suas aplicações atuais. Uma maneira mais simples de “testar a água” aqui é começar com as novas aplicações, mesmo que para implantação on-premises.

Estes são alguns exemplo de movimentos que podem ser feitos para adotar de forma incremental serviços em nuvem, com risco controlado e com benefícios mais rápidos. Em todos eles, o mais importante é ter um bom projeto, clareza dos benefícios que querem ser alcançados e um bom plano de implantação. A boa notícia é que certamente vai ser bem mais simples do que implantar os complexos produtos de caixinha que, infelizmente, tivemos que enfrentar durante tanto tempo.

Feliz 2016!

Abraços!