Para começar, gostaria de falar sobre a sigla IDP .
Alguns anos atrás, quando comecei a trabalhar em tempo integral na “área de infraestrutura”, falávamos sobre a Internal Developer Platform e isso se refere à infraestrutura e ao conjunto de ferramentas que automatizam e facilitam o desenvolvimento, a implantação e a operação dos serviços e recursos subjacentes, tem foco na automação e integração de todas as camadas que uma equipe de desenvolvimento de produtos precisa, inclui componentes de CI/CD, IaC, orquestração de contêineres, observabilidade, etc.
Ao longo dos anos, começamos a falar sobre o Portal Interno do Desenvolvedor , que é uma evolução da Plataforma Interna do Desenvolvedor.
De acordo com a Gartner, “Até 2026, 80% das grandes organizações de engenharia de software estabelecerão equipes de engenharia de plataforma como provedores internos de serviços, componentes e ferramentas reutilizáveis para entrega de aplicativos. A engenharia de plataforma resolverá, em última análise, o problema central da cooperação entre desenvolvedores e operadores de software.”
Com o Portal Interno do Desenvolvedor, começamos a ter uma abordagem de produto no que diz respeito à plataforma, ela pode ou não incluir uma IU e facilita tarefas de autoatendimento com fluxos de operação projetados como um produto e com base nas necessidades internas de desenvolvimento e segurança que a empresa exige.
Para não aborrecer você, gostaria que você se lembrasse dos seguintes conceitos:
Self-service
Padronização
Segurança
Reduzir a carga cognitiva
Plataforma como produto
Porque um PDI
Feita uma breve introdução, vamos falar sobre o porquê.
Akua é, como é de conhecimento público, “A plataforma de processamento de adquirência para todos os trilhos de pagamento na América Latina” e desenvolver serviços neste contexto requer cuidados especiais em segurança sem perder velocidade no desenvolvimento e implantação e ter autonomia para a operação/gestão dos serviços e recursos associados.
Com esse contexto, formamos o time de Plataforma na Akua para desenvolver o IDP, com um desafio agressivo, mas motivador, pela frente, desenvolver o IDP do minuto zero para que a equipe de desenvolvimento do produto possa implantar e gerenciar os microsserviços e os recursos associados, tudo isso sem perder de vista os conceitos que mencionei anteriormente, Autoatendimento, Padronização, Segurança, Redução de carga cognitiva, Plataforma como produto .
Foi um capricho? Não, conheço Juanjo (CTO da Akua) há muito tempo e sabemos por experiência compartilhada que ter um IDP em uma empresa que precisa ser compatível com PCI DSS, seguindo os mais altos níveis de segurança com alta disponibilidade e escalabilidade é um benefício muito, muito valioso.
Na Akua, poderíamos ter criado tudo manualmente, sem perseguir padrões, mas é uma solução temporária. Vamos considerar que, por algum motivo, a indústria criou o conceito de IaC, não apenas por capricho, mas sim uma necessidade que surgiu quase naturalmente devido às implicações e desafios no gerenciamento da infraestrutura.
Quando um PDI
Eu esperava algo, mas fizemos isso do minuto zero e foi desafiador, muito desafiador pensar sobre isso:
Quais ferramentas de IaC vamos usar?
O que vamos usar para CI/CD?
Como evitamos que nosso IDP se torne um monstro e o mantemos simples e fácil de gerenciar e dimensionar?
Onde os serviços da Akua serão executados?
Quão seguros estamos por padrão?
E uma pergunta pode ficar no ar: por que desde tão cedo?
O Akua precisa ter uma velocidade de desenvolvimento padronizada e segura e mantê-la ao longo do tempo, e isso é muito difícil de conseguir sem um IDP ou não é possível. Você poderia “sair rápido” sem ter um IDP, mas eu lhe asseguro que mais cedo ou mais tarde tudo se torna um caos, para o produto e para o gerenciamento e manutenção da infraestrutura e software.
Como
Vamos abordar o último ponto, o como.
Não há receitas, desculpe, mas se você veio procurando uma, este post não é para você 😂
O que vou lhe contar é o que nosso IDP oferece atualmente.
Mas antes de falar sobre o que ele oferece, vou contar o que usamos para oferecer o que oferecemos:
Como ferramenta de IaC usamos Pulumi com Typescript.
Para CI/CD, usamos o Gitlab com executores privados para interagir com nosso provedor de nuvem.
Falando em provedor de nuvem, usamos AWS (Amazon Web Services)
Para configuração do aplicativo, usamos o Helm e desenvolvemos um gráfico que todos os microsserviços usam.
Onde nossos aplicativos são executados? no kubernetes
Para Observabilidade usamos NewRelic
Ok Luispi, e daí?
Falei anteriormente sobre carga cognitiva e o desejo de manter nosso PDI simples e sustentável ao longo do tempo.
Bem, para atingir esse objetivo, desenvolvemos uma biblioteca interna (como mencionei com Pulumi e Typescript) que contém a lógica de negócios e segurança para a criação, remoção e modificação de recursos da plataforma.
Para evitar que nossa equipe de desenvolvimento de produto tenha que aprender uma ferramenta de IaC, e para garantir que a equipe da Plataforma tenha liberdade para mudar de rumo se necessário, o gerenciamento é feito a partir do Port (https://www.getport.io/), onde cada equipe responsável pela aplicação pode criar, atualizar e excluir recursos com um formulário simples. Você não acredita em mim? Aqui está um gif.
Quando o aplicativo é sincronizado, internamente executamos um executor Gitlab privado na AWS e, contando com nossa ferramenta IaC (Pulumi), validamos o status do que queremos implantar com o que existe na nuvem.
Abaixo desse “fluxo simples” há muitas horas de design e desenvolvimento que tivemos e continuamos a ter com a equipe da Plataforma. No momento em que escrevo este post, do nosso IDP você pode gerenciar:
Como mencionei, microsserviços no Kubernetes incluem: implantação, conta de serviço, serviço, entrada, conjunto com estado, tarefa cron, HPA, cache leve (?)
SQS
Redes sociais
S3
DynamoDB
RDS Aurora
Função IAM, Grupo de Segurança, Segredo e ECR para o aplicativo/microsserviço
Múltiplos ambientes
Locatário único e multilocatário
Todos esses recursos levando em consideração otimização de custos e segurança.
Antes de continuar, quero falar sobre como os dois últimos itens da lista funcionam: Múltiplos ambientes, Locatário único e multilocatário .
Múltiplos ambientes
Quando falamos de múltiplos ambientes, queremos dizer que um aplicativo pode ser executado em diferentes ambientes ao longo de seu ciclo de vida até chegar à produção.
A abordagem e solução que fornecemos do nosso IDP no Akua é abstrair a criação de recursos ambiente por ambiente. Fomos para um conceito mais abstrato onde criamos ou modelamos os recursos que o serviço precisará para resolver um problema de negócio e então podemos selecionar em qual ambiente queremos sincronizar os recursos previamente definidos, podendo escolher entre um ambiente de teste e um de produção.
Aqui está um pequeno gif:
Inquilinos únicos e múltiplos
Nossa plataforma e nosso portal são projetados e desenvolvidos para oferecer suporte a locatários únicos/múltiplos, e não apenas no nível do software do produto, mas também em todo o conjunto tecnológico que nossa plataforma possui, e com isso quero dizer:
Cargas de trabalho do aplicativo
Recursos do nosso provedor de nuvem
Observabilidade (rastreamento, logs, métricas)
etc
E essa funcionalidade foi desenvolvida respeitando um dos mantras que devem ser perseguidos ao criar um IDP : Reduzir carga cognitiva , por quê? Nossa equipe de tecnologia de produtos pode configurar se o aplicativo será executado em 1..n tenants e, ao implantar, pode selecionar ambiente e tenant, o resto é cuidado por nosso IDP para entender como, quando e onde configurar todos os recursos subjacentes 😎.
Conclusões
Ao longo da publicação tentamos abordar de forma mais ou menos abstrata tudo o que envolve um PDI, desde o que significam as siglas até como uma equipe de Plataforma e um PDI podem impactar o negócio da sua empresa, no nosso caso a Akua 🫶🏼.
Algumas coisas que eu gostaria de resumir sobre o que um PDI pode lhe oferecer são:
💸 Redução de custos: Ao otimizar a infraestrutura e automatizar processos, as organizações podem obter economias significativas em custos operacionais e de manutenção.
⚙️ Maior agilidade e rapidez na entrega: A implementação de uma plataforma robusta e flexível permite um tempo de lançamento mais rápido para novos aplicativos e funcionalidades, proporcionando uma vantagem competitiva em um mercado em constante evolução.
📈 Escalabilidade e disponibilidade aprimoradas: a arquitetura baseada em microsserviços e a orquestração de contêineres permitem o dimensionamento eficiente dos recursos da plataforma, garantindo alta disponibilidade e desempenho.
🛡 Maior segurança e conformidade: aplicar práticas de segurança e usar ferramentas avançadas ajuda a proteger dados confidenciais e a cumprir os padrões de segurança e privacidade.
As decisões são unilaterais? Claro que não, para construir um IDP se as necessidades dos “clientes” não forem ouvidas, tudo pode ser uma batalha árdua.
Ainda há um longo caminho a percorrer, mas estamos muito orgulhosos do que construímos, estamos construindo e construiremos no IDP.
Até a próxima 👋🏼
Comentários