SlideShare a Scribd company logo
natansil.com twitter@NSilnitsky linkedin/natansilnitsky github.com/natansil
Battle-tested event-driven patterns for
your microservices architecture
Natan Silnitsky
Backend Infra Developer, Wix.com
>200M registered users (website builders) from 190 countries
5% of all Internet websites run on Wix
2,000 Microservices
1.5B Kafka messages produced / Day
@NSilnitsky
At Wix
* Event driven uses cases
Agenda
Event-driven microservices
Event-driven patterns:
• Consume and Project
• Event-driven from end to end
• 0-latency KV Store
• Events in Transactions
* Monolithic
@NSilnitsky
Microservices
The Monolith
@NSilnitsky * Separately
Monolith to Distributed Microservices System
Microservices
@NSilnitsky
Microservices
Decoupled Microservices
Mutable
Contention
Choice
@NSilnitsky
Microservices
Data Encapsulation
* flexibility, schema
What about microservices
communication?
@NSilnitsky
Request-reply
communication
Microservices Communication
Checkout
Service
User
Service
Inventory
Service
Payments
Service
* ecom example
@NSilnitsky
Request-reply
communication
Microservices Communication
Request-Reply Model
HTTP
RPC
HTTP RPC
HTTP RPC
Checkout
Service
Payments
Service
Inventory
Service
User
Service
@NSilnitsky
Request-reply
communication
* 1 by 1- slow
Microservices Communication
Request-Reply Model
Checkout
Service
@NSilnitsky
Request-reply
communication
Microservices Communication
Request-Reply Model
Checkout
Service
Inventory
Service
Broker
@NSilnitsky * Reliability
Event-driven
communications
Introduce a message broker in between services
Message
Consumer
Message
Producer
@NSilnitsky * Not ineteract directly
Order created
Event-driven
communications
Introduce a message broker in between services
Event-driven model
Message
Consumer
Flow control is moved from the sender
Broker
Message
Producer
@NSilnitsky
Order created
Event-driven
communications
Introduce a message broker in between services
Event-driven model
Message
Consumer
Flow control is moved from the sender
to the receiver.
Broker
Message
Producer
* more robust
Kafka Broker
Topic
Partition
Partition
Partition
@NSilnitsky * Linear scaling
Introduce a message broker in between services
Distributed log broker
Event-driven
communications
Message
Consumer
Message
Producer
@NSilnitsky
Append-only log
Introduce a message broker in between services
Distributed log broker
Event-driven
communications
Kafka Broker
Topic
Partition
Message
Consumer
Message
Producer
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
Order Created Topic
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
@NSilnitsky
* Data retained,
Immutable
Introduce a message broker in between services
Distributed log broker
Event-driven
communications
Message
Consumer
Message
Producer
Kafka Broker
@NSilnitsky * eventually consumed
Distributed log broker eventually consume
Event-driven
communications
Order Created Topic
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
Message
Consumer
Message
Producer
Kafka Broker
Checkout
Service
Event-driven
communications
Microservices communication & data
Event driven model
User
Service
Inventory
Service
Cart
Service
Payments
Service
@NSilnitsky
Checkout
Service
Cart
Service
Inventory
Service
Payments
Service
User
Service
Event-driven
communications
Microservices communication & data
Event driven model
Kafka Broker
Orders
Partition
Partition
Partition
Users
Partition
Partition
Partition
Cart
Partition
Partition
Partition
Inventory
Partition
Partition
Partition
Agenda
Event-driven microservices
Event-driven patterns:
• Consume and Project
• Event-driven from end to end
• 0-latency KV Store
• Events in Transactions
* used daily. blog
Consume
and Project
01
MetaSite
RPC
Wix
Stores
Wix
Bookings
Wix
Restaurants
RPC
RPC
@NSilnitsky
Consume and
Project
For Popular Services
MetaSite
RPC
Wix
Stores
Wix
Bookings
Wix
Restaurants
RPC
RPC
@NSilnitsky
Consume and
Project
Site installed Apps?
Site version?
Site owner?
MetaSite
RPC
Wix
Stores
Wix
Bookings
Wix
Restaurants
RPC
RPC
@NSilnitsky
Consume and
Project
Request
overload
Site installed Apps?
Site version?
Site owner?
(~1M RPM requests)
Read +
Writes
Large
MetaSite
Object
Request
overload
MetaSite
RPC
Wix
Stores
Wix
Bookings
Wix
Restaurants
RPC
RPC
@NSilnitsky
Consume and
Project
Site installed Apps?
Site version?
Site owner?
Read +
Writes
Large
MetaSite
Object
(~1M RPM requests)
Kafka Broker
Produce
to Kafka
Producer
MetaSite
Site
Updated!
Consume and
Project
Entire MetaSite
Context
Kafka Broker
Filter
Site installed
Apps Updated!
Installed Apps
Context
Produce
to Kafka
Consume
and Project
MetaSite
Consumer
Reverse
lookup
writer
Consume and
Project
Producer
Kafka Broker
Installed Apps
Context
Produce
to Kafka
Consume
and Project
MetaSite
Reverse
lookup
writer
Reverse
lookup
reader
RPC
RPC
RPC
Split Read
from Write
Consume and
Project
Producer Consumer
Consume and Project
— Produce instead of serve - massive load reduction
— Project - client-query-optimized “Materialized View”
— Read/write split - only scale read-only DB. more resilient
Event-driven
from end to end
02
Kafka Broker
Consumer
Browser
Producer
Contacts
Importer
Service
Contacts
Jobs
Service
Web
Sockets
Service
@NSilnitsky
Event-driven
from end to end
Use case:
Long-running async business process
Subscribe for notifications
Consumer
Producer
Browser
@NSilnitsky
Event-driven
from end to end
Use case:
Long-running async business process
Kafka Broker
Web
Sockets
Service
Import CSVs
Consumer
Producer
Browser
@NSilnitsky
Event-driven
from end to end
Use case:
Long-running async business process
Kafka Broker
Web
Sockets
Service
Web
Sockets
Service
Consumer
* Distributed
Producer
Browser
done!
Event-driven
from end to end
Use case:
Long-running async business process
Kafka Broker
Web
Sockets
Service
Consumer
* Distributed
Producer
Browser
Cross DC!
Event-driven
from end to end
Use case:
Long-running async business process
Kafka Broker
done!
Event-Driven from End to End
— No polling - notify the user on any status change
— Scalable - spin up many import job workers
— Replication - cross-DC requests are easy to set up
0-latency
KV Store
03
Kafka Broker
Configuration Topic
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
5
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
K1
V1
K2
V1
K1
V2
K3
V1
K4
V1
K5
V1
@NSilnitsky
Producer
Key - value
Consumer
0-latency
KV Store
Compacted Kafka
Topics
Kafka Broker
Consumer
KVStoreReader
In-Memory Map
Compacted Topic
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
K1
V1
K2
V1
K1
V2
K3
V1
K4
V1
K5
V1
Key Value
K1 V1
K2 V1
* Startup
0-latency
KV Store
@NSilnitsky
Compacted Kafka
Topics
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5
K1
V1
K2
V1
K1
V2
K3
V1
K4
V1
K5
V1
@NSilnitsky
0-latency
KV Store
Kafka Broker
Consumer
KVStoreReader
In-Memory Map
Key Value
K1 V1 -> V2
K2 V1
K3 V1
Compacted Kafka
Topics
* Finished
Compacted Topic
Consumer
Consumer
Bookings
Business
Manager
KVStoreReader
Time Zones
Key Value
Albania UTC+1
Algeria UTC+1
Andorra UTC+1
Time Zones
KVStoreReader
Countries
Key Value
Albania .al
Algeria .dz
Andorra .ad
Countries
@NSilnitsky
0-latency
KV Store
Kafka Broker
Producer
Kafka Broker
Consumer
Bookings
Business
Manager
KVStoreReader
Countries
Countries
*New*
South Sudan
KVStoreWriter
Countries
@NSilnitsky
0-latency
KV Store
* Writer producer
Kafka Broker
Producer
Bookings
KVStoreWriter
Time Zones
Time Zones
Consumer
KVStoreReader
Time Zones
Key Value
Albania UTC+1
...
South Sudan UTC+3
*New*
Time Zone for
South Sudan
*New* Country
South Sudan
@NSilnitsky
0-latency
KV Store
Kafka Broker
Producer
Bookings
KVStoreWriter
Time Zones
Time Zones
Consumer
KVStoreReader
Time Zones
Key Value
Albania UTC+2
Algeria UTC+1
Andorra UTC+1 *New*
Time Zone for
Albania
Consumer
Events
KVStoreReader
Time Zones
DST in-effect for
Albania
@NSilnitsky
0-latency
KV Store
0-latency KV Store
— Loading the compacted topic to memory –
a 0-latency kv store for dynamic configuration
— Compacted topic is still a topic –
other services can consume its update events
— Small Datasets - for large datasets, the topic should be
streamed to a disk-based DB + In-memory Cache
Events in
Transactions
04 * idempotent
Payment
Completed
Payments
Kafka Broker
Producer
Events in
Transactions
Classic Ecommerce Flow
Payments Checkout
Kafka Broker
Producer Consumer Producer
Order (Items)
Completed
Events in
Transactions
Classic Ecommerce Flow
Payment
Completed
Payments Checkout
Inventory
Kafka Broker
Producer Consumer Producer Consumer
Delivery
Consumer
Consumer
Invoices
Events in
Transactions
Classic Ecommerce Flow
Producer Consumer Producer Consumer
Consumer
Consumer Completed
Orders
Events in
Transactions
Kafka Broker
Classic Ecommerce Flow
Producer
Events in
Transactions
Kafka Broker
Enable.idempotence = true
Attaches offset to
message
Classic Ecommerce Flow
Idempotent
Producer
Events in
Transactions
Kafka Broker
Classic Ecommerce Flow
Events in
Transactions
Kafka Broker
Producer
0 1 2 3 4 5
0 1
duplicate!
1
Payments
Idempotent
Producer
Transaction Scope
Consumer Producer Consumer
Consumer
Consumer
Producer
Events in
Transactions
Kafka Broker
Events in Transactions
— Events transactions are quite complex –
More boilerplate, performance tuning via transaction size.
— DB updates/3rd party calls are not covered –
You can dedup by using Kafka record offset as version
— Don’t turn on transactions by default -
Use in critical flows like payments processing
Battle-tested event-driven patterns for your microservices architecture - Scalac conference
Wix developers have employed these
event-driven patterns to make their
microservices more decoupled,
resilient and scalable.
A Scala/Java high-level SDK for Apache Kafka.
0.2 is out!
github.com/wix/greyhound
Thank You
natansil.com twitter@NSilnitsky linkedin/natansilnitsky github.com/natansil
Resources
6 Event Driven Architecture Patterns - Part 1 & Part 2 - by Natan Silnitsky
The Data Dichotomy: Rethinking the Way We Treat Data and Services -
by Ben Stopford
Shared Database - by Chris Richardson
Exactly once delivery - DevOpsDay TLV 2019 - By Natan Silnitsky
@NSilnitsky
Slides & More
slideshare.net/NatanSilnitsky
medium.com/@natansil
twitter.com/NSilnitsky
natansil.com

More Related Content

PDF
Building Event-Driven Services with Apache Kafka
PDF
Real time data processing and model inferncing platform with Kafka streams (N...
PDF
MongoDB .local London 2019: Streaming Data on the Shoulders of Giants
PDF
APAC Kafka Summit - Best Of
PDF
How to build 1000 microservices with Kafka and thrive
PDF
New Features in Confluent Platform 6.0 / Apache Kafka 2.6
PPTX
Apache Kafka at LinkedIn - How LinkedIn Customizes Kafka to Work at the Trill...
PDF
Making Kafka Cloud Native | Jay Kreps, Co-Founder & CEO, Confluent
Building Event-Driven Services with Apache Kafka
Real time data processing and model inferncing platform with Kafka streams (N...
MongoDB .local London 2019: Streaming Data on the Shoulders of Giants
APAC Kafka Summit - Best Of
How to build 1000 microservices with Kafka and thrive
New Features in Confluent Platform 6.0 / Apache Kafka 2.6
Apache Kafka at LinkedIn - How LinkedIn Customizes Kafka to Work at the Trill...
Making Kafka Cloud Native | Jay Kreps, Co-Founder & CEO, Confluent

What's hot (20)

PDF
Battle Tested Event-Driven Patterns for your Microservices Architecture - Dev...
PDF
Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
PDF
Evolving from Messaging to Event Streaming
PDF
Concepts and Patterns for Streaming Services with Kafka
PDF
Kafka summit apac session
PDF
Introducing Change Data Capture with Debezium
PDF
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
PDF
Stream processing for the masses with beam, python and flink
PDF
8 Lessons Learned from Using Kafka in 1000 Scala microservices - Scale by the...
PDF
Self-service Events & Decentralised Governance with AsyncAPI: A Real World Ex...
PDF
Introduction to Stream Processing with Apache Flink (2019-11-02 Bengaluru Mee...
PDF
Events Everywhere: Enabling Digital Transformation in the Public Sector
PPTX
A guide through the Azure Messaging services - Update Conference
PDF
Removing performance bottlenecks with Kafka Monitoring and topic configuration
PPTX
Real time analytics in Azure IoT
PDF
Event Driven Architectures with Apache Kafka on Heroku
PPTX
New Approaches for Fraud Detection on Apache Kafka and KSQL
PDF
Why Cloud-Native Kafka Matters: 4 Reasons to Stop Managing it Yourself
PDF
Death of the dumb pipes: Using Apache Kafka® for Integration projects
PDF
Redis and Kafka - Advanced Microservices Design Patterns Simplified
Battle Tested Event-Driven Patterns for your Microservices Architecture - Dev...
Building Event-Driven Microservices using Kafka Streams (Stathis Souris, Thou...
Evolving from Messaging to Event Streaming
Concepts and Patterns for Streaming Services with Kafka
Kafka summit apac session
Introducing Change Data Capture with Debezium
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
Stream processing for the masses with beam, python and flink
8 Lessons Learned from Using Kafka in 1000 Scala microservices - Scale by the...
Self-service Events & Decentralised Governance with AsyncAPI: A Real World Ex...
Introduction to Stream Processing with Apache Flink (2019-11-02 Bengaluru Mee...
Events Everywhere: Enabling Digital Transformation in the Public Sector
A guide through the Azure Messaging services - Update Conference
Removing performance bottlenecks with Kafka Monitoring and topic configuration
Real time analytics in Azure IoT
Event Driven Architectures with Apache Kafka on Heroku
New Approaches for Fraud Detection on Apache Kafka and KSQL
Why Cloud-Native Kafka Matters: 4 Reasons to Stop Managing it Yourself
Death of the dumb pipes: Using Apache Kafka® for Integration projects
Redis and Kafka - Advanced Microservices Design Patterns Simplified
Ad

Similar to Battle-tested event-driven patterns for your microservices architecture - Scalac conference (20)

PDF
Battle-tested event-driven patterns for your microservices architecture - Sca...
PDF
Battle Tested Event-Driven Patterns for your Microservices Architecture - Ris...
PDF
Battle Tested Event-Driven Patterns for your Microservices Architecture
PDF
Polyglot, fault-tolerant event-driven programming with kafka, kubernetes and ...
PDF
Polyglot, fault-tolerant event-driven programming with kafka, kubernetes and ...
PPTX
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
PDF
Polyglot, Fault Tolerant Event-Driven Programming with Kafka, Kubernetes and ...
PDF
Colt Network On Demand
PDF
Event Streaming CTO Roundtable for Cloud-native Kafka Architectures
PDF
Set Your Data In Motion - CTO Roundtable
PDF
Advanced Caching Patterns used by 2000 microservices - Code Motion
PDF
Modern Cloud-Native Streaming Platforms: Event Streaming Microservices with K...
PDF
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
PDF
Building event-driven (Micro)Services with Apache Kafka Ecosystem
PDF
Open Standards Enabling Digital Transformation
PDF
Managing and Implementing Network Function Virtualization with Intelligent OSS
PPTX
Kafka and event driven architecture -og yatra20
PPTX
Kafka and event driven architecture -apacoug20
PPTX
kurento-nubomedia-first-steps-v1
PPTX
SingleStore & Kafka: Better Together to Power Modern Real-Time Data Architect...
Battle-tested event-driven patterns for your microservices architecture - Sca...
Battle Tested Event-Driven Patterns for your Microservices Architecture - Ris...
Battle Tested Event-Driven Patterns for your Microservices Architecture
Polyglot, fault-tolerant event-driven programming with kafka, kubernetes and ...
Polyglot, fault-tolerant event-driven programming with kafka, kubernetes and ...
Nubomedia: the cloud infrastructure for WebRTC and IMS multimedia real-time c...
Polyglot, Fault Tolerant Event-Driven Programming with Kafka, Kubernetes and ...
Colt Network On Demand
Event Streaming CTO Roundtable for Cloud-native Kafka Architectures
Set Your Data In Motion - CTO Roundtable
Advanced Caching Patterns used by 2000 microservices - Code Motion
Modern Cloud-Native Streaming Platforms: Event Streaming Microservices with K...
BuildStuff - Lessons Learned from 2000 Event Driven Microservices
Building event-driven (Micro)Services with Apache Kafka Ecosystem
Open Standards Enabling Digital Transformation
Managing and Implementing Network Function Virtualization with Intelligent OSS
Kafka and event driven architecture -og yatra20
Kafka and event driven architecture -apacoug20
kurento-nubomedia-first-steps-v1
SingleStore & Kafka: Better Together to Power Modern Real-Time Data Architect...
Ad

More from Natan Silnitsky (20)

PDF
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
PDF
Integration Ignited Redefining Event-Driven Architecture at Wix - EventCentric
PDF
Reinventing Microservices Efficiency and Innovation with Single-Runtime
PDF
Async Excellence Unlocking Scalability with Kafka - Devoxx Greece
PDF
Wix Single-Runtime - Conquering the multi-service challenge
PDF
WeAreDevs - Supercharge Your Developer Journey with Tiny Atomic Habits
PDF
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
PDF
Effective Strategies for Wix's Scaling challenges - GeeCon
PDF
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
PDF
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
PDF
DevSum - Lessons Learned from 2000 microservices
PDF
GeeCon - Lessons Learned from 2000 microservices
PDF
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
PDF
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
PDF
Lessons Learned from 2000 Event Driven Microservices - Reversim
PDF
Devoxx Ukraine - Kafka based Global Data Mesh
PDF
Devoxx UK - Migrating to Multi Cluster Managed Kafka
PDF
Dev Days Europe - Kafka based Global Data Mesh at Wix
PDF
Kafka Summit London - Kafka based Global Data Mesh at Wix
PDF
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative
Async-ronizing Success at Wix - Patterns for Seamless Microservices - Devoxx ...
Integration Ignited Redefining Event-Driven Architecture at Wix - EventCentric
Reinventing Microservices Efficiency and Innovation with Single-Runtime
Async Excellence Unlocking Scalability with Kafka - Devoxx Greece
Wix Single-Runtime - Conquering the multi-service challenge
WeAreDevs - Supercharge Your Developer Journey with Tiny Atomic Habits
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Effective Strategies for Wix's Scaling challenges - GeeCon
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Workflow Engines & Event Streaming Brokers - Can they work together? [Current...
DevSum - Lessons Learned from 2000 microservices
GeeCon - Lessons Learned from 2000 microservices
Migrating to Multi Cluster Managed Kafka - ApacheKafkaIL
Wix+Confluent Meetup - Lessons Learned from 2000 Event Driven Microservices
Lessons Learned from 2000 Event Driven Microservices - Reversim
Devoxx Ukraine - Kafka based Global Data Mesh
Devoxx UK - Migrating to Multi Cluster Managed Kafka
Dev Days Europe - Kafka based Global Data Mesh at Wix
Kafka Summit London - Kafka based Global Data Mesh at Wix
Migrating to Multi Cluster Managed Kafka - Conf42 - CloudNative

Recently uploaded (20)

PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
cuic standard and advanced reporting.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Encapsulation theory and applications.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Approach and Philosophy of On baking technology
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Network Security Unit 5.pdf for BCA BBA.
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
cuic standard and advanced reporting.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Spectral efficient network and resource selection model in 5G networks
Encapsulation theory and applications.pdf
NewMind AI Monthly Chronicles - July 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Approach and Philosophy of On baking technology
“AI and Expert System Decision Support & Business Intelligence Systems”
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Diabetes mellitus diagnosis method based random forest with bat algorithm
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Battle-tested event-driven patterns for your microservices architecture - Scalac conference