SlideShare a Scribd company logo
NEST.JS
MICROSERVICES
Babel Coder
https://www.babelcoder.com
MICROSERVICES
Babel Coder
Babel Coder
https://www.babelcoder.com
MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāļš Monolithic āļ™āļąāļ™āļˆāļ°āļĢāļ§āļĄāļĻāļđāļ™āļĒāđŒāļ—āļļāļāļŸāđ€āļˆāļ­āļĢāđŒāđ€āļ‚āđ‰āļēāđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ”āļĩāļĒāļ§
āđ‚āļ”āļĒāļ—āļąāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāđˆāļ§āļĄāļāļąāļ™āđ€āļžāļ·āļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđāļēāļŦāļĢāļąāļšāļŸāđ€āļˆāļ­āļĢāđŒāļ•āđˆāļēāļ‡ āđ†
Order
Stock
Payment
Monolithic
Babel Coder
Babel Coder
https://www.babelcoder.com
MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Monolithic āļ™āļĩāļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļ”āļĩāļ•āđˆāļēāļ‡ āđ† āđ„āļ”āđ‰āđāļāđˆ
āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāļžāļąāļ’āļ™āļē
āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāđāļāđ‰āđ„āļ‚āļŦāļĢāļ·āļ­āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡
āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŸāļ‡āļāđŒāļŠāļąāļ™āļ•āđˆāļēāļ‡ āđ† āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ•āļĢāļ‡āđ„āļ›āļ•āļĢāļ‡āļĄāļē
āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢ Deploy āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļŠāļđāđˆ Production
āđ„āļĄāđˆāļĒāļļāđˆāļ‡āļĒāļēāļāđƒāļ™āļāļēāļĢ Scale āļĢāļ°āļšāļš
Babel Coder
Babel Coder
https://www.babelcoder.com
MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ Monolithic āļ™āļąāļ™āļāđ‡āļĄāļĩāļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāļ”āđ‰āļ§āļĒāđ€āļŠāđˆāļ™āļāļąāļ™ āļ„āļ·āļ­
āļāļēāļĢāļœāļđāļāļ•āļīāļ”āļāļąāļšāļ āļēāļĐāļēāđ‚āļ›āļĢāđāļāļĢāļĄ
āļ„āļ§āļēāļĄāļĒāļļāđˆāļ‡āļĒāļēāļāđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļĢāļ°āļ”āļąāļšāļ—āļĩāļĄ
āļ„āļ§āļēāļĄāļŠāđ‰āļēāđƒāļ™āļāļēāļĢ Deploy
āļāļēāļĢ Scale āļĢāļ°āļšāļšāļ—āļĩāđ„āļĢāđ‰āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž
Babel Coder
Babel Coder
https://www.babelcoder.com
Order
Stock
Payment
Order
Stock
Payment
Order
Stock
Payment
MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
LOAD
BALANCER
Babel Coder
Babel Coder
https://www.babelcoder.com
MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
āđ€āļžāļ·āļ­āđāļāđ‰āļ›āļāļŦāļēāļ‚āļ­āļ‡ Monolithic āļ”āļąāļ‡āļāļĨāđˆāļēāļ§ āļˆāļķāļ‡āđ€āļ›āļ™āļ—āļĩāļĄāļēāļ‚āļ­āļ‡āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices
āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āđ€āļ›āļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāļ—āļĩāļ­āļ­āļāđāļšāļšāļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢāļ‚āļ­āļ‡ Cloud
Native āđ‚āļ”āļĒāļĢāļ°āļšāļšāļŦāļ™āļķāļ‡ āđ† āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāđ„āļ›āļ”āđ‰āļ§āļĒāļŦāļĨāļēāļĒāļŦāļ™āđˆāļ§āļĒāļĒāđˆāļ­āļĒāļŦāļĢāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ āļ—āļĩāļĄāļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļāļąāļ™
āļ­āļĒāđˆāļēāļ‡āļŦāļĨāļ§āļĄ āđ† āļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļˆāļ°āļĄāļĩāļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāđāļĨāļ°āđāļĒāļ Deploy āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ°
Babel Coder
Babel Coder
https://www.babelcoder.com
Order
MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
microservices
Stock Payment
Babel Coder
Babel Coder
https://www.babelcoder.com
āļĨāļąāļāļĐāļ“āļ°āļžāļ·āļ™āļāļēāļ™āļ‚āļ­āļ‡ MICROSERVICES
āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļĨāļąāļāļĐāļ“āļ°āļ•āđˆāļēāļ‡ āđ† āļ”āļąāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩ
Autonomy āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđƒāļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āļŠāļēāļĄāļēāļĢāļ–āđāļĒāļāļžāļąāļ’āļ™āļēāđ„āļ”āđ‰
āđ€āļŠāđˆāļ™ āļĄāļĩāļ—āļĩāļĄāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ‚āļ­āļ‡ User, Article, Order āđāļĨāļ° Payment āđāļĒāļāđāļ•āļ
āļ•āđˆāļēāļ‡āļāļąāļ™āļ­āļ­āļāđ„āļ› āļžāļĢāđ‰āļ­āļĄāļ—āļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āđāļĒāļ Deploy āļŦāļĢāļ·āļ­ scale āđāļĒāļāđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆ
āļāļĢāļ°āļ—āļšāļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™
Specialization āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒāļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļāļ•āļēāļĄ
Business Capability āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āļ›āļāļŦāļēāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ™āļąāļ™ āđ† āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ‰āļžāļēāļ°āđ€āļˆāļēāļ°āļˆāļ‡
Agility āļ„āļ§āļēāļĄāļ„āļĨāđˆāļ­āļ‡āļ•āļąāļ§āļ™āļąāļ™āđ€āļāļīāļ”āļˆāļēāļāļāļēāļĢāļ—āļĩ Microservices āļŠāđˆāļ‡āđ€āļŠāļĢāļīāļĄāđƒāļŦāđ‰āļ­āļ‡āļ„āđŒāļāļĢāļĄāļĩāļāļēāļĢ
āļ­āļ­āļāđāļšāļšāļ—āļĩāļĄāļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāđ€āļžāļ·āļ­āđ€āļ›āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ
Flexible Scaling Microservices āļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢ scale āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ°āđ‚āļ”āļĒ
āđ„āļĄāđˆāļāļĢāļ°āļ—āļšāļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ†
Babel Coder
Babel Coder
https://www.babelcoder.com
Order
āļĨāļąāļāļĐāļ“āļ°āļžāļ·āļ™āļāļēāļ™āļ‚āļ­āļ‡ MICROSERVICES
Stock Payment
Order Order
Babel Coder
Babel Coder
https://www.babelcoder.com
SCALE CUBE
--- Wikimedia
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
CLOUD NATIVE āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
Cloud Native āļ„āļ·āļ­āđāļ™āļ§āļ—āļēāļ‡āļ—āļĩāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ āļ›āļĢāļąāļšāđƒāļŠāđ‰ āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāļ—āļąāļ™āļŠāļĄāļąāļĒāđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢ
āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļšāļ™āļ„āļĨāļēāļ§āļ”āđŒ āļŦāļēāļāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ™āļąāļ™āļ–āļđāļāļ­āļ­āļāđāļšāļšāļĄāļēāđ€āļžāļ·āļ­āđƒāļŠāđ‰āļ‡āļēāļ™āļšāļ™āļ„āļĨāļēāļ§āļ”āđŒāļˆāļ°āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Cloud Native Applications
āđ‚āļ”āļĒāļ—āļąāļ§āđ„āļ›āđāļĨāđ‰āļ§āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļšāļ™ Microservices āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļēāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Cloud Native
āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļŦāļĨāļąāļāļ‚āļ­āļ‡ Cloud Native āđ„āļ”āđ‰āđāļāđˆ:
āļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™
01
āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļšāļ™āļ„āļĨāļēāļ§āļ”āđŒ
02
āđ„āļĄāđ‚āļ„āļĢāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ
03
āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ Container
04
DevOps āđāļĨāļ° Automation
05
āļāļēāļĢāļ›āļĢāļ°āļŦāļĒāļąāļ”āļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒ
āļāļēāļĢāļ­āļąāļ›āđ€āļ”āļ•āļŸāđ€āļˆāļ­āļĢāđŒ
07
06
DOMAIN
DRIVEN DISIGN
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
DOMAIN DRIVEN DESIGN
Domain Driven Design āļ„āļ·āļ­āđāļ™āļ§āļ—āļēāļ‡āđāļĨāļ°āļāļĢāļ­āļšāļ„āļ§āļēāļĄāļ„āļīāļ”āđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļšāđƒāļŦāđ‰āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāđāļ™āļ§āļ—āļēāļ‡āļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ āđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒ
āļĄāļļāļĄāļĄāļ­āļ‡āļˆāļēāļāļœāļđāđ‰āđ€āļŠāļĩāļĒāļ§āļŠāļēāļāļŦāļĨāļēāļĒāđāļ‚āļ™āļ‡āļ—āļąāļ‡āļœāļđāđ‰āđ€āļŠāļĩāļĒāļ§āļŠāļēāļāļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāđāļĨāļ°āļ™āļąāļāļžāļąāļ’āļ™āļē āļšāļ™āļžāļ·āļ™āļāļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļšāļ™āļ āļēāļĐāļēāđ€āļ”āļĩāļĒāļ§āļāļąāļ™
āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ„āļ·āļ­āļāļēāļĢāļ§āļēāļ‡āļĢāļ°āļšāļšāļ—āļĩāļ­āļīāļ‡āļ­āļĒāļđāđˆāļāļąāļš Domain āļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ
Babel Coder
Babel Coder
https://www.babelcoder.com
DOMAIN
Domain āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ›āļāļŦāļēāļŦāļĢāļ·āļ­āļˆāļļāļ”āļŠāļ™āđƒāļˆāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ—āļĩāļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļžāļ·āļ­āđāļāđ‰āđ„āļ‚āļ›āļāļŦāļē āđ€āļŠāđˆāļ™ āļĢāļ°āļšāļšāļ§āļīāļ”āļĩāđ‚āļ­āļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ­āļēāļˆāļ›āļĢāļ°āļāļ­āļš
āđ„āļ›āļ”āđ‰āļ§āļĒ Domain āļ•āđˆāļēāļ‡ āđ† āđ„āļ”āđ‰āđāļāđˆ Recommendation Search Payment āđāļĨāļ° Ads āđ€āļ›āļ™āļ•āđ‰āļ™
Domain āļŠāļēāļĄāļēāļĢāļ–āļĄāļĩ Subdomain āļ‹āļķāļ‡āļ–āļ·āļ­āđ€āļ›āļ™āļŠāđˆāļ§āļ™āļĒāđˆāļ­āļĒāļ‚āļ­āļ‡ Domain āļ™āļąāļ™ āđ† āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ Order Management āļ­āļēāļˆāļĄāļĩ
Subdomain āđ€āļ›āļ™ Shopping Cart Management, Payment Processing āđāļĨāļ° Order Fullfillment āđ€āļ›āļ™āļ•āđ‰āļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
UBIQUITOUS LANGUAGE
āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļēāļĢāļ™āļīāļĒāļēāļĄāļĻāļąāļžāļ—āđŒāļ•āđˆāļēāļ‡ āđ† āđƒāļ™ Domain āđ€āļ›āļ™āđ„āļ›āđƒāļ™āļ—āļīāļĻāļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ āļēāļĐāļēāļāļĨāļēāļ‡āļ—āļĩāļ—āļąāļ‡ Domain Experts āļ™āļąāļ
āļžāļąāļ’āļ™āļēāđāļĨāļ°āļœāļđāđ‰āļĄāļĩāļŠāđˆāļ§āļ™āđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āđ€āļ‚āđ‰āļēāđƒāļˆāļĢāđˆāļ§āļĄāļāļąāļ™ āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Ubiquitous Language āļ āļēāļĐāļēāļāļĨāļēāļ‡āļ™āļĩāļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāļ•āđ‰āļ­āļ‡āđāļˆāļāđāļˆāļ‡āđƒāļŦāđ‰āļ™āļąāļ
āļžāļąāļ’āļ™āļēāđ€āļ‚āđ‰āļēāđƒāļˆāļ–āļķāļ‡āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ€āļžāļ·āļ­āđƒāļŦāđ‰āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļ—āļąāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āđāļĨāļ°āļĻāļąāļžāļ—āđŒāļ—āļĩāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ•āļąāļ‡āļŠāļ·āļ­āļ•āļąāļ§āđāļ›āļĢ āļŸāļ‡āļāđŒāļŠāļąāļ™ āļ„āļĨāļēāļŠ āđ€āļ›āļ™āđ„āļ›āđƒāļ™
āđāļ™āļ§āļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļāļąāļšāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļĻāļąāļžāļ—āđŒāļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ—āļĩāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāļ—āļĢāļēāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ•āđ‰āļ­āļ‡āđāļˆāļāđāļˆāļ‡
āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļœāļđāđ‰āļĄāļĩāļŠāđˆāļ§āļ™āđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āļ—āļĢāļēāļšāđ€āļŠāđˆāļ™āļāļąāļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
BOUNDED CONTEXT
Subdomain āđƒāļ” āđ† āļ„āļ§āļĢāļĄāļĩāļ‚āļ­āļšāđ€āļ‚āļ•āļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ—āļĩāļŠāļąāļ”āđ€āļˆāļ™āđāļĨāļ°āļĄāļĩāđ€āļžāļĩāļĒāļ‡āļŠāļīāļ‡āđ€āļ”āļĩāļĒāļ§āļ—āļĩāđ€āļ›āļ™āļ‡āļēāļ™āļ„āļ§āļĢāļ„āđˆāļēāđāļāđˆāļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢ āļ‚āļ­āļšāđ€āļ‚āļ•
āļŠāļąāļ”āđ€āļˆāļ™āļ™āļĩāļ–āļđāļāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Bounded Context āļ‚āļ­āļ‡ Subdomain āļ™āļąāļ™ āđ† Bounded Context āđƒāļŠāđ‰āđ€āļžāļ·āļ­āļ™āļīāļĒāļēāļĄāļŠāļīāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩ
āļĄāļĩ Domain Models āđƒāļ”āļšāđ‰āļēāļ‡āļ—āļĩāļˆāđāļēāđ€āļ›āļ™āļŠāđāļēāļŦāļĢāļąāļš subdomain āļ™āļąāļ™ āđ†
āđāļ•āđˆāļĨāļ° Models āļĄāļĩ Properties āđƒāļ”āļšāđ‰āļēāļ‡
āļĄāļĩāļŦāļ™āđ‰āļēāļ—āļĩāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđƒāļ”āļšāđ‰āļēāļ‡āļ—āļĩ subdomain āļ•āđ‰āļ­āļ‡āļāļĢāļ°āļ—āđāļē
āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ€āļŠāđˆāļ™ Shopping Cart Subdomain āļŠāļēāļĄāļēāļĢāļ–āļĄāļĩ Models āđ„āļ”āđ‰āđāļāđˆ Cart, Product, Customer āđ‚āļ”āļĒāļĄāļĩāļŦāļ™āđ‰āļēāļ—āļĩāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™
āļ„āļ·āļ­āļāļēāļĢ CRUD āļšāļ™ Cart āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ Models āļ•āđˆāļēāļ‡ Subdomain āļ­āļēāļˆāļĄāļĩāļāļēāļĢāļ™āļīāļĒāļēāļĄāļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļŠāđˆāļ™ Product āđāļĨāļ°
Customer āđƒāļ™ Shopping Cart āđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļšāđƒāļ™ Subdomain āļ‚āļ­āļ‡ Product Catalogs
Bounded Context āļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™āļ­āļēāļˆāļĄāļĩāļāļēāļĢāļ™āļīāļĒāļēāļĄ ubiquitous language āļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļŠāđˆāļ™ Promotion āđƒāļ™
Shopping Cart āļ­āļēāļˆāļŦāļĄāļēāļĒāļ–āļķāļ‡āļĢāļēāļ„āļēāđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩ Promotion āđƒāļ™ HR āļ­āļēāļˆāļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ™āļ•āđāļēāđāļŦāļ™āđˆāļ‡ āđ€āļ›āļ™āļ•āđ‰āļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
VALUE OBJECTS VS ENTITIES
Value Objects āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ„āđˆāļēāđ„āļ”āđ‰ Value Objects āļˆāļ°āļ–āļ·āļ­āļ§āđˆāļēāļĄāļĩāļ„āđˆāļēāđ€āļ—āđˆāļēāļāļąāļ™āđ€āļĄāļ·āļ­āļĄāļĩāļ„āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™
āđ€āļŠāđˆāļ™ Color āļˆāļ°āļĄāļĩāļ„āđˆāļēāđ€āļ—āđˆāļēāļāļąāļ™āđ€āļĄāļ·āļ­ RGB āđ€āļ—āđˆāļēāļāļąāļ™ āđ€āļ›āļ™āļ•āđ‰āļ™
Entities āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ„āđˆāļēāđ„āļ”āđ‰āđāļĨāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ§āļąāļ”āļ„āļ§āļēāļĄāđ€āļ—āđˆāļēāļāļąāļ™āđ„āļ”āđ‰āđ‚āļ”āļĒāļ”āļđāđāļ•āđˆāđ€āļžāļĩāļĒāļ‡ Property
āļ­āļĒāđˆāļēāļ‡āđ€āļ”āļĩāļĒāļ§ āļŦāļēāļāđāļ•āđˆāļ­āļēāļĻāļąāļĒāļāļēāļĢāđ€āļ—āđˆāļēāļāļąāļ™āļˆāļēāļāļ„āđˆāļē Identity āđ€āļŠāđˆāļ™ ID
āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļšāļˆāļķāļ‡āļ„āļ§āļĢāļžāļīāļˆāļēāļĢāļ“āļēāļ§āđˆāļēāļŠāļīāļ‡āđƒāļ”āđ€āļ›āļ™ Value Objects āđāļĨāļ°āļŠāļīāļ‡āđƒāļ”āļ„āļ§āļĢāđ€āļ›āļ™ Entities āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļ Entities āļ™āļąāļ™āļĄāļĩāļāļēāļĢ
āļ—āđāļēāļ‡āļēāļ™āļ—āļĩāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļāļ§āđˆāļēāļ—āļąāļ‡āļāļēāļĢāļ™āļīāļĒāļēāļĄ methods āđ€āļžāļ·āļ­āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡ Properties āđ€āļ›āļ™āļ•āđ‰āļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Item
AGGREGATE ROOT
Aggregate āļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļāļąāļ™āđ‚āļ”āļĒāļ–āļđāļāļˆāļąāļ”āļāļēāļĢāđƒāļ™āļāļēāļ™āļ°āļ—āļĩāđ€āļ›āļ™āļŦāļ™āđˆāļ§āļĒāļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđƒāļ™āļĄāļļāļĄāļĄāļ­āļ‡
āļ‚āļ­āļ‡ DDD āļ™āļąāļ™āļāļĨāļļāđˆāļĄāļāđ‰āļ­āļ™āļ‚āļ­āļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāđƒāļ™ DDD āļ™āļąāļ™āļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļāļąāļ™āļˆāļ™āđ„āļĄāđˆāļ„āļ§āļĢāđāļĒāļāļˆāļąāļ”āļāļēāļĢāļ—āļĩāļĨāļ°āļŠāđˆāļ§āļ™āļŦāļēāļāđāļ•āđˆāļ•āđ‰āļ­āļ‡āļˆāļąāļ”āļāļēāļĢāđ‚āļ”āļĒāđƒāļŠāđ‰āļĄāļļāļĄ
āļĄāļ­āļ‡āļ§āđˆāļēāđ€āļ›āļ™āļŠāļīāļ™āļŠāđˆāļ§āļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļ™
Order
Order Item
Order Item
COMMUNICATION
Babel Coder
Babel Coder
https://www.babelcoder.com
āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ
Order Stock Payment
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
1
SYNCHRONOUS MESSAGES
Request an order
check stock
Calculate total price
2
3
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
SYNCHRONOUS MESSAGES
check stock
Calculate total price
2
3
POST <STOCK_IP>/products/<ID>
POST <PAYMENT_IP>/checkout
Babel Coder
Babel Coder
https://www.babelcoder.com
HTTP / REST API
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
HTTP / REST API āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāđ€āļ›āļ™āļ—āļĩāļ™āļīāļĒāļĄ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āļŠāļēāļĄāļēāļĢāļ–āļŠāļ·āļ­āļŠāļēāļĢāļāļąāļ™
āļ”āđ‰āļ§āļĒ REST API āđ„āļ”āđ‰ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļŦāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļšāļ•āđˆāļ­āđ€āļ™āļ·āļ­āļ‡āđ„āļ›āļŦāļĨāļēāļĒ āđ† āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĒāđˆāļ­āļĄāļ—āđāļēāđƒāļŦāđ‰ Client āļ›āļĨāļēāļĒāļ—āļēāļ‡āđƒāļŠāđ‰āļĢāļ°āļĒāļ°
āđ€āļ§āļĨāļēāļĢāļ­āļ„āļ­āļĒāļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļšāļ—āļĩāļ™āļēāļ™āļ•āļēāļĄ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļŦāļēāļāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ€āļāļīāļ”āļ‚āļķāļ™āđƒāļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŠāļąāļ™āđƒāļ™ Client āļˆāļ°āļĢāļąāļšāļ—āļĢāļēāļšāļ–āļķāļ‡āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ™āļąāļ™āđ„āļ”āđ‰
āļŠāđ‰āļēāđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāļ•āđ‰āļ­āļ‡āļĢāļ­āđ€āļ§āļĨāļēāļāđˆāļ­āļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđāļĢāļ āđ† āļˆāļ°āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ€āļŠāļĢāđ‡āļˆāđāļĨāļ°āļŠāđˆāļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŠāļąāļ™āđƒāļ™āļāđˆāļ­āļ™ āļˆāļķāļ‡āļˆāļ°āļ—āļĢāļēāļšāļ§āđˆāļēāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”
āļžāļĨāļēāļ”āđ€āļāļīāļ”āļ‚āļķāļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
GRPC
gRPC āđ€āļ›āļ™āļĢāļđāļ›āđāļšāļšāļŦāļ™āļķāļ‡āļ‚āļ­āļ‡ Remote Procedure Call
(RPC) āļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ™āđāļēāļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āđƒāļ™āļ‚āļ™āļēāļ”āļ—āļĩ
āđ€āļĨāđ‡āļāļāļ§āđˆāļēāđāļĨāļ°āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āļāļ§āđˆāļēāļˆāļķāļ‡āļ™āļīāļĒāļĄāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢ
āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđāļšāļš Synchronous Messaging
Babel Coder
Babel Coder
https://www.babelcoder.com
article
user
comment
GRAPHQL FEDERATION
GraphQL Federation āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡ Apollo Server āđƒāļ™āļāļēāļĢāļĢāļ§āļĄāļŦāļĨāļēāļĒ GraphQL API āđƒāļŦāđ‰āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđ€āļ”āļĩāļĒāļ§ āđ€āļĢāļĩāļĒāļāļ§āđˆāļē
Supergraph āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļˆāļāđāļˆāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđ€āļ›āļ™ GraphQL API āļĒāđˆāļ­āļĒ āđ† āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Subgraph āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ›āļĒāļąāļ‡
Supergraph āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ™āļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāļŠāđˆāļ‡ Query āļĒāđˆāļ­āļĒ āđāļšāļš Synchronous āđ„āļ›āļĒāļąāļ‡ Subgraph āļ‹āļķāļ‡āđ€āļ›āļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđāļĨāđ‰āļ§āļˆāļķāļ‡āļĢāļ§āļĄāļœāļĨāļĨāļąāļžāļ˜āđŒ
āļāļĨāļąāļšāļŠāļđāđˆ Client āļ•āđˆāļ­āđ„āļ›
Order Stock Payment
1
ASYNCHRONOUS MESSAGES
ORDER_REQUESTED Event
Message Channel
Message Broker
Babel Coder
Babel Coder
https://www.babelcoder.com
āđ€āļĄāļ·āļ­āđ„āļŦāļĢāđˆāļ„āļ§āļĢāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļšāđƒāļ”
āļ—āļąāļ‡āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous āđāļĨāļ° Asynchronous āļ•āđˆāļēāļ‡āļĄāļĩāļ‚āđ‰āļ­āļ”āļĩāļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļ›āļĢāļ°āđ€āļ āļ—āļ•āđˆāļēāļ‡ āđ† āļ•āļēāļĄāļ„āļ§āļēāļĄ
āđ€āļŦāļĄāļēāļ°āļŠāļĄāļˆāļķāļ‡āđ€āļ›āļ™āđ€āļĢāļ·āļ­āļ‡āļŠāđāļēāļ„āļąāļ
āđ€āļĢāļēāļ„āļ§āļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous āđƒāļ™āļāļĢāļ“āļĩāļ•āđˆāļ­āđ„āļ›āļ™āļĩ
āļŦāļēāļāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļ­āļ·āļ™āđ„āļ”āđ‰āļ–āđ‰āļēāđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļąāļšāļœāļĨāļĨāļąāļžāļ˜āđŒāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļŠāļ­āļšāļ–āļēāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļīāļ™āļ„āđ‰āļēāļˆāļēāļ Product āļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Product
āļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļœāļđāđ‰āļ‚āļēāļĒāļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡ User āļāļĢāļ“āļĩāļ™āļĩāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ Synchronous āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ•āļ­āļšāļāļĨāļąāļšāđ„āļ›āļĒāļąāļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡ UI āļ™āļąāļ™āļŠāļĄāļšāļđāļĢāļ“āđŒ
āđ€āļĄāļ·āļ­āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļš Real-time
āđ€āļĄāļ·āļ­āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ—āļĩāļŠāļąāļ™
āđ€āļĢāļēāļ„āļ§āļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Asynchronous āđƒāļ™āļāļĢāļ“āļĩāļ•āđˆāļ­āđ„āļ›āļ™āļĩ
āđ€āļĄāļ·āļ­āļŸāđ€āļˆāļ­āļĢāđŒāļ™āļąāļ™āļĒāļ­āļĄāļĢāļąāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ—āļĩāđ€āļŠāļĢāđ‡āļˆāļŠāļīāļ™āđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļāļēāļĢāļ­āļ­āļāļĢāļēāļĒāļ‡āļēāļ™āļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļ āļēāļĒāļŦāļĨāļąāļ‡āļœāđˆāļēāļ™āļ­āļĩāđ€āļĄāļĨāđŒāđ„āļ”āđ‰
āđ€āļĄāļ·āļ­āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļĨāļēāļ‡āļĄāļĩāļ„āļ§āļēāļĄāļĨāđˆāļēāļŠāđ‰āļēāļŦāļĢāļ·āļ­āđƒāļŠāđ‰āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ™āļēāļ™āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ
āđ€āļĄāļ·āļ­āļĒāļ­āļĄāļĢāļąāļšāđƒāļŦāđ‰āļšāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ€āļāļīāļ”āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđƒāļ™āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āđāļĨāļ°āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ—āđāļēāļ‹āđāļē (Retry)
Babel Coder
Babel Coder
https://www.babelcoder.com
API GATEWAY āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
Order Stock Payment
POST <ORDER_IP>
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Stock Payment
API GATEWAY āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
POST <GATEWAY_IP>/orders
POST /orders
A
P
I
G
a
t
e
w
a
y
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
Users UI
MICRO FRONTEND
Articles UI Articles
Users
QUERIES
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
CQRS
āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢ CRUD āļ—āļĩāļāļēāļĢāļ­āđˆāļēāļ™āđāļĨāļ°āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĢāļ°āļ—āđāļēāļšāļ™ Data Models āļŠāļļāļ”āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđāļĄāđ‰āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–
āļāļĢāļ°āļ—āđāļēāđ„āļ”āđ‰āđ‚āļ”āļĒāļ‡āđˆāļēāļĒāđāļ•āđˆāđƒāļ™āļĢāļ°āļšāļšāļ—āļĩāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļĒāđˆāļ­āļĄāļĄāļĩāļ„āļ§āļēāļĄāļ—āđ‰āļēāļ—āļēāļĒāļ•āđˆāļēāļ‡ āđ† āđ€āļāļīāļ”āļ‚āļķāļ™
āļ›āļāļŦāļēāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ Data Schemas āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ”āļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļ„āļ§āļĢāļ—āđāļē Normalize āđ€āļžāļ·āļ­āđāļšāđˆāļ‡āđāļĒāļāļ‚āđ‰āļ­āļĄāļđāļĨ
āļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļ•āđˆāļēāļ‡ āđ† āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āļĒāļīāļ‡āļĄāļĩāļāļēāļĢāļ—āđāļē Normalize āļĄāļēāļāđ€āļ—āđˆāļēāđƒāļ”āļĒāļīāļ‡āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļāļēāļĢ Join āļ•āļēāļĢāļēāļ‡āđ€āļžāļ·āļ­
āļŠāļ·āļšāļ„āđ‰āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāđ‰āđ„āļ”āđ‰āļœāļĨāļĨāļąāļžāļ˜āđŒāļ•āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĄāļēāļāđ€āļ—āđˆāļēāļ™āļąāļ™
āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄ āļāļēāļĢāļĢāļ§āļĄāļāļēāļĢāļ­āđˆāļēāļ™āđāļĨāļ°āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļ—āđāļēāđƒāļŦāđ‰āđ€āļŠāļĩāļĒāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡ āđ€āļŠāđˆāļ™
āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Transaction āđāļĨāļ° ACID āļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄāļˆāļķāļ‡āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āđ€āļ āļ— DBMS āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļāļēāļĢāļŠāļ·āļšāļ„āđ‰āļ™
āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĨāļąāļšāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŠāļīāļ‡āļĨāļķāļ āļŦāļēāļāđāļšāđˆāļ‡āđāļĒāļāļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļ­āļāļĄāļēāļ•āđˆāļēāļ‡āļŦāļēāļāđ„āļ”āđ‰āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄ āđ€āļŠāđˆāļ™
ElasticSearch āđ„āļ”āđ‰
āļ›āļāļŦāļēāļ”āđ‰āļēāļ™āļāļēāļĢāļ‚āļĒāļēāļĒāļāļēāļĢāļĢāļ­āļ‡āļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ”āļĒāļ—āļąāļ§āđ„āļ›āđāļĨāđ‰āļ§āļĄāļąāļāļˆāļ°āļĄāļĩāļ›āļĢāļīāļĄāļēāļ“āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāļĄāļēāļāļāļ§āđˆāļēāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āļŦāļēāļāļāļēāļĢ
āļ­āđˆāļēāļ™āđāļĨāļ°āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļāļ­āļ­āļāļˆāļēāļāļāļąāļ™ āļ™āļąāļ™āļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āđ€āļĢāļēāđ€āļĨāļ·āļ­āļāļŠāđ€āļāļĨāļĢāļ°āļšāļšāđƒāļ™āļāļēāļĢāļ­āđˆāļēāļ™āđƒāļŦāđ‰āļĄāļēāļāļ‚āļķāļ™āđ„āļ”āđ‰
Separation of Concerns āļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļāļ‡āļēāļ™āļ”āđ‰āļēāļ™āļāļēāļĢāļ­āđˆāļēāļ™āļ­āļ­āļāļˆāļēāļāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļ­āļāļˆāļēāļāļāļąāļ™āļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āļĢāļ°āļšāļšāļĄāļĩāļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āđƒāļ™āļāļēāļĢāđ€āļžāļīāļĄ
āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāđƒāļŦāđ‰āđāļ•āđˆāļĨāļ°āļ‡āļēāļ™āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
CQRS
Command and Query Responsibility Segregation (CQRS) āđ€āļ›āļ™āļŦāļĨāļąāļāļāļēāļĢāļ—āļĩāļ§āđˆāļēāļ”āđ‰āļ§āļĒāļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļ Command āļ­āļ­āļāļˆāļēāļ Queries āđ‚āļ”āļĒ
āļ‡āļēāļ™āļ”āđ‰āļēāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Command āļˆāļ°āļĄāļĩ Data Models āļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļš Data Models āļ‚āļ­āļ‡āļ‡āļēāļ™āļāļ‡ Queries
Command āđ€āļ›āļ™āļ”āđ‰āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļĢāļąāļš Event āļˆāļēāļāļĢāļ°āļšāļšāļŦāļĢāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļžāļ·āļ­āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢ Create Update āļŦāļĢāļ·āļ­ Delete āļ‚āđ‰āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļ­āļēāļˆ
āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ Data Validation āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ”āđ‰āļēāļ™ Business Logic āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ āđ€āļ›āļ™āļ•āđ‰āļ™ āđ€āļĄāļ·āļ­āļ‡āļēāļ™āļāļ‡
Command āđ€āļŠāļĢāđ‡āļˆāļŠāļīāļ™āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­ Event āđƒāļŦāļĄāđˆāļ­āļ­āļāđ„āļ›āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļ‡ Query āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļ­āđ„āļ›
Query āļ—āđāļēāļāļēāļĢāļĢāļąāļš Event āļˆāļēāļāļ”āđ‰āļēāļ™ Command āđ€āļžāļ·āļ­āļ™āđāļēāđ„āļ›āļˆāļąāļ”āļ—āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ•āđˆāļ­āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™ āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ™āļĩāļˆāļ°āļĄāļĩāļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđƒāļ™
Read Models āļ”āđ‰āļ§āļĒāļĢāļđāļ›āđāļšāļšāļ—āļĩāļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢ Query āđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āđˆāļ­āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āļšāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āļŠāļļāļ”
Babel Coder
Babel Coder
https://www.babelcoder.com
Queries
Event Handlers
Commands
CQRS
Query Store
Command Store
Read
Create
Update
Delete
Event
Updates
Reads
Updates
Babel Coder
Babel Coder
https://www.babelcoder.com
CQRS
ORDER
Updates
Command Store
Queries
Event Handlers
ORDER_PLACED ORDER_CREATED
Query Store
Updates
Reads
Get
Order Query Service
Babel Coder
Babel Coder
https://www.babelcoder.com
CQRS
Order
Query
Order
Order
Query
Order
Query
Query Store Replicas
CQRS āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļŠāđ€āļāļĨāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāļĄāļĩ
āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļŠāļđāļ‡ āđ€āļŠāđˆāļ™ Query
Service āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāļ™
Babel Coder
Babel Coder
https://www.babelcoder.com
MATERIALIZED VIEW
Query Store Materialized View Presentation Layer
CQRS āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļšāđˆāļ‡āđāļĒāļāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Command āđāļĨāļ° Query āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ Elastic Search āļāļ‡
Query āđ€āļžāļ·āļ­āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļ āļŦāļĢāļ·āļ­āđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āđ€āļ āļ— NoSQL āļ­āļ·āļ™āđƒāļ™āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡ Query āļˆāļ°āļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļšāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ—āļĩ
āļžāļĢāđ‰āļ­āļĄāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļ™āđāļēāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ­āļ·āļ™āđ€āļžāļīāļĄāđ€āļ•āļīāļĄāļŦāļĢāļ·āļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ™āđ‰āļ­āļĒāļ—āļĩāļŠāļļāļ”
Get
Babel Coder
Babel Coder
https://www.babelcoder.com
EVENTUAL CONSISTENCY
CQRS āļ­āļēāļˆāļĄāļĩ delay āđ€āļāļīāļ”āļ‚āļķāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āđāļĨāļ°āļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļŠāđˆāļ™ āļ„āđāļēāļŠāļąāļ‡āļ‹āļ·āļ­āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āđāļĨāđ‰āļ§ (ORDER_PLACED) āđāļ•āđˆāļĢāļąāļšāļāļēāļĢ
āļ­āļąāļžāđ€āļ”āļ—āđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡ Command āđāļĨāđ‰āļ§ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļĩāļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļāļ‡ Query āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ
ORDER_CREATED āļĒāļąāļ‡āļĄāļēāđ„āļĄāđˆāļ–āļķāļ‡ āļŦāļēāļāđƒāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ™āļĩāļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‚āđ‰āļēāļĄāļēāđ€āļĢāļēāļˆāļ°āļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”āļˆāļ™āļāļ§āđˆāļēāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ
ORDER_CREATED āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđƒāļ™āļāļ‡ Query
Eventual Consistency āđ€āļ›āļ™āļŦāļĨāļąāļāļāļēāļĢāļ—āļĩāļāļĨāđˆāļēāļ§āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ€āļŠāđˆāļ™āļ—āļĩāļ§āđˆāļē āļĢāļ°āļšāļšāļ­āļēāļˆāļĄāļĩ delay āđ€āļāļīāļ”āļ‚āļķāļ™āđ„āļ”āđ‰āļšāđ‰āļēāļ‡āđāļ•āđˆāļ—āđ‰āļēāļĒāļ—āļĩāļŠāļļāļ”āđāļĨāđ‰āļ§āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļąāļ‡āļĢāļ°āļšāļšāļˆāļ°āļ•āđ‰āļ­āļ‡
āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āđāļĨāļ°āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™
ORDER
Queries
Event Handlers
ORDER_PLACED ORDER_CREATED
Get
Order Query Service
Babel Coder
Babel Coder
https://www.babelcoder.com
OPTIMISTIC UPDATE
āđ€āļžāļ·āļ­āđƒāļŦāđ‰ UI āļĄāļĩāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļ—āļĩāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļˆāļĢāļīāļ‡ āđ€āļĄāļ·āļ­āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢāļŠāđˆāļ‡ Command āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāđˆāļ­āļ™ āđƒāļ™āļ‚āļ“āļ°
āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļāđ‡āļ—āđāļēāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™ UI āđ€āļŠāļĄāļ·āļ­āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āđāļĨāđ‰āļ§ āļŦāļēāļāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļˆāļķāļ‡āļĒāļāđ€āļĨāļīāļāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļšāļ™ UI
āđ€āļĢāļĩāļĒāļāļĨāļąāļāļĐāļ“āļ°āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ€āļŠāđˆāļ™āļ™āļĩāļ§āđˆāļē Optimistic Update
Create
Failed
Babel Coder
Babel Coder
https://www.babelcoder.com
POLLING
āļ§āļīāļ˜āļĩāļāļēāļĢ Polling āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāđˆāļ‡ Request āđ„āļ›āļĒāļąāļ‡ Command Service āļˆāļēāļāļ™āļąāļ™āļˆāļķāļ‡āļ—āđāļēāļāļēāļĢ Polling āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļ Query Service āļˆāļ™āļāļ§āđˆāļēāļˆāļ°āđ„āļ”āđ‰
āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļˆāļķāļ‡āļˆāļ°āļŦāļĒāļļāļ”āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢ Polling
Query
Command
UI
Request
1. 2. Poll until updated
Babel Coder
Babel Coder
https://www.babelcoder.com
PUBLISH - SUCSCRIBE
āļ™āļ­āļāđ€āļŦāļ™āļ·āļ­āļˆāļēāļāļāļēāļĢ Polling āđ€āļĢāļēāļĒāļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āļāļĢāļ°āļ—āđāļē Publish - Subscribe āļ”āđ‰āļ§āļĒāļāļēāļĢāđƒāļŦāđ‰ UI āļ—āđāļēāļāļēāļĢ Subscribe āļšāļ™ Query āļ āļēāļĒāļŦāļĨāļąāļ‡āļāļēāļĢāļŠāđˆāļ‡
Request āđ„āļ›āļĒāļąāļ‡ Command Service āđ€āļĄāļ·āļ­ Query āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļˆāļ°āļ—āđāļēāļāļēāļĢ Publish āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļĄāļēāļĒāļąāļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡ UI āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī
āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāđ€āļĢāļēāđ„āļ”āđ‰āļ—āđāļēāļāļēāļĢ Subscribe āđ„āļ§āđ‰āđāļĨāđ‰āļ§
Query
Command
UI
2. Request Subscribe
1. 3. Publish
EVENT SOURCING
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
TRADITIONAL DATA STORAGE
Service
Database
Records
Update
Old Data
āđƒāļ™āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ›āļ™āļāļēāļĢāđāļ—āļ™āļ—āļĩāļ—āļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļīāļĄāļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāļĄāđˆ āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āļĢāļēāļšāđ„āļ”āđ‰āđ€āļĨāļĒāļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļāđˆāļ­āļ™
āļŦāļ™āđ‰āļēāļ™āļąāļ™āļ„āļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ” āļĄāļĩāļ„āđˆāļēāđ€āļ›āļ™āđ€āļŠāđˆāļ™āđ„āļĢ āđ€āļāļīāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ„āđˆāļēāđ€āļžāļĢāļēāļ°āđ€āļŦāļ•āļļāđƒāļ” āļĢāļ§āļĄāļ–āļķāļ‡āđƒāļ„āļĢāđ€āļ›āļ™āļœāļđāđ‰āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ‚āļąāļ™āļ•āļ­āļ™āļ”āļąāļ‡āļāļĨāđˆāļēāļ§
Babel Coder
Babel Coder
https://www.babelcoder.com
Service
AUDIT LOGS
Database
āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āđ€āļāđ‡āļšāļ›āļĢāļ°āļ§āļąāļ•āļīāļ‚āļ­āļ‡āļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļēāļ‡ āđ† āļ§āđˆāļēāđƒāļ„āļĢ āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāđƒāļ” āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļŠāļīāļ‡āđƒāļ” āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļĄāļĩ
Audit Logs āļ—āļĩāļ­āļēāļˆāđ€āļ›āļ™āđ„āļŸāļĨāđŒ āļ•āļēāļĢāļēāļ‡āļŦāļĢāļ·āļ­āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļžāļ·āļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļšāļąāļ™āļ—āļķāļāļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ™āļąāļ™ āđ€āļĄāļ·āļ­āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ–āļđāļāļšāļąāļ™āļ—āļķāļ
āđƒāļ™ State āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ Audit Logs āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļāļĢāļ°āļ—āđāļēāđ„āļ”āđ‰āļœāđˆāļēāļ™ Transaction
State
Audit Logs
Babel Coder
Babel Coder
https://www.babelcoder.com
Service
DUPLICATED DATA
Database
āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ Audit Logs āļ™āļąāļ™āđ€āļ›āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļ—āļĩāļŠāļļāļ”āđāļ•āđˆāļ­āļĒāļđāđˆāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļšāļąāļ™āļ—āļķāļāļ‚āļ­āļ‡āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ§āđˆāļēāđ€āļāļīāļ”āļāļēāļĢāļāļĢāļ°āļ—āđāļēāđƒāļ”
āđ† āļāđˆāļ­āļ™āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ‡ āļ–āđ‰āļēāļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļ‡āļēāļ™āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ State āļāđ‡āļˆāļ°āđ€āļ›āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļšāļąāļ™āļ—āļķāļāđ€āļ›āļ™āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ•āļēāļĄ
āļ‚āļąāļ™āļ•āļ­āļ™āđƒāļ™ Audit Logs āļˆāļķāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰āļ§āđˆāļē State āļ„āļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ‹āđāļēāļ‹āđ‰āļ­āļ™āļāļąāļš Audit Logs
State
Audit Logs
Duplicated
Single Source of Truth
Babel Coder
Babel Coder
https://www.babelcoder.com
Service
EVENT SOURCING
Database
āđ€āļĢāļēāļˆāļķāļ‡āđ„āļĄāđˆāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ State āļŦāļĢāļ·āļ­āļŠāļ–āļēāļ™āļ°āļŠāļļāļ”āļ—āđ‰āļēāļĒāđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļĩāļāļ•āđˆāļ­āđ„āļ› āļŦāļēāļāđāļ•āđˆāļˆāļąāļ”āđ€āļāđ‡āļšāļšāļąāļ™āļ—āļķāļāļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ•āđˆāļēāļ‡ āđ† āļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™
āđāļ—āļ™āđƒāļ™ Event Logs (āļ•āđˆāļ­āđ„āļ›āļ™āļĩāļˆāļ°āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Event Store) āđ€āļĄāļ·āļ­āđƒāļ”āļāđ‡āļ•āļēāļĄāļ—āļĩāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļŠāļ–āļēāļ™āļ°āļŦāļĢāļ·āļ­āļ„āđˆāļēāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ€āļĢāļē
āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‹āđāļēāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ•āđˆāļēāļ‡ āđ† āđ€āļŦāļĨāđˆāļēāļ™āļąāļ™āļˆāļ™āđ„āļ”āđ‰āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ­āļ­āļāļĄāļēāđ„āļ”āđ‰
Event Logs / Event Store
Replay
State / Object
āđāļ•āđˆāļĨāļ° Record āđƒāļ™ Event Store āļˆāļ°āđ€āļ›āļ™
Immutable Data āļ„āļ·āļ­āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡
āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰
Babel Coder
Babel Coder
https://www.babelcoder.com
Event_ID Event_Type Data
1 ACC_DEPOSITED { uid: 1, amount: 100 }
2 ACC_DEPOSITED { uid: 2, amount: 100 }
3 ACC_WITHDRAWED { uid: 1, amount: 10 }
4 ACC_DEPOSITED { uid: 1, amount: 100 }
EVENT SOURCING
Account Balance: 190
Babel Coder
Babel Coder
https://www.babelcoder.com
Event_ID Event_Type Data
1 ACC_DEPOSITED { uid: 1, amount: 100 }
2 ACC_DEPOSITED { uid: 2, amount: 100 }
3 ACC_WITHDRAWED { uid: 1, amount: 10 }
4 ACC_DEPOSITED { uid: 1, amount: 100 }
5 ACC_DEPOSITED { uid: 1, amount: 20, note: ‘...’ }
EVENT SOURCING
āļāļĢāļ“āļĩāļ—āļĩāđ€āļāļīāļ”āļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ” āđ€āļŠāđˆāļ™ ID 3 āļ—āļĩāļ„āļ§āļēāļĄ
āļ•āļąāļ‡āđƒāļˆāđ€āļ”āļīāļĄāđ€āļ›āļ™āļāļēāļĢāļāļēāļāđ€āļ‡āļīāļ™ 10 āļšāļēāļ— āļŦāļēāļāđāļ•āđˆ
āļĢāļ°āļšāļšāļšāļąāļ™āļ—āļķāļāļœāļīāļ”āļžāļĨāļēāļ”āđ€āļ›āļ™āļ–āļ­āļ™āđ€āļ‡āļīāļ™ 10 āļšāļēāļ—āđāļ—āļ™
āļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢāļ‚āļ­āļ‡ Event Sourcing āđ€āļĢāļēāļˆāļ°āđ„āļĄāđˆ
āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚ Record āļ—āļĩāļšāļąāļ™āļ—āļķāļāđāļĨāđ‰āļ§āđ„āļ”āđ‰ āđāļ•āđˆāđ€āļĢāļē
āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ Record āļˆāļēāļ Event āđƒāļŦāļĄāđˆāļ•āļēāļĄ
ID 5 āđ€āļžāļ·āļ­āļŦāļąāļāļĨāđ‰āļēāļ‡āļāļēāļĢāļāļĢāļ°āļ—āđāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰
Babel Coder
Babel Coder
https://www.babelcoder.com
DateTime Event_ID Event_Type Data
xxx1 1 ACC_DEPOSITED { uid: 1, amount: 100 }
xxx2 2 ACC_DEPOSITED { uid: 2, amount: 100 }
xxx3 3 ACC_WITHDRAWED { uid: 1, amount: 10 }
xxx4 4 ACC_DEPOSITED { uid: 1, amount: 100 }
EVENT SOURCING
āļāļēāļĢāđƒāļŠāđ‰ Event Sourcing āļ™āļąāļ™āļ—āđāļēāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–
āļ„āđāļēāļ™āļ§āļ“āļ„āđˆāļēāļœāļĨāļĨāļąāļžāļ˜āđŒāđƒāļ™āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļĩāļāđāļēāļŦāļ™āļ” āđ‚āļ”āļĒ
āļ­āļēāļĻāļąāļĒāļāļēāļĢ Replay āļšāļąāļ™āļ—āļķāļāļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™
āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļĩāļŠāļ™āđƒāļˆ āđ€āļŠāđˆāļ™ āļŠāļ™āđƒāļˆ Account
Balance āļ‚āļ­āļ‡ User ID āđ€āļ›āļ™ 1 āđƒāļ™āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļē
xxx1 āļ–āļķāļ‡ xxx3 āļ‹āļķāļ‡āļˆāļ°āđ„āļ”āđ‰āļœāļĨāļĨāļąāļžāļ˜āđŒāđ€āļ›āļ™ 90 āļšāļēāļ—
Babel Coder
Babel Coder
https://www.babelcoder.com
Service
Command
THE DUAL WRITE PROBLEM
Event Queue
āđƒāļ™āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļāļąāļšāļ—āļĩāļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļąāļžāđ€āļ”āļ—āļ™āļąāļ™āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļœāđˆāļēāļ™
Event Queue āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāļ—āļąāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ° Queue āđ€āļ›āļ™āļ„āļ™āļĨāļ°āļĢāļ°āļšāļšāļāļąāļ™āļˆāļķāļ‡āļāļēāļĢāļąāļ™āļ•āļĩāđ„āļĄāđˆāđ„āļ”āđ‰āļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļ° Sync āļāļąāļ™ āļŦāļēāļāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—
āļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡āļŦāļ™āļķāļ‡āļŠāđāļēāđ€āļĢāđ‡āļˆāđāļ•āđˆāļ­āļĩāļāļ”āđ‰āļēāļ™āđ„āļĄāđˆāļŠāđāļēāđ€āļĢāđ‡āļˆāļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļ›āļāļŦāļēāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļ™āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰
Database
Babel Coder
Babel Coder
https://www.babelcoder.com
Service
Command
THE DUAL WRITE PROBLEM
Event Queue
āđ€āļ™āļ·āļ­āļ‡āļāļēāļĢ Event Store āđ€āļ›āļ™āļĻāļđāļ™āļĒāđŒāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđāļ—āđ‰āļˆāļĢāļīāļ‡āđ€āļĢāļēāļˆāļķāļ‡āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ›āļāļŦāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰ āđ‚āļ”āļĒāļ—āđāļēāļāļēāļĢāļšāļąāļ™āļ—āļķāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ›
āļĒāļąāļ‡ Event Store āļāđˆāļ­āļ™ āđ€āļĄāļ·āļ­āļāļēāļĢāļāļĢāļ°āļ—āđāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āļŠāđāļēāđ€āļĢāđ‡āļˆāļˆāļķāļ‡āļŠāđˆāļ‡āļ•āđˆāļ­āļœāļĨāļĨāļąāļžāļ˜āđŒāļ™āļąāļ™āđ„āļ›āļĒāļąāļ‡āļĢāļ°āļšāļšāļ āļēāļĒāļ™āļ­āļ āđ€āļŠāđˆāļ™ Event Queue āļ•āđˆāļ­āđ„āļ›
Event Store
Babel Coder
Babel Coder
https://www.babelcoder.com
Total Item
10
10
OPTIMISTIC CONCURRENCY
āļŠāļĄāļĄāļ•āļīāđƒāļŦāđ‰āļˆāđāļēāļ™āļ§āļ™āļŠāļīāļ™āļ„āđ‰āļēāļ„āļ‡āđ€āļŦāļĨāļ·āļ­āļĄāļĩ 10 āļŠāļīāļ™ āđ€āļĄāļ·āļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ A āđāļĨāļ° B āļ•āđˆāļēāļ‡āđ€āļ‚āđ‰āļēāļĄāļēāđƒāļŠāđ‰āļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļŦāļ™āđ‰āļēāļˆāļ­ UI āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļ‚āļ­āļ‡āđ€āļ‚āļēāļ—āļąāļ‡āļ„āļđāđˆāļˆāļ°
āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļīāļ™āļ„āđ‰āļēāļ„āļ‡āđ€āļŦāļĨāļ·āļ­āđ€āļ›āļ™ 10 āļŠāļīāļ™ āļ—āļąāļ‡āļŠāļ­āļ‡āļˆāļķāļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļ‹āļ·āļ­āļŠāļīāļ™āļ„āđ‰āļēāđ„āļ”āđ‰āđƒāļ™āļˆāđāļēāļ™āļ§āļ™āđ„āļĄāđˆāđ€āļāļīāļ™ 10 āļŠāļīāļ™āļ—āļąāļ‡āļ„āļđāđˆ āđ€āļĄāļ·āļ­ A āđāļĨāļ° B āļ—āđāļēāļāļēāļĢ
āļŠāļąāļ‡āļ‹āļ·āļ­āļĢāļ°āļšāļšāļˆāļ°āļšāļąāļ™āļ—āļķāļāļāļēāļĢāļŠāļąāļ‡āļ‹āļ·āļ­āđāļĨāļ°āļ•āļąāļ”āļĒāļ­āļ”āļ„āļ‡āđ€āļŦāļĨāļ·āļ­āļ‚āļ­āļ‡āļŠāļīāļ™āļ„āđ‰āļē āļ—āļ§āđˆāļēāđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļīāļ‡āđāļĨāđ‰āļ§āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ™āļĩāļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļ‚āļķāļ™āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļ
āļŠāļīāļ™āļ„āđ‰āļēāļ„āļ‡āđ€āļŦāļĨāļ·āļ­āļˆāļ°āđ„āļĄāđˆāđ€āļžāļĩāļĒāļ‡āļžāļ­
10
ITEM_REMOVED (6) ITEM_REMOVED (9)
Event Store
Babel Coder
Babel Coder
https://www.babelcoder.com
Total Item
10
10
10
ITEM_REMOVED (6) ITEM_REMOVED (9)
V2 V2
OPTIMISTIC CONCURRENCY
āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāļĄāđ€āļĨāļ‚āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ”āđ‰ āļŦāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ”āļĄāļĩāđ€āļĨāļ‚āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ•āļĢāļ‡āļāļąāļ™āļˆāļ°āļ–āļ·āļ­āļ§āđˆāļēāđ€āļ›āļ™āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™āļžāļĢāđ‰āļ­āļĄ
āļāļąāļ™ Record āļ•āļąāļ§āļŦāļĨāļąāļ‡āļ—āļĩāļĄāļĩāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļˆāļ°āđ„āļĄāđˆāļ–āļđāļāļ™āđāļēāļĄāļēāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļŦāļĢāļ·āļ­āļ­āļēāļˆāđ„āļĄāđˆāļ–āļđāļāļšāļąāļ™āļ—āļķāļāļĨāļ‡āđƒāļ™ Event Store
Event
Store
Babel Coder
Babel Coder
https://www.babelcoder.com
SNAPSHOTS
Snapshot Version N
āļāļēāļĢāļ„āđāļēāļ™āļ§āļ“āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļ­āļ‡ Entity āļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļąāļ‡āļŦāļĄāļ”āđƒāļ™ Event Store āļ™āļąāļ™āđ€āļ›āļ™āđ€āļĢāļ·āļ­āļ‡āđ€āļŠāļĩāļĒāđ€āļ§āļĨāļē āđ€āļĢāļēāļˆāļķāļ‡āļ—āđāļēāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡
Snapshot āļ—āļĩāļ„āđāļēāļ™āļ§āļ“āļœāļĨāļĨāļąāļžāļ˜āđŒāļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ§āđ‰āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļēāđāļĨāđ‰āļ§āđ‚āļ”āļĒāļĄāļĩāļāļēāļĢāļāđāļēāļāļąāļšāļ”āđ‰āļ§āļĒāđ€āļĨāļ‚āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”āļŠāļēāļĄāļēāļĢāļ–
āđ€āļĢāļīāļĄāļˆāļēāļ Snapshots āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļĨāđˆāļēāļŠāļļāļ”āļāđˆāļ­āļ™āđāļĨāđ‰āļ§āļ„āđāļēāļ™āļ§āļ“āđ€āļžāļīāļĄāđ€āļ•āļīāļĄāđƒāļ™āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ–āļąāļ”āđ„āļ›āļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™āļŦāļĨāļąāļ‡ Snapshot āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™
āļ™āļąāļ™ āļ—āļąāļ‡āļ™āļĩ Snapshots āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļš Immutable Data āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļĨāļš Snapshots āļ—āļīāļ‡āđ„āļ”āđ‰
Event 1 Event 2 Event 3 Event N
Event N + 1 Event N + 2
Babel Coder
Babel Coder
https://www.babelcoder.com
SNAPSHOTS
DateTime Entity Entity_ID Event_ID Event_Type Data
xxx1 Account 1 1 ACC_DEPOSITED { uid: 1, amount: 100 }
xxx2 Account 1 2 ACC_WITHDRAWED { uid: 1, amount: 10 }
Version Entity Entity_ID Data
1 Account 1 { uid: 1, amount: 100 }
Snapshots
Event
Store
Babel Coder
Babel Coder
https://www.babelcoder.com
MATERIALIZED VIEW
Event Store āļ™āļąāļ™āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļĨāļąāļāļĐāļ“āļ°āļ—āļĩāđ€āļ›āļ™āļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ Domain Event āđ‚āļ”āļĒāļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļēāļāđ€āļāļīāļ™
āļāļ§āđˆāļēāļ™āđāļēāđ„āļ›āđƒāļŠāđ‰āđāļŠāļ”āļ‡āļœāļĨāļŦāļĢāļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļēāļ‡āļŠāđˆāļ§āļ™āļ•āđ‰āļ­āļ‡āļ–āļđāļāļ„āđāļēāļ™āļ§āļ“āļ”āđ‰āļ§āļĒāļĨāļąāļāļĐāļ“āļ°āļžāļīāđ€āļĻāļĐāļāđˆāļ­āļ™āđāļŠāļ”āļ‡āļœāļĨ āļŦāļēāļāļ—āļļāļāļ„āļĢāļąāļ‡āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ›
āđāļŠāļ”āļ‡āļ•āđ‰āļ­āļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāđƒāļŦāļĄāđˆāļ—āļąāļ‡āļŦāļĄāļ”āļĒāđˆāļ­āļĄāđ€āļŠāļĩāļĒāđ€āļ§āļĨāļē Materialized View āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļĄāļēāđ€āļžāļīāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ”āđ‰āļ§āļĒāļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļš
āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļļāļ”āļ—āđ‰āļēāļĒāđ€āļ‰āļžāļēāļ°āļŠāđˆāļ§āļ™āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡āđ€āļ—āđˆāļēāļ™āļąāļ™
Event Store Materialized View Presentation Layer
Babel Coder
Babel Coder
https://www.babelcoder.com
MATERIALIZED VIEW
āļ āļēāļĒāļŦāļĨāļąāļ‡āļāļēāļĢāļšāļąāļ™āļ—āļķāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ Event Store āđ€āļĢāļēāļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļąāļžāđ€āļ”āļ—āđ€āļžāļ·āļ­āđ€āļ™āđ‰āļ™āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‰āļžāļēāļ°āļŠāđˆāļ§āļ™āđāļŠāļ”āļ‡āļœāļĨāđƒāļ™
Materialized View
Command
Materialized View Presentation Layer
Event Store
Query
Event
TRANSACTION
Babel Coder
Babel Coder
https://www.babelcoder.com
SAGA PATTERN
Saga Pattern āļ„āļ·āļ­āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļšāđƒāļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄ Microservices āđ€āļžāļ·āļ­āļˆāļąāļ”āļāļēāļĢāđƒāļŦāđ‰āđ€āļāļīāļ” Data
Consistency āļˆāļēāļāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļāļąāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđƒāļ™āļĢāļ°āļšāļš āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Saga āļ™āļąāļ™āļˆāļ°āļĄāļ­āļ‡āļ§āđˆāļēāļ˜āļļāļĢāļāļĢāļĢāļĄ
(Transaction) āđƒāļ” āđ† āļˆāļ°āđ€āļāļīāļ”āļˆāļēāļāļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļœāđˆāļēāļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđˆāļ­āļĒ āđ† āđƒāļ™āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ (Local Transactions)
āđāļ•āđˆāļĨāļ°āļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđˆāļ­āļĒ āđ† āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļĨāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āļ™āđ€āļ­āļ‡ āļˆāļēāļāļ™āļąāļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļˆāļķāļ‡āļŠāđˆāļ‡āļ•āđˆāļ­
āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ”āđ‰āļ§āļĒāļāļēāļĢāļŠāđˆāļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ (Event) āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ–āļąāļ”āđ„āļ› āļŦāļēāļāļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđˆāļ­āļĒāļ™āļąāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§
āđƒāļ™āļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļ‡āļēāļ™ Saga āļˆāļ°āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļ Compensating Transaction āļ­āļąāļ™āđ€āļ›āļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđ‰āļ­āļ™āļāļĨāļąāļšāđ€āļžāļ·āļ­āđƒāļŦāđ‰āļĢāļ°āļšāļš
āļŠāļēāļĄāļēāļĢāļ–āļĒāđ‰āļ­āļ™āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļāļĨāļąāļšāđ„āļ›āđ„āļ”āđ‰
āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡ Saga āđāļšāđˆāļ‡āļ­āļ­āļāđ€āļ›āļ™āļŠāļ­āļ‡āļ›āļĢāļ°āđ€āļ āļ— āļ„āļ·āļ­ Choreography-based Saga āđāļĨāļ°
Orchestration-based Saga
Babel Coder
Babel Coder
https://www.babelcoder.com
CHOREOGRAPHY-BASED SAGA
Order
Stock
Payment
ORDER_REQUESTED
1.
2. ORDER_CREATED
3. STOCK_RESERVED
4
.
O
R
D
E
R
_
P
L
A
C
E
D
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
ORDER_CREATED
CHOREOGRAPHY-BASED SAGA
ORCHESTRATION-BASED SAGA
Orchestrator
Order
Stock
Payment
T1: Order requested
Saga
Log
ORDER_REQUESTED
1.
T3: Check status requested
3. CHECK_STOCK_REQUESTED
2. ORDER_CREATED
4. STOCK_RESERVED
6. PAYMENT_APPROVED
T5: Payment requested
5. PAYMENT_REQUESTED
T6: Payment approved
7. O
RD
ER_
RESERV
ED
T2: Order created
T4: Stock reserved
T7: Order reserved
Babel Coder
Babel Coder
https://www.babelcoder.com
COMPENSATING TRANSACTIONS
Orchestrator
Order
Stock
Payment
T1: Order requested
Saga
Log
ORDER_REQUESTED
1.
T3: Check status requested
3. CHECK_STOCK_REQUESTED
2. ORDER_CREATED
4. STOCK_REJECTED
C3: -
C2: -
T2: Order created
T4: Stock rejected
C1: Order cancelled
5
.
O
R
D
E
R
_
C
A
N
C
E
L
L
E
D
Babel Coder
Babel Coder
https://www.babelcoder.com
C4: -
RELIABLE SERVICES
Babel Coder
Babel Coder
https://www.babelcoder.com
Babel Coder
Babel Coder
https://www.babelcoder.com
RELIABILITY
āļ˜āļĢāļĢāļĄāļŠāļēāļ•āļīāļ‚āļ­āļ‡ Microservices āļĄāļąāļāđ„āļĄāđˆāļˆāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ­āļĒāļđāđˆāđ€āļžāļĩāļĒāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ€āļ”āļĩāļĒāļ§ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡āļĄāļąāļāđ€āļĢāļĩāļĒāļāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡
downstream services āļ­āļ·āļ™ āđ† āđ‚āļ”āļĒāļĄāļēāļāđāļĨāđ‰āļ§āļ›āļāļŦāļēāļĄāļąāļāđ€āļāļīāļ”āļāļąāļšāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous Messaging āļŦāļēāļāļĄāļĩ
downstream services āđƒāļ”āļ•āļēāļĒāđ„āļ›āļĒāđˆāļ­āļĄāļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļ—āļąāļ‡āļŠāļēāļĒāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ™āļąāļ™ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļ—āļĩāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļ‚āļ­āļ‡
āļĢāļ°āļšāļšāđ€āļ™āđ‡āļ•āđ€āļ§āļīāļĢāđŒāļāļāđ‡āļ­āļēāļˆāđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ›āļāļŦāļēāļ—āļĩāļ—āđāļēāđƒāļŦāđ‰āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļœāļīāļ”āļžāļĨāļēāļ”
Babel Coder
Babel Coder
https://www.babelcoder.com
AVAILABILITY
A
B C
D
E F
HA = 95%
HA = 99.9%
HA = 99.9%
HA = 99.9%
HA = 99.9% x 95% x 99.9% = 94.8%
HA = 99.9% x 94.8% x 99.9% = 94.5%
Babel Coder
Babel Coder
https://www.babelcoder.com
A
B C
D
E F
CASCADING FAILURES
Babel Coder
Babel Coder
https://www.babelcoder.com
DESIGNING RELIABLE COMMUNICATION
āđ€āļĄāļ·āļ­āļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āđ€āļ›āļ™āļŠāļīāļ‡āļ—āļĩāļŦāļĨāļĩāļāđ€āļĨāļĩāļĒāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ­āļ­āļāđāļšāļšāđƒāļŦāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđāļĨāļ°āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļ”āļĩ
āļ—āļĩāļŠāļļāļ” āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļŸāļ™āļ„āļ·āļ™āļˆāļēāļāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§ āđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒāđ€āļ—āļ„āļ™āļīāļ„āļ•āđˆāļēāļ‡ āđ† āļ”āļąāļ‡āļ™āļĩ
Retries
Fallbacks
Timeouts
Circuit Breakers
Rate Limits
Babel Coder
Babel Coder
https://www.babelcoder.com
RETRIES
āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™ āđ† āļ­āļēāļˆāļĄāļĩāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§ (transient faults ) āđ€āļāļīāļ”āļ‚āļķāļ™āđ„āļ”āđ‰ āđ€āļŦāļ•āļļāļ™āļĩāđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢ
Retry Request āđ€āļžāļ·āļ­āļ—āļ”āļŠāļ­āļšāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āđƒāļŦāļĄāđˆāļ­āļĩāļāļ„āļĢāļąāļ‡ āļāļĨāļĒāļļāļ—āļ˜āļīāļ‚āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđƒāļŠāđ‰ Retry āļĄāļĩāļ”āļąāļ‡āļ™āļĩ
Cancel āļ–āđ‰āļēāļŠāļ·āļšāļ—āļĢāļēāļšāđ„āļ”āđ‰āļ§āđˆāļēāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āđ„āļĄāđˆāđƒāļŠāđˆāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§ Request āļ™āļąāļ™āļ„āļ§āļĢāļĒāļāđ€āļĨāļīāļ
Retry immediately āļŦāļēāļāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļ™āļąāļ™āđ€āļāļīāļ”āļ‚āļķāļ™āđ„āļĄāđˆāļšāđˆāļ­āļĒ āđ€āļŠāđˆāļ™ packet āļ‚āļ­āļ‡āđ€āļ™āđ‡āļ•āđ€āļ§āļīāļĢāđŒāļāļœāļīāļ”āļžāļĨāļēāļ” āđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢ Retry āļ—āļąāļ™āļ—āļĩ
Retry after delay āļāļĢāļ“āļĩāļ—āļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļ™āļąāļ™āļŦāļ™āļēāđāļ™āđˆāļ™ (busy failures) āđƒāļŦāđ‰āđ€āļ§āđ‰āļ™āļŠāđˆāļ§āļ‡āđ„āļ§āđ‰āļĢāļ°āļĒāļ°āļŦāļ™āļķāļ‡āļāđˆāļ­āļ™āđ€āļĢāļīāļĄāļ—āđāļēāļāļēāļĢ Retry
āđƒāļŦāļĄāđˆāļ­āļĩāļāļ„āļĢāļąāļ‡
āđ€āļĄāļ·āļ­āđ€āļāļīāļ” Request Failed āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢ Retry āđ„āļ”āđ‰āđ‚āļ”āļĒāļ­āļēāļˆāļˆāļ°āļ—āđāļēāļāļēāļĢ Retry āļ‹āđāļē āđ† āđ„āļ”āđ‰āļˆāļ™āļāļ§āđˆāļēāļˆāļ°āļ–āļķāļ‡āļˆāđāļēāļ™āļ§āļ™āļ„āļĢāļąāļ‡āļŠāļđāļ‡āļŠāļļāļ”āļ—āļĩāļ•āļąāļ‡
āļ„āđˆāļēāđ„āļ§āđ‰ āļ™āļ­āļāļˆāļēāļāļ™āļĩāđƒāļ™āđāļ•āđˆāļĨāļ°āļĢāļ­āļšāļ‚āļ­āļ‡āļāļēāļĢ Retry āđ€āļĢāļēāļ­āļēāļˆāļˆāļ°āļĄāļĩāļāļēāļĢāļ•āļąāļ‡āļ„āđˆāļē delay āļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄāđ‚āļ”āļĒāļžāļīāļˆāļēāļĢāļ“āļēāļˆāļēāļāļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļœāļīāļ”
āļžāļĨāļēāļ”āļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™ delay āđƒāļ™āđāļ•āđˆāļĨāļ°āļĢāļ­āļšāļ™āļąāļ™āļ­āļēāļˆāđ€āļžāļīāļĄāļ„āđˆāļēāļ‚āļķāļ™āđ€āļĢāļ·āļ­āļĒ āđ† āđāļšāļš exponential āđ„āļ”āđ‰
Babel Coder
Babel Coder
https://www.babelcoder.com
FALLBACKS
āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ A āļ—āļĩāļ•āđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļāļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™āđ€āļŠāđˆāļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ B āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāļ–āļ·āļ­āļ§āđˆāļēāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ B āđ€āļ›āļ™ dependency
āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ A
āļāļĢāļ“āļĩāļ—āļĩ dependency āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđƒāļ™āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āļēāļĄāļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāđ„āļ”āđ‰āļ•āđˆāļ­āđ„āļ›āļ™āļĩ
Graceful Degradation
Caching
Functional Redundancy
Stubbed Data
Babel Coder
Babel Coder
https://www.babelcoder.com
Order Payment
GRACEFUL DEGRADATION
āļŠāļĄāļĄāļ•āļīāđƒāļŦāđ‰ Order Service āļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļ Payment Service āđ€āļžāļ·āļ­āđ€āļ•āļīāļĄāđ€āļ•āđ‡āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļˆāđˆāļēāļĒāđ€āļ‡āļīāļ™
āđ€āļĄāļ·āļ­ Payment Service āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āļˆāļķāļ‡āđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ™āļĩāđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨ āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļĨāļ”āļ‚āļąāļ™āļ‚āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡
āļœāļĨāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāđāļĨāļ°āđ€āļ›āļ™āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļŠāļđāļ‡āļŠāļļāļ”āļ•āđˆāļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āđ€āļŠāđˆāļ™ āļ‡āļ”āđāļŠāļ”āļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāđāļēāļĢāļ°āđ€āļ‡āļīāļ™āđāļ•āđˆāđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļĒāļ­āļ”āđ€āļ‡āļīāļ™āļ—āļĩāļĄāļĩ
āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļĒāļđāđˆāđāļĨāđ‰āļ§āđāļ—āļ™
Order Summary
Product A:
Qty: 1
Price: 200
Payment
Total Price: 200 THB
Babel Coder
Babel Coder
https://www.babelcoder.com
CACHING
āļāļĢāļ“āļĩāļ—āļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ€āļ›āļ™āļŠāļīāļ‡āļ—āļĩāđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ 100% āļŦāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļœāļđāđ‰āđ€āļ›āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰ āđ€āļĢāļē
āļŠāļēāļĄāļēāļĢāļ–āļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđāļ„āļŠāļĄāļēāđāļŠāļ”āļ‡āļœāļĨāđāļ—āļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āđ€āļ›āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļŠāļđāļ‡āļŠāļļāļ”āļˆāļķāļ‡
āļŠāļēāļĄāļēāļĢāļ–āļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđāļ„āļŠāļĄāļēāđƒāļŠāđ‰āđāļŠāļ”āļ‡āļœāļĨāļŠāļąāļ§āļ„āļĢāļēāļ§āļāđˆāļ­āļ™āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāļ—āđāļēāļ‡āļēāļ™āļ­āļĩāļāļ„āļĢāļąāļ‡āļˆāļķāļ‡āļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļēāđāļŠāļ”āļ‡āļœāļĨāļ—āļąāļš
Comments
Babel Coder
Comment#1
Babel Coder
Comment#2
Order
Cache
Babel Coder
Babel Coder
https://www.babelcoder.com
Exchange
FUNCTIONAL REDUNDANCY
āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ•āļ­āļšāļŠāļ™āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰ āļŦāļēāļāđ€āļĢāļēāļĄāļĩāļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļĄāļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™āļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āļĢāđ‰āļ­āļ‡āļ‚āļ­
āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ„āļ”āđ‰ āđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Exchange āđ„āļĄāđˆāļ—āđāļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–
āļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļļāđ‰āļ™āļˆāļēāļ SET āđ‚āļ”āļĒāļ•āļĢāļ‡āđ„āļ”āđ‰
Stock Exchange
SET
Babel Coder
Babel Coder
https://www.babelcoder.com
STUBBED DATA
āļāļĢāļ“āļĩāļ—āļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļĄāļēāļāļ™āļąāļ āđāļĨāļ°āđ€āļĢāļēāđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāđāļ„āļŠāļ—āļĩāđ€āļ„āļĒāļˆāļąāļ”āđ€āļāđ‡āļšāļĄāļēāļāđˆāļ­āļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ­āļēāļĻāļąāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļāļĨāđ‰āđ€āļ„āļĩāļĒāļ‡āļĄāļē
āđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§āļāđˆāļ­āļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļĢāļ°āļšāļšāđāļ™āļ°āļ™āđāļēāļŦāļ™āļąāļ‡āļŠāļ·āļ­ āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Recommendation āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡
āļ–āļđāļāļ•āđ‰āļ­āļ‡āđ€āļ‰āļžāļēāļ°āļŠāđāļēāļŦāļĢāļąāļšāļšāļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āđ€āļĢāļēāļ­āļēāļˆāļ™āđāļēāļĢāļēāļĒāļāļēāļĢāđāļ™āļ°āļ™āđāļēāđāļšāļšāļ—āļąāļ§āđ„āļ›āļĄāļēāđƒāļŠāđ‰āđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§āļāļąāļšāļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāļĄāļĩāļ›āļāļŦāļēāļāđˆāļ­āļ™
āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāļ—āđāļēāļ‡āļēāļ™āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡āļˆāļķāļ‡āļ—āđāļēāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļœāļĨāļĨāļąāļžāļ˜āđŒāļ­āļĩāļāļ„āļĢāļąāļ‡
Babel Coder
Babel Coder
https://www.babelcoder.com
TIMEOUTS
āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļšāļēāļ‡āļ›āļĢāļ°āļāļēāļĢāđ€āļ›āļ™āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ—āļĩāļĢāļąāļšāļĢāļđāđ‰āđ„āļ”āđ‰āļŠāđ‰āļē āđ€āļŠāđˆāļ™ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡āļ—āļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĄāļēāļāļ—āđāļēāđƒāļŦāđ‰āļĢāđ‰āļ­āļ‡āļĢāļąāļšāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āđ„āļ”āđ‰āļŠāđ‰āļē āđ€āļĄāļ·āļ­āļĄāļĩ
āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” Timeout āđ€āļžāļ·āļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļ•āđ‰āļ­āļ‡āļĢāļ­āļ„āļ­āļĒāļœāļĨāļĨāļąāļžāļ˜āđŒāļ—āļĩāļ™āļēāļ™āđ€āļāļīāļ™āđ„āļ›
Babel Coder
Babel Coder
https://www.babelcoder.com
CIRCUIT BREAKERS
āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§āļŦāļĢāļ·āļ­āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļŠāļąāļ§āļ„āļĢāļēāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Retry āđ€āļžāļ·āļ­āļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‹āđāļēāđ‚āļ”āļĒāļ„āļēāļ”
āļŦāļ§āļąāļ‡āđ„āļ§āđ‰āļ§āđˆāļēāļŠāļļāļ”āļ—āđ‰āļēāļĒāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļˆāļ°āļāļĨāļąāļšāļĄāļēāđ€āļ›āļ™āļ›āļāļ•āļī
āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļšāļēāļ‡āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ›āļ™āđāļšāļšāļĢāļ°āļĒāļ°āļĒāļēāļ§āļŦāļĢāļ·āļ­āļ–āļēāļ§āļĢ āļāļēāļĢāļžāļĒāļēāļĒāļēāļĄ Retry āļ‹āđāļēāđƒāļ™āļŦāļĨāļēāļĒ āđ† āļ„āļĢāļąāļ‡āļˆāļķāļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒ
āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļĢāļđāļ›āđāļšāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđƒāļŦāļĄāđˆāļ—āļĩāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Circuit Breakers
Babel Coder
Babel Coder
https://www.babelcoder.com
Request
Circuit
Open?
CIRCUIT BREAKERS
Make Request to
Service
Success?
Response Fallback
Threshold
Exceeded?
Open Circuit
Yes
Report Metrics
Closed
Open
No Yes
Babel Coder
Babel Coder
https://www.babelcoder.com
CIRCUIT BREAKERS
āđ€āļĄāļ·āļ­ Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĢāļēāļ„āļ‡āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļĄāļąāļ™āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ°āđāļšāļšāļ™āļĩāļ•āļĨāļ­āļ”āđ„āļ› āđ€āļžāļĢāļēāļ°āđ€āļĄāļ·āļ­āđƒāļ”āļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰
āļ•āļēāļĄāļ›āļāļ•āļīāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡ Circuit āļ—āļĩāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļ™āļŠāļ–āļēāļ™āļ° Close āļ”āđ‰āļ§āļĒāđ€āļŦāļ•āļļāļ™āļĩāđ€āļĄāļ·āļ­ Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢ
āļ—āļ”āļĨāļ­āļ‡āļŠāđˆāļ‡ Request āđ€āļžāļ·āļ­āđ„āļ›āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļ™āļˆāļąāļ‡āļŦāļ§āļ°āļ™āļĩāđ€āļĢāļēāļāļĨāđˆāļēāļ§āđ„āļ”āđ‰āļ§āđˆāļē Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Half
Open āđ€āļĄāļ·āļ­āļœāļĨāļĨāļąāļžāļ˜āđŒāļ‚āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļœāđˆāļēāļ™ Circuit āļˆāļ°āļāļĨāļąāļšāļŠāļđāđˆāļŠāļ–āļēāļ™āļ° Close āđāļĨāļ°āļˆāļ°āļĒāļąāļ‡āļ„āļ‡āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĄāļ·āļ­āļāļēāļĢāļ—āļ”āļŠāļ­āļš
āļ™āļąāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§
Babel Coder
Babel Coder
https://www.babelcoder.com
RATE LIMITS
āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡ āđ† āļŠāļēāļĄāļēāļĢāļ–āļĢāļ­āļ‡āļĢāļąāļšāļˆāđāļēāļ™āļ§āļ™ Request āđ„āļ”āđ‰āđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĒāļąāļ‡āļ„āļ‡āļ”āđāļēāļĢāļ‡āļ­āļĒāļđāđˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āļ™āļŠāļļāļ‚
āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢāļāđāļēāļŦāļ™āļ”āļˆāđāļēāļ™āļ§āļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ•āļąāļ‡āļ„āđˆāļē Rate Limits āļāļēāļĢāļāļĢāļ°āļ—āđāļēāđ€āļŠāđˆāļ™āļ™āļĩāļˆāļ°āļŠāđˆāļ§āļĒāļ›āļ­āļ‡āļāļąāļ™āđ„āļĄāđˆāđƒāļŦāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđƒāļ™āļāļēāļĢ
āļ—āđāļēāļ‡āļēāļ™āļ­āļąāļ™āļˆāļ°āļ™āđāļēāđ„āļ›āļŠāļđāđˆ Cascading Failure āđ„āļ”āđ‰āđƒāļ™āļ­āļ™āļēāļ„āļ•

More Related Content

Similar to Nest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdf (20)

Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
NuttavutThongjor1
 
āđāļ›āļĨ Design and implementation of e
āđāļ›āļĨ Design and implementation of eāđāļ›āļĨ Design and implementation of e
āđāļ›āļĨ Design and implementation of e
School
 
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ Intro
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ IntroāļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ Intro
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ Intro
Jenchoke Tachagomain
 
Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1
Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1
Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1
Manoo Ordeedolchest
 
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢJ2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
pasinee lungprasert
 
3 multimedia apply
3 multimedia apply3 multimedia apply
3 multimedia apply
Apida Runvat
 
System Development Life Cycle S D L C
System  Development  Life  Cycle   S D L CSystem  Development  Life  Cycle   S D L C
System Development Life Cycle S D L C
Kapook Moo Auan
 
System development life cycle sdlc
System development life cycle  sdlcSystem development life cycle  sdlc
System development life cycle sdlc
Kapook Moo Auan
 
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
NuttavutThongjor1
 
Big data 101
Big data 101Big data 101
Big data 101
Somkiat Puisungnoen
 
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
NuttavutThongjor1
 
āļ™āļēāļĒāļĻ āļ āļŠ āļĒ āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230
āļ™āļēāļĒāļĻ āļ āļŠ āļĒ  āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230āļ™āļēāļĒāļĻ āļ āļŠ āļĒ  āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230
āļ™āļēāļĒāļĻ āļ āļŠ āļĒ āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230
Chicharito Iamjang
 
Introduction to SOA
Introduction to SOAIntroduction to SOA
Introduction to SOA
IMC Institute
 
Saeree ERP 2007
Saeree ERP 2007Saeree ERP 2007
Saeree ERP 2007
Sureeraya Limpaibul
 
Scalable Distributed Data Structures for Internet Construction
Scalable Distributed Data Structures for Internet ConstructionScalable Distributed Data Structures for Internet Construction
Scalable Distributed Data Structures for Internet Construction
knopporn
 
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
Nest.js Microservices (1).pdf Nest.js Microservices (1).pdfNest.js Microservi...
NuttavutThongjor1
 
āđāļ›āļĨ Design and implementation of e
āđāļ›āļĨ Design and implementation of eāđāļ›āļĨ Design and implementation of e
āđāļ›āļĨ Design and implementation of e
School
 
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ Intro
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ IntroāļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ Intro
āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ­āļāļŠāļēāļĢāļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ Intro
Jenchoke Tachagomain
 
Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1
Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1
Cloud computing āļāļąāļšāļ­āļ™āļēāļ„āļ•āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ˜āļļāļĢāļāļīāļˆ v1
Manoo Ordeedolchest
 
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢJ2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
J2 ee āļ„āļ·āļ­āļ­āļ°āđ„āļĢ
pasinee lungprasert
 
3 multimedia apply
3 multimedia apply3 multimedia apply
3 multimedia apply
Apida Runvat
 
System Development Life Cycle S D L C
System  Development  Life  Cycle   S D L CSystem  Development  Life  Cycle   S D L C
System Development Life Cycle S D L C
Kapook Moo Auan
 
System development life cycle sdlc
System development life cycle  sdlcSystem development life cycle  sdlc
System development life cycle sdlc
Kapook Moo Auan
 
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
Intro to Modern DevOps.pdfIntro to Modern DevOps.pdfIntro to Modern DevOps.pdf
NuttavutThongjor1
 
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
Modern DevOps Day 1.pdfModern DevOps Day 1.pdfModern DevOps Day 1.pdf
NuttavutThongjor1
 
āļ™āļēāļĒāļĻ āļ āļŠ āļĒ āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230
āļ™āļēāļĒāļĻ āļ āļŠ āļĒ  āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230āļ™āļēāļĒāļĻ āļ āļŠ āļĒ  āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230
āļ™āļēāļĒāļĻ āļ āļŠ āļĒ āļ”āļ­āļ™āļŠāļēāļĄ_āļ§āļ‡ āļ§.5606 āļĢāļŦ_āļŠ 5640248230
Chicharito Iamjang
 
Introduction to SOA
Introduction to SOAIntroduction to SOA
Introduction to SOA
IMC Institute
 
Scalable Distributed Data Structures for Internet Construction
Scalable Distributed Data Structures for Internet ConstructionScalable Distributed Data Structures for Internet Construction
Scalable Distributed Data Structures for Internet Construction
knopporn
 

More from NuttavutThongjor1 (20)

Modern DevOps Day 5.pdfModern DevOps Day 5.pdf
Modern DevOps Day 5.pdfModern DevOps Day 5.pdfModern DevOps Day 5.pdfModern DevOps Day 5.pdf
Modern DevOps Day 5.pdfModern DevOps Day 5.pdf
NuttavutThongjor1
 
Modern DevOps Day 4.pdfModern DevOps Day 4.pdf
Modern DevOps Day 4.pdfModern DevOps Day 4.pdfModern DevOps Day 4.pdfModern DevOps Day 4.pdf
Modern DevOps Day 4.pdfModern DevOps Day 4.pdf
NuttavutThongjor1
 
Modern DevOps Day 3.pdfModern DevOps Day 3.pdf
Modern DevOps Day 3.pdfModern DevOps Day 3.pdfModern DevOps Day 3.pdfModern DevOps Day 3.pdf
Modern DevOps Day 3.pdfModern DevOps Day 3.pdf
NuttavutThongjor1
 
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
NuttavutThongjor1
 
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
NuttavutThongjor1
 
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdfRecap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
NuttavutThongjor1
 
Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...
NuttavutThongjor1
 
Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...
NuttavutThongjor1
 
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdfRecap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
NuttavutThongjor1
 
10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf
10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf
10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf
NuttavutThongjor1
 
9 logging and monitoring.pdf 9 logging and monitoring.pdf
9 logging and monitoring.pdf 9 logging and monitoring.pdf9 logging and monitoring.pdf 9 logging and monitoring.pdf
9 logging and monitoring.pdf 9 logging and monitoring.pdf
NuttavutThongjor1
 
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
NuttavutThongjor1
 
7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf
7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf
7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf
NuttavutThongjor1
 
6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
NuttavutThongjor1
 
5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf
5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf
5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf
NuttavutThongjor1
 
4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf
4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf
4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf
NuttavutThongjor1
 
2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf
2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf
2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf
NuttavutThongjor1
 
1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
NuttavutThongjor1
 
angular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdfangular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdf
NuttavutThongjor1
 
mean stack mean stack mean stack mean stack
mean stack mean stack  mean stack  mean stackmean stack mean stack  mean stack  mean stack
mean stack mean stack mean stack mean stack
NuttavutThongjor1
 
Modern DevOps Day 5.pdfModern DevOps Day 5.pdf
Modern DevOps Day 5.pdfModern DevOps Day 5.pdfModern DevOps Day 5.pdfModern DevOps Day 5.pdf
Modern DevOps Day 5.pdfModern DevOps Day 5.pdf
NuttavutThongjor1
 
Modern DevOps Day 4.pdfModern DevOps Day 4.pdf
Modern DevOps Day 4.pdfModern DevOps Day 4.pdfModern DevOps Day 4.pdfModern DevOps Day 4.pdf
Modern DevOps Day 4.pdfModern DevOps Day 4.pdf
NuttavutThongjor1
 
Modern DevOps Day 3.pdfModern DevOps Day 3.pdf
Modern DevOps Day 3.pdfModern DevOps Day 3.pdfModern DevOps Day 3.pdfModern DevOps Day 3.pdf
Modern DevOps Day 3.pdfModern DevOps Day 3.pdf
NuttavutThongjor1
 
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
misc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdfmisc.pdf
NuttavutThongjor1
 
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
GraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdfGraphQL.pdf
NuttavutThongjor1
 
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdfRecap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
NuttavutThongjor1
 
Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...
NuttavutThongjor1
 
Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...Next.js web development.pdfNext.js web development.pdfNext.js web development...
Next.js web development.pdfNext.js web development.pdfNext.js web development...
NuttavutThongjor1
 
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdfRecap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
Recap JavaScript and TypeScript.pdf Recap JavaScript and TypeScript.pdf
NuttavutThongjor1
 
10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf
10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf
10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf10 āļ§āļąāļ’āļ™āļ˜āļĢāļĢāļĄāļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡ DevOps.pdf
NuttavutThongjor1
 
9 logging and monitoring.pdf 9 logging and monitoring.pdf
9 logging and monitoring.pdf 9 logging and monitoring.pdf9 logging and monitoring.pdf 9 logging and monitoring.pdf
9 logging and monitoring.pdf 9 logging and monitoring.pdf
NuttavutThongjor1
 
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
8 iac.pdf 8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf8 iac.pdf
NuttavutThongjor1
 
7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf
7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf
7 cicd.pdf 7 cicd.pdf 7 cicd.pdf 7 cicd.pdf
NuttavutThongjor1
 
6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 6 GitOps āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
NuttavutThongjor1
 
5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf
5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf
5 Kubernetes.pdf 5 Kubernetes.pdf 5 Kubernetes.pdf
NuttavutThongjor1
 
4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf
4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf
4 Docker.pdf 4 Docker.pdf 4 Docker.pdf 4 Docker.pdf
NuttavutThongjor1
 
2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf
2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf
2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf 2 āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ cloud computing.pdf
NuttavutThongjor1
 
1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf 1 devops āļ„āļ·āļ­āļ­āļ°āđ„āļĢ.pdf
NuttavutThongjor1
 
angular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdfangular fundamentals.pdf angular fundamentals.pdf
angular fundamentals.pdf angular fundamentals.pdf
NuttavutThongjor1
 
mean stack mean stack mean stack mean stack
mean stack mean stack  mean stack  mean stackmean stack mean stack  mean stack  mean stack
mean stack mean stack mean stack mean stack
NuttavutThongjor1
 
Ad

Recently uploaded (6)

āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”
AkradechBamrungnam
 
āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................
āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................
āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................
Tanachai Junsuk
 
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdf
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdfāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdf
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdf
AkradechBamrungnam
 
āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................
āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................
āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................
Tanachai Junsuk
 
āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)
āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)
āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)
Thanuphong Ngoapm
 
āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡
āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡
āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡
AkradechBamrungnam
 
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđāļ—āļ‡āđ€āļ‚āđ‡āļĄāļžāļ­āļĢāđŒāļ• A Cath āđƒāļ™āļœāļđāđ‰āļ›āđˆāļ§āļĒāļĄāļ°āđ€āļĢāđ‡āļ‡āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĒāļēāđ€āļ„āļĄāļĩāļšāļģāļšāļąāļ”
AkradechBamrungnam
 
āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................
āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................
āļ•āđˆāļ­āļĄāđ„āļĢāđ‰āļ—āđˆāļ­...............................................
Tanachai Junsuk
 
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdf
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdfāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdf
āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāđāļœāļ™āļāļœāļđāđ‰āļ›āđˆāļ§āļĒāļ™āļ­āļ (āļŦāļ™āđˆāļ§āļĒ.pdf
AkradechBamrungnam
 
āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................
āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................
āļĢāļ°āļšāļšāļ›āļĢāļ°āļŠāļēāļ—āļ™āļĢ..............................................
Tanachai Junsuk
 
āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)
āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)
āđ€āļ‰āļĨāļĒ_āđāļšāļšāļāļķāļāļŦāļąāļ”āļ§āļīāļŠāļēāļ„āļ“āļīāļ•āļĻāļēāļŠāļ•āļĢāđŒāļĢāļ°āļ”āļąāļšāļĄāļąāļ˜āļĒāļĄāļĻāļķāļāļĐāļēāļ›āļĩāļ—āļĩāđˆ6_āļ„āļ§āļēāļĄāļ™āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™(āļ•āļąāļ§āđāļ›āļĢāļŠāļļāđˆāļĄ)
Thanuphong Ngoapm
 
āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡
āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡
āđ„āļŸāļĨāđŒāļ‡āļēāļ™āļāļēāļĢāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāļœāļĨāļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ SPSS āļ‚āļ­āļ‡
AkradechBamrungnam
 
Ad

Nest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdfNest.js Microservices.pdf

  • 3. MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āđāļšāļš Monolithic āļ™āļąāļ™āļˆāļ°āļĢāļ§āļĄāļĻāļđāļ™āļĒāđŒāļ—āļļāļāļŸāđ€āļˆāļ­āļĢāđŒāđ€āļ‚āđ‰āļēāđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ”āļĩāļĒāļ§ āđ‚āļ”āļĒāļ—āļąāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāđˆāļ§āļĄāļāļąāļ™āđ€āļžāļ·āļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđāļēāļŦāļĢāļąāļšāļŸāđ€āļˆāļ­āļĢāđŒāļ•āđˆāļēāļ‡ āđ† Order Stock Payment Monolithic Babel Coder Babel Coder https://www.babelcoder.com
  • 4. MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Monolithic āļ™āļĩāļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļ”āļĩāļ•āđˆāļēāļ‡ āđ† āđ„āļ”āđ‰āđāļāđˆ āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāļžāļąāļ’āļ™āļē āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāđāļāđ‰āđ„āļ‚āļŦāļĢāļ·āļ­āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡ āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŸāļ‡āļāđŒāļŠāļąāļ™āļ•āđˆāļēāļ‡ āđ† āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ•āļĢāļ‡āđ„āļ›āļ•āļĢāļ‡āļĄāļē āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢ Deploy āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļŠāļđāđˆ Production āđ„āļĄāđˆāļĒāļļāđˆāļ‡āļĒāļēāļāđƒāļ™āļāļēāļĢ Scale āļĢāļ°āļšāļš Babel Coder Babel Coder https://www.babelcoder.com
  • 5. MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ Monolithic āļ™āļąāļ™āļāđ‡āļĄāļĩāļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāļ”āđ‰āļ§āļĒāđ€āļŠāđˆāļ™āļāļąāļ™ āļ„āļ·āļ­ āļāļēāļĢāļœāļđāļāļ•āļīāļ”āļāļąāļšāļ āļēāļĐāļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ„āļ§āļēāļĄāļĒāļļāđˆāļ‡āļĒāļēāļāđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļĢāļ°āļ”āļąāļšāļ—āļĩāļĄ āļ„āļ§āļēāļĄāļŠāđ‰āļēāđƒāļ™āļāļēāļĢ Deploy āļāļēāļĢ Scale āļĢāļ°āļšāļšāļ—āļĩāđ„āļĢāđ‰āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž Babel Coder Babel Coder https://www.babelcoder.com
  • 7. MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āđ€āļžāļ·āļ­āđāļāđ‰āļ›āļāļŦāļēāļ‚āļ­āļ‡ Monolithic āļ”āļąāļ‡āļāļĨāđˆāļēāļ§ āļˆāļķāļ‡āđ€āļ›āļ™āļ—āļĩāļĄāļēāļ‚āļ­āļ‡āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āđ€āļ›āļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāļ—āļĩāļ­āļ­āļāđāļšāļšāļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢāļ‚āļ­āļ‡ Cloud Native āđ‚āļ”āļĒāļĢāļ°āļšāļšāļŦāļ™āļķāļ‡ āđ† āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāđ„āļ›āļ”āđ‰āļ§āļĒāļŦāļĨāļēāļĒāļŦāļ™āđˆāļ§āļĒāļĒāđˆāļ­āļĒāļŦāļĢāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ āļ—āļĩāļĄāļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļāļąāļ™ āļ­āļĒāđˆāļēāļ‡āļŦāļĨāļ§āļĄ āđ† āļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļˆāļ°āļĄāļĩāļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāđāļĨāļ°āđāļĒāļ Deploy āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ° Babel Coder Babel Coder https://www.babelcoder.com
  • 8. Order MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ microservices Stock Payment Babel Coder Babel Coder https://www.babelcoder.com
  • 9. āļĨāļąāļāļĐāļ“āļ°āļžāļ·āļ™āļāļēāļ™āļ‚āļ­āļ‡ MICROSERVICES āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļĨāļąāļāļĐāļ“āļ°āļ•āđˆāļēāļ‡ āđ† āļ”āļąāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩ Autonomy āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđƒāļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āļŠāļēāļĄāļēāļĢāļ–āđāļĒāļāļžāļąāļ’āļ™āļēāđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļĄāļĩāļ—āļĩāļĄāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ‚āļ­āļ‡ User, Article, Order āđāļĨāļ° Payment āđāļĒāļāđāļ•āļ āļ•āđˆāļēāļ‡āļāļąāļ™āļ­āļ­āļāđ„āļ› āļžāļĢāđ‰āļ­āļĄāļ—āļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āđāļĒāļ Deploy āļŦāļĢāļ·āļ­ scale āđāļĒāļāđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ„āļ”āđ‰āđ‚āļ”āļĒāđ„āļĄāđˆ āļāļĢāļ°āļ—āļšāļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ Specialization āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒāļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļāļ•āļēāļĄ Business Capability āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āļ›āļāļŦāļēāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ™āļąāļ™ āđ† āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ‰āļžāļēāļ°āđ€āļˆāļēāļ°āļˆāļ‡ Agility āļ„āļ§āļēāļĄāļ„āļĨāđˆāļ­āļ‡āļ•āļąāļ§āļ™āļąāļ™āđ€āļāļīāļ”āļˆāļēāļāļāļēāļĢāļ—āļĩ Microservices āļŠāđˆāļ‡āđ€āļŠāļĢāļīāļĄāđƒāļŦāđ‰āļ­āļ‡āļ„āđŒāļāļĢāļĄāļĩāļāļēāļĢ āļ­āļ­āļāđāļšāļšāļ—āļĩāļĄāļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāđ€āļžāļ·āļ­āđ€āļ›āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Flexible Scaling Microservices āļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢ scale āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ°āđ‚āļ”āļĒ āđ„āļĄāđˆāļāļĢāļ°āļ—āļšāļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ† Babel Coder Babel Coder https://www.babelcoder.com
  • 11. SCALE CUBE --- Wikimedia Babel Coder Babel Coder https://www.babelcoder.com
  • 12. Babel Coder Babel Coder https://www.babelcoder.com CLOUD NATIVE āļ„āļ·āļ­āļ­āļ°āđ„āļĢ Cloud Native āļ„āļ·āļ­āđāļ™āļ§āļ—āļēāļ‡āļ—āļĩāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ āļ›āļĢāļąāļšāđƒāļŠāđ‰ āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāļ—āļąāļ™āļŠāļĄāļąāļĒāđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄāļāļēāļĢ āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļšāļ™āļ„āļĨāļēāļ§āļ”āđŒ āļŦāļēāļāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ™āļąāļ™āļ–āļđāļāļ­āļ­āļāđāļšāļšāļĄāļēāđ€āļžāļ·āļ­āđƒāļŠāđ‰āļ‡āļēāļ™āļšāļ™āļ„āļĨāļēāļ§āļ”āđŒāļˆāļ°āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Cloud Native Applications āđ‚āļ”āļĒāļ—āļąāļ§āđ„āļ›āđāļĨāđ‰āļ§āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļšāļ™ Microservices āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļžāļąāļ’āļ™āļēāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Cloud Native āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļŦāļĨāļąāļāļ‚āļ­āļ‡ Cloud Native āđ„āļ”āđ‰āđāļāđˆ: āļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™ 01 āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļšāļ™āļ„āļĨāļēāļ§āļ”āđŒ 02 āđ„āļĄāđ‚āļ„āļĢāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ 03 āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ Container 04 DevOps āđāļĨāļ° Automation 05 āļāļēāļĢāļ›āļĢāļ°āļŦāļĒāļąāļ”āļ„āđˆāļēāđƒāļŠāđ‰āļˆāđˆāļēāļĒ āļāļēāļĢāļ­āļąāļ›āđ€āļ”āļ•āļŸāđ€āļˆāļ­āļĢāđŒ 07 06
  • 13. DOMAIN DRIVEN DISIGN Babel Coder Babel Coder https://www.babelcoder.com
  • 14. Babel Coder Babel Coder https://www.babelcoder.com DOMAIN DRIVEN DESIGN Domain Driven Design āļ„āļ·āļ­āđāļ™āļ§āļ—āļēāļ‡āđāļĨāļ°āļāļĢāļ­āļšāļ„āļ§āļēāļĄāļ„āļīāļ”āđƒāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļšāđƒāļŦāđ‰āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāđāļ™āļ§āļ—āļēāļ‡āļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ āđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒ āļĄāļļāļĄāļĄāļ­āļ‡āļˆāļēāļāļœāļđāđ‰āđ€āļŠāļĩāļĒāļ§āļŠāļēāļāļŦāļĨāļēāļĒāđāļ‚āļ™āļ‡āļ—āļąāļ‡āļœāļđāđ‰āđ€āļŠāļĩāļĒāļ§āļŠāļēāļāļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāđāļĨāļ°āļ™āļąāļāļžāļąāļ’āļ™āļē āļšāļ™āļžāļ·āļ™āļāļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļšāļ™āļ āļēāļĐāļēāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ„āļ·āļ­āļāļēāļĢāļ§āļēāļ‡āļĢāļ°āļšāļšāļ—āļĩāļ­āļīāļ‡āļ­āļĒāļđāđˆāļāļąāļš Domain āļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ
  • 15. Babel Coder Babel Coder https://www.babelcoder.com DOMAIN Domain āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ›āļāļŦāļēāļŦāļĢāļ·āļ­āļˆāļļāļ”āļŠāļ™āđƒāļˆāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ—āļĩāļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļāļēāļĢāļžāļąāļ’āļ™āļēāđ€āļžāļ·āļ­āđāļāđ‰āđ„āļ‚āļ›āļāļŦāļē āđ€āļŠāđˆāļ™ āļĢāļ°āļšāļšāļ§āļīāļ”āļĩāđ‚āļ­āļ­āļ­āļ™āđ„āļĨāļ™āđŒāļ­āļēāļˆāļ›āļĢāļ°āļāļ­āļš āđ„āļ›āļ”āđ‰āļ§āļĒ Domain āļ•āđˆāļēāļ‡ āđ† āđ„āļ”āđ‰āđāļāđˆ Recommendation Search Payment āđāļĨāļ° Ads āđ€āļ›āļ™āļ•āđ‰āļ™ Domain āļŠāļēāļĄāļēāļĢāļ–āļĄāļĩ Subdomain āļ‹āļķāļ‡āļ–āļ·āļ­āđ€āļ›āļ™āļŠāđˆāļ§āļ™āļĒāđˆāļ­āļĒāļ‚āļ­āļ‡ Domain āļ™āļąāļ™ āđ† āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ Order Management āļ­āļēāļˆāļĄāļĩ Subdomain āđ€āļ›āļ™ Shopping Cart Management, Payment Processing āđāļĨāļ° Order Fullfillment āđ€āļ›āļ™āļ•āđ‰āļ™
  • 16. Babel Coder Babel Coder https://www.babelcoder.com UBIQUITOUS LANGUAGE āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļēāļĢāļ™āļīāļĒāļēāļĄāļĻāļąāļžāļ—āđŒāļ•āđˆāļēāļ‡ āđ† āđƒāļ™ Domain āđ€āļ›āļ™āđ„āļ›āđƒāļ™āļ—āļīāļĻāļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ āļēāļĐāļēāļāļĨāļēāļ‡āļ—āļĩāļ—āļąāļ‡ Domain Experts āļ™āļąāļ āļžāļąāļ’āļ™āļēāđāļĨāļ°āļœāļđāđ‰āļĄāļĩāļŠāđˆāļ§āļ™āđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āđ€āļ‚āđ‰āļēāđƒāļˆāļĢāđˆāļ§āļĄāļāļąāļ™ āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Ubiquitous Language āļ āļēāļĐāļēāļāļĨāļēāļ‡āļ™āļĩāļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāļ•āđ‰āļ­āļ‡āđāļˆāļāđāļˆāļ‡āđƒāļŦāđ‰āļ™āļąāļ āļžāļąāļ’āļ™āļēāđ€āļ‚āđ‰āļēāđƒāļˆāļ–āļķāļ‡āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ€āļžāļ·āļ­āđƒāļŦāđ‰āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļ—āļąāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āđāļĨāļ°āļĻāļąāļžāļ—āđŒāļ—āļĩāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ•āļąāļ‡āļŠāļ·āļ­āļ•āļąāļ§āđāļ›āļĢ āļŸāļ‡āļāđŒāļŠāļąāļ™ āļ„āļĨāļēāļŠ āđ€āļ›āļ™āđ„āļ›āđƒāļ™ āđāļ™āļ§āļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļāļąāļšāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļĻāļąāļžāļ—āđŒāļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ—āļĩāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāļ—āļĢāļēāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ•āđ‰āļ­āļ‡āđāļˆāļāđāļˆāļ‡ āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļœāļđāđ‰āļĄāļĩāļŠāđˆāļ§āļ™āđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āļ—āļĢāļēāļšāđ€āļŠāđˆāļ™āļāļąāļ™
  • 17. Babel Coder Babel Coder https://www.babelcoder.com BOUNDED CONTEXT Subdomain āđƒāļ” āđ† āļ„āļ§āļĢāļĄāļĩāļ‚āļ­āļšāđ€āļ‚āļ•āļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ—āļĩāļŠāļąāļ”āđ€āļˆāļ™āđāļĨāļ°āļĄāļĩāđ€āļžāļĩāļĒāļ‡āļŠāļīāļ‡āđ€āļ”āļĩāļĒāļ§āļ—āļĩāđ€āļ›āļ™āļ‡āļēāļ™āļ„āļ§āļĢāļ„āđˆāļēāđāļāđˆāļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢ āļ‚āļ­āļšāđ€āļ‚āļ• āļŠāļąāļ”āđ€āļˆāļ™āļ™āļĩāļ–āļđāļāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Bounded Context āļ‚āļ­āļ‡ Subdomain āļ™āļąāļ™ āđ† Bounded Context āđƒāļŠāđ‰āđ€āļžāļ·āļ­āļ™āļīāļĒāļēāļĄāļŠāļīāļ‡āļ•āđˆāļ­āđ„āļ›āļ™āļĩ āļĄāļĩ Domain Models āđƒāļ”āļšāđ‰āļēāļ‡āļ—āļĩāļˆāđāļēāđ€āļ›āļ™āļŠāđāļēāļŦāļĢāļąāļš subdomain āļ™āļąāļ™ āđ† āđāļ•āđˆāļĨāļ° Models āļĄāļĩ Properties āđƒāļ”āļšāđ‰āļēāļ‡ āļĄāļĩāļŦāļ™āđ‰āļēāļ—āļĩāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđƒāļ”āļšāđ‰āļēāļ‡āļ—āļĩ subdomain āļ•āđ‰āļ­āļ‡āļāļĢāļ°āļ—āđāļē āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ€āļŠāđˆāļ™ Shopping Cart Subdomain āļŠāļēāļĄāļēāļĢāļ–āļĄāļĩ Models āđ„āļ”āđ‰āđāļāđˆ Cart, Product, Customer āđ‚āļ”āļĒāļĄāļĩāļŦāļ™āđ‰āļēāļ—āļĩāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™ āļ„āļ·āļ­āļāļēāļĢ CRUD āļšāļ™ Cart āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ Models āļ•āđˆāļēāļ‡ Subdomain āļ­āļēāļˆāļĄāļĩāļāļēāļĢāļ™āļīāļĒāļēāļĄāļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļŠāđˆāļ™ Product āđāļĨāļ° Customer āđƒāļ™ Shopping Cart āđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļšāđƒāļ™ Subdomain āļ‚āļ­āļ‡ Product Catalogs Bounded Context āļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™āļ­āļēāļˆāļĄāļĩāļāļēāļĢāļ™āļīāļĒāļēāļĄ ubiquitous language āļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļŠāđˆāļ™ Promotion āđƒāļ™ Shopping Cart āļ­āļēāļˆāļŦāļĄāļēāļĒāļ–āļķāļ‡āļĢāļēāļ„āļēāđ‚āļ›āļĢāđ‚āļĄāļŠāļąāļ™ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩ Promotion āđƒāļ™ HR āļ­āļēāļˆāļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļēāļĢāđ€āļĨāļ·āļ­āļ™āļ•āđāļēāđāļŦāļ™āđˆāļ‡ āđ€āļ›āļ™āļ•āđ‰āļ™
  • 18. Babel Coder Babel Coder https://www.babelcoder.com VALUE OBJECTS VS ENTITIES Value Objects āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ„āđˆāļēāđ„āļ”āđ‰ Value Objects āļˆāļ°āļ–āļ·āļ­āļ§āđˆāļēāļĄāļĩāļ„āđˆāļēāđ€āļ—āđˆāļēāļāļąāļ™āđ€āļĄāļ·āļ­āļĄāļĩāļ„āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™ āđ€āļŠāđˆāļ™ Color āļˆāļ°āļĄāļĩāļ„āđˆāļēāđ€āļ—āđˆāļēāļāļąāļ™āđ€āļĄāļ·āļ­ RGB āđ€āļ—āđˆāļēāļāļąāļ™ āđ€āļ›āļ™āļ•āđ‰āļ™ Entities āļŦāļĄāļēāļĒāļ–āļķāļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ„āđˆāļēāđ„āļ”āđ‰āđāļĨāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ§āļąāļ”āļ„āļ§āļēāļĄāđ€āļ—āđˆāļēāļāļąāļ™āđ„āļ”āđ‰āđ‚āļ”āļĒāļ”āļđāđāļ•āđˆāđ€āļžāļĩāļĒāļ‡ Property āļ­āļĒāđˆāļēāļ‡āđ€āļ”āļĩāļĒāļ§ āļŦāļēāļāđāļ•āđˆāļ­āļēāļĻāļąāļĒāļāļēāļĢāđ€āļ—āđˆāļēāļāļąāļ™āļˆāļēāļāļ„āđˆāļē Identity āđ€āļŠāđˆāļ™ ID āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļšāļˆāļķāļ‡āļ„āļ§āļĢāļžāļīāļˆāļēāļĢāļ“āļēāļ§āđˆāļēāļŠāļīāļ‡āđƒāļ”āđ€āļ›āļ™ Value Objects āđāļĨāļ°āļŠāļīāļ‡āđƒāļ”āļ„āļ§āļĢāđ€āļ›āļ™ Entities āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļ Entities āļ™āļąāļ™āļĄāļĩāļāļēāļĢ āļ—āđāļēāļ‡āļēāļ™āļ—āļĩāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļāļ§āđˆāļēāļ—āļąāļ‡āļāļēāļĢāļ™āļīāļĒāļēāļĄ methods āđ€āļžāļ·āļ­āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡ Properties āđ€āļ›āļ™āļ•āđ‰āļ™
  • 19. Babel Coder Babel Coder https://www.babelcoder.com Order Item AGGREGATE ROOT Aggregate āļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļāļąāļ™āđ‚āļ”āļĒāļ–āļđāļāļˆāļąāļ”āļāļēāļĢāđƒāļ™āļāļēāļ™āļ°āļ—āļĩāđ€āļ›āļ™āļŦāļ™āđˆāļ§āļĒāļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđƒāļ™āļĄāļļāļĄāļĄāļ­āļ‡ āļ‚āļ­āļ‡ DDD āļ™āļąāļ™āļāļĨāļļāđˆāļĄāļāđ‰āļ­āļ™āļ‚āļ­āļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāđƒāļ™ DDD āļ™āļąāļ™āļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļāļąāļ™āļˆāļ™āđ„āļĄāđˆāļ„āļ§āļĢāđāļĒāļāļˆāļąāļ”āļāļēāļĢāļ—āļĩāļĨāļ°āļŠāđˆāļ§āļ™āļŦāļēāļāđāļ•āđˆāļ•āđ‰āļ­āļ‡āļˆāļąāļ”āļāļēāļĢāđ‚āļ”āļĒāđƒāļŠāđ‰āļĄāļļāļĄ āļĄāļ­āļ‡āļ§āđˆāļēāđ€āļ›āļ™āļŠāļīāļ™āļŠāđˆāļ§āļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ Order Order Item Order Item
  • 22. Order Stock Payment 1 SYNCHRONOUS MESSAGES Request an order check stock Calculate total price 2 3 Babel Coder Babel Coder https://www.babelcoder.com
  • 23. Order Stock Payment SYNCHRONOUS MESSAGES check stock Calculate total price 2 3 POST <STOCK_IP>/products/<ID> POST <PAYMENT_IP>/checkout Babel Coder Babel Coder https://www.babelcoder.com
  • 24. HTTP / REST API Babel Coder Babel Coder https://www.babelcoder.com Order Stock Payment HTTP / REST API āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāđ€āļ›āļ™āļ—āļĩāļ™āļīāļĒāļĄ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āļŠāļēāļĄāļēāļĢāļ–āļŠāļ·āļ­āļŠāļēāļĢāļāļąāļ™ āļ”āđ‰āļ§āļĒ REST API āđ„āļ”āđ‰ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļŦāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļšāļ•āđˆāļ­āđ€āļ™āļ·āļ­āļ‡āđ„āļ›āļŦāļĨāļēāļĒ āđ† āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĒāđˆāļ­āļĄāļ—āđāļēāđƒāļŦāđ‰ Client āļ›āļĨāļēāļĒāļ—āļēāļ‡āđƒāļŠāđ‰āļĢāļ°āļĒāļ° āđ€āļ§āļĨāļēāļĢāļ­āļ„āļ­āļĒāļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļšāļ—āļĩāļ™āļēāļ™āļ•āļēāļĄ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļŦāļēāļāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ€āļāļīāļ”āļ‚āļķāļ™āđƒāļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŠāļąāļ™āđƒāļ™ Client āļˆāļ°āļĢāļąāļšāļ—āļĢāļēāļšāļ–āļķāļ‡āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ™āļąāļ™āđ„āļ”āđ‰ āļŠāđ‰āļēāđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāļ•āđ‰āļ­āļ‡āļĢāļ­āđ€āļ§āļĨāļēāļāđˆāļ­āļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđāļĢāļ āđ† āļˆāļ°āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ€āļŠāļĢāđ‡āļˆāđāļĨāļ°āļŠāđˆāļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŠāļąāļ™āđƒāļ™āļāđˆāļ­āļ™ āļˆāļķāļ‡āļˆāļ°āļ—āļĢāļēāļšāļ§āđˆāļēāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ” āļžāļĨāļēāļ”āđ€āļāļīāļ”āļ‚āļķāļ™
  • 25. Babel Coder Babel Coder https://www.babelcoder.com GRPC gRPC āđ€āļ›āļ™āļĢāļđāļ›āđāļšāļšāļŦāļ™āļķāļ‡āļ‚āļ­āļ‡ Remote Procedure Call (RPC) āļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ™āđāļēāļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āđƒāļ™āļ‚āļ™āļēāļ”āļ—āļĩ āđ€āļĨāđ‡āļāļāļ§āđˆāļēāđāļĨāļ°āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āļāļ§āđˆāļēāļˆāļķāļ‡āļ™āļīāļĒāļĄāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢ āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđāļšāļš Synchronous Messaging
  • 26. Babel Coder Babel Coder https://www.babelcoder.com article user comment GRAPHQL FEDERATION GraphQL Federation āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡ Apollo Server āđƒāļ™āļāļēāļĢāļĢāļ§āļĄāļŦāļĨāļēāļĒ GraphQL API āđƒāļŦāđ‰āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđ€āļ”āļĩāļĒāļ§ āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Supergraph āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļˆāļāđāļˆāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđ€āļ›āļ™ GraphQL API āļĒāđˆāļ­āļĒ āđ† āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Subgraph āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ›āļĒāļąāļ‡ Supergraph āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ™āļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāļŠāđˆāļ‡ Query āļĒāđˆāļ­āļĒ āđāļšāļš Synchronous āđ„āļ›āļĒāļąāļ‡ Subgraph āļ‹āļķāļ‡āđ€āļ›āļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđāļĨāđ‰āļ§āļˆāļķāļ‡āļĢāļ§āļĄāļœāļĨāļĨāļąāļžāļ˜āđŒ āļāļĨāļąāļšāļŠāļđāđˆ Client āļ•āđˆāļ­āđ„āļ›
  • 27. Order Stock Payment 1 ASYNCHRONOUS MESSAGES ORDER_REQUESTED Event Message Channel Message Broker Babel Coder Babel Coder https://www.babelcoder.com
  • 28. āđ€āļĄāļ·āļ­āđ„āļŦāļĢāđˆāļ„āļ§āļĢāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļšāđƒāļ” āļ—āļąāļ‡āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous āđāļĨāļ° Asynchronous āļ•āđˆāļēāļ‡āļĄāļĩāļ‚āđ‰āļ­āļ”āļĩāļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļ›āļĢāļ°āđ€āļ āļ—āļ•āđˆāļēāļ‡ āđ† āļ•āļēāļĄāļ„āļ§āļēāļĄ āđ€āļŦāļĄāļēāļ°āļŠāļĄāļˆāļķāļ‡āđ€āļ›āļ™āđ€āļĢāļ·āļ­āļ‡āļŠāđāļēāļ„āļąāļ āđ€āļĢāļēāļ„āļ§āļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous āđƒāļ™āļāļĢāļ“āļĩāļ•āđˆāļ­āđ„āļ›āļ™āļĩ āļŦāļēāļāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļ­āļ·āļ™āđ„āļ”āđ‰āļ–āđ‰āļēāđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļąāļšāļœāļĨāļĨāļąāļžāļ˜āđŒāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļŠāļ­āļšāļ–āļēāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļīāļ™āļ„āđ‰āļēāļˆāļēāļ Product āļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Product āļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļœāļđāđ‰āļ‚āļēāļĒāļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡ User āļāļĢāļ“āļĩāļ™āļĩāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ Synchronous āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ•āļ­āļšāļāļĨāļąāļšāđ„āļ›āļĒāļąāļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡ UI āļ™āļąāļ™āļŠāļĄāļšāļđāļĢāļ“āđŒ āđ€āļĄāļ·āļ­āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļš Real-time āđ€āļĄāļ·āļ­āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ—āļĩāļŠāļąāļ™ āđ€āļĢāļēāļ„āļ§āļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Asynchronous āđƒāļ™āļāļĢāļ“āļĩāļ•āđˆāļ­āđ„āļ›āļ™āļĩ āđ€āļĄāļ·āļ­āļŸāđ€āļˆāļ­āļĢāđŒāļ™āļąāļ™āļĒāļ­āļĄāļĢāļąāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ—āļĩāđ€āļŠāļĢāđ‡āļˆāļŠāļīāļ™āđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļāļēāļĢāļ­āļ­āļāļĢāļēāļĒāļ‡āļēāļ™āļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļ āļēāļĒāļŦāļĨāļąāļ‡āļœāđˆāļēāļ™āļ­āļĩāđ€āļĄāļĨāđŒāđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļĨāļēāļ‡āļĄāļĩāļ„āļ§āļēāļĄāļĨāđˆāļēāļŠāđ‰āļēāļŦāļĢāļ·āļ­āđƒāļŠāđ‰āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ™āļēāļ™āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨ āđ€āļĄāļ·āļ­āļĒāļ­āļĄāļĢāļąāļšāđƒāļŦāđ‰āļšāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ€āļāļīāļ”āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđƒāļ™āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āđāļĨāļ°āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ—āđāļēāļ‹āđāļē (Retry) Babel Coder Babel Coder https://www.babelcoder.com
  • 29. API GATEWAY āļ„āļ·āļ­āļ­āļ°āđ„āļĢ Order Stock Payment POST <ORDER_IP> Babel Coder Babel Coder https://www.babelcoder.com
  • 30. Order Stock Payment API GATEWAY āļ„āļ·āļ­āļ­āļ°āđ„āļĢ POST <GATEWAY_IP>/orders POST /orders A P I G a t e w a y Babel Coder Babel Coder https://www.babelcoder.com
  • 33. Babel Coder Babel Coder https://www.babelcoder.com CQRS āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢ CRUD āļ—āļĩāļāļēāļĢāļ­āđˆāļēāļ™āđāļĨāļ°āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĢāļ°āļ—āđāļēāļšāļ™ Data Models āļŠāļļāļ”āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđāļĄāđ‰āļˆāļ°āļŠāļēāļĄāļēāļĢāļ– āļāļĢāļ°āļ—āđāļēāđ„āļ”āđ‰āđ‚āļ”āļĒāļ‡āđˆāļēāļĒāđāļ•āđˆāđƒāļ™āļĢāļ°āļšāļšāļ—āļĩāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļĒāđˆāļ­āļĄāļĄāļĩāļ„āļ§āļēāļĄāļ—āđ‰āļēāļ—āļēāļĒāļ•āđˆāļēāļ‡ āđ† āđ€āļāļīāļ”āļ‚āļķāļ™ āļ›āļāļŦāļēāļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ‚āļ­āļ‡ Data Schemas āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ”āļĩāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļ„āļ§āļĢāļ—āđāļē Normalize āđ€āļžāļ·āļ­āđāļšāđˆāļ‡āđāļĒāļāļ‚āđ‰āļ­āļĄāļđāļĨ āļ•āļēāļĄāļ•āļēāļĢāļēāļ‡āļ•āđˆāļēāļ‡ āđ† āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āļĒāļīāļ‡āļĄāļĩāļāļēāļĢāļ—āđāļē Normalize āļĄāļēāļāđ€āļ—āđˆāļēāđƒāļ”āļĒāļīāļ‡āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļāļēāļĢ Join āļ•āļēāļĢāļēāļ‡āđ€āļžāļ·āļ­ āļŠāļ·āļšāļ„āđ‰āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāđ‰āđ„āļ”āđ‰āļœāļĨāļĨāļąāļžāļ˜āđŒāļ•āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĄāļēāļāđ€āļ—āđˆāļēāļ™āļąāļ™ āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄ āļāļēāļĢāļĢāļ§āļĄāļāļēāļĢāļ­āđˆāļēāļ™āđāļĨāļ°āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļ—āđāļēāđƒāļŦāđ‰āđ€āļŠāļĩāļĒāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡ āđ€āļŠāđˆāļ™ āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Transaction āđāļĨāļ° ACID āļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄāļˆāļķāļ‡āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āđ€āļ āļ— DBMS āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļāļēāļĢāļŠāļ·āļšāļ„āđ‰āļ™ āļ‚āđ‰āļ­āļĄāļđāļĨāļāļĨāļąāļšāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđ€āļŠāļīāļ‡āļĨāļķāļ āļŦāļēāļāđāļšāđˆāļ‡āđāļĒāļāļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļ­āļāļĄāļēāļ•āđˆāļēāļ‡āļŦāļēāļāđ„āļ”āđ‰āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄ āđ€āļŠāđˆāļ™ ElasticSearch āđ„āļ”āđ‰ āļ›āļāļŦāļēāļ”āđ‰āļēāļ™āļāļēāļĢāļ‚āļĒāļēāļĒāļāļēāļĢāļĢāļ­āļ‡āļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ‚āļ”āļĒāļ—āļąāļ§āđ„āļ›āđāļĨāđ‰āļ§āļĄāļąāļāļˆāļ°āļĄāļĩāļ›āļĢāļīāļĄāļēāļ“āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāļĄāļēāļāļāļ§āđˆāļēāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āļŦāļēāļāļāļēāļĢ āļ­āđˆāļēāļ™āđāļĨāļ°āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļāļ­āļ­āļāļˆāļēāļāļāļąāļ™ āļ™āļąāļ™āļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āđ€āļĢāļēāđ€āļĨāļ·āļ­āļāļŠāđ€āļāļĨāļĢāļ°āļšāļšāđƒāļ™āļāļēāļĢāļ­āđˆāļēāļ™āđƒāļŦāđ‰āļĄāļēāļāļ‚āļķāļ™āđ„āļ”āđ‰ Separation of Concerns āļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļāļ‡āļēāļ™āļ”āđ‰āļēāļ™āļāļēāļĢāļ­āđˆāļēāļ™āļ­āļ­āļāļˆāļēāļāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļ­āļāļˆāļēāļāļāļąāļ™āļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āļĢāļ°āļšāļšāļĄāļĩāļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āđƒāļ™āļāļēāļĢāđ€āļžāļīāļĄ āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāđƒāļŦāđ‰āđāļ•āđˆāļĨāļ°āļ‡āļēāļ™āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāļ™
  • 34. Babel Coder Babel Coder https://www.babelcoder.com CQRS Command and Query Responsibility Segregation (CQRS) āđ€āļ›āļ™āļŦāļĨāļąāļāļāļēāļĢāļ—āļĩāļ§āđˆāļēāļ”āđ‰āļ§āļĒāļāļēāļĢāđāļšāđˆāļ‡āđāļĒāļ Command āļ­āļ­āļāļˆāļēāļ Queries āđ‚āļ”āļĒ āļ‡āļēāļ™āļ”āđ‰āļēāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Command āļˆāļ°āļĄāļĩ Data Models āļ—āļĩāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļš Data Models āļ‚āļ­āļ‡āļ‡āļēāļ™āļāļ‡ Queries Command āđ€āļ›āļ™āļ”āđ‰āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļĢāļąāļš Event āļˆāļēāļāļĢāļ°āļšāļšāļŦāļĢāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļžāļ·āļ­āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢ Create Update āļŦāļĢāļ·āļ­ Delete āļ‚āđ‰āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļ­āļēāļˆ āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ Data Validation āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ”āđ‰āļēāļ™ Business Logic āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ āđ€āļ›āļ™āļ•āđ‰āļ™ āđ€āļĄāļ·āļ­āļ‡āļēāļ™āļāļ‡ Command āđ€āļŠāļĢāđ‡āļˆāļŠāļīāļ™āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­ Event āđƒāļŦāļĄāđˆāļ­āļ­āļāđ„āļ›āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļ‡ Query āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļ­āđ„āļ› Query āļ—āđāļēāļāļēāļĢāļĢāļąāļš Event āļˆāļēāļāļ”āđ‰āļēāļ™ Command āđ€āļžāļ·āļ­āļ™āđāļēāđ„āļ›āļˆāļąāļ”āļ—āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāđ€āļŦāļĄāļēāļ°āļŠāļĄāļ•āđˆāļ­āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļ‡āļēāļ™ āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ™āļĩāļˆāļ°āļĄāļĩāļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđƒāļ™ Read Models āļ”āđ‰āļ§āļĒāļĢāļđāļ›āđāļšāļšāļ—āļĩāļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢ Query āđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āđˆāļ­āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āļšāļ™āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āļŠāļļāļ”
  • 35. Babel Coder Babel Coder https://www.babelcoder.com Queries Event Handlers Commands CQRS Query Store Command Store Read Create Update Delete Event Updates Reads Updates
  • 36. Babel Coder Babel Coder https://www.babelcoder.com CQRS ORDER Updates Command Store Queries Event Handlers ORDER_PLACED ORDER_CREATED Query Store Updates Reads Get Order Query Service
  • 37. Babel Coder Babel Coder https://www.babelcoder.com CQRS Order Query Order Order Query Order Query Query Store Replicas CQRS āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļŠāđ€āļāļĨāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāļĄāļĩ āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļŠāļđāļ‡ āđ€āļŠāđˆāļ™ Query Service āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāļ™
  • 38. Babel Coder Babel Coder https://www.babelcoder.com MATERIALIZED VIEW Query Store Materialized View Presentation Layer CQRS āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļšāđˆāļ‡āđāļĒāļāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Command āđāļĨāļ° Query āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ Elastic Search āļāļ‡ Query āđ€āļžāļ·āļ­āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļ āļŦāļĢāļ·āļ­āđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āđ€āļ āļ— NoSQL āļ­āļ·āļ™āđƒāļ™āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡ Query āļˆāļ°āļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļšāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ—āļĩ āļžāļĢāđ‰āļ­āļĄāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļ™āđāļēāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ­āļ·āļ™āđ€āļžāļīāļĄāđ€āļ•āļīāļĄāļŦāļĢāļ·āļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ™āđ‰āļ­āļĒāļ—āļĩāļŠāļļāļ” Get
  • 39. Babel Coder Babel Coder https://www.babelcoder.com EVENTUAL CONSISTENCY CQRS āļ­āļēāļˆāļĄāļĩ delay āđ€āļāļīāļ”āļ‚āļķāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āđāļĨāļ°āļāļēāļĢāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļŠāđˆāļ™ āļ„āđāļēāļŠāļąāļ‡āļ‹āļ·āļ­āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āđāļĨāđ‰āļ§ (ORDER_PLACED) āđāļ•āđˆāļĢāļąāļšāļāļēāļĢ āļ­āļąāļžāđ€āļ”āļ—āđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡ Command āđāļĨāđ‰āļ§ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļĩāļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļāļ‡ Query āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ ORDER_CREATED āļĒāļąāļ‡āļĄāļēāđ„āļĄāđˆāļ–āļķāļ‡ āļŦāļēāļāđƒāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ™āļĩāļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‚āđ‰āļēāļĄāļēāđ€āļĢāļēāļˆāļ°āļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”āļˆāļ™āļāļ§āđˆāļēāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ ORDER_CREATED āļˆāļ°āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđƒāļ™āļāļ‡ Query Eventual Consistency āđ€āļ›āļ™āļŦāļĨāļąāļāļāļēāļĢāļ—āļĩāļāļĨāđˆāļēāļ§āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ€āļŠāđˆāļ™āļ—āļĩāļ§āđˆāļē āļĢāļ°āļšāļšāļ­āļēāļˆāļĄāļĩ delay āđ€āļāļīāļ”āļ‚āļķāļ™āđ„āļ”āđ‰āļšāđ‰āļēāļ‡āđāļ•āđˆāļ—āđ‰āļēāļĒāļ—āļĩāļŠāļļāļ”āđāļĨāđ‰āļ§āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļąāļ‡āļĢāļ°āļšāļšāļˆāļ°āļ•āđ‰āļ­āļ‡ āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āđāļĨāļ°āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™ ORDER Queries Event Handlers ORDER_PLACED ORDER_CREATED Get Order Query Service
  • 40. Babel Coder Babel Coder https://www.babelcoder.com OPTIMISTIC UPDATE āđ€āļžāļ·āļ­āđƒāļŦāđ‰ UI āļĄāļĩāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļ—āļĩāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļˆāļĢāļīāļ‡ āđ€āļĄāļ·āļ­āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢāļŠāđˆāļ‡ Command āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāđˆāļ­āļ™ āđƒāļ™āļ‚āļ“āļ° āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļāđ‡āļ—āđāļēāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™ UI āđ€āļŠāļĄāļ·āļ­āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āđāļĨāđ‰āļ§ āļŦāļēāļāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļˆāļķāļ‡āļĒāļāđ€āļĨāļīāļāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļšāļ™ UI āđ€āļĢāļĩāļĒāļāļĨāļąāļāļĐāļ“āļ°āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ€āļŠāđˆāļ™āļ™āļĩāļ§āđˆāļē Optimistic Update Create Failed
  • 41. Babel Coder Babel Coder https://www.babelcoder.com POLLING āļ§āļīāļ˜āļĩāļāļēāļĢ Polling āļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāđˆāļ‡ Request āđ„āļ›āļĒāļąāļ‡ Command Service āļˆāļēāļāļ™āļąāļ™āļˆāļķāļ‡āļ—āđāļēāļāļēāļĢ Polling āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļ Query Service āļˆāļ™āļāļ§āđˆāļēāļˆāļ°āđ„āļ”āđ‰ āļĢāļąāļšāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļˆāļķāļ‡āļˆāļ°āļŦāļĒāļļāļ”āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢ Polling Query Command UI Request 1. 2. Poll until updated
  • 42. Babel Coder Babel Coder https://www.babelcoder.com PUBLISH - SUCSCRIBE āļ™āļ­āļāđ€āļŦāļ™āļ·āļ­āļˆāļēāļāļāļēāļĢ Polling āđ€āļĢāļēāļĒāļąāļ‡āļŠāļēāļĄāļēāļĢāļ–āļāļĢāļ°āļ—āđāļē Publish - Subscribe āļ”āđ‰āļ§āļĒāļāļēāļĢāđƒāļŦāđ‰ UI āļ—āđāļēāļāļēāļĢ Subscribe āļšāļ™ Query āļ āļēāļĒāļŦāļĨāļąāļ‡āļāļēāļĢāļŠāđˆāļ‡ Request āđ„āļ›āļĒāļąāļ‡ Command Service āđ€āļĄāļ·āļ­ Query āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļˆāļ°āļ—āđāļēāļāļēāļĢ Publish āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļĄāļēāļĒāļąāļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡ UI āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāđ€āļĢāļēāđ„āļ”āđ‰āļ—āđāļēāļāļēāļĢ Subscribe āđ„āļ§āđ‰āđāļĨāđ‰āļ§ Query Command UI 2. Request Subscribe 1. 3. Publish
  • 43. EVENT SOURCING Babel Coder Babel Coder https://www.babelcoder.com
  • 44. Babel Coder Babel Coder https://www.babelcoder.com TRADITIONAL DATA STORAGE Service Database Records Update Old Data āđƒāļ™āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ›āļ™āļāļēāļĢāđāļ—āļ™āļ—āļĩāļ—āļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļīāļĄāļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāļĄāđˆ āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āļĢāļēāļšāđ„āļ”āđ‰āđ€āļĨāļĒāļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļāđˆāļ­āļ™ āļŦāļ™āđ‰āļēāļ™āļąāļ™āļ„āļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ” āļĄāļĩāļ„āđˆāļēāđ€āļ›āļ™āđ€āļŠāđˆāļ™āđ„āļĢ āđ€āļāļīāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ„āđˆāļēāđ€āļžāļĢāļēāļ°āđ€āļŦāļ•āļļāđƒāļ” āļĢāļ§āļĄāļ–āļķāļ‡āđƒāļ„āļĢāđ€āļ›āļ™āļœāļđāđ‰āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ‚āļąāļ™āļ•āļ­āļ™āļ”āļąāļ‡āļāļĨāđˆāļēāļ§
  • 45. Babel Coder Babel Coder https://www.babelcoder.com Service AUDIT LOGS Database āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āđ€āļāđ‡āļšāļ›āļĢāļ°āļ§āļąāļ•āļīāļ‚āļ­āļ‡āļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļēāļ‡ āđ† āļ§āđˆāļēāđƒāļ„āļĢ āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāđƒāļ” āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļŠāļīāļ‡āđƒāļ” āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļĄāļĩ Audit Logs āļ—āļĩāļ­āļēāļˆāđ€āļ›āļ™āđ„āļŸāļĨāđŒ āļ•āļēāļĢāļēāļ‡āļŦāļĢāļ·āļ­āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļžāļ·āļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļšāļąāļ™āļ—āļķāļāļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ™āļąāļ™ āđ€āļĄāļ·āļ­āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ–āļđāļāļšāļąāļ™āļ—āļķāļ āđƒāļ™ State āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ Audit Logs āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļāļĢāļ°āļ—āđāļēāđ„āļ”āđ‰āļœāđˆāļēāļ™ Transaction State Audit Logs
  • 46. Babel Coder Babel Coder https://www.babelcoder.com Service DUPLICATED DATA Database āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ Audit Logs āļ™āļąāļ™āđ€āļ›āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļ—āļĩāļŠāļļāļ”āđāļ•āđˆāļ­āļĒāļđāđˆāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļšāļąāļ™āļ—āļķāļāļ‚āļ­āļ‡āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ§āđˆāļēāđ€āļāļīāļ”āļāļēāļĢāļāļĢāļ°āļ—āđāļēāđƒāļ” āđ† āļāđˆāļ­āļ™āļŦāļĨāļąāļ‡āļšāđ‰āļēāļ‡ āļ–āđ‰āļēāļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļ‡āļēāļ™āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ State āļāđ‡āļˆāļ°āđ€āļ›āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļšāļąāļ™āļ—āļķāļāđ€āļ›āļ™āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ•āļēāļĄ āļ‚āļąāļ™āļ•āļ­āļ™āđƒāļ™ Audit Logs āļˆāļķāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰āļ§āđˆāļē State āļ„āļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ‹āđāļēāļ‹āđ‰āļ­āļ™āļāļąāļš Audit Logs State Audit Logs Duplicated Single Source of Truth
  • 47. Babel Coder Babel Coder https://www.babelcoder.com Service EVENT SOURCING Database āđ€āļĢāļēāļˆāļķāļ‡āđ„āļĄāđˆāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ State āļŦāļĢāļ·āļ­āļŠāļ–āļēāļ™āļ°āļŠāļļāļ”āļ—āđ‰āļēāļĒāđƒāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļĩāļāļ•āđˆāļ­āđ„āļ› āļŦāļēāļāđāļ•āđˆāļˆāļąāļ”āđ€āļāđ‡āļšāļšāļąāļ™āļ—āļķāļāļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ•āđˆāļēāļ‡ āđ† āļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™ āđāļ—āļ™āđƒāļ™ Event Logs (āļ•āđˆāļ­āđ„āļ›āļ™āļĩāļˆāļ°āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Event Store) āđ€āļĄāļ·āļ­āđƒāļ”āļāđ‡āļ•āļēāļĄāļ—āļĩāđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļŠāļ–āļēāļ™āļ°āļŦāļĢāļ·āļ­āļ„āđˆāļēāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ€āļĢāļē āļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‹āđāļēāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ•āđˆāļēāļ‡ āđ† āđ€āļŦāļĨāđˆāļēāļ™āļąāļ™āļˆāļ™āđ„āļ”āđ‰āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ­āļ­āļāļĄāļēāđ„āļ”āđ‰ Event Logs / Event Store Replay State / Object āđāļ•āđˆāļĨāļ° Record āđƒāļ™ Event Store āļˆāļ°āđ€āļ›āļ™ Immutable Data āļ„āļ·āļ­āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡ āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰
  • 48. Babel Coder Babel Coder https://www.babelcoder.com Event_ID Event_Type Data 1 ACC_DEPOSITED { uid: 1, amount: 100 } 2 ACC_DEPOSITED { uid: 2, amount: 100 } 3 ACC_WITHDRAWED { uid: 1, amount: 10 } 4 ACC_DEPOSITED { uid: 1, amount: 100 } EVENT SOURCING Account Balance: 190
  • 49. Babel Coder Babel Coder https://www.babelcoder.com Event_ID Event_Type Data 1 ACC_DEPOSITED { uid: 1, amount: 100 } 2 ACC_DEPOSITED { uid: 2, amount: 100 } 3 ACC_WITHDRAWED { uid: 1, amount: 10 } 4 ACC_DEPOSITED { uid: 1, amount: 100 } 5 ACC_DEPOSITED { uid: 1, amount: 20, note: ‘...’ } EVENT SOURCING āļāļĢāļ“āļĩāļ—āļĩāđ€āļāļīāļ”āļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ” āđ€āļŠāđˆāļ™ ID 3 āļ—āļĩāļ„āļ§āļēāļĄ āļ•āļąāļ‡āđƒāļˆāđ€āļ”āļīāļĄāđ€āļ›āļ™āļāļēāļĢāļāļēāļāđ€āļ‡āļīāļ™ 10 āļšāļēāļ— āļŦāļēāļāđāļ•āđˆ āļĢāļ°āļšāļšāļšāļąāļ™āļ—āļķāļāļœāļīāļ”āļžāļĨāļēāļ”āđ€āļ›āļ™āļ–āļ­āļ™āđ€āļ‡āļīāļ™ 10 āļšāļēāļ—āđāļ—āļ™ āļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢāļ‚āļ­āļ‡ Event Sourcing āđ€āļĢāļēāļˆāļ°āđ„āļĄāđˆ āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚ Record āļ—āļĩāļšāļąāļ™āļ—āļķāļāđāļĨāđ‰āļ§āđ„āļ”āđ‰ āđāļ•āđˆāđ€āļĢāļē āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ Record āļˆāļēāļ Event āđƒāļŦāļĄāđˆāļ•āļēāļĄ ID 5 āđ€āļžāļ·āļ­āļŦāļąāļāļĨāđ‰āļēāļ‡āļāļēāļĢāļāļĢāļ°āļ—āđāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰
  • 50. Babel Coder Babel Coder https://www.babelcoder.com DateTime Event_ID Event_Type Data xxx1 1 ACC_DEPOSITED { uid: 1, amount: 100 } xxx2 2 ACC_DEPOSITED { uid: 2, amount: 100 } xxx3 3 ACC_WITHDRAWED { uid: 1, amount: 10 } xxx4 4 ACC_DEPOSITED { uid: 1, amount: 100 } EVENT SOURCING āļāļēāļĢāđƒāļŠāđ‰ Event Sourcing āļ™āļąāļ™āļ—āđāļēāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ– āļ„āđāļēāļ™āļ§āļ“āļ„āđˆāļēāļœāļĨāļĨāļąāļžāļ˜āđŒāđƒāļ™āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļĩāļāđāļēāļŦāļ™āļ” āđ‚āļ”āļĒ āļ­āļēāļĻāļąāļĒāļāļēāļĢ Replay āļšāļąāļ™āļ—āļķāļāļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļ—āļĩāļŠāļ™āđƒāļˆ āđ€āļŠāđˆāļ™ āļŠāļ™āđƒāļˆ Account Balance āļ‚āļ­āļ‡ User ID āđ€āļ›āļ™ 1 āđƒāļ™āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļē xxx1 āļ–āļķāļ‡ xxx3 āļ‹āļķāļ‡āļˆāļ°āđ„āļ”āđ‰āļœāļĨāļĨāļąāļžāļ˜āđŒāđ€āļ›āļ™ 90 āļšāļēāļ—
  • 51. Babel Coder Babel Coder https://www.babelcoder.com Service Command THE DUAL WRITE PROBLEM Event Queue āđƒāļ™āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļāļąāļšāļ—āļĩāļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļąāļžāđ€āļ”āļ—āļ™āļąāļ™āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļœāđˆāļēāļ™ Event Queue āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāļ—āļąāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ° Queue āđ€āļ›āļ™āļ„āļ™āļĨāļ°āļĢāļ°āļšāļšāļāļąāļ™āļˆāļķāļ‡āļāļēāļĢāļąāļ™āļ•āļĩāđ„āļĄāđˆāđ„āļ”āđ‰āļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļ° Sync āļāļąāļ™ āļŦāļēāļāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ— āļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡āļŦāļ™āļķāļ‡āļŠāđāļēāđ€āļĢāđ‡āļˆāđāļ•āđˆāļ­āļĩāļāļ”āđ‰āļēāļ™āđ„āļĄāđˆāļŠāđāļēāđ€āļĢāđ‡āļˆāļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļ›āļāļŦāļēāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļ™āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰ Database
  • 52. Babel Coder Babel Coder https://www.babelcoder.com Service Command THE DUAL WRITE PROBLEM Event Queue āđ€āļ™āļ·āļ­āļ‡āļāļēāļĢ Event Store āđ€āļ›āļ™āļĻāļđāļ™āļĒāđŒāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđāļ—āđ‰āļˆāļĢāļīāļ‡āđ€āļĢāļēāļˆāļķāļ‡āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ›āļāļŦāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰ āđ‚āļ”āļĒāļ—āđāļēāļāļēāļĢāļšāļąāļ™āļ—āļķāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ› āļĒāļąāļ‡ Event Store āļāđˆāļ­āļ™ āđ€āļĄāļ·āļ­āļāļēāļĢāļāļĢāļ°āļ—āđāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āļŠāđāļēāđ€āļĢāđ‡āļˆāļˆāļķāļ‡āļŠāđˆāļ‡āļ•āđˆāļ­āļœāļĨāļĨāļąāļžāļ˜āđŒāļ™āļąāļ™āđ„āļ›āļĒāļąāļ‡āļĢāļ°āļšāļšāļ āļēāļĒāļ™āļ­āļ āđ€āļŠāđˆāļ™ Event Queue āļ•āđˆāļ­āđ„āļ› Event Store
  • 53. Babel Coder Babel Coder https://www.babelcoder.com Total Item 10 10 OPTIMISTIC CONCURRENCY āļŠāļĄāļĄāļ•āļīāđƒāļŦāđ‰āļˆāđāļēāļ™āļ§āļ™āļŠāļīāļ™āļ„āđ‰āļēāļ„āļ‡āđ€āļŦāļĨāļ·āļ­āļĄāļĩ 10 āļŠāļīāļ™ āđ€āļĄāļ·āļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ A āđāļĨāļ° B āļ•āđˆāļēāļ‡āđ€āļ‚āđ‰āļēāļĄāļēāđƒāļŠāđ‰āļ‡āļēāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļŦāļ™āđ‰āļēāļˆāļ­ UI āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļ‚āļ­āļ‡āđ€āļ‚āļēāļ—āļąāļ‡āļ„āļđāđˆāļˆāļ° āđāļŠāļ”āļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļīāļ™āļ„āđ‰āļēāļ„āļ‡āđ€āļŦāļĨāļ·āļ­āđ€āļ›āļ™ 10 āļŠāļīāļ™ āļ—āļąāļ‡āļŠāļ­āļ‡āļˆāļķāļ‡āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨāļ·āļ­āļāļ‹āļ·āļ­āļŠāļīāļ™āļ„āđ‰āļēāđ„āļ”āđ‰āđƒāļ™āļˆāđāļēāļ™āļ§āļ™āđ„āļĄāđˆāđ€āļāļīāļ™ 10 āļŠāļīāļ™āļ—āļąāļ‡āļ„āļđāđˆ āđ€āļĄāļ·āļ­ A āđāļĨāļ° B āļ—āđāļēāļāļēāļĢ āļŠāļąāļ‡āļ‹āļ·āļ­āļĢāļ°āļšāļšāļˆāļ°āļšāļąāļ™āļ—āļķāļāļāļēāļĢāļŠāļąāļ‡āļ‹āļ·āļ­āđāļĨāļ°āļ•āļąāļ”āļĒāļ­āļ”āļ„āļ‡āđ€āļŦāļĨāļ·āļ­āļ‚āļ­āļ‡āļŠāļīāļ™āļ„āđ‰āļē āļ—āļ§āđˆāļēāđƒāļ™āļ„āļ§āļēāļĄāđ€āļ›āļ™āļˆāļĢāļīāļ‡āđāļĨāđ‰āļ§āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ™āļĩāļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļ‚āļķāļ™āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļ āļŠāļīāļ™āļ„āđ‰āļēāļ„āļ‡āđ€āļŦāļĨāļ·āļ­āļˆāļ°āđ„āļĄāđˆāđ€āļžāļĩāļĒāļ‡āļžāļ­ 10 ITEM_REMOVED (6) ITEM_REMOVED (9) Event Store
  • 54. Babel Coder Babel Coder https://www.babelcoder.com Total Item 10 10 10 ITEM_REMOVED (6) ITEM_REMOVED (9) V2 V2 OPTIMISTIC CONCURRENCY āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāļĄāđ€āļĨāļ‚āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ”āđ‰ āļŦāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ”āļĄāļĩāđ€āļĨāļ‚āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ•āļĢāļ‡āļāļąāļ™āļˆāļ°āļ–āļ·āļ­āļ§āđˆāļēāđ€āļ›āļ™āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™āļžāļĢāđ‰āļ­āļĄ āļāļąāļ™ Record āļ•āļąāļ§āļŦāļĨāļąāļ‡āļ—āļĩāļĄāļĩāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļˆāļ°āđ„āļĄāđˆāļ–āļđāļāļ™āđāļēāļĄāļēāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļŦāļĢāļ·āļ­āļ­āļēāļˆāđ„āļĄāđˆāļ–āļđāļāļšāļąāļ™āļ—āļķāļāļĨāļ‡āđƒāļ™ Event Store Event Store
  • 55. Babel Coder Babel Coder https://www.babelcoder.com SNAPSHOTS Snapshot Version N āļāļēāļĢāļ„āđāļēāļ™āļ§āļ“āļœāļĨāļĨāļąāļžāļ˜āđŒāļŠāļļāļ”āļ—āđ‰āļēāļĒāļ‚āļ­āļ‡ Entity āļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļąāļ‡āļŦāļĄāļ”āđƒāļ™ Event Store āļ™āļąāļ™āđ€āļ›āļ™āđ€āļĢāļ·āļ­āļ‡āđ€āļŠāļĩāļĒāđ€āļ§āļĨāļē āđ€āļĢāļēāļˆāļķāļ‡āļ—āđāļēāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ Snapshot āļ—āļĩāļ„āđāļēāļ™āļ§āļ“āļœāļĨāļĨāļąāļžāļ˜āđŒāļˆāļēāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ§āđ‰āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļēāđāļĨāđ‰āļ§āđ‚āļ”āļĒāļĄāļĩāļāļēāļĢāļāđāļēāļāļąāļšāļ”āđ‰āļ§āļĒāđ€āļĨāļ‚āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāđˆāļēāļŠāļļāļ”āļŠāļēāļĄāļēāļĢāļ– āđ€āļĢāļīāļĄāļˆāļēāļ Snapshots āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļĨāđˆāļēāļŠāļļāļ”āļāđˆāļ­āļ™āđāļĨāđ‰āļ§āļ„āđāļēāļ™āļ§āļ“āđ€āļžāļīāļĄāđ€āļ•āļīāļĄāđƒāļ™āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ–āļąāļ”āđ„āļ›āļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™āļŦāļĨāļąāļ‡ Snapshot āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ āļ™āļąāļ™ āļ—āļąāļ‡āļ™āļĩ Snapshots āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļš Immutable Data āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļĨāļš Snapshots āļ—āļīāļ‡āđ„āļ”āđ‰ Event 1 Event 2 Event 3 Event N Event N + 1 Event N + 2
  • 56. Babel Coder Babel Coder https://www.babelcoder.com SNAPSHOTS DateTime Entity Entity_ID Event_ID Event_Type Data xxx1 Account 1 1 ACC_DEPOSITED { uid: 1, amount: 100 } xxx2 Account 1 2 ACC_WITHDRAWED { uid: 1, amount: 10 } Version Entity Entity_ID Data 1 Account 1 { uid: 1, amount: 100 } Snapshots Event Store
  • 57. Babel Coder Babel Coder https://www.babelcoder.com MATERIALIZED VIEW Event Store āļ™āļąāļ™āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļĨāļąāļāļĐāļ“āļ°āļ—āļĩāđ€āļ›āļ™āļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ Domain Event āđ‚āļ”āļĒāļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļēāļāđ€āļāļīāļ™ āļāļ§āđˆāļēāļ™āđāļēāđ„āļ›āđƒāļŠāđ‰āđāļŠāļ”āļ‡āļœāļĨāļŦāļĢāļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļēāļ‡āļŠāđˆāļ§āļ™āļ•āđ‰āļ­āļ‡āļ–āļđāļāļ„āđāļēāļ™āļ§āļ“āļ”āđ‰āļ§āļĒāļĨāļąāļāļĐāļ“āļ°āļžāļīāđ€āļĻāļĐāļāđˆāļ­āļ™āđāļŠāļ”āļ‡āļœāļĨ āļŦāļēāļāļ—āļļāļāļ„āļĢāļąāļ‡āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ› āđāļŠāļ”āļ‡āļ•āđ‰āļ­āļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāđƒāļŦāļĄāđˆāļ—āļąāļ‡āļŦāļĄāļ”āļĒāđˆāļ­āļĄāđ€āļŠāļĩāļĒāđ€āļ§āļĨāļē Materialized View āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļĄāļēāđ€āļžāļīāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ”āđ‰āļ§āļĒāļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļš āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļļāļ”āļ—āđ‰āļēāļĒāđ€āļ‰āļžāļēāļ°āļŠāđˆāļ§āļ™āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡āđ€āļ—āđˆāļēāļ™āļąāļ™ Event Store Materialized View Presentation Layer
  • 58. Babel Coder Babel Coder https://www.babelcoder.com MATERIALIZED VIEW āļ āļēāļĒāļŦāļĨāļąāļ‡āļāļēāļĢāļšāļąāļ™āļ—āļķāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ Event Store āđ€āļĢāļēāļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļąāļžāđ€āļ”āļ—āđ€āļžāļ·āļ­āđ€āļ™āđ‰āļ™āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‰āļžāļēāļ°āļŠāđˆāļ§āļ™āđāļŠāļ”āļ‡āļœāļĨāđƒāļ™ Materialized View Command Materialized View Presentation Layer Event Store Query Event
  • 60. SAGA PATTERN Saga Pattern āļ„āļ·āļ­āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļĢāļ°āļšāļšāđƒāļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄ Microservices āđ€āļžāļ·āļ­āļˆāļąāļ”āļāļēāļĢāđƒāļŦāđ‰āđ€āļāļīāļ” Data Consistency āļˆāļēāļāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļāļąāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđƒāļ™āļĢāļ°āļšāļš āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Saga āļ™āļąāļ™āļˆāļ°āļĄāļ­āļ‡āļ§āđˆāļēāļ˜āļļāļĢāļāļĢāļĢāļĄ (Transaction) āđƒāļ” āđ† āļˆāļ°āđ€āļāļīāļ”āļˆāļēāļāļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļœāđˆāļēāļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđˆāļ­āļĒ āđ† āđƒāļ™āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ (Local Transactions) āđāļ•āđˆāļĨāļ°āļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđˆāļ­āļĒ āđ† āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļĨāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āļ™āđ€āļ­āļ‡ āļˆāļēāļāļ™āļąāļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļˆāļķāļ‡āļŠāđˆāļ‡āļ•āđˆāļ­ āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ”āđ‰āļ§āļĒāļāļēāļĢāļŠāđˆāļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ (Event) āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ–āļąāļ”āđ„āļ› āļŦāļēāļāļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđˆāļ­āļĒāļ™āļąāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§ āđƒāļ™āļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļ‡āļēāļ™ Saga āļˆāļ°āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļ Compensating Transaction āļ­āļąāļ™āđ€āļ›āļ™āļ˜āļļāļĢāļāļĢāļĢāļĄāļĒāđ‰āļ­āļ™āļāļĨāļąāļšāđ€āļžāļ·āļ­āđƒāļŦāđ‰āļĢāļ°āļšāļš āļŠāļēāļĄāļēāļĢāļ–āļĒāđ‰āļ­āļ™āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļāļĨāļąāļšāđ„āļ›āđ„āļ”āđ‰ āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡ Saga āđāļšāđˆāļ‡āļ­āļ­āļāđ€āļ›āļ™āļŠāļ­āļ‡āļ›āļĢāļ°āđ€āļ āļ— āļ„āļ·āļ­ Choreography-based Saga āđāļĨāļ° Orchestration-based Saga Babel Coder Babel Coder https://www.babelcoder.com
  • 61. CHOREOGRAPHY-BASED SAGA Order Stock Payment ORDER_REQUESTED 1. 2. ORDER_CREATED 3. STOCK_RESERVED 4 . O R D E R _ P L A C E D Babel Coder Babel Coder https://www.babelcoder.com
  • 63. ORCHESTRATION-BASED SAGA Orchestrator Order Stock Payment T1: Order requested Saga Log ORDER_REQUESTED 1. T3: Check status requested 3. CHECK_STOCK_REQUESTED 2. ORDER_CREATED 4. STOCK_RESERVED 6. PAYMENT_APPROVED T5: Payment requested 5. PAYMENT_REQUESTED T6: Payment approved 7. O RD ER_ RESERV ED T2: Order created T4: Stock reserved T7: Order reserved Babel Coder Babel Coder https://www.babelcoder.com
  • 64. COMPENSATING TRANSACTIONS Orchestrator Order Stock Payment T1: Order requested Saga Log ORDER_REQUESTED 1. T3: Check status requested 3. CHECK_STOCK_REQUESTED 2. ORDER_CREATED 4. STOCK_REJECTED C3: - C2: - T2: Order created T4: Stock rejected C1: Order cancelled 5 . O R D E R _ C A N C E L L E D Babel Coder Babel Coder https://www.babelcoder.com C4: -
  • 65. RELIABLE SERVICES Babel Coder Babel Coder https://www.babelcoder.com
  • 66. Babel Coder Babel Coder https://www.babelcoder.com RELIABILITY āļ˜āļĢāļĢāļĄāļŠāļēāļ•āļīāļ‚āļ­āļ‡ Microservices āļĄāļąāļāđ„āļĄāđˆāļˆāļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ­āļĒāļđāđˆāđ€āļžāļĩāļĒāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ€āļ”āļĩāļĒāļ§ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡āļĄāļąāļāđ€āļĢāļĩāļĒāļāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡ downstream services āļ­āļ·āļ™ āđ† āđ‚āļ”āļĒāļĄāļēāļāđāļĨāđ‰āļ§āļ›āļāļŦāļēāļĄāļąāļāđ€āļāļīāļ”āļāļąāļšāļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđāļšāļš Synchronous Messaging āļŦāļēāļāļĄāļĩ downstream services āđƒāļ”āļ•āļēāļĒāđ„āļ›āļĒāđˆāļ­āļĄāļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļ—āļąāļ‡āļŠāļēāļĒāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ™āļąāļ™ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļ—āļĩāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āļ‚āļ­āļ‡ āļĢāļ°āļšāļšāđ€āļ™āđ‡āļ•āđ€āļ§āļīāļĢāđŒāļāļāđ‡āļ­āļēāļˆāđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ›āļāļŦāļēāļ—āļĩāļ—āđāļēāđƒāļŦāđ‰āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļœāļīāļ”āļžāļĨāļēāļ”
  • 67. Babel Coder Babel Coder https://www.babelcoder.com AVAILABILITY A B C D E F HA = 95% HA = 99.9% HA = 99.9% HA = 99.9% HA = 99.9% x 95% x 99.9% = 94.8% HA = 99.9% x 94.8% x 99.9% = 94.5%
  • 69. Babel Coder Babel Coder https://www.babelcoder.com DESIGNING RELIABLE COMMUNICATION āđ€āļĄāļ·āļ­āļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āđ€āļ›āļ™āļŠāļīāļ‡āļ—āļĩāļŦāļĨāļĩāļāđ€āļĨāļĩāļĒāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ­āļ­āļāđāļšāļšāđƒāļŦāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđāļĨāļ°āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļ”āļĩ āļ—āļĩāļŠāļļāļ” āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āļŸāļ™āļ„āļ·āļ™āļˆāļēāļāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§ āđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒāđ€āļ—āļ„āļ™āļīāļ„āļ•āđˆāļēāļ‡ āđ† āļ”āļąāļ‡āļ™āļĩ Retries Fallbacks Timeouts Circuit Breakers Rate Limits
  • 70. Babel Coder Babel Coder https://www.babelcoder.com RETRIES āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™ āđ† āļ­āļēāļˆāļĄāļĩāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§ (transient faults ) āđ€āļāļīāļ”āļ‚āļķāļ™āđ„āļ”āđ‰ āđ€āļŦāļ•āļļāļ™āļĩāđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢ Retry Request āđ€āļžāļ·āļ­āļ—āļ”āļŠāļ­āļšāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āđƒāļŦāļĄāđˆāļ­āļĩāļāļ„āļĢāļąāļ‡ āļāļĨāļĒāļļāļ—āļ˜āļīāļ‚āļ­āļ‡āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđƒāļŠāđ‰ Retry āļĄāļĩāļ”āļąāļ‡āļ™āļĩ Cancel āļ–āđ‰āļēāļŠāļ·āļšāļ—āļĢāļēāļšāđ„āļ”āđ‰āļ§āđˆāļēāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āđ„āļĄāđˆāđƒāļŠāđˆāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§ Request āļ™āļąāļ™āļ„āļ§āļĢāļĒāļāđ€āļĨāļīāļ Retry immediately āļŦāļēāļāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļ™āļąāļ™āđ€āļāļīāļ”āļ‚āļķāļ™āđ„āļĄāđˆāļšāđˆāļ­āļĒ āđ€āļŠāđˆāļ™ packet āļ‚āļ­āļ‡āđ€āļ™āđ‡āļ•āđ€āļ§āļīāļĢāđŒāļāļœāļīāļ”āļžāļĨāļēāļ” āđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢ Retry āļ—āļąāļ™āļ—āļĩ Retry after delay āļāļĢāļ“āļĩāļ—āļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļ™āļąāļ™āļŦāļ™āļēāđāļ™āđˆāļ™ (busy failures) āđƒāļŦāđ‰āđ€āļ§āđ‰āļ™āļŠāđˆāļ§āļ‡āđ„āļ§āđ‰āļĢāļ°āļĒāļ°āļŦāļ™āļķāļ‡āļāđˆāļ­āļ™āđ€āļĢāļīāļĄāļ—āđāļēāļāļēāļĢ Retry āđƒāļŦāļĄāđˆāļ­āļĩāļāļ„āļĢāļąāļ‡ āđ€āļĄāļ·āļ­āđ€āļāļīāļ” Request Failed āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļāļēāļĢ Retry āđ„āļ”āđ‰āđ‚āļ”āļĒāļ­āļēāļˆāļˆāļ°āļ—āđāļēāļāļēāļĢ Retry āļ‹āđāļē āđ† āđ„āļ”āđ‰āļˆāļ™āļāļ§āđˆāļēāļˆāļ°āļ–āļķāļ‡āļˆāđāļēāļ™āļ§āļ™āļ„āļĢāļąāļ‡āļŠāļđāļ‡āļŠāļļāļ”āļ—āļĩāļ•āļąāļ‡ āļ„āđˆāļēāđ„āļ§āđ‰ āļ™āļ­āļāļˆāļēāļāļ™āļĩāđƒāļ™āđāļ•āđˆāļĨāļ°āļĢāļ­āļšāļ‚āļ­āļ‡āļāļēāļĢ Retry āđ€āļĢāļēāļ­āļēāļˆāļˆāļ°āļĄāļĩāļāļēāļĢāļ•āļąāļ‡āļ„āđˆāļē delay āļ—āļĩāđ€āļŦāļĄāļēāļ°āļŠāļĄāđ‚āļ”āļĒāļžāļīāļˆāļēāļĢāļ“āļēāļˆāļēāļāļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļœāļīāļ” āļžāļĨāļēāļ”āļ—āļĩāđ€āļāļīāļ”āļ‚āļķāļ™ delay āđƒāļ™āđāļ•āđˆāļĨāļ°āļĢāļ­āļšāļ™āļąāļ™āļ­āļēāļˆāđ€āļžāļīāļĄāļ„āđˆāļēāļ‚āļķāļ™āđ€āļĢāļ·āļ­āļĒ āđ† āđāļšāļš exponential āđ„āļ”āđ‰
  • 71. Babel Coder Babel Coder https://www.babelcoder.com FALLBACKS āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ A āļ—āļĩāļ•āđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļāļ•āđˆāļ­āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™āđ€āļŠāđˆāļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ B āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāļ–āļ·āļ­āļ§āđˆāļēāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ B āđ€āļ›āļ™ dependency āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ A āļāļĢāļ“āļĩāļ—āļĩ dependency āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđƒāļ™āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āļēāļĄāļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāđ„āļ”āđ‰āļ•āđˆāļ­āđ„āļ›āļ™āļĩ Graceful Degradation Caching Functional Redundancy Stubbed Data
  • 72. Babel Coder Babel Coder https://www.babelcoder.com Order Payment GRACEFUL DEGRADATION āļŠāļĄāļĄāļ•āļīāđƒāļŦāđ‰ Order Service āļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļ Payment Service āđ€āļžāļ·āļ­āđ€āļ•āļīāļĄāđ€āļ•āđ‡āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāļāļēāļĢāļˆāđˆāļēāļĒāđ€āļ‡āļīāļ™ āđ€āļĄāļ·āļ­ Payment Service āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āļˆāļķāļ‡āđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ™āļĩāđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨ āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļĨāļ”āļ‚āļąāļ™āļ‚āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡ āļœāļĨāđƒāļŦāđ‰āđ€āļŦāļĄāļēāļ°āļŠāļĄāđāļĨāļ°āđ€āļ›āļ™āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļŠāļđāļ‡āļŠāļļāļ”āļ•āđˆāļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āđ€āļŠāđˆāļ™ āļ‡āļ”āđāļŠāļ”āļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āļ§āļīāļ˜āļĩāļāļēāļĢāļŠāđāļēāļĢāļ°āđ€āļ‡āļīāļ™āđāļ•āđˆāđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļĒāļ­āļ”āđ€āļ‡āļīāļ™āļ—āļĩāļĄāļĩ āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļĒāļđāđˆāđāļĨāđ‰āļ§āđāļ—āļ™ Order Summary Product A: Qty: 1 Price: 200 Payment Total Price: 200 THB
  • 73. Babel Coder Babel Coder https://www.babelcoder.com CACHING āļāļĢāļ“āļĩāļ—āļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāđ€āļ›āļ™āļŠāļīāļ‡āļ—āļĩāđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ 100% āļŦāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļœāļđāđ‰āđ€āļ›āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰ āđ€āļĢāļē āļŠāļēāļĄāļēāļĢāļ–āļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđāļ„āļŠāļĄāļēāđāļŠāļ”āļ‡āļœāļĨāđāļ—āļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āđ€āļ›āļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļŠāļđāļ‡āļŠāļļāļ”āļˆāļķāļ‡ āļŠāļēāļĄāļēāļĢāļ–āļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđāļ„āļŠāļĄāļēāđƒāļŠāđ‰āđāļŠāļ”āļ‡āļœāļĨāļŠāļąāļ§āļ„āļĢāļēāļ§āļāđˆāļ­āļ™āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāļ—āđāļēāļ‡āļēāļ™āļ­āļĩāļāļ„āļĢāļąāļ‡āļˆāļķāļ‡āļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļēāđāļŠāļ”āļ‡āļœāļĨāļ—āļąāļš Comments Babel Coder Comment#1 Babel Coder Comment#2 Order Cache
  • 74. Babel Coder Babel Coder https://www.babelcoder.com Exchange FUNCTIONAL REDUNDANCY āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ•āļ­āļšāļŠāļ™āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰ āļŦāļēāļāđ€āļĢāļēāļĄāļĩāļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļĄāļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™āļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āļĢāđ‰āļ­āļ‡āļ‚āļ­ āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ„āļ”āđ‰ āđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Exchange āđ„āļĄāđˆāļ—āđāļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ– āļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļļāđ‰āļ™āļˆāļēāļ SET āđ‚āļ”āļĒāļ•āļĢāļ‡āđ„āļ”āđ‰ Stock Exchange SET
  • 75. Babel Coder Babel Coder https://www.babelcoder.com STUBBED DATA āļāļĢāļ“āļĩāļ—āļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļĄāļēāļāļ™āļąāļ āđāļĨāļ°āđ€āļĢāļēāđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāđāļ„āļŠāļ—āļĩāđ€āļ„āļĒāļˆāļąāļ”āđ€āļāđ‡āļšāļĄāļēāļāđˆāļ­āļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ­āļēāļĻāļąāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļāļĨāđ‰āđ€āļ„āļĩāļĒāļ‡āļĄāļē āđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§āļāđˆāļ­āļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļĢāļ°āļšāļšāđāļ™āļ°āļ™āđāļēāļŦāļ™āļąāļ‡āļŠāļ·āļ­ āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Recommendation āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡ āļ–āļđāļāļ•āđ‰āļ­āļ‡āđ€āļ‰āļžāļēāļ°āļŠāđāļēāļŦāļĢāļąāļšāļšāļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āđ€āļĢāļēāļ­āļēāļˆāļ™āđāļēāļĢāļēāļĒāļāļēāļĢāđāļ™āļ°āļ™āđāļēāđāļšāļšāļ—āļąāļ§āđ„āļ›āļĄāļēāđƒāļŠāđ‰āđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§āļāļąāļšāļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāļĄāļĩāļ›āļāļŦāļēāļāđˆāļ­āļ™ āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāļ—āđāļēāļ‡āļēāļ™āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡āļˆāļķāļ‡āļ—āđāļēāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļœāļĨāļĨāļąāļžāļ˜āđŒāļ­āļĩāļāļ„āļĢāļąāļ‡
  • 76. Babel Coder Babel Coder https://www.babelcoder.com TIMEOUTS āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļšāļēāļ‡āļ›āļĢāļ°āļāļēāļĢāđ€āļ›āļ™āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ—āļĩāļĢāļąāļšāļĢāļđāđ‰āđ„āļ”āđ‰āļŠāđ‰āļē āđ€āļŠāđˆāļ™ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡āļ—āļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĄāļēāļāļ—āđāļēāđƒāļŦāđ‰āļĢāđ‰āļ­āļ‡āļĢāļąāļšāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āđ„āļ”āđ‰āļŠāđ‰āļē āđ€āļĄāļ·āļ­āļĄāļĩ āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” Timeout āđ€āļžāļ·āļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļ•āđ‰āļ­āļ‡āļĢāļ­āļ„āļ­āļĒāļœāļĨāļĨāļąāļžāļ˜āđŒāļ—āļĩāļ™āļēāļ™āđ€āļāļīāļ™āđ„āļ›
  • 77. Babel Coder Babel Coder https://www.babelcoder.com CIRCUIT BREAKERS āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§āļŦāļĢāļ·āļ­āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļŠāļąāļ§āļ„āļĢāļēāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Retry āđ€āļžāļ·āļ­āļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‹āđāļēāđ‚āļ”āļĒāļ„āļēāļ” āļŦāļ§āļąāļ‡āđ„āļ§āđ‰āļ§āđˆāļēāļŠāļļāļ”āļ—āđ‰āļēāļĒāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļˆāļ°āļāļĨāļąāļšāļĄāļēāđ€āļ›āļ™āļ›āļāļ•āļī āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļšāļēāļ‡āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ›āļ™āđāļšāļšāļĢāļ°āļĒāļ°āļĒāļēāļ§āļŦāļĢāļ·āļ­āļ–āļēāļ§āļĢ āļāļēāļĢāļžāļĒāļēāļĒāļēāļĄ Retry āļ‹āđāļēāđƒāļ™āļŦāļĨāļēāļĒ āđ† āļ„āļĢāļąāļ‡āļˆāļķāļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļĢāļđāļ›āđāļšāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđƒāļŦāļĄāđˆāļ—āļĩāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Circuit Breakers
  • 78. Babel Coder Babel Coder https://www.babelcoder.com Request Circuit Open? CIRCUIT BREAKERS Make Request to Service Success? Response Fallback Threshold Exceeded? Open Circuit Yes Report Metrics Closed Open No Yes
  • 79. Babel Coder Babel Coder https://www.babelcoder.com CIRCUIT BREAKERS āđ€āļĄāļ·āļ­ Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĢāļēāļ„āļ‡āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļĄāļąāļ™āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ°āđāļšāļšāļ™āļĩāļ•āļĨāļ­āļ”āđ„āļ› āđ€āļžāļĢāļēāļ°āđ€āļĄāļ·āļ­āđƒāļ”āļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰ āļ•āļēāļĄāļ›āļāļ•āļīāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡ Circuit āļ—āļĩāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļ™āļŠāļ–āļēāļ™āļ° Close āļ”āđ‰āļ§āļĒāđ€āļŦāļ•āļļāļ™āļĩāđ€āļĄāļ·āļ­ Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢ āļ—āļ”āļĨāļ­āļ‡āļŠāđˆāļ‡ Request āđ€āļžāļ·āļ­āđ„āļ›āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļ™āļˆāļąāļ‡āļŦāļ§āļ°āļ™āļĩāđ€āļĢāļēāļāļĨāđˆāļēāļ§āđ„āļ”āđ‰āļ§āđˆāļē Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Half Open āđ€āļĄāļ·āļ­āļœāļĨāļĨāļąāļžāļ˜āđŒāļ‚āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļœāđˆāļēāļ™ Circuit āļˆāļ°āļāļĨāļąāļšāļŠāļđāđˆāļŠāļ–āļēāļ™āļ° Close āđāļĨāļ°āļˆāļ°āļĒāļąāļ‡āļ„āļ‡āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĄāļ·āļ­āļāļēāļĢāļ—āļ”āļŠāļ­āļš āļ™āļąāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§
  • 80. Babel Coder Babel Coder https://www.babelcoder.com RATE LIMITS āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡ āđ† āļŠāļēāļĄāļēāļĢāļ–āļĢāļ­āļ‡āļĢāļąāļšāļˆāđāļēāļ™āļ§āļ™ Request āđ„āļ”āđ‰āđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĒāļąāļ‡āļ„āļ‡āļ”āđāļēāļĢāļ‡āļ­āļĒāļđāđˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āļ™āļŠāļļāļ‚ āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢāļāđāļēāļŦāļ™āļ”āļˆāđāļēāļ™āļ§āļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ•āļąāļ‡āļ„āđˆāļē Rate Limits āļāļēāļĢāļāļĢāļ°āļ—āđāļēāđ€āļŠāđˆāļ™āļ™āļĩāļˆāļ°āļŠāđˆāļ§āļĒāļ›āļ­āļ‡āļāļąāļ™āđ„āļĄāđˆāđƒāļŦāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđƒāļ™āļāļēāļĢ āļ—āđāļēāļ‡āļēāļ™āļ­āļąāļ™āļˆāļ°āļ™āđāļēāđ„āļ›āļŠāļđāđˆ Cascading Failure āđ„āļ”āđ‰āđƒāļ™āļ­āļ™āļēāļ„āļ•