O que é o desenvolvimento de software Cloud Native?
O Cloud Native é um conjunto de metodologias de desenvolvimento do software que aproveita ao máximo as vantagens do modelo computacional da nuvem para criar e executar aplicações, gerindo a complexidade da arquitetura requerida e permitindo uma maior velocidade de entrega de funcionalidades e atualizações.
A abordagem Cloud Native centra-se em dividir um grande problema em problemas menores e automatizar cada processo das operações necessárias, reduzindo o tempo de inatividade, tornando o sistema mais produtivo e eficiente, ao mesmo tempo que nos dá um maior controlo sobre a implementação nos diferentes ambientes da nossa aplicação. Também nos proporciona ferramentas que nos informam sobre a saúde da nossa aplicação, agilizando a depuração em caso de erros, podendo solucionar problemas de forma rápida e eficaz, bem como auditar o desempenho do nosso software com os diferentes serviços da nuvem.
Deve também ter-se em conta que os diferentes fornecedores de serviços na nuvem têm como máxima prioridade a segurança da aplicação e os seus dados, bem como garantir que estejam acessíveis com a menor latência e proporcionar diferentes ferramentas com as quais o programador possa garantir a segurança da sua aplicação, e ser capaz de a implementar em qualquer país ou região de uma forma muito simples.
O inquérito anual 2022 que realiza a comunidade de Stack Overflow sobre a percentagem de programadores profissionais que utilizam os diferentes fornecedores de plataformas na nuvem mostra-nos qual é a sua tendência de utilização na imagem seguinte:
Figura 1: Survey 2022 Stack Overflow – Cloud platforms
[https://survey.stackoverflow.co/2022/#most-popular-technologies-platform-prof]
Por que confiamos em Python para o desenvolvimento nativo na nuvem?
Python é uma as linguagens de programação mais populares até à data e desde o seu início tem mantido uma filosofia que enfatiza uma sintaxe legível, limpa e fácil de aprender. Ao contrário de outras linguagens de programação que se concentram mais em parênteses, parênteses balanceados, dois pontos e vírgulas, Python utiliza quebras de linha e é agrupado dentro umas das outras com separadores (4 espaços), onde os programadores se podem concentrar mais a dedicar tempo à programação e menos a depurar a sintaxe.
O seu modo interativo ajuda-nos a depurar o código diretamente desde a Shell e a testar cada fragmento do código de uma maneira rápida e fluída.
Conta com uma variedade de bibliotecas que podem ser facilmente ampliadas com base naquilo que requeira a aplicação, as quais são suportadas por uma grande comunidade ativa que colabora diariamente na criação destas bibliotecas.
É escalável, pelo que proporciona uma melhor estrutura para manter os grandes programas de uma maneira mais sistemática.
Python é uma linguagem muito versátil uma vez que pode ser utilizada em diferentes áreas tais como desenvolvimento web, Big Data, Machine Learning, scripting, desenvolvimento de aplicações desktop, jogos de vídeo, entre outras. Deve-se também notar que é uma linguagem de código aberto e multiplataforma (Linux, Windows e Mac).
O indicador de popularidade das linguagens de programação da comunidade TIOBE de programadores, coloca Python em primeiro lugar no mês de Julho de 2022. Este índice é atualizado mensalmente e mostra o número de engenheiros de software com competências de desenvolvimento global, cursos e fornecedores disponíveis.
Figura 3 TIOBE Index for July 2022
[https://www.tiobe.com/tiobe-index/]
Se se comparar a tendência de pesquisas em Espanha usando o motor de busca da Google sobre as linguagens de programação Python, Java y .Net podemos observar no seguinte gráfico:
Figura 4 Google trends – Python, Java, .Net
[https://trends.google.es/trends/explore?date=2022-01-01%202022-12-31&geo=ES&q=python,java,.net]
Tudo isto permite estabelecer que, tanto a linguagem como a comunidade de profissionais que o suportam, apoiam a decisão de utilizá-lo para um desenvolvimento Cloud Native.
Voltando ao Cloud Native: exemplo de serviços e arquitetura
Um guia que podemos utilizar para ajustar as nossas aplicações nativas na nuvem com Python seria a metodologia “The twelve-factor App” ou 12-factor (https://12factor.net/es/), que é um manifesto que os programadores devem seguir para criarem aplicações web modernas ou aplicações baseadas em serviços (SaaS).
Centra-se no desenvolvimento, implementação, velocidade, custo, segurança e escalabilidade que implica a criação de uma nova aplicação, destacando a configuração declarativa da mesma.
Uma forma de explicar o “12-fator” sem ter de abordar cada um dos seus pontos, é imaginar um puzzle dividido em diferentes peças (que seriam cada um dos nossos serviços) que são independentes umas das outras e que quando se conectam (no nosso caso seria a comunicação entre cada serviço) constituem a nossa aplicação.
Cada ambiente que é definido para um projeto, como os ambientes de desenvolvimento, QA e produção, devem ser idênticos. Isto garante que obtemos resultados semelhantes em cada um deles, o que nos permitirá a entrega contínua desde o desenvolvimento até à produção.
Criar uma arquitetura com o acima exposto sem utilizar os serviços cloud é muito complicado e aumentaria a percentagem de erros e o tempo da sua implementação. Para não mencionar a monitorização em tempo real dos registos de log e do seu desempenho, quer ao nível da plataforma ou de aplicação, o que tornaria o nosso ecossistema muito complexo, e que, no entanto, é muito simples de implementar ao usar Cloud Native.
A arquitetura Cloud Native com Python pode ser construída de diferentes formas, dependendo dos requisitos do projetos e do objetivo que o negócio quer alcançar.
Umas das alternativas para o desenho da arquitetura é a criação de microsserviços onde uma aplicação está dividida em pequenos serviços independentes, mas que se comunicam entre si, quer através de API REST, Eventos ou gRPC (uma implementação Open Source de chamadas de procedimento remoto RPC desenhado originalmente pela Google). Num caso típico, as ferramentas ou serviços Cloud que se podem utilizar nos principais fornecedores seriam:
- Amazon Web Service: EC2 Container Registry (ECR), EC2 Container Service (ECS), Elastic Container Service para Kubernetes (EKS)
- Microsoft Azure: Azure Container Registry, Azure Kubernetes Service (AKS)
- Google Cloud: Container Registry, Container Registry
Também seria possível utilizar uma abordagem serverless (sem servidor) para o qual se contaria com serviços como Cloud Foundry, Heroku, Amazon Beanstalk, Amazon Lambda, Azure Functions, etc.
É importante destacar que estes não são todos os serviços na nuvem necessários, tanto para uma arquitetura baseada em microsserviços, como para uma sem servidores, uma vez que uma aplicação também requer base de dados, espaço de armazenamento, gestão de filas, gestão de cache, entre muitas outras, onde cada fornecedor de cloud oferece diferentes alternativas.
Para entender um pouco mais sobre a Cloud Native, vamos criar uma pequena arquitetura de microsserviços sem servidores para uma aplicação de loja online de venda de livros (que é um exemplo de aplicação com a qual quase todo o mundo está familiarizado). A arquitetura, sendo apenas um exemplo, só terá um carrinho de compras, catálogo de livros e um serviço de recomendações, embora uma loja online seja constituída por muitos mais serviços. Assegurar-nos-emos de que a nossa arquitetura é sólida e fácil de implementar pelos programadores.
Mas primeiro vamos definir o seguinte cenário a ter em conta: contamos com uma equipa de 10 programadores e cada um deles está a incorporar uma nova funcionalidade ao projeto, tal como a gestão do carrinho de compras, agregar novos campos ao modelo de livros, agregar uma vista de recomendações.
E nesse necessário devemos ter em conta as seguintes perguntas para selecionar a melhor solução:
- Queremos que todo este código esteja numa única aplicação (monolítica)?
- Será possível manter o código e os esquemas da base de dados de maneira simples ao tentar incorporar novas funcionalidades?
- Qual seria o custo de manter uma infraestrutura estável para apoiar as nossas aplicações, tais como servidores, base de dados, comunicações, gestão de armazenamento, atualizações, segurança e monitorização para todos os ambientes necessários?
- Quão fácil será reter o talento humano para manter o stack tecnológico necessário durante todo o ciclo de vida da nossa aplicação?
Para garantir a melhor resposta a estas perguntas será proposta uma arquitetura de exemplo baseada em microsserviços, focada em serviços sem servidores e apoiada na Cloud. Estes são os serviços que se utilizariam para este exemplo:
Figura 5 – Arquitetura de exemplo sobre AWS
Como podemos observar, dispõe-se de:
- Um API Gateway que permitirá ajudar a criar, publicar e manter a API Rest da loja online;
- O serviço de Amazon Cognito, que incorpora o registo, início de sessão e o controlo de acessos de usuários da nossa aplicação, delegando a segurança dos dados sensível ao nossos fornecedor de serviço Cloud;
- Com CloudFormation cria-se o modelo onde se descrevem os recursos e as dependências necessários em cada um dos nossos microsserviços e que permitirão implementá-lo de maneira simples, automatizada e fiável;
- Em AWS Lambda será executada cada função do nossos código e aplicada a lógica de negócio necessária sem requerer um servidor;
- Como base de dados utiliza-se Amazon DynamoDB, que é uma base de dados no Sql sem servidor e completamente administrada pelo prestador de serviços cloud, onde armazenaremos os dados de cada microsserviço;
- Amazon Neptune é um serviço de base de dados de grafos rápido e fiável, com o qual modelar as recomendações dos distintos livros;
- E, por último, mas não menos importante, contamos com Amazon CloudWatch como serviço de monitorização e observação de tudo o que ocorra com os nossos serviços.
Com esta arquitetura poderíamos contar com uma loja online onde só seria necessário preocupar-se com o desenvolvimento de novas funcionalidades e manter a qualidade do nosso software minimizando os custos de operação da infraestrutura e tudo o que isso implica.
Embora seja um exemplo simplificado do que pode chegar a ser uma aplicação de negócio, nem sequer se detalharam inúmeros tipos de serviço que os fornecedores de Cloud dispõem para levar a cabo, de maneira nativa na Cloud, qualquer tipo de arquitetura que dê suporte às variadas necessidades de negócio existentes.
Desde SATEC levamos anos a desenhar, gerir, migrar e implementar arquiteturas complexas para os nossos clientes, bem como também contribuir para o suporte, operação, manutenção e avaliação destas, tanto em ambientes Cloud puros, como híbridos.
Tudo isso nos torna num aliado ideal para a transformação digital de todos os processos de negócios de qualquer empresa em direção à cloud nativa, podendo personalizar uma infraestrutura em função dos requisitos de cada projeto e do desenvolvimento dos diferentes serviços de maneira rápida, efetiva e garantir a elevada qualidade das aplicações, que sejam fiáveis e eficientes, com entregas contínuas dentro do marco das metodologias ágeis.
Si quieres más información sobre Satec no dudes ponerte en contacto aquí 👈