SlideShare a Scribd company logo
Lessons Learned from 2000
event-driven microservices
natansil.com twitter@NSilnitsky linkedin/natansilnitsky github.com/natansil
Natan Silnitsky Backend Infra TL, Wix.com
November 2022
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Unique
visitors use
Wix platform
every month
~1B
* scale, recovery, issues
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Unique
visitors use
Wix platform
every month
~1B
Daily HTTP
Transactions
~500B
Kafka
messages a
day
~70B
* scale, recovery, issues
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Unique
visitors use
Wix platform
every month
~1B
Daily HTTP
Transactions
~500B
Kafka
messages a
day
~70B
GAs every
day
> 600
Microservices in
production
2300
* scale, recovery, issues
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Challenges
of event-driven architecture,
that we’ve bumped into
1 Producing message failures
Processing out-of-order & duplicates
2
4 Troubleshooting production
3 Sending large payloads
* success, tools, faster
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
How Event-driven Architecture Works
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Service-to-Service Communication
Cart
Service
User
Service
Inventory
Service
Catalog
Service
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Request-Reply Communication
HTTP RPC
HTTP RPC
HTTP RPC
Cart
Service
User
Service
Inventory
Service
Catalog
Service
* issue scale
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
slow
Cart
Service
* slow, bottleneck, cache
HTTP RPC
HTTP RPC
HTTP RPC
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
unreliable
Cart
Service
* unreliable, cascade, retr
HTTP RPC
HTTP RPC
HTTP RPC
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Event-driven Communication
Producer
Broker Product Updated Topic
Event
* improve, broker, scale
Catalog Service
Kafka
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Broker
more robust
* DB, decoupling, no impact
Cart Service
Producer Consumer
Kafka
Catalog Service
Product Updated Topic
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Broker
Event processing is guaranteed
Producer Consumer
Kafka
Catalog Service Cart Service
Product Updated Topic
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
The following is based on a true story
*Dates and products were changed for clarity :)
* ecom simple linear
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2016
Wix starts using
event-driven
We can work event-driven!!
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
It all began when
Ecom experienced
data issues
Data does NOT reflect
actual catalog
Risk: show wrong
prices in cart
Cart
DB
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2. Produce
“Product Updated”
Event
Broker
Cart
Service
4. Show updated
prices in cart
3. Update
Product Price
Catalog
Service
1.
Update
status
After investigating
Cart
DB
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Challenge #1
Producing message failure
Kafka
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Broker
Cart
Service
Catalog
Service
Make DB Update & Event Producing Atomic
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Produce event to S3
Broker
Catalog
Service
Resilient
Producer
Catch Unsent Events
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Produce event to S3
Broker
Produce to
Kafka
Healer
Service
Catalog
Service
Poll
Resilient
Producer
Fallback to S3 and Heal
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Kafka Broker
Service A Service B
Greyhound Producer
Kafka Producer
Greyhound Consumer
Kafka Consumer
Wrap Kafka with Greyhound*
* Open source: https://github.com/wix/greyhound
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
➔ Resilient Producer
➔ Parallel Consumption
➔ Batch Consumer
➔ Consumer Retry Strategies
➔ Context Propagation
➔ Metrics reporting
Developer Self-Service:
Wrap Kafka with Greyhound*
* Open source: https://github.com/wix/greyhound
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2016
Wix starts using
event-driven
2018
Greyhound
Resilient producer
& Consumer retries
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Produce event to S3
Broker
Produce to
Kafka
Healer
Service
Catalog
Service
Poll
Resilient
Producer
Fallback to S3 and Heal
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Broker
Catalog
Service
Healer
Service
Remove
Discount Introduce
Discount
Then ‘out-of-order’ happened
Cart
Service
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Challenge #2
Out-of-order & duplicates processing
Kafka
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Catalog
Service
Broker
Healer
Service
Introduce
Discount
Mitigating out-of-order with revision ID
# 10
# 9
Cart
Service
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Catalog
Service
Broker
Healer
Service
Remove
Discount Introduce
Discount
Mitigating out-of-order with revision ID
# 11
# 10
# 9
Cart
Service
* item itself
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Scan the
binlog. For
each entry
produce a
‘status
update’ event
Cart
Service
Broker
Catalog
Service
Mitigating out-of-order with Debezium connector
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
More Ecom data
issues
Data does NOT reflect
actual inventory
Risk: lose
potential customers
Inventory
DB
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Item 2
Item 1
Broker
Payments
Service
Investigation leads to duplicate processing
Payment for: Inventory
Service
Retry
Item 2 5 → 3
Item 1 9 → 7
* not idempotent
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Item 2 5 → 4
Item 1 9 → 8
Item 2
Item 1
Payment for:
Broker
txnId - a7g45
Mitigating duplicates with Transaction ID
Payments
Service
Inventory
Service
txnId - a7g45
txnId - a7g45
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2016
Wix starts using
event-driven
2018
Greyhound
Resilient
producer &
Consumer retries
2019
Revisions &
Transaction IDs
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Broker
Product Catalog
Service
Product Update
event
Cart
Service
“Dude, I can’t produce large payloads”
...
"description": "An
apple mobile which is
nothing like apple",
...
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
* 1MB
Challenge #3
Failure to send large payloads
Broker
...
"description": "An
apple mobile which is
nothing like apple",
...
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Large Payloads
Remedy I
Compression
→ Try several compression types (lz4, snappy,
etc.)
→ Compression on Kafka level is usually
better than application level, as payloads
can be compressed in batches
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Large Payloads
Remedy II
Chunking
Broker
1. Split to chunks
& produce
2. Consume &
reassemble
Product
Catalog
Service
Cart
Service
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Large Payloads
Remedy III
Reference to
Object Store
2. Produce with S3
URL
3. Consume &
download from
S3
1. Upload to S3
Product
Catalog
Service Cart
Service
Broker
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2016
Wix starts using
event-driven
2018
Greyhound Resilient
producer &
Consumer retries
2019
We use IDs for
ooo & duplicates
2020
Added
compression
by default
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
* bottlenecks
Challenge #4
It’s hard for developers to debug and maintain event-driven
microservices at scale in production
Our team
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Stream events with various filters
How do I investigate
this lag?
Our team
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Investigate consumer lag per partition
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
View a “stuck” event in some partition
How come this
side-effect didn’t
happen?
Our team
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Orders
Service
Propagate the Context
Broker Payments Topic
Orders Topic Inventory Topic
requestId
userId
Event Header
1. Greyhound
produce
* monitoring infra
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2. Greyhound
consume
Propagate the Context
Payments
Service
Broker Payments Topic
Orders Topic Inventory Topic
3. produce
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
4. Greyhound
consume
Propagate the Context
Inventory
Service
Broker Payments Topic
Orders Topic Inventory Topic
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
So developers can track events’ route
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
View event details
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
2016
Wix starts using
event-driven
2018
We open source
Greyhound
2019
We use IDs for
ooo & duplicates
2020
Added
compression
by default
2021-22
Tools in
Production
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Wix developers have embraced
event-driven architecture.
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Meeting these challenges
made our microservices more
decoupled, resilient and scalable,
while keeping complexity low and
data consistent.
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
The Blog Post
https://medium.com/wix-engineerin
g/event-driven-architecture-5-pitfalls-t
o-avoid-b3ebf885bdb1
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
How to migrate 2000 microservices to Multi Cluster
Managed Kafka with 0 Downtime
The Next Step
https://www.youtube.com/watch?v=
XKbG8a-9NRE
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Greyhound
github.com/wix/greyhound
Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
Tomorrow
Create Tiny Habits to
Become
a Better Developer
Thank You!
natansil.com twitter@NSilnitsky linkedin/natansilnitsky github.com/natansil
👉 slideshare.net/NatanSilnitsky
Any questions?
Ad

Recommended

Introduction to Docker Compose | Docker Intermediate Workshop
Introduction to Docker Compose | Docker Intermediate Workshop
Ajeet Singh Raina
 
FedScoop Public Sector Innovation Summit DOD Enterprise DevSecOps Initiative ...
FedScoop Public Sector Innovation Summit DOD Enterprise DevSecOps Initiative ...
scoopnewsgroup
 
Cell-based Architecture: An Emerging Architecture Pattern for Agile Integrati...
Cell-based Architecture: An Emerging Architecture Pattern for Agile Integrati...
Asanka Abeysinghe
 
Programación Reactiva con Spring WebFlux
Programación Reactiva con Spring WebFlux
Paradigma Digital
 
AWS Cloud Design Pattern for Enterprise
AWS Cloud Design Pattern for Enterprise
Akio Katayama
 
いまさら、AWSのネットワーク設計
いまさら、AWSのネットワーク設計
Serverworks Co.,Ltd.
 
Soluciones Dynatrace
Soluciones Dynatrace
Innovation Strategies
 
[社内共有会]AWS NAT-GW導入と構成変化 2年運用して 同時接続数 秒間100->10万へ成長
[社内共有会]AWS NAT-GW導入と構成変化 2年運用して 同時接続数 秒間100->10万へ成長
Takahiro Moteki
 
CNCF and Cloud Native Intro
CNCF and Cloud Native Intro
Cloud Native Bangalore
 
Rego Deep Dive
Rego Deep Dive
Torin Sandall
 
Designing Cloud Native Applications with Kubernetes
Designing Cloud Native Applications with Kubernetes
Bilgin Ibryam
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
Amazon Web Services Korea
 
API Management Part 1 - An Introduction to Azure API Management
API Management Part 1 - An Introduction to Azure API Management
BizTalk360
 
Lessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - Reversim
Natan Silnitsky
 
Container Monitoring with Sysdig
Container Monitoring with Sysdig
Sreenivas Makam
 
Api observability
Api observability
Red Hat
 
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Justin Ryan
 
From APM to Business Monitoring with AppDynamics Analytics
From APM to Business Monitoring with AppDynamics Analytics
AppDynamics
 
8. Event Storming (P. Rayner).pdf
8. Event Storming (P. Rayner).pdf
Mikhail Andronov
 
TF에서 팀 빌딩까지 9개월의 기록 : 성장하는 조직을 만드는 여정
TF에서 팀 빌딩까지 9개월의 기록 : 성장하는 조직을 만드는 여정
Seongyun Byeon
 
API Management in Azure
API Management in Azure
Tomasso Groenendijk
 
Kubernetes 101
Kubernetes 101
Stanislav Pogrebnyak
 
Control Kubernetes Ingress and Egress Together with NGINX
Control Kubernetes Ingress and Egress Together with NGINX
NGINX, Inc.
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
Fido Technical Overview
Fido Technical Overview
FIDO Alliance
 
Becoming a hyperledger aries developer learn things.online
Becoming a hyperledger aries developer learn things.online
djaber3
 
Business Transactions with AppDynamics
Business Transactions with AppDynamics
AppDynamics
 
IBM Datapower Security Scenario with JWS & JWE
IBM Datapower Security Scenario with JWS & JWE
sandipg123
 
DevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservices
Natan Silnitsky
 
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Natan Silnitsky
 

More Related Content

What's hot (20)

CNCF and Cloud Native Intro
CNCF and Cloud Native Intro
Cloud Native Bangalore
 
Rego Deep Dive
Rego Deep Dive
Torin Sandall
 
Designing Cloud Native Applications with Kubernetes
Designing Cloud Native Applications with Kubernetes
Bilgin Ibryam
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
Amazon Web Services Korea
 
API Management Part 1 - An Introduction to Azure API Management
API Management Part 1 - An Introduction to Azure API Management
BizTalk360
 
Lessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - Reversim
Natan Silnitsky
 
Container Monitoring with Sysdig
Container Monitoring with Sysdig
Sreenivas Makam
 
Api observability
Api observability
Red Hat
 
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Justin Ryan
 
From APM to Business Monitoring with AppDynamics Analytics
From APM to Business Monitoring with AppDynamics Analytics
AppDynamics
 
8. Event Storming (P. Rayner).pdf
8. Event Storming (P. Rayner).pdf
Mikhail Andronov
 
TF에서 팀 빌딩까지 9개월의 기록 : 성장하는 조직을 만드는 여정
TF에서 팀 빌딩까지 9개월의 기록 : 성장하는 조직을 만드는 여정
Seongyun Byeon
 
API Management in Azure
API Management in Azure
Tomasso Groenendijk
 
Kubernetes 101
Kubernetes 101
Stanislav Pogrebnyak
 
Control Kubernetes Ingress and Egress Together with NGINX
Control Kubernetes Ingress and Egress Together with NGINX
NGINX, Inc.
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
Fido Technical Overview
Fido Technical Overview
FIDO Alliance
 
Becoming a hyperledger aries developer learn things.online
Becoming a hyperledger aries developer learn things.online
djaber3
 
Business Transactions with AppDynamics
Business Transactions with AppDynamics
AppDynamics
 
IBM Datapower Security Scenario with JWS & JWE
IBM Datapower Security Scenario with JWS & JWE
sandipg123
 
Designing Cloud Native Applications with Kubernetes
Designing Cloud Native Applications with Kubernetes
Bilgin Ibryam
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
Amazon Web Services Korea
 
API Management Part 1 - An Introduction to Azure API Management
API Management Part 1 - An Introduction to Azure API Management
BizTalk360
 
Lessons Learned from 2000 Event Driven Microservices - Reversim
Lessons Learned from 2000 Event Driven Microservices - Reversim
Natan Silnitsky
 
Container Monitoring with Sysdig
Container Monitoring with Sysdig
Sreenivas Makam
 
Api observability
Api observability
Red Hat
 
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Justin Ryan
 
From APM to Business Monitoring with AppDynamics Analytics
From APM to Business Monitoring with AppDynamics Analytics
AppDynamics
 
8. Event Storming (P. Rayner).pdf
8. Event Storming (P. Rayner).pdf
Mikhail Andronov
 
TF에서 팀 빌딩까지 9개월의 기록 : 성장하는 조직을 만드는 여정
TF에서 팀 빌딩까지 9개월의 기록 : 성장하는 조직을 만드는 여정
Seongyun Byeon
 
Control Kubernetes Ingress and Egress Together with NGINX
Control Kubernetes Ingress and Egress Together with NGINX
NGINX, Inc.
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질
Young-Ho Cho
 
Fido Technical Overview
Fido Technical Overview
FIDO Alliance
 
Becoming a hyperledger aries developer learn things.online
Becoming a hyperledger aries developer learn things.online
djaber3
 
Business Transactions with AppDynamics
Business Transactions with AppDynamics
AppDynamics
 
IBM Datapower Security Scenario with JWS & JWE
IBM Datapower Security Scenario with JWS & JWE
sandipg123
 

Similar to BuildStuff - Lessons Learned from 2000 Event Driven Microservices (20)

DevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservices
Natan Silnitsky
 
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Natan Silnitsky
 
GeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
Natan Silnitsky
 
Battle-tested event-driven patterns for your microservices architecture - Sca...
Battle-tested event-driven patterns for your microservices architecture - Sca...
Natan Silnitsky
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Battle Tested Event-Driven Patterns for your Microservices Architecture
Battle Tested Event-Driven Patterns for your Microservices Architecture
Natan Silnitsky
 
Battle Tested Event-Driven Patterns for your Microservices Architecture - Ris...
Battle Tested Event-Driven Patterns for your Microservices Architecture - Ris...
Natan Silnitsky
 
Building event-driven (Micro)Services with Apache Kafka
Building event-driven (Micro)Services with Apache Kafka
Guido Schmutz
 
Jax london - Battle-tested event-driven patterns for your microservices archi...
Jax london - Battle-tested event-driven patterns for your microservices archi...
Natan Silnitsky
 
Battle-tested event-driven patterns for your microservices architecture - Sca...
Battle-tested event-driven patterns for your microservices architecture - Sca...
Natan Silnitsky
 
Event driven microservices
Event driven microservices
Anthony Martin
 
Battle Tested Event-Driven Patterns for your Microservices Architecture - Dev...
Battle Tested Event-Driven Patterns for your Microservices Architecture - Dev...
Natan Silnitsky
 
Pragmatic Event Driven Microservices
Pragmatic Event Driven Microservices
Allard Buijze
 
Building event-driven (Micro)Services with Apache Kafka
Building event-driven (Micro)Services with Apache Kafka
Guido Schmutz
 
Managing Data at Scale - Microservices and Events
Managing Data at Scale - Microservices and Events
Randy Shoup
 
Three SOA Case Studies
Three SOA Case Studies
Paul Fremantle
 
Event-Driven Service-oriented Architecture (EDSOA)
Event-Driven Service-oriented Architecture (EDSOA)
Attune Infocom Pvt Ltd
 
Event Driven Architecture
Event Driven Architecture
Chris Patterson
 
Building event-driven Microservices with Kafka Ecosystem
Building event-driven Microservices with Kafka Ecosystem
Guido Schmutz
 
Event Driven Architecture at NDDNUG
Event Driven Architecture at NDDNUG
Chris Patterson
 
DevSum - Lessons Learned from 2000 microservices
DevSum - Lessons Learned from 2000 microservices
Natan Silnitsky
 
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Natan Silnitsky
 
GeeCon - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
Natan Silnitsky
 
Battle-tested event-driven patterns for your microservices architecture - Sca...
Battle-tested event-driven patterns for your microservices architecture - Sca...
Natan Silnitsky
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Battle Tested Event-Driven Patterns for your Microservices Architecture
Battle Tested Event-Driven Patterns for your Microservices Architecture
Natan Silnitsky
 
Battle Tested Event-Driven Patterns for your Microservices Architecture - Ris...
Battle Tested Event-Driven Patterns for your Microservices Architecture - Ris...
Natan Silnitsky
 
Building event-driven (Micro)Services with Apache Kafka
Building event-driven (Micro)Services with Apache Kafka
Guido Schmutz
 
Jax london - Battle-tested event-driven patterns for your microservices archi...
Jax london - Battle-tested event-driven patterns for your microservices archi...
Natan Silnitsky
 
Battle-tested event-driven patterns for your microservices architecture - Sca...
Battle-tested event-driven patterns for your microservices architecture - Sca...
Natan Silnitsky
 
Event driven microservices
Event driven microservices
Anthony Martin
 
Battle Tested Event-Driven Patterns for your Microservices Architecture - Dev...
Battle Tested Event-Driven Patterns for your Microservices Architecture - Dev...
Natan Silnitsky
 
Pragmatic Event Driven Microservices
Pragmatic Event Driven Microservices
Allard Buijze
 
Building event-driven (Micro)Services with Apache Kafka
Building event-driven (Micro)Services with Apache Kafka
Guido Schmutz
 
Managing Data at Scale - Microservices and Events
Managing Data at Scale - Microservices and Events
Randy Shoup
 
Three SOA Case Studies
Three SOA Case Studies
Paul Fremantle
 
Event-Driven Service-oriented Architecture (EDSOA)
Event-Driven Service-oriented Architecture (EDSOA)
Attune Infocom Pvt Ltd
 
Event Driven Architecture
Event Driven Architecture
Chris Patterson
 
Building event-driven Microservices with Kafka Ecosystem
Building event-driven Microservices with Kafka Ecosystem
Guido Schmutz
 
Event Driven Architecture at NDDNUG
Event Driven Architecture at NDDNUG
Chris Patterson
 
Ad

More from Natan Silnitsky (20)

Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Integration Ignited Redefining Event-Driven Architecture at Wix - EventCentric
Integration Ignited Redefining Event-Driven Architecture at Wix - EventCentric
Natan Silnitsky
 
Reinventing Microservices Efficiency and Innovation with Single-Runtime
Reinventing Microservices Efficiency and Innovation with Single-Runtime
Natan Silnitsky
 
Async Excellence Unlocking Scalability with Kafka - Devoxx Greece
Async Excellence Unlocking Scalability with Kafka - Devoxx Greece
Natan Silnitsky
 
Wix Single-Runtime - Conquering the multi-service challenge
Wix Single-Runtime - Conquering the multi-service challenge
Natan Silnitsky
 
WeAreDevs - Supercharge Your Developer Journey with Tiny Atomic Habits
WeAreDevs - Supercharge Your Developer Journey with Tiny Atomic Habits
Natan Silnitsky
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeCon
Natan Silnitsky
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Natan Silnitsky
 
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Natan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Natan Silnitsky
 
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx Ukraine - Kafka based Global Data Mesh
Natan Silnitsky
 
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Natan Silnitsky
 
Dev Days Europe - Kafka based Global Data Mesh at Wix
Dev Days Europe - Kafka based Global Data Mesh at Wix
Natan Silnitsky
 
Kafka Summit London - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at Wix
Natan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Natan Silnitsky
 
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
Natan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Natan Silnitsky
 
Open sourcing a successful internal project - Reversim 2021
Open sourcing a successful internal project - Reversim 2021
Natan Silnitsky
 
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
Natan Silnitsky
 
Advanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Code Motion
Natan Silnitsky
 
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Natan Silnitsky
 
Integration Ignited Redefining Event-Driven Architecture at Wix - EventCentric
Integration Ignited Redefining Event-Driven Architecture at Wix - EventCentric
Natan Silnitsky
 
Reinventing Microservices Efficiency and Innovation with Single-Runtime
Reinventing Microservices Efficiency and Innovation with Single-Runtime
Natan Silnitsky
 
Async Excellence Unlocking Scalability with Kafka - Devoxx Greece
Async Excellence Unlocking Scalability with Kafka - Devoxx Greece
Natan Silnitsky
 
Wix Single-Runtime - Conquering the multi-service challenge
Wix Single-Runtime - Conquering the multi-service challenge
Natan Silnitsky
 
WeAreDevs - Supercharge Your Developer Journey with Tiny Atomic Habits
WeAreDevs - Supercharge Your Developer Journey with Tiny Atomic Habits
Natan Silnitsky
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeCon
Natan Silnitsky
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Natan Silnitsky
 
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
Natan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Natan Silnitsky
 
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx Ukraine - Kafka based Global Data Mesh
Natan Silnitsky
 
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Natan Silnitsky
 
Dev Days Europe - Kafka based Global Data Mesh at Wix
Dev Days Europe - Kafka based Global Data Mesh at Wix
Natan Silnitsky
 
Kafka Summit London - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at Wix
Natan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Natan Silnitsky
 
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
Natan Silnitsky
 
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Migrating to Multi Cluster Managed Kafka - DevopStars 2022
Natan Silnitsky
 
Open sourcing a successful internal project - Reversim 2021
Open sourcing a successful internal project - Reversim 2021
Natan Silnitsky
 
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
How to successfully manage a ZIO fiber’s lifecycle - Functional Scala 2021
Natan Silnitsky
 
Advanced Caching Patterns used by 2000 microservices - Code Motion
Advanced Caching Patterns used by 2000 microservices - Code Motion
Natan Silnitsky
 
Ad

Recently uploaded (20)

Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Technologies
 
Building Geospatial Data Warehouse for GIS by GIS with FME
Building Geospatial Data Warehouse for GIS by GIS with FME
Safe Software
 
Key Challenges in Troubleshooting Customer On-Premise Applications
Key Challenges in Troubleshooting Customer On-Premise Applications
Tier1 app
 
Heat Treatment Process Automation in India
Heat Treatment Process Automation in India
Reckers Mechatronics
 
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
Hassan Abid
 
Canva Pro Crack Free Download 2025-FREE LATEST
Canva Pro Crack Free Download 2025-FREE LATEST
grete1122g
 
Reimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AI
Maxim Salnikov
 
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
mary rojas
 
Azure AI Foundry: The AI app and agent factory
Azure AI Foundry: The AI app and agent factory
Maxim Salnikov
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Digital Transformation: Automating the Placement of Medical Interns
Digital Transformation: Automating the Placement of Medical Interns
Safe Software
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
dheeodoo
 
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
Maharshi Mallela
 
Advance Doctor Appointment Booking App With Online Payment
Advance Doctor Appointment Booking App With Online Payment
AxisTechnolabs
 
Automated Migration of ESRI Geodatabases Using XML Control Files and FME
Automated Migration of ESRI Geodatabases Using XML Control Files and FME
Safe Software
 
Foundations of Marketo Engage - Programs, Campaigns & Beyond - June 2025
Foundations of Marketo Engage - Programs, Campaigns & Beyond - June 2025
BradBedford3
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
Decipher SEO Solutions for your startup needs.
Decipher SEO Solutions for your startup needs.
mathai2
 
A Guide to Telemedicine Software Development.pdf
A Guide to Telemedicine Software Development.pdf
Olivero Bozzelli
 
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Capability Deck 2025: Accelerating Innovation Through Intelligent Soft...
Emvigo Technologies
 
Building Geospatial Data Warehouse for GIS by GIS with FME
Building Geospatial Data Warehouse for GIS by GIS with FME
Safe Software
 
Key Challenges in Troubleshooting Customer On-Premise Applications
Key Challenges in Troubleshooting Customer On-Premise Applications
Tier1 app
 
Heat Treatment Process Automation in India
Heat Treatment Process Automation in India
Reckers Mechatronics
 
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
On-Device AI: Is It Time to Go All-In, or Do We Still Need the Cloud?
Hassan Abid
 
Canva Pro Crack Free Download 2025-FREE LATEST
Canva Pro Crack Free Download 2025-FREE LATEST
grete1122g
 
Reimagining Software Development and DevOps with Agentic AI
Reimagining Software Development and DevOps with Agentic AI
Maxim Salnikov
 
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
mary rojas
 
Azure AI Foundry: The AI app and agent factory
Azure AI Foundry: The AI app and agent factory
Maxim Salnikov
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Digital Transformation: Automating the Placement of Medical Interns
Digital Transformation: Automating the Placement of Medical Interns
Safe Software
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
dheeodoo
 
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
MOVIE RECOMMENDATION SYSTEM, UDUMULA GOPI REDDY, Y24MC13085.pptx
Maharshi Mallela
 
Advance Doctor Appointment Booking App With Online Payment
Advance Doctor Appointment Booking App With Online Payment
AxisTechnolabs
 
Automated Migration of ESRI Geodatabases Using XML Control Files and FME
Automated Migration of ESRI Geodatabases Using XML Control Files and FME
Safe Software
 
Foundations of Marketo Engage - Programs, Campaigns & Beyond - June 2025
Foundations of Marketo Engage - Programs, Campaigns & Beyond - June 2025
BradBedford3
 
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
CodeCleaner: Mitigating Data Contamination for LLM Benchmarking
arabelatso
 
Decipher SEO Solutions for your startup needs.
Decipher SEO Solutions for your startup needs.
mathai2
 
A Guide to Telemedicine Software Development.pdf
A Guide to Telemedicine Software Development.pdf
Olivero Bozzelli
 

BuildStuff - Lessons Learned from 2000 Event Driven Microservices

  • 1. Lessons Learned from 2000 event-driven microservices natansil.com twitter@NSilnitsky linkedin/natansilnitsky github.com/natansil Natan Silnitsky Backend Infra TL, Wix.com November 2022
  • 2. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky
  • 3. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Unique visitors use Wix platform every month ~1B * scale, recovery, issues
  • 4. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Unique visitors use Wix platform every month ~1B Daily HTTP Transactions ~500B Kafka messages a day ~70B * scale, recovery, issues
  • 5. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Unique visitors use Wix platform every month ~1B Daily HTTP Transactions ~500B Kafka messages a day ~70B GAs every day > 600 Microservices in production 2300 * scale, recovery, issues
  • 6. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Challenges of event-driven architecture, that we’ve bumped into 1 Producing message failures Processing out-of-order & duplicates 2 4 Troubleshooting production 3 Sending large payloads * success, tools, faster
  • 7. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky How Event-driven Architecture Works
  • 8. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Service-to-Service Communication Cart Service User Service Inventory Service Catalog Service
  • 9. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Request-Reply Communication HTTP RPC HTTP RPC HTTP RPC Cart Service User Service Inventory Service Catalog Service * issue scale
  • 10. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky slow Cart Service * slow, bottleneck, cache HTTP RPC HTTP RPC HTTP RPC
  • 11. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky unreliable Cart Service * unreliable, cascade, retr HTTP RPC HTTP RPC HTTP RPC
  • 12. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Event-driven Communication Producer Broker Product Updated Topic Event * improve, broker, scale Catalog Service Kafka
  • 13. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Broker more robust * DB, decoupling, no impact Cart Service Producer Consumer Kafka Catalog Service Product Updated Topic
  • 14. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Broker Event processing is guaranteed Producer Consumer Kafka Catalog Service Cart Service Product Updated Topic
  • 15. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky The following is based on a true story *Dates and products were changed for clarity :) * ecom simple linear
  • 16. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2016 Wix starts using event-driven We can work event-driven!!
  • 17. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky It all began when Ecom experienced data issues Data does NOT reflect actual catalog Risk: show wrong prices in cart Cart DB
  • 18. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2. Produce “Product Updated” Event Broker Cart Service 4. Show updated prices in cart 3. Update Product Price Catalog Service 1. Update status After investigating Cart DB
  • 19. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Challenge #1 Producing message failure Kafka
  • 20. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Broker Cart Service Catalog Service Make DB Update & Event Producing Atomic
  • 21. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Produce event to S3 Broker Catalog Service Resilient Producer Catch Unsent Events
  • 22. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Produce event to S3 Broker Produce to Kafka Healer Service Catalog Service Poll Resilient Producer Fallback to S3 and Heal
  • 23. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Kafka Broker Service A Service B Greyhound Producer Kafka Producer Greyhound Consumer Kafka Consumer Wrap Kafka with Greyhound* * Open source: https://github.com/wix/greyhound
  • 24. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky ➔ Resilient Producer ➔ Parallel Consumption ➔ Batch Consumer ➔ Consumer Retry Strategies ➔ Context Propagation ➔ Metrics reporting Developer Self-Service: Wrap Kafka with Greyhound* * Open source: https://github.com/wix/greyhound
  • 25. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2016 Wix starts using event-driven 2018 Greyhound Resilient producer & Consumer retries
  • 26. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Produce event to S3 Broker Produce to Kafka Healer Service Catalog Service Poll Resilient Producer Fallback to S3 and Heal
  • 27. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Broker Catalog Service Healer Service Remove Discount Introduce Discount Then ‘out-of-order’ happened Cart Service
  • 28. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Challenge #2 Out-of-order & duplicates processing Kafka
  • 29. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Catalog Service Broker Healer Service Introduce Discount Mitigating out-of-order with revision ID # 10 # 9 Cart Service
  • 30. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Catalog Service Broker Healer Service Remove Discount Introduce Discount Mitigating out-of-order with revision ID # 11 # 10 # 9 Cart Service * item itself
  • 31. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Scan the binlog. For each entry produce a ‘status update’ event Cart Service Broker Catalog Service Mitigating out-of-order with Debezium connector
  • 32. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky More Ecom data issues Data does NOT reflect actual inventory Risk: lose potential customers Inventory DB
  • 33. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Item 2 Item 1 Broker Payments Service Investigation leads to duplicate processing Payment for: Inventory Service Retry Item 2 5 → 3 Item 1 9 → 7 * not idempotent
  • 34. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Item 2 5 → 4 Item 1 9 → 8 Item 2 Item 1 Payment for: Broker txnId - a7g45 Mitigating duplicates with Transaction ID Payments Service Inventory Service txnId - a7g45 txnId - a7g45
  • 35. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2016 Wix starts using event-driven 2018 Greyhound Resilient producer & Consumer retries 2019 Revisions & Transaction IDs
  • 36. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Broker Product Catalog Service Product Update event Cart Service “Dude, I can’t produce large payloads” ... "description": "An apple mobile which is nothing like apple", ...
  • 37. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky * 1MB Challenge #3 Failure to send large payloads Broker ... "description": "An apple mobile which is nothing like apple", ...
  • 38. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Large Payloads Remedy I Compression → Try several compression types (lz4, snappy, etc.) → Compression on Kafka level is usually better than application level, as payloads can be compressed in batches
  • 39. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Large Payloads Remedy II Chunking Broker 1. Split to chunks & produce 2. Consume & reassemble Product Catalog Service Cart Service
  • 40. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Large Payloads Remedy III Reference to Object Store 2. Produce with S3 URL 3. Consume & download from S3 1. Upload to S3 Product Catalog Service Cart Service Broker
  • 41. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2016 Wix starts using event-driven 2018 Greyhound Resilient producer & Consumer retries 2019 We use IDs for ooo & duplicates 2020 Added compression by default
  • 42. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky * bottlenecks Challenge #4 It’s hard for developers to debug and maintain event-driven microservices at scale in production
  • 44. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Stream events with various filters
  • 45. How do I investigate this lag? Our team
  • 46. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Investigate consumer lag per partition
  • 47. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky View a “stuck” event in some partition
  • 48. How come this side-effect didn’t happen? Our team
  • 49. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Orders Service Propagate the Context Broker Payments Topic Orders Topic Inventory Topic requestId userId Event Header 1. Greyhound produce * monitoring infra
  • 50. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2. Greyhound consume Propagate the Context Payments Service Broker Payments Topic Orders Topic Inventory Topic 3. produce
  • 51. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 4. Greyhound consume Propagate the Context Inventory Service Broker Payments Topic Orders Topic Inventory Topic
  • 52. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky So developers can track events’ route
  • 53. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky View event details
  • 54. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky 2016 Wix starts using event-driven 2018 We open source Greyhound 2019 We use IDs for ooo & duplicates 2020 Added compression by default 2021-22 Tools in Production
  • 55. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Wix developers have embraced event-driven architecture.
  • 56. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Meeting these challenges made our microservices more decoupled, resilient and scalable, while keeping complexity low and data consistent.
  • 57. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky The Blog Post https://medium.com/wix-engineerin g/event-driven-architecture-5-pitfalls-t o-avoid-b3ebf885bdb1
  • 58. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky How to migrate 2000 microservices to Multi Cluster Managed Kafka with 0 Downtime The Next Step https://www.youtube.com/watch?v= XKbG8a-9NRE
  • 59. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Greyhound github.com/wix/greyhound
  • 60. Lessons Learned from 2000 Event-driven Microservices @NSilnitsky Tomorrow Create Tiny Habits to Become a Better Developer
  • 61. Thank You! natansil.com twitter@NSilnitsky linkedin/natansilnitsky github.com/natansil 👉 slideshare.net/NatanSilnitsky Any questions?