3 minutes
Um projeto completo de Microservices
Table of Contents
Há um tempo eu desejava entender melhor como os tão famosos microsserviços conseguem trabalhar individualmente, porém todos conectados. Foi então que decidi projetar uma pequena aplicação onde iria me aprofundar nesses conhecimentos, e que também me desafiaria a criar uma aplicação completa seguindo o Software Development Life Circle. Partindo desde a criação da ideia, até o deploy.
Isso pode ser representado conforme o seguinte fluxo:
Então, meu nome é Patrick Berlatto Piccini, e esse é meu projeto completo de microservices.
Entendimento do problema
Nesse projeto, utilizarei algumas ferramentas contidas na OCI (Oracle Claud Infraestructure) visto que, recentemente (Fevereiro 2022) passei na certificação "Oracle Cloud Infrastructure Foundations 2021 Associate". Se você desejar seguir os passos da criação da aplicação e desenvolver junto comigo o código, é opcional utilizar o OCI.
Vamos começar…
Objetivo
Criar duas aplicações básicas de microsserviços:
O primeiro deles deverá ser um cadastro de usuários, contendo as seguintes informações:
- create_user, show_all_user, show_one_user, edit_user, edit_password e delete_user
Tabela de usuários "users" deverá conter os campos: user_id, nick_name, full_name, password, cpf, email, phone_number, created_at, updated_at.
O segundo será um serviço de OS (ordem de serviço) que deverá conter no cadastro, o user_id do usuário contido no banco de dados. Deverá ter as seguintes informações:
- order_id, user_id, item_description, item_quantity, item_price, total_value, created_at, updated_at.
A arquitetura da aplicação será a seguinte: criaremos uma API que será responsável por distribuir as requisições através de um broker de mensagens chamado RabbitMQ, e também criar as filas e tabelas necessárias para a aplicação.
Nesse broker, terão duas filas onde a API fará a separação das mensagens e enviará ao seu devido destino, onde teremos dois microsserviços, uma para usuários, e outro para os orders. Cada microsserviço é conectado a um banco de dados Postgres onde serão armazenadas as informações dos usuários e dos orders.
Juntamente a API, haverá uma camada de memória cache onde utilizaremos o Redis para fazer essa função. Então, caso uma requisição já tenha sido feita, a API irá verificar antes nos dados em Cache se já existe essa informação. Assim, o usuário terá o retorno muito mais rápido.
Arquitetura do Projeto Completo
MS-application
│ .gitignore
│ docker-compose-services.yml
│
├───API
│ │ docker-compose-api.yml
│ │ Dockerfile
│ │ requirements.txt
│ │ server.py
│ │
│ ├───config
│ │ database_connection.py
│ │ rabbitmq_connection.py
│ │ redis_connection.py
│ │ __init__.py
│ │
│ └───rabbitmq_controller
│ rabbit_queues.py
│ __init__.py
│
├───MS1
│ │ docker-compose-microservice1.yml
│ │ Dockerfile
│ │ main.py
│ │ requirements.txt
│ │
│ ├───config
│ │ database_connection.py
│ │ rabbitmq_connection.py
│ │ __init__.py
│ │
│ ├───criptografy
│ │ hash_password.py
│ │ __init__.py
│ │
│ ├───database_controller
│ │ postgres_worker.py
│ │ __init__.py
│ │
│ └───rabbitmq_controller
│ rabbit_worker.py
│ __init__.py
│
└───MS2
│ docker-compose-microservice2.yml
│ Dockerfile
│ main.py
│ requirements.txt
│
├───config
│ database_connection.py
│ rabbitmq_connection.py
│ __init__.py
│
├───database_controller
│ postgres_worker.py
│ __init__.py
│
└───rabbitmq_controller
rabbit_worker.py
__init__.py
488 Words
2022-06-02 11:00