Geo is a full-stack distributed system designed for trip management and fare calculation. It includes a Go-based backend, a scalable Kubernetes deployment, and an iOS client.
- Backend: High-performance Go service using
fasthttp. - Database: PostgreSQL for persistent trip storage.
- Messaging: RabbitMQ for asynchronous processing of trip data.
- Frontend: iOS Application (VIPER Architecture).
- Observability: Prometheus for metrics, Loki for logs, and Grafana for visualization.
- Infrastructure: Kubernetes (K8s) manifests for automated deployment and scaling.
- Language: Go 1.24+, Swift 6.0
- Frameworks: RxSwift, Alamofire (iOS), Logrus (Backend)
- Monitoring: Prometheus, Grafana, Loki
- Deployment: Docker, Kubernetes
- Docker Desktop (with Kubernetes enabled)
kubectl- Go 1.24 (for local backend development)
- Xcode (for iOS development)
-
Build the Backend Image:
docker build -t geo-backend:latest ./backend
-
Deploy to Kubernetes:
kubectl apply -f k8s/
-
Access Internal Tools (Port-Forwarding):
# Grafana (Dashboards) kubectl port-forward svc/grafana 3000:3000 -n geo-system & # RabbitMQ (Management UI) kubectl port-forward svc/rabbitmq 15672:15672 -n geo-system &
- Navigate to
frontend/Geo. - Install dependencies:
pod install. - Open
Geo.xcworkspaceand update theBACKEND_BASE_URLin your configuration to match your local IP.
The system is pre-configured with a "Geo Backend Observability" dashboard in Grafana. It tracks:
- Request Rate & Latency
- HTTP Errors
- Custom Application Metrics (e.g.,
geo_trips_total) - Real-time logs via Loki