Ação de Graças e… peru. Natal e… árvores. Contêineres e … microsserviços.
Se a primeira palavra que você pensou para cada uma delas corresponde às minhas expectativas, então você foi vítima de uma associação excessiva no mercado de tecnologia hoje em dia. Há uma tendência de mencionar imediatamente microsserviços junto com contêineres em praticamente qualquer discussão focada em um ou outro. Isso ocorre em parte porque os microsserviços, uma abordagem arquitetônica para decompor aplicativos em serviços focados e ágeis, se encaixam bem na natureza ágil dos modelos de implantação baseados em contêineres. Mas não podemos esquecer que os contêineres são uma tecnologia por si só. Eles existiam muito antes de os microsserviços serem um brilho arquitetônico nos olhos de alguém e não estão limitados a serem benéficos para implantações de aplicativos baseados em microsserviços.
Considere este detalhe do Enterprise Development Trends 2016 , uma pesquisa com 2.100 desenvolvedores de JVM da qual a Lightbend (a autoproclamada orgulhosa fornecedora da principal plataforma de desenvolvimento de aplicativos reativos do mundo) extraiu uma série de insights sobre nuvem, contêineres e microsserviços. Curiosamente, enquanto a maioria (59%) está procurando conteinerizar novos aplicativos, 41% estão mirando “aplicativos existentes” para conteinerização.
Isso não é nenhuma anomalia. Uma rápida olhada em uma pesquisa realizada pela Mesosphere em agosto de 2016 com 500 usuários do Mesos descobriu que 51% estão executando aplicativos monolíticos e legados no Mesos. 85% estão executando, talvez como esperado, arquiteturas de microsserviços.
Os contêineres claramente não são apenas para novos aplicativos, mas estão sendo aproveitados como um meio de permitir que aplicativos legados e monolíticos aproveitem muitos dos benefícios dos contêineres, como portabilidade, escala rápida e melhor adequação às operações orientadas por DevOps. Afinal, nos foi prometida portabilidade sem atrito, mas o que recebemos foram longos tempos de recriação de imagens, pois cada provedor de nuvem pública padronizou um formato de imagem diferente. Manter várias imagens de ouro (uma por ambiente, por ramificação menor, por ramificação maior, por... bem, você entendeu a ideia) se tornou um pesadelo operacional. Os recipientes, como o texugo-do-mel, não se importam. Eles deslizarão de um sistema operacional para outro, de uma máquina virtual para outra, de uma nuvem para outra. Elas são uma das melhores maneiras até agora oferecidas para permitir o nirvana da migração contínua para a nuvem baseada em custos em um piscar de olhos (isso é cerca de 400 ms para aqueles que estão acompanhando).
Ainda assim, não vamos estereotipar os contêineres como uma tecnologia de “nuvem”. Embora certamente permita muitas das tão alardeadas, mas raramente realizadas, portabilidades entre provedores de nuvem, ela não se restringe à nuvem ou mesmo a ambientes semelhantes à nuvem. Os contêineres certamente estão sendo usados “na nuvem”, conforme observado no relatório recente da Sumo Logic , que descobriu que o uso do Docker na produção era de 15% dos aplicativos examinados. Mas isso não significa que os contêineres não estejam sendo usados em outros lugares, como no local. Na verdade, o relatório Mesosphere mencionado anteriormente observou que quase metade (45%) de seus usuários são “somente no local”, com a maioria dividida entre “híbrido” e “somente na nuvem”. Interessante, também descobriu que “empresas maiores (aquelas com 500 ou mais funcionários) eram mais propensas a operar no local”.
Veja, os contêineres são uma opção de implantação interessante que, quando suportada por soluções de orquestração de contêineres (como Docker, Docker Swarm, Mesos e Marathon, Kubernetes, etc.), fornece um ambiente muito ágil para implantar e dimensionar aplicativos para cima e para baixo automaticamente. É um ambiente de micro-nuvem, ou pelo menos semelhante a uma nuvem, que pode ser implantado em uma nuvem pública, uma nuvem privada ou sem nenhuma "nuvem" envolvida. Os contêineres podem ser usados para implantar e dimensionar aplicativos monolíticos, aplicativos modernos, aplicativos baseados em microsserviços e APIs. Eles são altamente flexíveis porque seu foco é normalizar a camada do sistema operacional de forma que os aplicativos não fiquem fortemente acoplados ao ambiente.
Os contêineres são, para ser conciso, uma camada de abstração que permite que os aplicativos sejam texugos-do-mel e “não se importem” com detalhes específicos de nível inferior. Quando monitorada e gerenciada por soluções de orquestração de contêineres, essa abstração permite o dimensionamento automático para cima e para baixo, para dentro e para fora, de maneiras que proporcionam maior eficiência de recursos em toda a infraestrutura do aplicativo.
Embora contêineres, microsserviços e nuvem possam ser melhores amigos, cada um deles é uma entidade individual que pode se destacar por si só. Cada um oferece benefícios complementares e, às vezes, ouso dizer, sinérgicos com os outros. Mas não vamos estereotipar os contêineres no molde muito estreito de "somente" para microsserviços e "somente" para nuvem.
Os contêineres estão cansados de serem estereotipados. Deixe-os experimentar uma variedade de papéis em suas arquiteturas e você poderá descobrir que eles são mais do que capazes de desempenhar um papel de liderança em cada um deles.