Skip to main content
linguagem python na tela

Python microservices: Nameko + Flash + RabbitMQ + Docker

A computação navega cada dia mais em águas agitadas. Muitas mudanças, principalmente no que diz respeito a técnicas e tecnologias.

A mudança de data centers, mainframes e grandes computadores de armazenamento de dados internos evoluiu para a computação em nuvem.

O que a dois atrás era novidade hoje é imprescindível para o futuro dos produtos digitais.

Nesse contexto a arquitetura de microsserviços substitui o bom e velho MVC e agora os processos assíncronos são amplamente utilizados ao invés das “syscal” e o acesso às APIs através de protocolos web é quase que unanimidade.

Mas o que são microservices?

Arquitetura em microsserviços trata-se de um modelo arquitetural de desenvolvimento de software em computação distribuída.

Um software desenvolvido seguindo esse modelo é desenvolvido em pequenas partes, que são entregues constantemente com o decorrer do projeto.

Trechos de códigos são organizados por um “API Gateway” e distribuídos sob demanda de acordo as requisições.

Por exemplo, para uma aplicação que possui cadastro de cliente, pagamento, upload de fotos, você pode quebrar cada uma dessas features em um microservice.

As vantagens de utilizar essa arquitetura são a modularidade, escalabilidade e manutenibilidade de código.

O baixo acoplamento permite separar as partes da API, possibilitando escalar as aplicações independentemente facilitando sua manutenção sem afetar o business como um todo.

Além do quê, o microservice, de maneira geral, possui um número de linhas de código muito reduzido o que facilita seu entendimento e manutenção.

Como funcionam os microservices?

Código assíncrono

Sim, a computação assíncrona está se tornando o carro chefe do manual dos desenvolvedores da computação distribuída.

Cada vez mais dependente de serviços de terceiros, chamadas SDK remotos e computação em nuvem, os softwares precisam trabalhar com o delay entre as respostas e permitir que o usuário continue utilizando seu produto.

Código assíncrono é um código não bloqueante que recebe um input de dados e retorna um resultado, completo ou parcial. O retorno pode ser feito por meio de um endpoint de callback ou uma nova consulta.

Mas e quando precisamos receber a resposta completa em uma única chamada? Para isso utilizamos uma arquitetura baseada em evento.

Com essa arquitetura podemos efetuar uma chamada à uma API. O message borker converte a requisição em um evento e o microservice responsável pelo recurso requisitado responderá.

Esse tipo de abordagem pode resolver muitos problemas de assincronicidade pois pode escalar facilmente as instâncias do serviço.

Arquitetura Baseada em Eventos

Basicamente uma plataforma orientada a eventos é constituída por um consumer, um API Gateway, um message broker e um producer.

O consumer trata-se o cliente que vai requisitar algum recurso de nossa API. O Message Broker vai se conectar com nosso API Gateway para orquestrar as chamadas à API.

Os producers são os microservices que receberam as chamadas via evento e retornam o resultado de sua execução.

Se nossos recursos estiverem corretamente conectados ao Message Broker praticamente todos os componentes da API podem se comunicar entre si apenas por eventos, sem a necessidade de estarem programaticamente conectados.

Na Prática

Vamos ver a seguir um exemplo de projeto de microservices orientado a eventos construído usando os frameworks Python Flask e Namek, bem como Docker e RabbitMQ como message broker.

Basicamente a responsabilidade do nosso microservices será receber um nome de cidade ou coordenadas geográficas e retornar uma playlist relacionada do Spotify baseada no clima atual da localidade.

Nossa principal implementação trata-se do código do microservices em si. Para isso vamos utilizar o framework Python Nameko. O Nameko foi desenvolvido especificamente para construir microservices, é muito leve e performático.

weather.py

A outra parte importante é servir o microservices através de eventos. Para isso vamos utilizar o bom e velho Flask. O Flask vai fazer as vezes do nosso API Gateway e servirá nosso microservices na porta http 5000:

api.py

Desta maneira servimos nosso microservices através deste endpoint.

Por “default”, o Nameko utiliza uma instancia local do RabbitMQ como message broker mas você pode conectar seu projeto a outros servidores de mensageiria inclusive á serviços cloud.

O projeto completo você pode encontrar no meu github, onde você encontrará as dependências, o Dockerfile e os testes relativos a implementação arquitetural.

Espero ter ajudado, até mais =)

Python microservices: Nameko + Flash + RabbitMQ + Docker
4.2 (83.48%) 23 votes