🔥 🔥 Virtual marketplace for service, goods, favor and many more! 🔥 🔥
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Hello world 👋 Relace is a virtual marketplace where user can exchange... almost ANYTHING! 🎉. From service, goods, favor, trivial thing, significant thing all you can think of!. This project is aimed to solving a real world problem where user don't know where to sell/buy the things that they need (or want or whims 😆). In Relace, there are only two: Customer and Provider. Provider are the one who.. err you know, provides things and customer, it goes without saying are the one who buys things. Any user registered to Relace can assume both roles.
🤓 🤓
The Relace system architecture is built on the microservice architecture with its common patterns. Although its unit is still comprised of coarse-grained services, it has improved the scalability, agility, and reliability of the system while overcoming the shortcomings of the monolithic architecture. As the system grows, it may make sense to further break down the services.
The event-driven microservices paradigm is used in the communication pattern to enable asynchronicity and loose coupling between services. To accomplish this basic pub/sub messaging is needed. AMQP (RabbitMQ) w/ topic exchange type is chosen in this project.
Every service in the system is written on Typescript - Express.js with each using MongoDB database. All service (excluding display service) serves as a representation of a domain that typically exists in an e-commerce/marketplace business. Only display service exists as a CQRS and BFF. Due to the infrastructure limitation, new functionalities are to be expected in the future.
When it comes to infrastructure, Docker is used to containerize each service. Each service is designed to run in a Kubernetes cluster to make scaling, replicating, and orchestration easier. Ingress NGINX is utilized as an API gateway for the outside world to communicate with the Kubernetes cluster internals.
🤓 🤓
Due to a VERY demanding requirement of resources this project has (it's a budget issue actually 😆), deployed app aren't available for the time being.
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Dean Ramadhan - rmdhndean@gmail.com
Project Link: https://github.com/deanarchy/relace
- microservices.io as a patterns reference.
- Stephen Grider's course as my entry to microservices.
This project is a concrete implementation of my studies into software architecture (and software development in general) while attempting to solve real-world challenges. I acknowledges that many aspects of this project are far from perfect and might be improved further. Futhermore, each service (+ database instance for each service + rabbitmq) in the microservice is deployed independently of the others by definition. While this allows for scalability, agility, resilience, and other benefits, it requires a huge amount of resources to run the entire system. My development environment (minikube w/ gaming PC) aren't able to run the project fully thus only able to test it using unit tests (per service) and integrated tests (per significant features). And, due to budget constraints 😆, the project will not be able to be launched into a cloud cluster anytime soon.