Disecomm is a distributed ecommerce platform used for educational purposes. It's a project focused on distributed architecture and microservices.
The idea is to focus on the architecture and the communication between the services, so the business logic is very simple and not the main focus of the project.
The project also explores observability, monitoring, and logging, so we can have a better understanding of what's happening inside the system.
Note: This project is intentionally over-engineered to explore different technologies and architectures.
- Events Catalog
- Still a work in progress
Node: The architecture is still a work in progress, so it may change in the future.
- Programming languages: Java, Go, TypeScript
- Frameworks: Spring Boot
- Databases: PostgreSQL, MongoDB, Redis
- Message brokers: Kafka, RabbitMQ
- Communication: REST, gRPC, GraphQL
- AuthZ/AuthN: ??
- Observability: Prometheus, Loki, Tempo, Grafana
- Containerization: Docker, Kubernetes
- CI/CD: GitHub Actions
- Load testing: K6
To run the project locally, you need to have Docker
and Docker Compose
installed on your machine.
Note: This project has many resources and services, so it may take a while to start everything. And it may consume a lot of resources from your machine.
- 🏗️ Build all the services:
make build-all
Note: The first time you run this command, it may take a while to download all the dependencies.
- 🚀 Start all the resources and services:
make run-all
-
🌐 Access the resources and services at:
- Infra
- Grafana: http://localhost:3000
- User/Passwd: admin/admin
- Look for
App Stats
andK6 Prometheus
dashboards. - Explore
traces
,logs
, andmetrics
.
- Kafka UI: http://localhost:3001
- Grafana: http://localhost:3000
- Services
- API Gateway: http://localhost:8083/graphiql
- Graphql playground
- Product Catalog: GRPC localhost:5102
Check the docker-compose file to see the ports of the other services.
- API Gateway: http://localhost:8083/graphiql
- Infra
-
📈 Run load tests with k6:
Note: You need to have k6 installed on your machine to run it from local.
- Running k6 load tests will populate the Grafana dashboard with cool metrics.
- The default scenario runs for 15 minutes. Check the main.js file to see the scenario details
make load-test-local
Running from local gives you better progress logs.
But You can also run the load test using docker:
make load-test-docker
Note: K6 dashboard will not be populated if you run it from docker (yet 😬)
- 🧹 Clean all the resources and services:
make clean-all
#. Others
- Use
make
ormake help
to see all the available commands.