Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith?...
Transcript of Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith?...
![Page 1: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/1.jpg)
@nikhilwanpal | NikhilWanpal
Understanding Microservices: Exploding a Monolith
Nikhil Wanpal
![Page 2: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/2.jpg)
@nikhilwanpal | NikhilWanpal
Today we will
● Part I:○ Software Evolution in older architectures○ The philosophy
● Part II:○ Story of MyKart○ Case studies○ The Revolt
● Part III:○ The Evolution
![Page 3: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/3.jpg)
@nikhilwanpal | NikhilWanpal
Microservices and Scary Terminologies● Continuous Integration● Continuous Delivery● Continuous
Deployment● DevOps● NoOps● SRE● Infrastructure As Code● Containerization● Dockerization● Container
Orchestration Framework
● Private, Public and Hybrid Clouds
● Central Authentication Systems
● Vaults / Secret Managers
● Fault Tolerance● Self Healing● Auto Scaling● Eventual Consistency● Event Sourcing● Stateless APIs● Contract Testing● Conway’s Law● Agile● 2 Pizza Teams
● Monolith● Service Registry● Service Discovery● Service Gateway● Distributed Tracing● Central Configuration
Service● Log Aggregation
Service● Distributed Monitoring● Circuit Breakers● Service Discovery
Away REST● Client Side Load
Balancing
![Page 4: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/4.jpg)
@nikhilwanpal | NikhilWanpal
1 Tier application
Client side
Older Problems and our solutions
Application code Data storage
![Page 5: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/5.jpg)
@nikhilwanpal | NikhilWanpal
Client side
Database
Server side
Older Problems and our solutions
2 Tier application
Presentation Business Logic
![Page 6: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/6.jpg)
@nikhilwanpal | NikhilWanpal
Older Problems and our solutions
3 Tier application
PresentationBusiness Logic
Client side
Database
Server side
![Page 7: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/7.jpg)
@nikhilwanpal | NikhilWanpal
Older Problems and our solutions
3 Tier application
Presentation
Client side Server side
Business Logic
Database
Business Logic
Model View Controller Data storage
![Page 8: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/8.jpg)
@nikhilwanpal | NikhilWanpal
Older Problems and our solutions
3 Tier application
Client side
Model View Controller Data storage
Business Logic
Server side
Model View Controller Data storage
Query Executor Data Dict Storage Mgt
(InnoDB)DatabaseMonolith(3 1-Tier applications)
![Page 9: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/9.jpg)
@nikhilwanpal | NikhilWanpal
A Monolith (In it’s all glory)
![Page 10: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/10.jpg)
@nikhilwanpal | NikhilWanpal
A Monolith: The Story of MyKart
![Page 11: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/11.jpg)
@nikhilwanpal | NikhilWanpal
What is wrong with a monolith?● Nothing!● Perfectly stable, usable, battle tested for applications of all sizes.
● Being monolith:○ Design & technology applies to all layers○ Developed as a whole○ Deployed & scaled as a whole
● The nature of monolith is the problem as the application and team grows.
![Page 12: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/12.jpg)
@nikhilwanpal | NikhilWanpal
● Load and spikes
● UX Redesign
● New integration on backend
● Framework or library upgrades
● Different teams’ (& Business) technology demands
● Business and application size
Case Studies
![Page 13: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/13.jpg)
@nikhilwanpal | NikhilWanpal
A revolt!● I want my team (my architect, UX,
devs, testers and DBA) to build our own ‘functionally separate’ part of the system.
● We work at own○ Pace, Development○ Technology, Dependencies○ Release cycle, Deployments○ Uptime etc.
● We will promise to keep API.
![Page 14: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/14.jpg)
@nikhilwanpal | NikhilWanpal
What does that change?● Technically, not much!● With preparation and planning, they make do with:
○ Static IP and single instance of the Shipping Service load-balancer○ Static instances of shipping service configured on load-balancer○ Rolling manual / auto deployments to ensure uptime○ API versioning
● Transaction module -(HTTP)--> ShippingService Load Balancer.● Intra-process → Inter-process call.● They make their independent service a partial success!
(deployments are still in same stack and static, scaling is still manual)
![Page 15: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/15.jpg)
@nikhilwanpal | NikhilWanpal
We want a taste of it too!● More services!
![Page 16: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/16.jpg)
@nikhilwanpal | NikhilWanpal
What does that change?● First and foremost: instead of 3, (n * 3 + n) servers/vms!● Baseline costs go up● Monitoring and maintenance costs go up● Inter-process communication issues on rise● Ops under pressure● Deployments become difficult, diverse and risky
○ ...and so less frequent, so do releases○ ...and so does development. (back to square one)
![Page 17: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/17.jpg)
@nikhilwanpal | NikhilWanpal
Principles of Software Evolution(Remember evolution of 1-tier to 3-tier)
● Extract Common: group common, break out different● Software is all about automation● We worry less about hardware: developer cycles vs CPU cycles● Our problems are manifestations of older problems, and so are our solutions● Simplest solution are best● We are never satisfied
![Page 18: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/18.jpg)
@nikhilwanpal | NikhilWanpal
Solutions● Too many servers running all the time
✓ Reduce when not needed (aka auto-scaling)
● High instances churn, how do I add them on the load balancer?✓ automatic registration on load balancers (not discovery yet)
● Load balancer is not enough (auto-scaling and auto registration)○ Requires a hop○ Single point of failures in the system○ Together demand that IPs change, static IPs / DNS won’t work anymore.○ We need a way to map service name to IP.✓ Hence automatic registration to a central server with service name and instance IP.✓ Anyone can ask for an address of a service they want! (Aka service discovery)
● Too many servers, they go down all the time○ Auto restart, ensured minimum instances, Aka self-healing.
![Page 19: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/19.jpg)
@nikhilwanpal | NikhilWanpal
● Too many servers to deploy✓ Automate rolling deployments (aka auto deployments, this is not CD ;))
● Too many hardware instances to provision & configure○ Different technologies, different runtime requirements: configuration and infrastructure✓ Service specific VM images, infrastructure automation, infra as code (not docker, yet)
● Too many application instances to (re)configure○ One change to be done in monolith is now ‘n’ changes in ‘n’ places.✓ External configuration, and a central configuration service and refresh mechanism
● Inter-service communication issues○ Random failures (apparently), networking issues, load issues, availability issues lead to in
general unpredictability.○ Cascading failures (believe me, these are the worst)✓ Disable calls when a service misbehaves (aka circuit breaker)
Solutions
![Page 20: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/20.jpg)
@nikhilwanpal | NikhilWanpal
● Difficulties in tracing and tracking individual requests○ Earlier a request could be traced by thread-ids being logged.✓ Now you need a global, request identification, distributed tracing for better visibility.
● Too many REST calls to make to different IPs, need better clients✓ ‘Service discovery aware’ rest clients.
● Too many places where retry was required✓ ‘Service discovery aware’ rest clients aware retriable functionality.
● Too many tools to configure at service boundaries:✓ Above integrated into circuit breakers.
● Servers replaced, cannot have state.✓ Externalized sessions and stateless APIs.
Solutions
![Page 21: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/21.jpg)
@nikhilwanpal | NikhilWanpal
Solutions● With all this central load balancers make less and less sense
○ Caller:■ Knows where the service and discovery server is■ Knows Discovery knows which instance is closer■ Decides the handling on failure, fallbacks, caches etc.
○ Central load balancer now seems like an unnecessary hop and moving part.✓ Client side load balancing.
● Too many places to monitor for failures✓ Central health check and service monitoring systems.
● It is impossible to find the instance on which the error occurred.✓ Central log repositories and searches.
![Page 22: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/22.jpg)
@nikhilwanpal | NikhilWanpal
● Too many places to authenticate and authorize users at (when multiple entry
points)✓ Central authentication systems
● Too many places to authenticate and authorize services at✓ Secrets management systems
● Does our data center machines have this○ Fancy ability to spin up and shut down, this scaling thing?○ Can we incorporate easily with all the networking things we need?○ Ohh it is just too many servers to look after✓ Private / public clouds and managed services
Solutions
![Page 23: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/23.jpg)
@nikhilwanpal | NikhilWanpal
● But then what do we do with all the money we put in buying this data center?✓ We can use it, Hybrid cloud setups!
Are things getting clearer now? Well this isn’t over yet!
Solutions
![Page 24: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/24.jpg)
@nikhilwanpal | NikhilWanpal
● We are faster○ there is just too much to test○ we need ‘moar’ speed in validation and packaging.✓ Automated testing and Continuous Integration (CI)
● Can we move even faster now that we have:○ Automation everywhere○ High uptime ensured by self-healing services○ Easy reversals enabled through infra and deployment versioning✓ Yes, Continuous Delivery (CD)
● More speed? Now that we are confident it works?✓ Continuous Deployment, if ecosystem favours.
Solutions, allied problems
![Page 25: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/25.jpg)
@nikhilwanpal | NikhilWanpal
● Costs are still high
○ Many VMs are still live
○ Not all fully utilize their RAM/CPU at idle
● Development difficulties○ Too much to set up locally
○ Dev machines loaded
○ So many dependencies to manage
○ How to ensure consistency in environments?
Solutions, allied problems
![Page 26: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/26.jpg)
@nikhilwanpal | NikhilWanpal
● Deployment difficulties. Each service has:
○ Specific infra requirements
○ Own specific deployment steps and dependencies
○ Central SRE / Ops overloaded, changes pushed back.
○ Devs feel limited in not having the control over infra (DevOps anyone?)
● For all 3 above:
✓ Containerize the stack
○ Let developers create the ‘VM’ images, manage what goes in it
○ There is a consistent API to start and stop any service
○ So, it is standardized now?! Well, then why do we need OPs, infra? Use:
✓ Container Orchestration Frameworks, like Kubernetes
Solutions, allied problems
![Page 27: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/27.jpg)
@nikhilwanpal | NikhilWanpal
The Monolith becomes
![Page 28: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/28.jpg)
@nikhilwanpal | NikhilWanpal
Are we there yet?
![Page 29: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/29.jpg)
@nikhilwanpal | NikhilWanpal
Solutions and allied problems● Inter team clashes● Push backs to changes● Difference in priorities and goals of teams● Scaling limitations
● Conway’s law: Software architecture reflects the organization’s communication structure.
● Organizational restructuring
![Page 30: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/30.jpg)
@nikhilwanpal | NikhilWanpal
Solutions and allied problems● Agility● Unit Tests, Integration Tests, System Tests, Contract Tests● Automated Testing End-To-End testing● CI● CD● DevOps● NoOps
● We need these all!
![Page 31: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/31.jpg)
@nikhilwanpal | NikhilWanpal
Are we there yet?
Probably..
![Page 32: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/32.jpg)
@nikhilwanpal | NikhilWanpal
● Why?
● Do you understand your business good enough to be able to clearly segregate
your application components into individual services? (Functional segregation)
● Is the application large enough to require micro services?
● Is the team large enough to own up individual components?
● Is the complexity worth the benefits you seek?
● Is your organization ready to support your architecture?
● Anything else you would like to add?
Before Microservices, Ask Yourself
![Page 33: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/33.jpg)
@nikhilwanpal | NikhilWanpal
Disclaimers● Some things were generalised and (over)simplified
● Retrospectively, things always seem obvious and natural
● Some stories were made up
![Page 34: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/34.jpg)
@nikhilwanpal | NikhilWanpal
}
![Page 35: Understanding Microservices: Exploding a Monolith · 2019-08-29 · What is wrong with a monolith? Nothing! Perfectly stable, usable, battle tested for applications of all sizes.](https://reader034.fdocuments.us/reader034/viewer/2022042223/5ec97f0e6e38af375d5eb1b4/html5/thumbnails/35.jpg)
@nikhilwanpal | NikhilWanpal
Event Sourcing.
Eventual Consistency and microservices.
Todos to self-discovery: