lighning talk: event-driven architecture for microservices
TRANSCRIPT
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ABOUT ME
▸ Located in Riga, Latvia
▸ martinssipenko
▸ Lead engineer @ KASKO, a fintech startup (insurance)
▸ Worked with PHP since around 2002
▸ AWS Certified
▸ Student at University of Latvia
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
WHY MICROSERVICES?
▸ Single responsibility services based on business logic
▸ Different technology for each service(PHP, Golang, Node.js, AWS Lambda)
▸ Allows to scale individual service
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
▸ Customer places an order
▸ Then we need to generate a PDF invoice document
ORDER SERVICE
PDFSERVICE
THE EXAMPLE
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
▸ Customer places an order
▸ Then we need to generate a PDF invoice document
▸ PDF needs to be stored
ORDER SERVICE
PDFSERVICE
THE EXAMPLE
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
▸ Customer places an order
▸ Then we need to generate a PDF invoice document
▸ PDF needs to be stored
▸ Order needs to be updated with a link to PDF document
ORDER SERVICE
PDFSERVICE
THE EXAMPLE
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
INITIAL APPROACH
▸ Order service makes HTTP call to PDF service
▸ PDF is generated and stored asynchronously
▸ PDF service makes an HTTP call to update Order
ORDER SERVICE
PDFSERVICE
POST POST
PATCH
POST
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
THE PROBLEM
▸ Services have to be aware of each other
▸ PDF Service must know how to update an Order
ORDER SERVICE
PDFSERVICE
POST POST POST
PATCH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
THE PROBLEM
▸ Services have to be aware of each other
▸ PDF Service must know how to update an Order
▸ What if we throw in more services?
ORDER SERVICE
PDFSERVICE
POST POST POST
PATCH
EMAIL SERVICE Send PDF to customer
CUSTOMER SERVICE
GET
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
▸ Turn things the other way around
▸ But how will PDF service know when order was placed?
ORDER SERVICE
PDFSERVICE
POST POST?
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
▸ All services send notifications to a central BUS
▸ There is one notification queue per service
▸ Each services queue is subscribed to BUS
▸ Each service runs a background worker that listens to respective event queue
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
Order created
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
Order created
Order created
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
Order created
Order created
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
Order created
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
Order created
Order created
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
Ignore
Store
Ignore Ignore
Order created
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
Order created
Order created
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
Ignore
Store
Ignore Ignore
Order created
PDF Generated
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
PDF Generated
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
PDF Generated
PDF Generated
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
PDF Generated
PDF Generated
Ignore IgnoreUpdate reference Email PDF
THE SECOND APPROACH
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
THE SECOND APPROACH
ORDER SERVICE
API
POST
EMAIL SERVICE QUEUE
CUSTOMER SERVICE
API
ORDER SERVICE QUEUE
CUSTOMER SERVICE QUEUE
PDF SERVICE QUEUE
CENTRAL MESSAGE BUS
EMAIL SERVICE WORKER
ORDER SERVICE WORKER
CUSTOMER SERVICE WORKER
PDF SERVICE WORKER
PDF Generated
PDF Generated
Ignore IgnoreUpdate reference Email PDF
Order updatedEmail sent
EVENT DRIVEN ARCHITECTURE FOR MICROSERVICES
THE BENEFITS
▸ If error raises on service, the message remains in queue
▸ It will be picked up later
▸ Services don't need to know about how to make updates to other services
▸ Adding more services is easy
▸ Scales well