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 āđ„āļ”āđ‰āđƒāļ™āļ­āļ™āļēāļ„āļ•

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

  • 1.
  • 2.
  • 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
  • 6.
  • 7.
    MICROSERVICES āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āđ€āļžāļ·āļ­āđāļāđ‰āļ›āļāļŦāļēāļ‚āļ­āļ‡ Monolithicāļ”āļąāļ‡āļāļĨāđˆāļēāļ§ āļˆāļķāļ‡āđ€āļ›āļ™āļ—āļĩāļĄāļēāļ‚āļ­āļ‡āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Microservices āđ€āļ›āļ™āļŠāļ–āļēāļ›āļ•āļĒāļāļĢāļĢāļĄāļ—āļĩāļ­āļ­āļāđāļšāļšāļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢāļ‚āļ­āļ‡ Cloud Native āđ‚āļ”āļĒāļĢāļ°āļšāļšāļŦāļ™āļķāļ‡ āđ† āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāđ„āļ›āļ”āđ‰āļ§āļĒāļŦāļĨāļēāļĒāļŦāļ™āđˆāļ§āļĒāļĒāđˆāļ­āļĒāļŦāļĢāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ āļ—āļĩāļĄāļĩāļāļēāļĢāđ€āļŠāļ·āļ­āļĄāļ•āđˆāļ­āļāļąāļ™ āļ­āļĒāđˆāļēāļ‡āļŦāļĨāļ§āļĄ āđ† āļāļąāļšāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđāļ•āđˆāļĨāļ°āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļˆāļ°āļĄāļĩāļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāđāļĨāļ°āđāļĒāļ Deploy āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļīāļŠāļĢāļ° Babel Coder Babel Coder https://www.babelcoder.com
  • 8.
  • 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
  • 10.
  • 11.
    SCALE CUBE --- Wikimedia BabelCoder Babel Coder https://www.babelcoder.com
  • 12.
    Babel Coder Babel Coder https://www.babelcoder.com CLOUDNATIVE āļ„āļ·āļ­āļ­āļ°āđ„āļĢ 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 BabelCoder https://www.babelcoder.com
  • 14.
    Babel Coder Babel Coder https://www.babelcoder.com DOMAINDRIVEN 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 UBIQUITOUSLANGUAGE āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļēāļĢāļ™āļīāļĒāļēāļĄāļĻāļąāļžāļ—āđŒāļ•āđˆāļēāļ‡ āđ† āđƒāļ™ Domain āđ€āļ›āļ™āđ„āļ›āđƒāļ™āļ—āļīāļĻāļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ āļēāļĐāļēāļāļĨāļēāļ‡āļ—āļĩāļ—āļąāļ‡ Domain Experts āļ™āļąāļ āļžāļąāļ’āļ™āļēāđāļĨāļ°āļœāļđāđ‰āļĄāļĩāļŠāđˆāļ§āļ™āđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āđ€āļ‚āđ‰āļēāđƒāļˆāļĢāđˆāļ§āļĄāļāļąāļ™ āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Ubiquitous Language āļ āļēāļĐāļēāļāļĨāļēāļ‡āļ™āļĩāļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāļ•āđ‰āļ­āļ‡āđāļˆāļāđāļˆāļ‡āđƒāļŦāđ‰āļ™āļąāļ āļžāļąāļ’āļ™āļēāđ€āļ‚āđ‰āļēāđƒāļˆāļ–āļķāļ‡āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāđ€āļžāļ·āļ­āđƒāļŦāđ‰āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āļāļēāļĢāļŠāļ·āļ­āļŠāļēāļĢāļ—āļąāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„āđāļĨāļ°āļĻāļąāļžāļ—āđŒāļ—āļĩāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ•āļąāļ‡āļŠāļ·āļ­āļ•āļąāļ§āđāļ›āļĢ āļŸāļ‡āļāđŒāļŠāļąāļ™ āļ„āļĨāļēāļŠ āđ€āļ›āļ™āđ„āļ›āđƒāļ™ āđāļ™āļ§āļ—āļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļāļąāļšāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆ āļ™āļ­āļāļˆāļēāļāļ™āļĩāļĻāļąāļžāļ—āđŒāļšāļēāļ‡āļ­āļĒāđˆāļēāļ‡āļ—āļĩāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āļ āļēāļ„āļ˜āļļāļĢāļāļīāļˆāļ—āļĢāļēāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ•āđ‰āļ­āļ‡āđāļˆāļāđāļˆāļ‡ āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļœāļđāđ‰āļĄāļĩāļŠāđˆāļ§āļ™āđ€āļāļĩāļĒāļ§āļ‚āđ‰āļ­āļ‡āļ—āļĢāļēāļšāđ€āļŠāđˆāļ™āļāļąāļ™
  • 17.
    Babel Coder Babel Coder https://www.babelcoder.com BOUNDEDCONTEXT 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 VALUEOBJECTS 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 OrderItem AGGREGATE ROOT Aggregate āļŦāļĄāļēāļĒāļ–āļķāļ‡āļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāļ—āļĩāļĄāļĩāļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļāļąāļ™āđ‚āļ”āļĒāļ–āļđāļāļˆāļąāļ”āļāļēāļĢāđƒāļ™āļāļēāļ™āļ°āļ—āļĩāđ€āļ›āļ™āļŦāļ™āđˆāļ§āļĒāļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđƒāļ™āļĄāļļāļĄāļĄāļ­āļ‡ āļ‚āļ­āļ‡ DDD āļ™āļąāļ™āļāļĨāļļāđˆāļĄāļāđ‰āļ­āļ™āļ‚āļ­āļ‡āļ­āļ­āļšāđ€āļˆāđ‡āļāļ•āđŒāđƒāļ™ DDD āļ™āļąāļ™āļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļāļąāļ™āļˆāļ™āđ„āļĄāđˆāļ„āļ§āļĢāđāļĒāļāļˆāļąāļ”āļāļēāļĢāļ—āļĩāļĨāļ°āļŠāđˆāļ§āļ™āļŦāļēāļāđāļ•āđˆāļ•āđ‰āļ­āļ‡āļˆāļąāļ”āļāļēāļĢāđ‚āļ”āļĒāđƒāļŠāđ‰āļĄāļļāļĄ āļĄāļ­āļ‡āļ§āđˆāļēāđ€āļ›āļ™āļŠāļīāļ™āļŠāđˆāļ§āļ™āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ Order Order Item Order Item
  • 20.
  • 21.
  • 22.
    Order Stock Payment 1 SYNCHRONOUSMESSAGES Request an order check stock Calculate total price 2 3 Babel Coder Babel Coder https://www.babelcoder.com
  • 23.
    Order Stock Payment SYNCHRONOUSMESSAGES 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 / RESTAPI 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 GRAPHQLFEDERATION GraphQL Federation āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđƒāļ™āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āļ‚āļ­āļ‡ Apollo Server āđƒāļ™āļāļēāļĢāļĢāļ§āļĄāļŦāļĨāļēāļĒ GraphQL API āđƒāļŦāđ‰āđ€āļ›āļ™āļŦāļ™āļķāļ‡āđ€āļ”āļĩāļĒāļ§ āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Supergraph āđ‚āļ”āļĒāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļˆāļāđāļˆāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđ€āļ›āļ™ GraphQL API āļĒāđˆāļ­āļĒ āđ† āđ€āļĢāļĩāļĒāļāļ§āđˆāļē Subgraph āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āļĄāļĩāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ›āļĒāļąāļ‡ Supergraph āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ™āļąāļ™āļˆāļ°āļĄāļĩāļāļēāļĢāļŠāđˆāļ‡ Query āļĒāđˆāļ­āļĒ āđāļšāļš Synchronous āđ„āļ›āļĒāļąāļ‡ Subgraph āļ‹āļķāļ‡āđ€āļ›āļ™āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđˆāļēāļ‡ āđ† āđāļĨāđ‰āļ§āļˆāļķāļ‡āļĢāļ§āļĄāļœāļĨāļĨāļąāļžāļ˜āđŒ āļāļĨāļąāļšāļŠāļđāđˆ Client āļ•āđˆāļ­āđ„āļ›
  • 27.
    Order Stock Payment 1 ASYNCHRONOUSMESSAGES 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 āļ„āļ·āļ­āļ­āļ°āđ„āļĢ OrderStock Payment POST <ORDER_IP> Babel Coder Babel Coder https://www.babelcoder.com
  • 30.
    Order Stock Payment APIGATEWAY āļ„āļ·āļ­āļ­āļ°āđ„āļĢ POST <GATEWAY_IP>/orders POST /orders A P I G a t e w a y Babel Coder Babel Coder https://www.babelcoder.com
  • 31.
    Babel Coder Babel Coder https://www.babelcoder.com UsersUI MICRO FRONTEND Articles UI Articles Users
  • 32.
  • 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 Commandand 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 EventHandlers 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 CommandStore 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 QueryStore Replicas CQRS āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļŠāđ€āļāļĨāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāļĄāļĩ āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļŠāļđāļ‡ āđ€āļŠāđˆāļ™ Query Service āđ„āļ”āđ‰āļĄāļēāļāļ‚āļķāļ™
  • 38.
    Babel Coder Babel Coder https://www.babelcoder.com MATERIALIZEDVIEW Query Store Materialized View Presentation Layer CQRS āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđāļšāđˆāļ‡āđāļĒāļāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Command āđāļĨāļ° Query āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ Elastic Search āļāļ‡ Query āđ€āļžāļ·āļ­āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāđ€āļŠāļīāļ‡āļĨāļķāļ āļŦāļĢāļ·āļ­āđƒāļŠāđ‰āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āđ€āļ āļ— NoSQL āļ­āļ·āļ™āđƒāļ™āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ āđ‚āļ”āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡ Query āļˆāļ°āļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļšāđƒāļ™āļĢāļđāļ›āđāļšāļšāļ—āļĩ āļžāļĢāđ‰āļ­āļĄāļŠāđāļēāļŦāļĢāļąāļšāļāļēāļĢāļ™āđāļēāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ­āļ·āļ™āđ€āļžāļīāļĄāđ€āļ•āļīāļĄāļŦāļĢāļ·āļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ™āđ‰āļ­āļĒāļ—āļĩāļŠāļļāļ” Get
  • 39.
    Babel Coder Babel Coder https://www.babelcoder.com EVENTUALCONSISTENCY 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 OPTIMISTICUPDATE āđ€āļžāļ·āļ­āđƒāļŦāđ‰ 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 BabelCoder https://www.babelcoder.com
  • 44.
    Babel Coder Babel Coder https://www.babelcoder.com TRADITIONALDATA STORAGE Service Database Records Update Old Data āđƒāļ™āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨāļšāļ™āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ›āļ™āļāļēāļĢāđāļ—āļ™āļ—āļĩāļ—āļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ”āļīāļĄāļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļŦāļĄāđˆ āļāļĢāļ“āļĩāđ€āļŠāđˆāļ™āļ™āļĩāđ€āļĢāļēāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āļĢāļēāļšāđ„āļ”āđ‰āđ€āļĨāļĒāļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļāđˆāļ­āļ™ āļŦāļ™āđ‰āļēāļ™āļąāļ™āļ„āļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ” āļĄāļĩāļ„āđˆāļēāđ€āļ›āļ™āđ€āļŠāđˆāļ™āđ„āļĢ āđ€āļāļīāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ„āđˆāļēāđ€āļžāļĢāļēāļ°āđ€āļŦāļ•āļļāđƒāļ” āļĢāļ§āļĄāļ–āļķāļ‡āđƒāļ„āļĢāđ€āļ›āļ™āļœāļđāđ‰āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ‚āļąāļ™āļ•āļ­āļ™āļ”āļąāļ‡āļāļĨāđˆāļēāļ§
  • 45.
    Babel Coder Babel Coder https://www.babelcoder.com Service AUDITLOGS Database āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āđ€āļāđ‡āļšāļ›āļĢāļ°āļ§āļąāļ•āļīāļ‚āļ­āļ‡āļāļēāļĢāļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļēāļ‡ āđ† āļ§āđˆāļēāđƒāļ„āļĢ āļ”āđāļēāđ€āļ™āļīāļ™āļāļēāļĢāđƒāļ” āđ€āļžāļ·āļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļŠāļīāļ‡āđƒāļ” āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļĄāļĩ Audit Logs āļ—āļĩāļ­āļēāļˆāđ€āļ›āļ™āđ„āļŸāļĨāđŒ āļ•āļēāļĢāļēāļ‡āļŦāļĢāļ·āļ­āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ āđ€āļžāļ·āļ­āļˆāļąāļ”āđ€āļāđ‡āļšāļšāļąāļ™āļ—āļķāļāļāļēāļĢāđ€āļ›āļĨāļĩāļĒāļ™āđāļ›āļĨāļ‡āļ™āļąāļ™ āđ€āļĄāļ·āļ­āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļ–āļđāļāļšāļąāļ™āļ—āļķāļ āđƒāļ™ State āļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™ Audit Logs āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļāļĢāļ°āļ—āđāļēāđ„āļ”āđ‰āļœāđˆāļēāļ™ Transaction State Audit Logs
  • 46.
    Babel Coder Babel Coder https://www.babelcoder.com Service DUPLICATEDDATA 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 EVENTSOURCING 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_IDEvent_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_IDEvent_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 DateTimeEvent_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 THEDUAL WRITE PROBLEM Event Queue āđƒāļ™āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļ‚āđ‰āļ­āļĄāļđāļĨāļĨāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļāļąāļšāļ—āļĩāļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļąāļžāđ€āļ”āļ—āļ™āļąāļ™āđ„āļ›āļĒāļąāļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļœāđˆāļēāļ™ Event Queue āđ€āļ™āļ·āļ­āļ‡āļˆāļēāļāļ—āļąāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ° Queue āđ€āļ›āļ™āļ„āļ™āļĨāļ°āļĢāļ°āļšāļšāļāļąāļ™āļˆāļķāļ‡āļāļēāļĢāļąāļ™āļ•āļĩāđ„āļĄāđˆāđ„āļ”āđ‰āļ§āđˆāļēāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļ° Sync āļāļąāļ™ āļŦāļēāļāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ— āļ‚āđ‰āļ­āļĄāļđāļĨāļāļ‡āļŦāļ™āļķāļ‡āļŠāđāļēāđ€āļĢāđ‡āļˆāđāļ•āđˆāļ­āļĩāļāļ”āđ‰āļēāļ™āđ„āļĄāđˆāļŠāđāļēāđ€āļĢāđ‡āļˆāļˆāļ°āļ—āđāļēāđƒāļŦāđ‰āđ€āļāļīāļ”āļ›āļāļŦāļēāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļ™āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰ Database
  • 52.
    Babel Coder Babel Coder https://www.babelcoder.com Service Command THEDUAL WRITE PROBLEM Event Queue āđ€āļ™āļ·āļ­āļ‡āļāļēāļĢ Event Store āđ€āļ›āļ™āļĻāļđāļ™āļĒāđŒāļĢāļ§āļĄāļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđāļ—āđ‰āļˆāļĢāļīāļ‡āđ€āļĢāļēāļˆāļķāļ‡āļŠāļēāļĄāļēāļĢāļ–āđāļāđ‰āđ„āļ‚āļ›āļāļŦāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ„āļ”āđ‰ āđ‚āļ”āļĒāļ—āđāļēāļāļēāļĢāļšāļąāļ™āļ—āļķāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđ„āļ› āļĒāļąāļ‡ Event Store āļāđˆāļ­āļ™ āđ€āļĄāļ·āļ­āļāļēāļĢāļāļĢāļ°āļ—āđāļēāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āļŠāđāļēāđ€āļĢāđ‡āļˆāļˆāļķāļ‡āļŠāđˆāļ‡āļ•āđˆāļ­āļœāļĨāļĨāļąāļžāļ˜āđŒāļ™āļąāļ™āđ„āļ›āļĒāļąāļ‡āļĢāļ°āļšāļšāļ āļēāļĒāļ™āļ­āļ āđ€āļŠāđˆāļ™ Event Queue āļ•āđˆāļ­āđ„āļ› Event Store
  • 53.
    Babel Coder Babel Coder https://www.babelcoder.com TotalItem 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 TotalItem 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 SnapshotVersion 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 DateTimeEntity 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 MATERIALIZEDVIEW Event Store āļ™āļąāļ™āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļ™āļĨāļąāļāļĐāļ“āļ°āļ—āļĩāđ€āļ›āļ™āļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļ‚āļ­āļ‡āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ Domain Event āđ‚āļ”āļĒāļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĄāļēāļāđ€āļāļīāļ™ āļāļ§āđˆāļēāļ™āđāļēāđ„āļ›āđƒāļŠāđ‰āđāļŠāļ”āļ‡āļœāļĨāļŦāļĢāļ·āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļēāļ‡āļŠāđˆāļ§āļ™āļ•āđ‰āļ­āļ‡āļ–āļđāļāļ„āđāļēāļ™āļ§āļ“āļ”āđ‰āļ§āļĒāļĨāļąāļāļĐāļ“āļ°āļžāļīāđ€āļĻāļĐāļāđˆāļ­āļ™āđāļŠāļ”āļ‡āļœāļĨ āļŦāļēāļāļ—āļļāļāļ„āļĢāļąāļ‡āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ™āđāļēāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ› āđāļŠāļ”āļ‡āļ•āđ‰āļ­āļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāđƒāļŦāļĄāđˆāļ—āļąāļ‡āļŦāļĄāļ”āļĒāđˆāļ­āļĄāđ€āļŠāļĩāļĒāđ€āļ§āļĨāļē Materialized View āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļĄāļēāđ€āļžāļīāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ”āđ‰āļ§āļĒāļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļš āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļļāļ”āļ—āđ‰āļēāļĒāđ€āļ‰āļžāļēāļ°āļŠāđˆāļ§āļ™āļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡āđ€āļ—āđˆāļēāļ™āļąāļ™ Event Store Materialized View Presentation Layer
  • 58.
    Babel Coder Babel Coder https://www.babelcoder.com MATERIALIZEDVIEW āļ āļēāļĒāļŦāļĨāļąāļ‡āļāļēāļĢāļšāļąāļ™āļ—āļķāļāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāđƒāļ™ Event Store āđ€āļĢāļēāļˆāļ°āļ—āđāļēāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ­āļąāļžāđ€āļ”āļ—āđ€āļžāļ·āļ­āđ€āļ™āđ‰āļ™āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļ‰āļžāļēāļ°āļŠāđˆāļ§āļ™āđāļŠāļ”āļ‡āļœāļĨāđƒāļ™ Materialized View Command Materialized View Presentation Layer Event Store Query Event
  • 59.
  • 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
  • 62.
  • 63.
    ORCHESTRATION-BASED SAGA Orchestrator Order Stock Payment T1: Orderrequested 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: Orderrequested 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 BabelCoder 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 BC 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%
  • 68.
  • 69.
    Babel Coder Babel Coder https://www.babelcoder.com DESIGNINGRELIABLE 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 OrderPayment 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 FUNCTIONALREDUNDANCY āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ—āļĩāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ•āļ­āļšāļŠāļ™āļ­āļ‡āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰ āļŦāļēāļāđ€āļĢāļēāļĄāļĩāļ—āļēāļ‡āđ€āļĨāļ·āļ­āļāļ­āļ·āļ™ āđ€āļŠāđˆāļ™ āļĄāļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ­āļ·āļ™āļ—āļĩāļŠāļēāļĄāļēāļĢāļ–āļĢāđ‰āļ­āļ‡āļ‚āļ­ āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ„āļ”āđ‰ āđƒāļŦāđ‰āļ—āđāļēāļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ™āļąāļ™āđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§ āđ€āļŠāđˆāļ™ āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Exchange āđ„āļĄāđˆāļ—āđāļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ– āļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļļāđ‰āļ™āļˆāļēāļ SET āđ‚āļ”āļĒāļ•āļĢāļ‡āđ„āļ”āđ‰ Stock Exchange SET
  • 75.
    Babel Coder Babel Coder https://www.babelcoder.com STUBBEDDATA āļāļĢāļ“āļĩāļ—āļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļ™āļąāļ™āđ„āļĄāđˆāļˆāđāļēāđ€āļ›āļ™āļ•āđ‰āļ­āļ‡āđāļĄāđˆāļ™āļĒāđāļēāļĄāļēāļāļ™āļąāļ āđāļĨāļ°āđ€āļĢāļēāđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāđāļ„āļŠāļ—āļĩāđ€āļ„āļĒāļˆāļąāļ”āđ€āļāđ‡āļšāļĄāļēāļāđˆāļ­āļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ­āļēāļĻāļąāļĒāļ‚āđ‰āļ­āļĄāļđāļĨāđƒāļāļĨāđ‰āđ€āļ„āļĩāļĒāļ‡āļĄāļē āđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§āļāđˆāļ­āļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļĢāļ°āļšāļšāđāļ™āļ°āļ™āđāļēāļŦāļ™āļąāļ‡āļŠāļ·āļ­ āļāļĢāļ“āļĩāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ Recommendation āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āđāļēāļ‡āļēāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡ āļ–āļđāļāļ•āđ‰āļ­āļ‡āđ€āļ‰āļžāļēāļ°āļŠāđāļēāļŦāļĢāļąāļšāļšāļēāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ āđ€āļĢāļēāļ­āļēāļˆāļ™āđāļēāļĢāļēāļĒāļāļēāļĢāđāļ™āļ°āļ™āđāļēāđāļšāļšāļ—āļąāļ§āđ„āļ›āļĄāļēāđƒāļŠāđ‰āđ€āļ›āļ™āļāļēāļĢāļŠāļąāļ§āļ„āļĢāļēāļ§āļāļąāļšāļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™āļ—āļĩāļĄāļĩāļ›āļāļŦāļēāļāđˆāļ­āļ™ āđ„āļ”āđ‰ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāļ—āđāļēāļ‡āļēāļ™āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡āļˆāļķāļ‡āļ—āđāļēāļāļēāļĢāļ­āļąāļžāđ€āļ”āļ—āļœāļĨāļĨāļąāļžāļ˜āđŒāļ­āļĩāļāļ„āļĢāļąāļ‡
  • 76.
    Babel Coder Babel Coder https://www.babelcoder.com TIMEOUTS āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļšāļēāļ‡āļ›āļĢāļ°āļāļēāļĢāđ€āļ›āļ™āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ—āļĩāļĢāļąāļšāļĢāļđāđ‰āđ„āļ”āđ‰āļŠāđ‰āļēāđ€āļŠāđˆāļ™ āđ€āļĄāļ·āļ­āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡āļ—āļĩāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĄāļēāļāļ—āđāļēāđƒāļŦāđ‰āļĢāđ‰āļ­āļ‡āļĢāļąāļšāļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āđ„āļ”āđ‰āļŠāđ‰āļē āđ€āļĄāļ·āļ­āļĄāļĩ āļāļēāļĢāļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ”āļąāļ‡āļāļĨāđˆāļēāļ§āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ—āđāļēāļāļēāļĢāļāđāļēāļŦāļ™āļ” Timeout āđ€āļžāļ·āļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļ•āđ‰āļ­āļ‡āļĢāļ­āļ„āļ­āļĒāļœāļĨāļĨāļąāļžāļ˜āđŒāļ—āļĩāļ™āļēāļ™āđ€āļāļīāļ™āđ„āļ›
  • 77.
    Babel Coder Babel Coder https://www.babelcoder.com CIRCUITBREAKERS āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĄāļĩāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļŠāļąāļ§āļ„āļĢāļēāļ§āļŦāļĢāļ·āļ­āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļŠāļąāļ§āļ„āļĢāļēāļ§ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡ Retry āđ€āļžāļ·āļ­āļĢāđ‰āļ­āļ‡āļ‚āļ­āļ‹āđāļēāđ‚āļ”āļĒāļ„āļēāļ” āļŦāļ§āļąāļ‡āđ„āļ§āđ‰āļ§āđˆāļēāļŠāļļāļ”āļ—āđ‰āļēāļĒāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļˆāļ°āļāļĨāļąāļšāļĄāļēāđ€āļ›āļ™āļ›āļāļ•āļī āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄāļ„āļ§āļēāļĄāļœāļīāļ”āļžāļĨāļēāļ”āļšāļēāļ‡āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ›āļ™āđāļšāļšāļĢāļ°āļĒāļ°āļĒāļēāļ§āļŦāļĢāļ·āļ­āļ–āļēāļ§āļĢ āļāļēāļĢāļžāļĒāļēāļĒāļēāļĄ Retry āļ‹āđāļēāđƒāļ™āļŦāļĨāļēāļĒ āđ† āļ„āļĢāļąāļ‡āļˆāļķāļ‡āđ„āļĄāđˆāđ€āļāļīāļ”āļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒ āđ€āļĢāļēāļˆāļķāļ‡āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒāļĢāļđāļ›āđāļšāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđƒāļŦāļĄāđˆāļ—āļĩāđ€āļĢāļĩāļĒāļāļ§āđˆāļē Circuit Breakers
  • 78.
    Babel Coder Babel Coder https://www.babelcoder.com Request Circuit Open? CIRCUITBREAKERS 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 CIRCUITBREAKERS āđ€āļĄāļ·āļ­ Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĢāļēāļ„āļ‡āđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļĄāļąāļ™āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ°āđāļšāļšāļ™āļĩāļ•āļĨāļ­āļ”āđ„āļ› āđ€āļžāļĢāļēāļ°āđ€āļĄāļ·āļ­āđƒāļ”āļ—āļĩāđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰ āļ•āļēāļĄāļ›āļāļ•āļīāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡ Circuit āļ—āļĩāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ„āļ§āļĢāļˆāļ°āđ€āļ›āļ™āļŠāļ–āļēāļ™āļ° Close āļ”āđ‰āļ§āļĒāđ€āļŦāļ•āļļāļ™āļĩāđ€āļĄāļ·āļ­ Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢ āļ—āļ”āļĨāļ­āļ‡āļŠāđˆāļ‡ Request āđ€āļžāļ·āļ­āđ„āļ›āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļ›āļĨāļēāļĒāļ—āļēāļ‡ āđƒāļ™āļˆāļąāļ‡āļŦāļ§āļ°āļ™āļĩāđ€āļĢāļēāļāļĨāđˆāļēāļ§āđ„āļ”āđ‰āļ§āđˆāļē Circuit āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Half Open āđ€āļĄāļ·āļ­āļœāļĨāļĨāļąāļžāļ˜āđŒāļ‚āļ­āļ‡āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļœāđˆāļēāļ™ Circuit āļˆāļ°āļāļĨāļąāļšāļŠāļđāđˆāļŠāļ–āļēāļ™āļ° Close āđāļĨāļ°āļˆāļ°āļĒāļąāļ‡āļ„āļ‡āļ­āļĒāļđāđˆāđƒāļ™āļŠāļ–āļēāļ™āļ° Open āđ€āļĄāļ·āļ­āļāļēāļĢāļ—āļ”āļŠāļ­āļš āļ™āļąāļ™āļĨāđ‰āļĄāđ€āļŦāļĨāļ§
  • 80.
    Babel Coder Babel Coder https://www.babelcoder.com RATELIMITS āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļŦāļ™āļķāļ‡ āđ† āļŠāļēāļĄāļēāļĢāļ–āļĢāļ­āļ‡āļĢāļąāļšāļˆāđāļēāļ™āļ§āļ™ Request āđ„āļ”āđ‰āđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āđ€āļžāļ·āļ­āđƒāļŦāđ‰āļāļēāļĢāļ—āđāļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĒāļąāļ‡āļ„āļ‡āļ”āđāļēāļĢāļ‡āļ­āļĒāļđāđˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āļ™āļŠāļļāļ‚ āđ€āļĢāļēāļˆāļķāļ‡āļ„āļ§āļĢāļāđāļēāļŦāļ™āļ”āļˆāđāļēāļ™āļ§āļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ•āļąāļ‡āļ„āđˆāļē Rate Limits āļāļēāļĢāļāļĢāļ°āļ—āđāļēāđ€āļŠāđˆāļ™āļ™āļĩāļˆāļ°āļŠāđˆāļ§āļĒāļ›āļ­āļ‡āļāļąāļ™āđ„āļĄāđˆāđƒāļŦāđ‰āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđƒāļ™āļāļēāļĢ āļ—āđāļēāļ‡āļēāļ™āļ­āļąāļ™āļˆāļ°āļ™āđāļēāđ„āļ›āļŠāļđāđˆ Cascading Failure āđ„āļ”āđ‰āđƒāļ™āļ­āļ™āļēāļ„āļ•