Overview
This hobby project stems from my deep interest in distributed systems and microservice architecture. Starting from an existing modular monolith tourism app originally built with ASP.NET, I redesigned the system into a fully distributed set of microservices using Golang.
Goals
The main goals of the project were to:
- Explore real-world microservice patterns
- Improve scalability and maintainability
- Decouple domain responsibilities
- Gain hands-on experience with system architecture and containerization
Architecture
The redesigned system is composed of multiple independent microservices, each responsible for a specific domain. Key architectural changes include:
- A Gateway service written in Go, acting as the single entry point for the Angular front-end client
- gRPC used for internal service-to-service communication, replacing REST in critical paths for improved performance and contract enforcement
- Core functionality like authentication extracted into a separate standalone service
- Each microservice has its own dedicated database, following the Database-per-Service pattern
- Full system Dockerization, allowing all services and databases to be spun up with a single
docker-compose up
command
Future Plans
This project is still a work in progress. Upcoming improvements include:
- Adding Redis for caching and performance optimization
- Building a follower system using Neo4j to model user relationships as a graph