Discussion about an application
Problem Statement: My organization want to build a Food delivery application
solution 1: Layered architecture
- Basic overview:
- Pros:
- Simple setup
- one code base
- Cons:
- For updating the application, entire app has to be brought down
- Entire application/layer has to be one tech stack
Solution 2: Microservices
- Domains:
- Identity (User & Role Management)
- Catalog (Items list on sale)
- Orders (Order)
- Payment Services
- Delivery Services
- Administrative Services
- Notification Services
- Customer Support Service
- His idea is to have one service per domain (Domain Driven Design)
- Pros:
- Deployments will not impact whole system
- Scaling can be done depending on load on each service
- No-vendor lockin
-
Cons:
- Development is across different code bases
- complex system
-
Needs for Microservices:
- We need an orchestration platform to manage
- deployment
- multi-machine/cluster
- Health-checks etc
- We need an orchestration platform to manage
- Since we are focused on container technologies, we need an container orchestration platform
- Some of the examples are
- Kubernetes
- Apache Mesos
- Hashicorp Nomad
- Docker Swarm
- Amazon ECS
- When and where Kuberenetes is not the solution
- Container-less architecture
- Monolith architecture
- Small number of microservices
- Single node deployment
- History of Kubernetes
- Google used to run the container based platforms and to perform orchestration, tey developed Borg (internal project).
- Omega is internal project developed by google in C++ to improve the shortcomings of Borg
- Google has started container orchestration platform as a open source and written in Go language and later donated the project to CNCF (Cloud Native Computing foundation) Refer Here
- As on today, CNCF maintaines Kuberentes and code is hosted on GitHub
