SlideShare a Scribd company logo
@crichardson
Developing Microservices
with Aggregates
Chris Richardson
Founder of Eventuate.io
Founder of the original CloudFoundry.com
Author of POJOs in Action
@crichardson
chris@chrisrichardson.net
http://eventuate.io
@crichardson
Presentation goal
Show how
Domain Driven Design Aggregates
and Microservices
are a perfect match
@crichardson
About Chris
@crichardson
About Chris
Consultant and trainer
focusing on modern
application architectures
including microservices
(http://www.chrisrichardson.net/)
@crichardson
About Chris
Founder of a startup that is creating
an open-source/SaaS platform
that simplifies the development of
transactional microservices
(http://eventuate.io)
@crichardson
For more information
http://learnmicroservices.io
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Customers and Orders example
Using explicit saga orchestration
@crichardson
The Microservice architecture
tackles complexity through
modularization
@crichardson
Microservice
=
Business capability
@crichardson
Microservice architecture
Browser
Mobile
Device
Store
Front UI
API
Gateway
Catalog
Service
Review
Service
Order
Service
…
Service
Catalog
Database
Review
Database
Order
Database
…
Database
HTML
REST
REST
Database per service
@crichardson
But there are challenges…
@crichardson
Product service
Customer serviceOrder service
Domain model = tangled web of
classes
Order
OrderLine
Item
quantity
…
Address
street
city
…
Customer
Product
name
price
?
?
creditLimit
@crichardson
Reliance on ACID transactions
to enforce invariants
BEGIN TRANSACTION
…
SELECT ORDER_TOTAL
FROM ORDERS WHERE CUSTOMER_ID = ?
…
SELECT CREDIT_LIMIT
FROM CUSTOMERS WHERE CUSTOMER_ID = ?
…
INSERT INTO ORDERS …
…
COMMIT TRANSACTION
Simple and
ACID
@crichardson
But it violates encapsulation…
BEGIN TRANSACTION
…
SELECT ORDER_TOTAL
FROM ORDERS WHERE CUSTOMER_ID = ?
…
SELECT CREDIT_LIMIT
FROM CUSTOMERS WHERE CUSTOMER_ID = ?
…
INSERT INTO ORDERS …
…
COMMIT TRANSACTION
Private to the
Order Service
Private to the
Customer Service
@crichardson
.. and requires 2PC
BEGIN TRANSACTION
…
SELECT ORDER_TOTAL
FROM ORDERS WHERE CUSTOMER_ID = ?
…
SELECT CREDIT_LIMIT
FROM CUSTOMERS WHERE CUSTOMER_ID = ?
…
INSERT INTO ORDERS …
…
COMMIT TRANSACTION
@crichardson
2PC is not an option
Guarantees consistency
BUT
2PC coordinator is a single point of failure
Chatty: at least O(4n) messages, with retries O(n^2)
Reduced throughput due to locks
Not supported by many NoSQL databases (or message brokers)
CAP theorem 2PC impacts availability
….
@crichardson
Doesn’t fit with the
NoSQL DB “transaction” model
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Customers and Orders example
Using explicit saga orchestration
@crichardson
Domain Driven Design -
building blocks
Entity
Value object
Services
Repositories
Aggregates
Adopted
Ignored
(at least by me)
About Aggregates
Cluster of objects that can
be treated as a unit
Graph consisting of a root
entity and one or more
other entities and value
objects
Typically business entities
are Aggregates, e.g.
customer, Account, Order,
Product, ….
Order
OrderLine
Item
quantity
productId
productName
productPrice
customerId
Address
street
city
…
Aggregate: rule #1
Reference other
aggregate roots via
identity
(primary key)
Order
OrderLine
Item
quantity
productId
productName
productPrice
customerId
Address
street
city
…
@crichardson
Foreign keys in a
Domain Model?!?
@crichardson
Domain model = collection of
loosely connected aggregates
Order
OrderLine
Item
quantity
…
Address
street
city
…
Customer
Product
name
price
@crichardson
Product service
Customer serviceOrder service
Easily partition into microservices
Order
OrderLine
Item
quantity
…
Address
street
city
…
Customer
Product
name
price
@crichardson
Aggregate rule #2
Transaction
=
processing one command by
one aggregate
@crichardson
Product service
Customer serviceOrder service
Transaction scope = service
Order
OrderLine
Item
quantity
…
Address
street
city
…
Customer
Product
name
price
@crichardson
Transaction scope
=
NoSQL database
“transaction”
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Customers and Orders example
Using explicit saga orchestration
@crichardson
Customer management
How to maintain data consistency
between aggregates?
Order management
Order Service
placeOrder()
Customer Service
updateCreditLimit()
Customer
creditLimit
...
has ordersbelongs toOrder
total
Invariant:
sum(open order.total) <= customer.creditLimit
?
@crichardson
Saga
Using event-driven Sagas instead of
2PC
Distributed transaction
Order Customer
Local transaction
Order
Local transaction
Customer
Local transaction
Order
Event
Event
@crichardson
Order Service
Saga-based, eventually consistent
order processing
Customer Service
Order created
Credit Reserved
Credit Check Failed
Create Order
OR Customer
creditLimit
creditReservations
...
Order
state
total
…
approve()/reject()
Event Handler
Event Handler
reserveCredit()
@crichardson
Order Service
Order
id : 4567
total: 343
state = CREATED
Customer Service
Customer
creditLimit : 12000
creditReservations: {}
Customer
creditLimit : 12000
creditReservations: { 4567 -> 343}
Order
id : 4567
total: 343
state = APPROVED
Eventually consistent credit checking
Message Bus
createOrder()
Publishes:
Subscribes to:
Subscribes to:
publishes:
OrderCreatedEvent
CreditReservedEvent
OrderCreatedEvent CreditReservedEvent
@crichardson
Complexity of compensating
transactions
ACID transactions can simply rollback
BUT
Developer must write application logic to “rollback” eventually
consistent transactions
For example:
CreditCheckFailed => cancel Order
Money transfer destination account closed => credit source account
Careful design required!
@crichardson
How atomically update
database and publish an event
Order Service
Order
Database
Message Broker
insert Order
publish
OrderCreatedEvent
dual write problem
?
@crichardson
Failure = inconsistent system
Order Service
Order
Database
Message Broker
insert Order
publish
OrderCreatedEvent
X
@crichardson
2PC is not an option
@crichardson
Reliably publish events when
state changes
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Customers and Orders example
Using explicit saga orchestration
@crichardson
Event sourcing = event-centric
persistence
Application
Database
Event store
update
publish
X
@crichardson
Event sourcing
For each DDD aggregate:
Identify (state changing) domain events
e.g. use Event Storming
Define Event classes
For example, Order events: OrderCreated, OrderCancelled,
OrderApproved, OrderRejected, OrderShipped
@crichardson
Persists events
NOT current state
Order
status
….
101 ACCEPTED
Order table
X
@crichardson
Event-centric schema
@crichardson
Persists events
NOT current state
Event table
Entity type
Event
id
Entity
id
Event
data
Order 902101 …OrderApproved
Order 903101 …OrderShipped
Event
type
Order 901101 …OrderCreated
@crichardson
Replay events to recreate
state
Order
state
OrderCreated(…)
OrderAccepted(…)
OrderShipped(…)
Events
Periodically snapshot to avoid loading all events
@crichardson
The present is a fold over
history
currentState = foldl(applyEvent, initialState, events)
@crichardson
Event Store
Application architecture
Order 123 Customer 456
OrderCreated
OrderApproved
…
CustomerCreated
CustomerCreditReserved
…
CreateOrder
UpdateOrder
GetOrder
Subscribe
Order
Service
CreateCustomer
UpdateCustomer
GetCustomer
Subscribe
Customer
Service
@crichardson
Request handling in an event sourced application
HTTP
Handler
Event
Store
pastEvents = findEvents(orderId)
Order
new()
applyEvents(pastEvents)
newEvents = processCmd(someCmd)
saveEvents(newEvents) (optimistic locking)
Order Service
applyEvents(newEvents)
@crichardson
Event Store publishes events
consumed by other services
Event
Store
Event
Subscriber
subscribe(EventTypes)
publish(event)
publish(event)
Customer
update()
Customer Service
@crichardson
Event Store publishes events
consumed by other services
Event
Store
Event
Subscriber
subscribe(EventTypes)
publish(event)
publish(event)
CQRS View
update()
Service Xyz
send notifications
…
Event store = database + message
broker
Home grown/DIY
.NET geteventstore.com
https://
www.lightbend.com/
lagom
http://eventuate.io (mine)
…
Event Store
Save
aggregate
events
Get
aggregate
events
Subscribe
to events
@crichardson
Benefits of event sourcing
Solves data consistency issues in a Microservice/NoSQL based
architecture
Reliable event publishing: publishes events needed by predictive
analytics etc, user notifications,…
Eliminates O/R mapping problem (mostly)
Reifies state changes:
Built in, reliable audit log
temporal queries
Preserved history More easily implement future requirements
@crichardson
Drawbacks of event
sourcing…
Requires application rewrite
Weird and unfamiliar style of programming
Events = a historical record of your bad design decisions
Must detect and ignore duplicate events
Idempotent event handlers
Track most recent event and ignore older ones
…
@crichardson
… Drawbacks of event
sourcing
Querying the event store can be challenging
Some queries might be complex/inefficient, e.g. accounts with
a balance > X
Event store might only support lookup of events by entity id
Must use Command Query Responsibility Segregation (CQRS)
to handle queries application must handle eventually
consistent data
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Customers and Orders example
Using explicit saga orchestration
@crichardson
Orders and Customers
example
Kafka
Rest API
Event Store
Event
Store
Adapter
Customer
Service
Rest API
Order Service
Customer
Aggregate
Order
Aggregate
Rest API
Order
History
Service
MongoDB
CQRS View
Event
Store
Adapter
Event
Store
Adapter
Used to notify Order
Service of invalid
customer ids!
@crichardson
Customer microservice
Customer
Service
Customer
Controller
Spring
Cloud
Stream
Kafka
Customer
Aggregate
Rest API
Customer
Event Handlers
Event
Store
Event
Store
Adapter
Order*Event
POST /customers
@crichardson
The Customer aggregate
Money creditLimit
Map<OrderId, Money> creditReservations
Customer
List<Event> process(CreateCustomerCommand cmd) { … }
List<Event> process(ReserveCreditCommand cmd) { … }
…
void apply(CustomerCreatedEvent anEvent) { … }
void apply(CreditReservedEvent anEvent) { … }
…
State
Behavior
@crichardson
Familiar concepts restructured
class Customer {
public void reserveCredit(
orderId : String,
amount : Money) {
// verify
// update state
this.xyz = …
}
public List<Event> process(
ReserveCreditCommand cmd) {
// verify
…
return singletonList(
new CreditReservedEvent(…);
)
}
public void apply(
CreditReservedEvent event) {
// update state
this.xyz = event.xyz
}
@crichardson
Customer command processing
@crichardson
Customer applying events
@crichardson
Customer Controller
@crichardson
Creating a Customer
save() concisely specifies:
1.Creates Customer aggregate
2.Processes command
3.Applies events
4.Persists events
@crichardson
Event handling in Customers
Durable subscription name
1. Load Customer aggregate
2. Processes command
3. Applies events
4. Persists events
Triggers BeanPostProcessor
Publish message to Spring Cloud
Stream (Kafka) when Customer not
found
@crichardson
Event handler in Orders
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Customers and Orders example
Using explicit saga orchestration
@crichardson
Order Service
Order Service ⬄ Customer Service: tightly
coupled, cyclic dependency 😢
Customer Service
Order created
Credit Reserved
Credit Check Failed
OR
Must subscribe to all
Order events that
affect available credit!
Order …
@crichardson
Order Service
Decouple by maintaining available
credit in OrderService
Customer Service
Available Credit Changed
Customer Created
Customer
creditLimit
availableCredit
...
Order
state
total
…
AvailableCredit
Tracker
creditLimit
availableCredit
...
Simpler 😄
Still cyclic 😢
Use an explicit saga
Saga object that orchestrates the
flow
Created in response to an initial
event, e.g. OrderCreated
A state machine
Receives events from
aggregates
Sends commands to
aggregates
Implemented as an event-sourced
aggregate
Saga
Event
Command
@crichardson
Customer
Service
Order Service
Using an OrderCreationSaga
Order
state
total
…
AvailableCredit
Tracker
creditLimit
availableCredit
...
Order
Creation
Saga
create()
create()
Reserve Credit
Credit Reserved
Approve Order
Customer
Update
Available
Credit
OrderCreated
Acyclic 😄
@crichardson
Order saga state machine
NEW
SUCCEEDED
FAILED
OrderCreatedEvent
/ reserveCredit()
CustomerCreditReservedEvent /
approveOrder()
EntityNotFoundCommandExecutionError
CustomerCreditLimitExceededEvent /
rejectOrder()
@crichardson
Saga as a singleton state
machine State + Data
(State, Data, Event)
(Commands, State’, Data’)
@crichardson
(OrderSagaState, OrderSagaData, Event)
(Commands, OrderSagaState’, OrderSagaData’)
@crichardson
OrderCreationSaga:
(state, event) (commands, state’)
@crichardson
Initial action
Starting action
Triggers saga
creation
1. Send command
2. Transition to new state
3. Create data
@crichardson
Event handler
Current state
Triggering
event
1. Send command
2. Transition to new state
@crichardson
Kafka-based command bus
Order
Saga
Credit
Tracking
Aggregate
CreditTrackingCommand Topic
OrderSagaCommandFailure Topic
Reserve Credit
CustomerNotFound
Per
aggregate
type
Per
saga type
@crichardson
Summary
Aggregates are the building blocks of microservices
Use event-driven sagas to maintain consistency between
aggregates
Event sourcing is a good way to implement a event-driven
architecture
Use explicit sagas to orchestrate transactions
@crichardson
@crichardson chris@chrisrichardson.net
http://learnmicroservices.io
Questions?

More Related Content

PDF
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
PDF
Microservices and Redis #redisconf Keynote
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
PDF
#hacksummit 2016 - event-driven microservices – Events on the outside, on the...
PDF
Developing microservices with aggregates (devnexus2017)
PDF
Events on the outside, on the inside and at the core (jfokus jfokus2016)
PDF
Microservices in Java and Scala (sfscala)
PDF
Spring Days NYC - A pattern language for microservices
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
Microservices and Redis #redisconf Keynote
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
#hacksummit 2016 - event-driven microservices – Events on the outside, on the...
Developing microservices with aggregates (devnexus2017)
Events on the outside, on the inside and at the core (jfokus jfokus2016)
Microservices in Java and Scala (sfscala)
Spring Days NYC - A pattern language for microservices

What's hot (20)

PDF
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
PDF
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
PDF
Gluecon: Using sagas to maintain data consistency in a microservice architecture
PDF
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
PDF
Microservices + Events + Docker = A Perfect Trio (dockercon)
PDF
A Pattern Language for Microservices (@futurestack)
PDF
There is no such thing as a microservice! (oracle code nyc)
PDF
NodeJS: the good parts? A skeptic’s view (jax jax2013)
PDF
#JaxLondon keynote: Developing applications with a microservice architecture
PDF
A pattern language for microservices (#gluecon #gluecon2016)
PDF
ArchSummit Shenzhen - Using sagas to maintain data consistency in a microserv...
PDF
Kong Summit 2018 - Microservices: decomposing applications for testability an...
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (Ha...
PDF
Developing event-driven microservices with event sourcing and CQRS (london Ja...
PDF
A Pattern Language for Microservices
PDF
A pattern language for microservices (melbourne)
PDF
Mucon: Not Just Events: Developing Asynchronous Microservices
PDF
Developing functional domain models with event sourcing (sbtb, sbtb2015)
PDF
Events to the rescue: solving distributed data problems in a microservice arc...
PDF
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
QCONSF - ACID Is So Yesterday: Maintaining Data Consistency with Sagas
JavaOne2017: ACID Is So Yesterday: Maintaining Data Consistency with Sagas
Gluecon: Using sagas to maintain data consistency in a microservice architecture
Omnikron webbinar - Microservices: enabling the rapid, frequent, and reliable...
Microservices + Events + Docker = A Perfect Trio (dockercon)
A Pattern Language for Microservices (@futurestack)
There is no such thing as a microservice! (oracle code nyc)
NodeJS: the good parts? A skeptic’s view (jax jax2013)
#JaxLondon keynote: Developing applications with a microservice architecture
A pattern language for microservices (#gluecon #gluecon2016)
ArchSummit Shenzhen - Using sagas to maintain data consistency in a microserv...
Kong Summit 2018 - Microservices: decomposing applications for testability an...
Building and deploying microservices with event sourcing, CQRS and Docker (Ha...
Developing event-driven microservices with event sourcing and CQRS (london Ja...
A Pattern Language for Microservices
A pattern language for microservices (melbourne)
Mucon: Not Just Events: Developing Asynchronous Microservices
Developing functional domain models with event sourcing (sbtb, sbtb2015)
Events to the rescue: solving distributed data problems in a microservice arc...
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Ad

Viewers also liked (16)

PDF
A pattern language for microservices (#SFMicroservices)
PDF
Developing event-driven microservices with event sourcing and CQRS (Shanghai)
PDF
Developing microservices with aggregates (SpringOne platform, #s1p)
PDF
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
PDF
Microservices pattern language (microxchg microxchg2016)
PDF
Microservices: Decomposing Applications for Deployability and Scalability (ja...
PDF
Events on the outside, on the inside and at the core (jaxlondon)
PDF
Introduction to AngularJS (@oakjug June 2013)
PDF
Introduction to MicroServices (Oakjug)
PDF
Microservices with Spring Cloud
PPTX
Presentasjon for slideshare
PPTX
Ածխածին
PPTX
Definitions list five
PPTX
Instalación de r en windows xp
PDF
Falls from height
PPTX
barriers to communication
A pattern language for microservices (#SFMicroservices)
Developing event-driven microservices with event sourcing and CQRS (Shanghai)
Developing microservices with aggregates (SpringOne platform, #s1p)
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Microservices pattern language (microxchg microxchg2016)
Microservices: Decomposing Applications for Deployability and Scalability (ja...
Events on the outside, on the inside and at the core (jaxlondon)
Introduction to AngularJS (@oakjug June 2013)
Introduction to MicroServices (Oakjug)
Microservices with Spring Cloud
Presentasjon for slideshare
Ածխածին
Definitions list five
Instalación de r en windows xp
Falls from height
barriers to communication
Ad

Similar to Developing microservices with aggregates (melbourne) (19)

PDF
SVCC Developing Asynchronous, Message-Driven Microservices
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (QC...
PDF
Solving distributed data management problems in a microservice architecture (...
PDF
Building microservices with Scala, functional domain models and Spring Boot (...
PDF
OReilly SACON2018 - Events on the outside, on the inside, and at the core
PDF
Developing event-driven microservices with event sourcing and CQRS (phillyete)
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (Me...
PDF
Saturn 2018: Managing data consistency in a microservice architecture using S...
PDF
Developing functional domain models with event sourcing (oakjug, sfscala)
PDF
Oracle Code One: Events and commands: developing asynchronous microservices
PDF
Microservices + Events + Docker = A Perfect Trio by Docker Captain Chris Rich...
PDF
Building Microservices with Scala, functional domain models and Spring Boot -...
PDF
#JaxLondon: Building microservices with Scala, functional domain models and S...
PDF
Building microservices with Scala, functional domain models and Spring Boot
PDF
YOW2018 - Events and Commands: Developing Asynchronous Microservices
PDF
GotoChgo 2019: Not Just Events: Developing Asynchronous Microservices
PDF
Events on the outside, on the inside and at the core - Chris Richardson
PDF
Futures and Rx Observables: powerful abstractions for consuming web services ...
PDF
An overview of the Eventuate Platform
SVCC Developing Asynchronous, Message-Driven Microservices
Building and deploying microservices with event sourcing, CQRS and Docker (QC...
Solving distributed data management problems in a microservice architecture (...
Building microservices with Scala, functional domain models and Spring Boot (...
OReilly SACON2018 - Events on the outside, on the inside, and at the core
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Building and deploying microservices with event sourcing, CQRS and Docker (Me...
Saturn 2018: Managing data consistency in a microservice architecture using S...
Developing functional domain models with event sourcing (oakjug, sfscala)
Oracle Code One: Events and commands: developing asynchronous microservices
Microservices + Events + Docker = A Perfect Trio by Docker Captain Chris Rich...
Building Microservices with Scala, functional domain models and Spring Boot -...
#JaxLondon: Building microservices with Scala, functional domain models and S...
Building microservices with Scala, functional domain models and Spring Boot
YOW2018 - Events and Commands: Developing Asynchronous Microservices
GotoChgo 2019: Not Just Events: Developing Asynchronous Microservices
Events on the outside, on the inside and at the core - Chris Richardson
Futures and Rx Observables: powerful abstractions for consuming web services ...
An overview of the Eventuate Platform

More from Chris Richardson (20)

PDF
The microservice architecture: what, why, when and how?
PDF
More the merrier: a microservices anti-pattern
PDF
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
PDF
Dark Energy, Dark Matter and the Microservices Patterns?!
PDF
Dark energy, dark matter and microservice architecture collaboration patterns
PDF
Scenarios_and_Architecture_SkillsMatter_April_2022.pdf
PDF
Using patterns and pattern languages to make better architectural decisions
PDF
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
PDF
A pattern language for microservices - June 2021
PDF
QConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
PDF
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
PDF
Designing loosely coupled services
PDF
Microservices - an architecture that enables DevOps (T Systems DevOps day)
PDF
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
PDF
Decompose your monolith: Six principles for refactoring a monolith to microse...
PDF
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
PDF
Overview of the Eventuate Tram Customers and Orders application
PDF
#DevNexus202 Decompose your monolith
PDF
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
PDF
Decompose your monolith: strategies for migrating to microservices (Tide)
The microservice architecture: what, why, when and how?
More the merrier: a microservices anti-pattern
YOW London - Considering Migrating a Monolith to Microservices? A Dark Energy...
Dark Energy, Dark Matter and the Microservices Patterns?!
Dark energy, dark matter and microservice architecture collaboration patterns
Scenarios_and_Architecture_SkillsMatter_April_2022.pdf
Using patterns and pattern languages to make better architectural decisions
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
A pattern language for microservices - June 2021
QConPlus 2021: Minimizing Design Time Coupling in a Microservice Architecture
Mucon 2021 - Dark energy, dark matter: imperfect metaphors for designing micr...
Designing loosely coupled services
Microservices - an architecture that enables DevOps (T Systems DevOps day)
DDD SoCal: Decompose your monolith: Ten principles for refactoring a monolith...
Decompose your monolith: Six principles for refactoring a monolith to microse...
TDC2020 - The microservice architecture: enabling rapid, reliable, frequent a...
Overview of the Eventuate Tram Customers and Orders application
#DevNexus202 Decompose your monolith
JFokus: Cubes, Hexagons, Triangles, and More: Understanding Microservices
Decompose your monolith: strategies for migrating to microservices (Tide)

Recently uploaded (20)

PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PPTX
L1 - Introduction to python Backend.pptx
PDF
Understanding Forklifts - TECH EHS Solution
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PPTX
ai tools demonstartion for schools and inter college
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
history of c programming in notes for students .pptx
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
Transform Your Business with a Software ERP System
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Digital Strategies for Manufacturing Companies
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
Odoo Companies in India – Driving Business Transformation.pdf
L1 - Introduction to python Backend.pptx
Understanding Forklifts - TECH EHS Solution
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
wealthsignaloriginal-com-DS-text-... (1).pdf
CHAPTER 2 - PM Management and IT Context
Navsoft: AI-Powered Business Solutions & Custom Software Development
ai tools demonstartion for schools and inter college
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
history of c programming in notes for students .pptx
Wondershare Filmora 15 Crack With Activation Key [2025
Transform Your Business with a Software ERP System
VVF-Customer-Presentation2025-Ver1.9.pptx
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Which alternative to Crystal Reports is best for small or large businesses.pdf
Digital Strategies for Manufacturing Companies
PTS Company Brochure 2025 (1).pdf.......
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool

Developing microservices with aggregates (melbourne)