fingo is a scalable, robust payment system that allows users to send money to each other. fingo users can issue accounts with more than one currency and many payments cards.
Currently, fingo supports 5 currencies: USD, EUR, GBP, EGP, RUB.
- Tech Stack 🛠
- Architecture 🏘
- How to run 🏃♂️
fingo is built using scalable, reliable, robust and secure technologies which are listed below. 🔥
- Language: Go
- Communication: gRPC, RabbitMQ
- Database: PostgreSQL, Redis, CockroachDB
- Deployment: Docker, Docker Compose, Docker Swarm
- Monitoring: OpenTelemetry, Jaeger
- Security: Paseto, SSL/TLS
- External API: Courier
Communication between all the microservices is done using grpc
or message brokers
to
ensure that the system is scalable reliable and fault tolerant.
In fingo we have the following services, Where each one is responsible for a specific set of tasks, Click on each service to see its documentation and how it works.
- Auth (SignUp, SignIn, SignOut, Renewing tokens)
- Token (Validating access tokens)
- Wallet (Create wallets, accounts, cards and manage payments)
- Contact (Sending emails)
Each service is built using the Hexagonal Architecture pattern. This allows us to have a clean separation between the business logic and the infrastructure. This way we can easily swap the infrastructure without affecting the business logic.
All services trace their requests using OpenTelemetry and send them to Jaeger for monitoring and debugging besides Jaeger UI for visualization.
To make the system more robust, All microservices have a graceful shutdown function called on termination signal. For more about it see.
First clone the project
git clone github.com/escalopa/fingo && cd fingo
Copy env vars, Env vars are used by docker to start the application
cp .env.example .env
cp .rabbitmq.env.example .rabbitmq.env
cp .db.env.example .db.env
Run the project
docker compose -f ./stack.yaml up
After the project is up and running you can access the following interfaces for monitoring and debugging
To interact with the services you can use the Postman Collection