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
a platform that makes it easier for
developers to write 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
Example application
@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
Apply X-axis and Z-axis
scaling to each service
independently
@crichardson
Service boundaries
enforce modularity
@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 a viable option
Guarantees consistency
BUT
2PC is best avoided
Not supported by many NoSQL databases etc.
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
Example application
@crichardson
Domain Driven Design:
read it!
@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
Aggregate granularity
If an update must be atomic then it must be handled by a
single aggregate
Therefore
Aggregate granularity is important
@crichardson
Aggregate granularity
Consistency
Scalability/
User experience
Customer
Order
Product
Customer
Order
Product
Customer
Order
Product
@crichardson
Agenda
The problem with Domain Models and microservices
Overview of aggregates
Maintaining consistency between aggregates
Using event sourcing with Aggregates
Example application
@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
Event-driven architecture
@crichardson
Use event-driven, eventually
consistent order processing
Order
Service
Customer
Service
Order created
Credit Reserved
Credit Check Failed
Create Order
OR
Customer
creditLimit
creditReservations
...
Order
state
total
…
create()
reserveCredit()
approve()/reject()
@crichardson
Order Management
Order
id : 4567
total: 343
state = CREATED
Customer Management
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
Example application
@crichardson
Event sourcing = event-centric
persistence
Application
Database
Event store
update
publish
X
@crichardson
Event sourcing
For each domain object (i.e. 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
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(entityId)
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
Hybrid database and
message broker
Implementations:
Home grown/DIY
geteventstore.com by
Greg Young
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
Example application
@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
@crichardson
Customer microservice
Customer
Service
Customer
Controller
Spring
Cloud
Stream
Kafka
Customer
Aggregate
Rest API
Customer
Event Handlers
Event
Store
Event
Store
Adapter
@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
Summary
Aggregates are the building blocks of microservices
Use events to maintain consistency between aggregates
Event sourcing is a good way to implement a event-driven
architecture
@crichardson
@crichardson chris@chrisrichardson.net
http://learnmicroservices.io
Questions?

More Related Content

What's hot (20)

PPTX
Kafka at Peak Performance
Todd Palino
 
PDF
GotoChgo 2019: Not Just Events: Developing Asynchronous Microservices
Chris Richardson
 
PDF
Cloud Native ClickHouse at Scale--Using the Altinity Kubernetes Operator-2022...
Altinity Ltd
 
PPTX
Cloud Computing Principles and Paradigms: 9 aneka-integration of private and ...
Majid Hajibaba
 
PDF
Adventures with the ClickHouse ReplacingMergeTree Engine
Altinity Ltd
 
PPSX
Event Sourcing & CQRS, Kafka, Rabbit MQ
Araf Karsh Hamid
 
PDF
When NOT to use Apache Kafka?
Kai Wähner
 
PPTX
Google Cloud and Data Pipeline Patterns
Lynn Langit
 
PDF
Kafka 101 and Developer Best Practices
confluent
 
PPTX
Introduction to AWS VPC, Guidelines, and Best Practices
Gary Silverman
 
PPTX
Microservices Architecture Part 2 Event Sourcing and Saga
Araf Karsh Hamid
 
PDF
MicroCPH - Managing data consistency in a microservice architecture using Sagas
Chris Richardson
 
PPTX
HBase Vs Cassandra Vs MongoDB - Choosing the right NoSQL database
Edureka!
 
PDF
Introducing Change Data Capture with Debezium
ChengKuan Gan
 
PDF
Overview of the Eventuate Tram Customers and Orders application
Chris Richardson
 
PPTX
CQRS and Event Sourcing, An Alternative Architecture for DDD
Dennis Doomen
 
PDF
Real-Life Use Cases & Architectures for Event Streaming with Apache Kafka
Kai Wähner
 
PDF
Analyzing Petabyte Scale Financial Data with Apache Pinot and Apache Kafka | ...
HostedbyConfluent
 
PPTX
Apache kafka
Viswanath J
 
PPTX
An Overview of Apache Cassandra
DataStax
 
Kafka at Peak Performance
Todd Palino
 
GotoChgo 2019: Not Just Events: Developing Asynchronous Microservices
Chris Richardson
 
Cloud Native ClickHouse at Scale--Using the Altinity Kubernetes Operator-2022...
Altinity Ltd
 
Cloud Computing Principles and Paradigms: 9 aneka-integration of private and ...
Majid Hajibaba
 
Adventures with the ClickHouse ReplacingMergeTree Engine
Altinity Ltd
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Araf Karsh Hamid
 
When NOT to use Apache Kafka?
Kai Wähner
 
Google Cloud and Data Pipeline Patterns
Lynn Langit
 
Kafka 101 and Developer Best Practices
confluent
 
Introduction to AWS VPC, Guidelines, and Best Practices
Gary Silverman
 
Microservices Architecture Part 2 Event Sourcing and Saga
Araf Karsh Hamid
 
MicroCPH - Managing data consistency in a microservice architecture using Sagas
Chris Richardson
 
HBase Vs Cassandra Vs MongoDB - Choosing the right NoSQL database
Edureka!
 
Introducing Change Data Capture with Debezium
ChengKuan Gan
 
Overview of the Eventuate Tram Customers and Orders application
Chris Richardson
 
CQRS and Event Sourcing, An Alternative Architecture for DDD
Dennis Doomen
 
Real-Life Use Cases & Architectures for Event Streaming with Apache Kafka
Kai Wähner
 
Analyzing Petabyte Scale Financial Data with Apache Pinot and Apache Kafka | ...
HostedbyConfluent
 
Apache kafka
Viswanath J
 
An Overview of Apache Cassandra
DataStax
 

Similar to Developing microservices with aggregates (SpringOne platform, #s1p) (20)

PDF
Developing microservices with aggregates (melbourne)
Chris Richardson
 
PDF
Developing microservices with aggregates (devnexus2017)
Chris Richardson
 
PDF
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Chris Richardson
 
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (QC...
Chris Richardson
 
PDF
#JaxLondon: Building microservices with Scala, functional domain models and S...
Chris Richardson
 
PDF
Building Microservices with Scala, functional domain models and Spring Boot -...
JAXLondon2014
 
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (Ha...
Chris Richardson
 
PDF
Building microservices with Scala, functional domain models and Spring Boot (...
Chris Richardson
 
PDF
SVCC Developing Asynchronous, Message-Driven Microservices
Chris Richardson
 
PDF
Building and Deploying Microservices with Event Sourcing, CQRS and Docker
C4Media
 
PDF
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Chris Richardson
 
PDF
Building microservices with Scala, functional domain models and Spring Boot
Chris Richardson
 
PDF
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Chris Richardson
 
PDF
Developing functional domain models with event sourcing (sbtb, sbtb2015)
Chris Richardson
 
PDF
Events on the outside, on the inside and at the core (jfokus jfokus2016)
Chris Richardson
 
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (Me...
Chris Richardson
 
PDF
OReilly SACON2018 - Events on the outside, on the inside, and at the core
Chris Richardson
 
PDF
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Chris Richardson
 
PDF
#hacksummit 2016 - event-driven microservices – Events on the outside, on the...
Chris Richardson
 
PDF
Solving distributed data management problems in a microservice architecture (...
Chris Richardson
 
Developing microservices with aggregates (melbourne)
Chris Richardson
 
Developing microservices with aggregates (devnexus2017)
Chris Richardson
 
Developing Event-driven Microservices with Event Sourcing & CQRS (gotoams)
Chris Richardson
 
Building and deploying microservices with event sourcing, CQRS and Docker (QC...
Chris Richardson
 
#JaxLondon: Building microservices with Scala, functional domain models and S...
Chris Richardson
 
Building Microservices with Scala, functional domain models and Spring Boot -...
JAXLondon2014
 
Building and deploying microservices with event sourcing, CQRS and Docker (Ha...
Chris Richardson
 
Building microservices with Scala, functional domain models and Spring Boot (...
Chris Richardson
 
SVCC Developing Asynchronous, Message-Driven Microservices
Chris Richardson
 
Building and Deploying Microservices with Event Sourcing, CQRS and Docker
C4Media
 
Developing event-driven microservices with event sourcing and CQRS (phillyete)
Chris Richardson
 
Building microservices with Scala, functional domain models and Spring Boot
Chris Richardson
 
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...
Chris Richardson
 
Developing functional domain models with event sourcing (sbtb, sbtb2015)
Chris Richardson
 
Events on the outside, on the inside and at the core (jfokus jfokus2016)
Chris Richardson
 
Building and deploying microservices with event sourcing, CQRS and Docker (Me...
Chris Richardson
 
OReilly SACON2018 - Events on the outside, on the inside, and at the core
Chris Richardson
 
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Chris Richardson
 
#hacksummit 2016 - event-driven microservices – Events on the outside, on the...
Chris Richardson
 
Solving distributed data management problems in a microservice architecture (...
Chris Richardson
 
Ad

More from Chris Richardson (20)

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

Recently uploaded (20)

PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PDF
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Revenue streams of the Wazirx clone script.pdf
aaronjeffray
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Online Queue Management System for Public Service Offices in Nepal [Focused i...
Rishab Acharya
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 

Developing microservices with aggregates (SpringOne platform, #s1p)