This project is a home assessment task from a major payment provider, demonstrating a modern microservices-based payment processing system.
A scalable payment processing system built with microservices architecture, running on AWS infrastructure. The system handles payment processing, user authentication, and notification delivery.
-
Payment Service
- Handles payment processing
- Manages transaction states
- Integrates with payment providers
- Provides REST API endpoints
-
Auth Service
- Manages user authentication
- Handles JWT token generation and validation
- Provides user management functionality
-
Notification Service
- Handles email notifications
- Manages notification templates
- Provides async notification delivery
- Cloud Provider: AWS
- Container Orchestration: Kubernetes (EKS)
- Database: PostgreSQL (RDS)
- Cache: Redis (ElastiCache)
- Message Queue: Kafka (MSK)
- Monitoring: Prometheus & Grafana
- CI/CD: GitHub Actions
- GitOps: ArgoCD
graph TD
Client[Client] --> Auth[Auth Service]
Auth --> Payment[Payment Service]
Payment --> DB[(PostgreSQL)]
Payment --> Cache[(Redis)]
Payment --> Kafka[Kafka]
Kafka --> Notification[Notification Service]
Notification --> Email[Email Provider]
graph TD
subgraph AWS
subgraph VPC
subgraph EKS
Auth[Auth Service]
Payment[Payment Service]
Notification[Notification Service]
Prometheus[Prometheus]
Grafana[Grafana]
end
subgraph RDS
DB[(PostgreSQL)]
end
subgraph ElastiCache
Cache[(Redis)]
end
subgraph MSK
Kafka[Kafka]
end
end
end
- Go 1.24 or later
- Docker
- Kubernetes cluster (minikube/kind for local development)
- AWS CLI (for infrastructure deployment)
- Terraform
- Helm
- Clone the repository:
git clone git@github.com:Arsen302/payment-system.git
cd payment-system- Set up environment variables:
cp .env.example .env
# Edit .env with your configuration- Start local development environment:
make local-up- Infrastructure deployment:
cd terraform
terraform init
terraform plan
terraform apply- Application deployment:
# Using ArgoCD
kubectl apply -f argocd/applications/Access monitoring dashboards:
- Grafana: http://localhost:3000 (local) or your Grafana URL
- Prometheus: http://localhost:9090 (local) or your Prometheus URL
- Create a feature branch
- Make your changes
- Submit a pull request
This project is proprietary and confidential.