This repository contains my first large academic project in Cloud Computing, developed as part of the Cloud Computing course in the MSc program at FCUL (Faculty of Sciences, University of Lisbon). It represents the starting point of my hands-on experience with cloud-native systems, where I learned and applied the fundamental concepts of distributed systems, microservices, containerization, and cloud deployment.
This project was developed in an academic context as part of a Cloud Computing course, where the objective was to design and implement a cloud-native application composed of multiple services that expose business capabilities through APIs.
The project was structured as if developed by a startup team, following a realistic cloud engineering workflow from initial design to deployment and evaluation.
The focus of the project was learning by doing, rather than building a production-ready system.
- Design a cloud-native distributed application
- Implement multiple independent microservices
- Expose functionality through REST APIs
- Use Docker for containerization
- Deploy and orchestrate services using Kubernetes
- Implement monitoring, scalability, and observability
- Gain practical experience with cloud infrastructure and tooling
The system is composed of several loosely coupled microservices, each responsible for a specific business capability, such as:
- Books service
- Reviews service
- Recommendations service
- User management service
- Wishlist service
- Frontend / API gateway service
Key architectural characteristics:
- Microservices communicate using REST and gRPC
- Services are containerized using Docker
- Deployment is managed through Kubernetes manifests
- Scalability is supported via Horizontal Pod Autoscaling (HPA)
- Monitoring and metrics are collected with Prometheus
- Visualization is provided through Grafana
- Databases run in containers with persistent volumes
- Python (backend microservices)
- Docker & Docker Compose
- Kubernetes
- Prometheus & Grafana
- REST & gRPC
- SQLite / containerized databases
- Shell scripting for automation
.
├── docker-compose.yaml
├── *.yaml # Kubernetes deployments, services, HPA, monitoring
├── services/ # Application microservices
│ ├── booksService/
│ ├── reviewsService/
│ ├── recommendations/
│ ├── userManagement/
│ ├── wishlistService/
│ └── frontService/
├── prometheus.yaml
├── grafana.yaml
└── README.md
Generated files, datasets, credentials, and secrets are intentionally excluded from the repository.
The project supports:
- Local execution using Docker Compose
- Local Kubernetes clusters (e.g., Minikube or MicroK8s)
- Cloud-based Kubernetes clusters
Deployment involves:
- Building container images
- Deploying services and databases
- Applying Kubernetes manifests
- Exposing selected services through ingress or load balancers
- Monitoring system behavior using Prometheus and Grafana
This repository focuses on architecture, configuration, and learning, rather than providing a one-click production deployment.
The system includes:
- CPU and memory usage per pod
- Request counts and response times
- Health checks (liveness and readiness probes)
- Centralized dashboards for visualization
These components were used to analyze:
- system performance
- scalability behavior
- reliability
- resource usage awareness
Through this project, I gained practical experience with:
- Cloud-native application design
- Microservices architecture
- Container orchestration
- Infrastructure-as-code concepts
- Observability and system evaluation
- Cost and scalability considerations
This repository represents where I started learning Cloud Computing in practice.
This is an academic learning project. It is not intended to be production-ready, but to demonstrate understanding of core cloud computing concepts and tools.
This project is shared for educational and portfolio purposes.