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-allNote: 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 StatsandK6 Prometheusdashboards. - 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-localRunning from local gives you better progress logs.
But You can also run the load test using docker:
make load-test-dockerNote: K6 dashboard will not be populated if you run it from docker (yet 😬)
- 🧹 Clean all the resources and services:
make clean-all#. Others
- Use
makeormake helpto see all the available commands.



