A ticketing sale/purchase application built with a microservices architecture
Pass is a demo application for listing and purchase of tickets. It is an event-based application built with a microservices architecture to be run in a Kubernetes cluster. The application is split into 6 micro-services:
- Auth: handles authentication
- Tickets: handles ticket creation, update, listing and delete
- Orders: handles order creation, cancellation, and listing
- Expiration: handles automatic cancellation of Orders not paid for within the application set time frame
- Payments: handles order payment
- Client: the presentational layer of the application
- Every service maintains its database.
- To ensure services remain loosely coupled, and the scope of dependency minimized, data is replicated across services.
- Services communicate (essentially share data) using an event-driven messaging system (NATS streaming server).
- Each service is built into a docker image and pushed to Docker hub.
- Docker images of each service from Docker hub are then used to spin up pods within a k8s cluster
- Each service is exposed for communication within the cluster with a cluster-ip service
- Ingress Nginx is used for routing traffic to appropriate services and load-balancing.
- Re-usable code for Authorization, Events publishing/subscribing e.t.c are shared between services via a npm module pass-common
- Github actions are used to run tests and can also be used to handle automatic deployments.
- Kubernetes
- Docker
- Ingress Nginx
- NATS streaming server
- Skaffold
- JavaScript
- TypeScript
- Express
- React
- Next
- MongoDB
- Mongoose
- Redis
- Stripe
- GitHub Actions