A modern cloud-native microservices architecture inspired by Snapp, built with Go, Java, Kubernetes, Helm, GitOps (Argo CD), and GitHub Actions.
This platform implements a complete multi-service superapp backend with:
- Microservices (Go + Java)
- API Gateway (Kong)
- Event-driven communication (Kafka)
- CI/CD (GitHub Actions)
- GitOps deployment (Argo CD)
- Kubernetes manifests + Helm charts
- Observability (Prometheus, Grafana, Jaeger)
graph TB
subgraph "Client Layer"
Mobile[Mobile App]
Web[Web App]
end
subgraph "API Gateway"
Kong[Kong Gateway]
end
subgraph "Microservices - Java"
Auth[Auth Service<br/>Spring Boot]
Payment[Payment Service<br/>Spring Boot]
end
subgraph "Microservices - Go"
Passenger[Passenger Service<br/>Go]
Driver[Driver Service<br/>Go]
Food[Food Service<br/>Go]
Market[Market Service<br/>Go]
Notification[Notification Service<br/>Go]
end
subgraph "Event Bus"
Kafka[Apache Kafka]
end
subgraph "Data Layer"
PgAuth[(PostgreSQL<br/>Auth)]
PgPayment[(PostgreSQL<br/>Payment)]
PgPassenger[(PostgreSQL<br/>Passenger)]
PgDriver[(PostgreSQL<br/>Driver)]
PgFood[(PostgreSQL<br/>Food)]
PgMarket[(PostgreSQL<br/>Market)]
end
subgraph "Observability"
Prometheus[Prometheus]
Grafana[Grafana]
Jaeger[Jaeger]
end
Mobile --> Kong
Web --> Kong
Kong --> Auth
Kong --> Payment
Kong --> Passenger
Kong --> Driver
Kong --> Food
Kong --> Market
Auth --> PgAuth
Payment --> PgPayment
Passenger --> PgPassenger
Driver --> PgDriver
Food --> PgFood
Market --> PgMarket
Passenger --> Kafka
Driver --> Kafka
Payment --> Kafka
Food --> Kafka
Market --> Kafka
Kafka --> Notification
Auth -.metrics.-> Prometheus
Payment -.metrics.-> Prometheus
Passenger -.metrics.-> Prometheus
Driver -.metrics.-> Prometheus
Food -.metrics.-> Prometheus
Market -.metrics.-> Prometheus
Notification -.metrics.-> Prometheus
Prometheus --> Grafana
Auth -.traces.-> Jaeger
Payment -.traces.-> Jaeger
Passenger -.traces.-> Jaeger
- Technology: Spring Boot 3.2, Java 17
- Endpoints:
POST /auth/register- User registrationPOST /auth/login- User loginPOST /auth/refresh- Refresh JWT token
- Features:
- JWT authentication
- User profiles
- Roles & permissions (USER, DRIVER, ADMIN, MERCHANT)
- PostgreSQL database
- Prometheus metrics
- Technology: Spring Boot 3.2, Java 17
- Endpoints:
POST /payment/process- Process paymentPOST /payment/refund- Refund paymentGET /payment/wallet/{userId}- Get wallet balancePOST /payment/wallet/{userId}/topup- Top up wallet
- Features:
- Wallet management
- Installments support
- Refunds
- Payment events β Kafka topic
payment_events - Prometheus metrics
- Technology: Go 1.21, Gin, PostgreSQL
- Endpoints:
POST /passenger/rides- Request rideGET /passenger/rides/{id}- Get ride detailsGET /passenger/rides/user/{userId}- Get user rides
- Features:
- Ride request management
- Track ride status
- Publish events β Kafka topic
ride_events - Prometheus metrics
- OpenTelemetry tracing
- Technology: Go 1.21, Gin, PostgreSQL
- Endpoints:
POST /driver/availability- Update driver availabilityGET /driver/{userId}- Get driver infoPOST /driver/accept-ride- Accept rideGET /driver/available- Get available drivers
- Features:
- Driver availability management
- Accept rides
- Update trip status
- Publish events β Kafka topic
driver_events - Prometheus metrics
- OpenTelemetry tracing
- Technology: Go 1.21, Gin, PostgreSQL
- Endpoints:
GET /food/restaurants- List restaurantsGET /food/restaurants/{id}/menu- Get restaurant menuPOST /food/orders- Create orderGET /food/orders/{id}- Get order details
- Features:
- Restaurant management
- Menu management
- Order processing
- Publish events β Kafka topic
order_events - Prometheus metrics
- Technology: Go 1.21, Gin, PostgreSQL
- Endpoints:
GET /market/products- List productsGET /market/products/{id}- Get product detailsPOST /market/orders- Create orderGET /market/orders/{id}- Get order details
- Features:
- Product catalog
- Inventory management
- Order processing
- Publish events β Kafka topic
order_events - Prometheus metrics
- Technology: Go 1.21, Kafka Consumer
- Features:
- Consumes Kafka events from multiple topics
- Sends SMS/Email/Push notifications
- Async worker pattern
- Prometheus metrics
Kong Gateway provides:
-
Routes:
/auth/*β auth-service/passenger/*β passenger-service/driver/*β driver-service/food/*β food-service/market/*β market-service/payment/*β payment-service
-
Features:
- Rate limiting
- CORS support
- JWT validation (if configured)
- Tracing headers
- Load balancing
Apache Kafka topics:
ride_events- Ride-related eventsdriver_events- Driver-related eventspayment_events- Payment-related eventsorder_events- Order-related events (food & market)
graph LR
A[Code Push] --> B[Detect Changes]
B --> C{Service Type?}
C -->|Java| D[Run Java Tests]
C -->|Go| E[Run Go Tests]
D --> F[Build Docker Image]
E --> F
F --> G[Push to GHCR]
G --> H[Update Helm Values]
H --> I[Commit Changes]
I --> J[Argo CD Auto-Sync]
J --> K[Deploy to K8s]
Pipeline Steps:
- Detect Changed Services: Identifies which services have been modified
- Run Tests:
- Java services: Maven tests
- Go services:
go test
- Build Docker Images: Multi-stage builds for all services
- Push to GitHub Container Registry: Tagged with commit SHA
- Update Helm Values: Automatically updates
values.yamlwith new image tags - Commit Changes: Commits updated Helm values back to repo
- Argo CD Auto-Sync: Automatically deploys to Kubernetes
Each service has three Argo CD applications (one per environment):
{service}-dev.yaml- Development environment{service}-staging.yaml- Staging environment{service}-prod.yaml- Production environment
- Auto-sync enabled: Automatic deployment on changes
- Prune: Removes resources not in Git
- Self-heal: Automatically corrects drift
- Namespace creation: Creates namespaces if they don't exist
-
Install Argo CD (if not already installed):
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
-
Apply Argo CD Applications:
kubectl apply -f deploy/argocd-apps/
-
Access Argo CD UI:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Open https://localhost:8080 (default credentials: admin / password from secret)
All services expose Prometheus metrics at /metrics:
- Java Services: Micrometer metrics
- Go Services: Prometheus client library metrics
auth_login_total- Total login attemptspayment_total- Total payments processedride_requests_total- Total ride requestsdriver_actions_total- Total driver actionsfood_orders_total- Total food ordersnotifications_sent_total- Total notifications sent
OpenTelemetry integration for distributed tracing:
- Java Services: OpenTelemetry Spring Boot Starter
- Go Services: OpenTelemetry Go SDK
- Backend: Jaeger for trace collection and visualization
- Structured logging in all services
- Log aggregation with Loki or ELK stack
- Centralized log management
- Docker & Docker Compose
- Go 1.21+
- Java 17+
- Maven 3.9+
- Make
# Start PostgreSQL and Kafka
make local-up
# Or manually:
docker-compose up -d# Build all services
make build
# Build Java services only
make build-java
# Build Go services only
make build-go# Run all tests
make test
# Run Java tests only
make test-java
# Run Go tests only
make test-gocd services/auth-service-java
mvn spring-boot:runcd services/payment-service-java
mvn spring-boot:runcd services/passenger-service-go
go run main.gocd services/driver-service-go
go run main.gocd services/food-service-go
go run main.gocd services/market-service-go
go run main.gocd services/notification-service-go
go run main.goSet these environment variables for local development:
# Database
export DB_HOST=localhost
export DB_PORT=5432
export DB_USER=postgres
export DB_PASSWORD=postgres
# Kafka
export KAFKA_BOOTSTRAP_SERVERS=localhost:9092
# JWT (for auth service)
export JWT_SECRET=your-secret-key-here# Install a service
helm install auth-service deploy/helm/auth-service
# Upgrade a service
helm upgrade auth-service deploy/helm/auth-service
# Uninstall a service
helm uninstall auth-service- Ensure Argo CD is installed and configured
- Apply application manifests:
kubectl apply -f deploy/argocd-apps/
- Argo CD will automatically sync and deploy
Create namespaces:
kubectl apply -f deploy/k8s-base/namespaces.yamlThis creates:
dev- Development environmentstaging- Staging environmentprod- Production environmentargocd- Argo CD namespace
superapp-ecommerce/
βββ services/
β βββ auth-service-java/ # Java + Spring Boot
β βββ payment-service-java/ # Java + Spring Boot
β βββ passenger-service-go/ # Go service
β βββ driver-service-go/ # Go service
β βββ food-service-go/ # Go service
β βββ market-service-go/ # Go service
β βββ notification-service-go/ # Go service
βββ deploy/
β βββ helm/ # Helm charts
β β βββ auth-service/
β β βββ payment-service/
β β βββ passenger-service/
β β βββ driver-service/
β β βββ food-service/
β β βββ market-service/
β β βββ notification-service/
β β βββ api-gateway/
β βββ argocd-apps/ # Argo CD applications
β βββ k8s-base/ # Base Kubernetes manifests
β βββ namespaces.yaml
β βββ ingress-base.yaml
β βββ monitoring/
βββ scripts/
β βββ detect_changed_services.sh
β βββ update_helm_values.sh
βββ .github/workflows/
β βββ ci.yml # CI/CD pipeline
βββ docker-compose.yml # Local development
βββ Makefile # Build automation
βββ README.md
Each service has a values.yaml file in deploy/helm/{service}/ with:
- Image repository and tag
- Replica count
- Resource limits/requests
- Environment variables
- Autoscaling configuration
Argo CD applications override values per environment:
- Dev: Lower replica count, latest dev images
- Staging: Medium replica count, staging images
- Prod: Higher replica count, production images
Detects which services have changed between commits:
./scripts/detect_changed_services.sh HEAD~1 HEADUpdates Helm values with new image tag:
./scripts/update_helm_values.sh auth-service v1.0.0- Scrapes metrics from all services
- Service discovery via Kubernetes
- Configurable scrape intervals
- Pre-built dashboards for:
- Service health
- Request rates
- Error rates
- Response times
- Resource utilization
- Distributed tracing
- Service dependency mapping
- Performance analysis
- JWT Authentication: Secure token-based auth
- RBAC: Role-based access control
- Secrets Management: Kubernetes secrets (consider using external secret management)
- Network Policies: Isolate services (recommended)
- TLS: Encrypted communication
- Add service mesh (Istio/Linkerd)
- Implement circuit breakers
- Add API versioning
- Implement caching layer (Redis)
- Add comprehensive integration tests
- Implement blue-green deployments
- Add chaos engineering tests
This project is licensed under the MIT License.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
For questions or support, please open an issue in the repository.
Built with β€οΈ for cloud-native microservices