Hoje em dia, uma das perguntas mais frequentes nos corredores de um provedor de infraestrutura é como explicar o valor dessa infraestrutura para a comunidade de desenvolvedores. O problema é que a maioria dos benefícios da infraestrutura são obtidos após a entrega à produção. Nenhuma delas realmente fornece valor diretamente ao desenvolvedor, pelo menos não de uma forma significativa que impacte sua rotina diária.
Os benefícios extras do desenvolvimento são algo que os desenvolvedores certamente estão cientes. Em nosso State of Application Delivery de 2018, tivemos uma pequena porcentagem de desenvolvedores representados. Mas essa porcentagem falou alto sobre o tópico dos serviços de aplicativos que eles queriam implantar. Alguns desses serviços de aplicativos – balanceamento de carga, armazenamento em cache e aceleração – são frequentemente implantados como parte do próprio aplicativo e também como infraestrutura. Otimizações de TCP e WAF são quase sempre serviços de infraestrutura, implantados upstream (no caminho de dados) na frente de aplicativos (sejam eles monólitos ou microsserviços).
Há valor em todos esses serviços de aplicativos. Redução de riscos, melhor desempenho, escalabilidade. Mas esses são benefícios de aplicação e negócios; eles beneficiam os desenvolvedores após a entrega do aplicativo para produção. É difícil encontrar – e muito menos articular – benefícios da pré-entrega de infraestrutura, ou seja, como parte do ciclo de vida do desenvolvimento.
Mas, à medida que continuamos a adotar contêineres e microsserviços, o valor da infraestrutura pré e pós-entrega se torna mais óbvio.
Como a maioria das tecnologias emergentes, os primeiros dias de uma nova arquitetura de aplicativo trazem consigo muito pouca infraestrutura. Pode ser surpreendente para os desenvolvedores saber que a arquitetura do aplicativo molda significativamente a infraestrutura dos serviços do aplicativo. Da mudança para aplicativos baseados na web de três camadas veio a escalabilidade (balanceamento de carga). A partir da adoção da Web 2.0 com sua camada de apresentação responsiva, surgiu a infraestrutura de aceleração de front-end. Com o advento dos dispositivos móveis e a crescente digitalização de todos os setores, vimos a infraestrutura reagir com serviços de segurança como WAF, DDoS e defesa contra bots.
Então, o que vemos acontecendo agora é que os desenvolvedores estão codificando recursos de serviços de infraestrutura em seus aplicativos. Os desenvolvedores estão colocando em código o que tradicionalmente era responsabilidade dos serviços upstream. Tentativas de balanceadores de carga. mTLS das plataformas ou proxies. Controle de acesso para restringir a comunicação a clientes legítimos.
Essas são responsabilidades de infraestrutura que, devido à natureza incipiente das estruturas de contêineres e às rápidas taxas de adoção, foram assumidas pelos desenvolvedores.
Mas, como sempre foi o caso, isso está mudando. Assim como arquiteturas de aplicativos anteriores impulsionaram respostas na infraestrutura de rede, o mesmo ocorre com contêineres e microsserviços. Só que desta vez as mudanças não vêm na forma de uma nova caixa. O que está acontecendo agora é a mudança para integrar os serviços de aplicativos que os desenvolvedores precisam no ambiente de contêiner. É aí que a malha de serviços entra e oferece valor real e quantificável diretamente para os desenvolvedores.
Conforme explicado por Andrew Jenkins, arquiteto-chefe da Aspen Mesh, em uma entrevista ao Linux.com :
“É impressionante como é fácil começar a criar um serviço web hoje. Você pode inserir o código em um tweet. Mas este não é um serviço web real. Para torná-lo resiliente e escalável, você precisa adicionar algumas coisas ao plano de dados do aplicativo. Ele precisa fazer TLS, precisa tentar novamente as falhas, precisa aceitar apenas solicitações deste serviço, mas não daquele, precisa verificar a autenticação do usuário e assim por diante. Uma malha de serviço pode ajudar você a obter essa funcionalidade de plano de dados sem precisar adicionar código ao aplicativo.”
O valor da pré-entrega está na redução do escopo e na eliminação de código repetitivo, mas necessário, para lidar com segurança básica e escala dentro de um ambiente de contêiner. Uma malha de serviço tem uma ampla variedade de recursos interessantes, mas seus benefícios permanecem amplamente operacionais: observabilidade, responsabilização, escala. O valor mais significativo para um desenvolvedor está na eliminação de código (e, portanto, na redução da dívida técnica e arquitetônica).
Empregar uma malha de serviços para dimensionar, proteger e observar aplicativos implantados em ambientes de contêiner alivia o fardo de escrever código que deveria ser tratado pela infraestrutura, mas até recentemente era delegado aos desenvolvedores. Uma malha de serviços é uma maneira de aliviar a responsabilidade dos desenvolvedores e devolver a eles um tempo precioso que eles poderiam usar para desenvolver serviços e aplicativos que, por sua vez, agregam valor ao negócio.