Esta é a prova de conceito para o trabalho de conclusão do curso (TCC) de Arquitetura de Software Distribuído, da PUC Minas. A ideia é, a partir de um problema, apresentar uma solução arquitetural, implementar a prova de conceito e gerar resultados que demonstram a eficácia da solução. O TCC completo pode ser obtido aqui: Download do TCC.
A empresa de logística Boa Entrega está passando por mudanças e deseja se manter relevante no mercado, que, atualmente, contém diversos novos concorrentes e desafios. A empresa contém uma stack tecnológica que necessita de atualização e da inclusão de novas ferramentas. Neste trabalho, apresentamos a proposta arquitetural GSL, que é escalável, distribuída, fácil de modificar e evoluir. Ela é baseada em microsserviços, interoperável, via API, com mobile e Web, e conta com ferramentas de BI e Big Data. Os serviços são autônomos e se comunicam via mensagens pelo Kafka. Adicionalmente, são pequenos, tolerantes a falha e simples de manter. A proposta arquitetural GSL busca resolver os problemas do negócio da Boa Entrega, mas deixa uma série de decisões em aberto, para o futuro, com o objetivo comportar a evolução do negócio.
Esta é a arquitetura proposta. Ela contém os componentes novos e os legados, em nuvens pública e privada, se comunicando via mensagens.
- Java / Kotlin
- Spring
- Spring boot
- Spring Cloud Hibernate (HIBERNATE)
- Spring Data
- Spring Boot Test
- Spring Doc
- Mensageria
- Kafka
- Avro
- RabbitMQ
- API REST
- Json
- Spring DOC
- Swagger-UI
- Armazenamento
- Spring Data
- PostgreSQL
- Testes
- H2
- Junit
- Spring Boot Test
- Postman (POSTMAN)
- Testes de unidade, integração e BDD (Postman)
- Ambiente
- Docker
- Kong
- Kafka
- PostgreSQL
- Kubernetes
- Devtools
- Docker: Docker Registry e Kubernetes
- Docker Compose (DEV): Kong, Kafka, PostgreSQL
- Gradle / Maven
- Shell Script
- GIT
- Postman
- SonarQube
- JMeter
- Kafka UI
- Konga
- Padrões arquiteturais (ref: https://microservices.io/patterns)
- Microservice Architecture
- Monolithic Architecture
- Transactional outbox
- Saga
- Choreography-based
- Orchestration-based
- Event sourcing
- Anti-corruption layer (ACL)
- Database per service
- API Composition + Pattern: API Gateway / Backends for Frontends
- Padrão de pipes e filtros
- Técnicas de desenvolvimento
- Event Driven Architecture
- EVENT STORMING
- Domain-Driven Design
- Métricas
- SonarQube
- JMeter
NOTA: Os arquivos do ambiente estão na pasta .dev
- Linux
- Docker com kubernetes ativado
- Docker Compose
- Postman
- Subir os serviços no docker compose:
.dev/environment/run-with-kafka.sh
(ele vai pegar o ip automaticamente)
Opcional:
- Limpeza de ambiente sujo:
.dev/environment/run-clean.sh
- Docker: Gerar imagem de todos os serviços:
docker-build-all.sh
- Kubernetes: Implantar (deploy) todas as imagens do docker no kubernetes:
kubernetes-deploy-all.sh
Opcional:
- Docker: Executar todos os serviços via docker:
docker-run-all.sh
- Docker: Encerrar a execução de todos os serviços no docker:
docker-stop-all.sh
- Kubernetes: Remover todas imagens implantadas:
kubernetes-delete-all.sh
NOTA: Importar os arquivos do Postman de
.dev/postman/
- Executar teste de como mostrado no video: Testabilidade
- Incluir delay entre os testes de: 2000ms
- Apresentação cenário 1 - Desempenho:
- Apresentação cenário 2 - Manutenibilidade:
- Apresentação cenário 3 - Testabilidade:
- Apresentação cenário 4 – Tolerância a falhas:
- POC monolito implantado: https://boa-entrega.herokuapp.com/