Skip to content

jym272/ticketing

Repository files navigation

Ticketing Project

The microservices project consists of multiple services that communicate with each other using NATS Streaming Server. Each service has its own PostgreSQL database. Additionally, the Expiration API utilizes Redis database for handling expired payments.

The choice of storage volumes depends on the overlay / environment used in the infrastructure deployment.

For local database management, Adminer is used as a tool. Adminer allows users to interact with and manage the databases in the project.


Contents

  1. Initial Setup
  2. Environments
  3. Microservices

Initial Setup

To clone this project including its submodules updated to the latest revision use this command:

git clone --recurse-submodules --remote-submodules https://github.com/jym272/ticketing.git

Environments

The application utilizes kustomize, a configuration management tool, to handle different environments. The project consists of a base configuration that remains the same across all environments. However, the variations among environments are managed through the overlays folder.

Within each overlay, there is a kustomization.yaml file that specifies the base configuration. Additionally, the overlays apply specific patches to modify and 'kustomize' the base configuration according to the requirements of each environment.

This approach allows for easy management and customization of the application's configuration for different deployment scenarios. For more advanced features of kustomize, you can refer to the Advanced Kustomize Features article.

The different environments/overlays are:


Microservices

In this microservices project, the communication between services is facilitated by NATS Streaming Server, which provides a messaging system. The REST APIs are primarily implemented using Node.js, except for the Expiration API, which is written in Go.

The client-side application is developed using the Next.js framework, which is a popular choice for building server-rendered React applications.

To handle networking and routing, a Nginx Ingress Controller is utilized. The Nginx Ingress Service acts as an entry point for external traffic, manages load balancing, and handles routing requests to the appropriate services within the microservices architecture.

Rest APIs

Common Library

Used in all APIs, except Expiration-api:

Client

Frontend or client:

This project draws inspiration from the Microservices with Node JS and React course by Stephen Grider. While the project is not an exact replica of the course material, it incorporates similar principles and concepts discussed in the course.