270 likes | 453 Views
Scalable Architecture for the Cloud. CQRS and Windows Azure. What????. Command Query Responsibility Segregation What is it? What kinds of apps is it for? What are the moving parts? What does it buy me? How do I do this on Azure?. What is it?. An architectural pattern
E N D
Scalable Architecture for the Cloud CQRSand Windows Azure
What???? • Command Query Responsibility Segregation • What is it? • What kinds of apps is it for? • What are the moving parts? • What does it buy me? • How do I do this on Azure?
What is it? • An architectural pattern • Embracing modern requirements • Self service • High scalability • Asynchronous processing
Applicability • Multiple simultaneous users • Untrained users • We’ll be talking about the web
Applicability • Usage patterns • More reads than writes • No really, more reads than writes • Lots, lots, lots more
Applicability • Asynchronous Processing • “Thank you, you will receive a confirmation email shortly.”
3-Tier Architecture DB WRITE READ Domain UI
Is it really symmetric? • Reads • Fast • Synchronous • Idempotent • Stale • Writes • Slow • Asynchronous • Stateful • Current
Sidebar • Command Query Separation • Methods should either: • Query State and return a value • Or Execute behavior and return nothing • Bertrand Meyer
CQRS Architecture DB DOMAIN UI
CQRS Architecture READ DB WRITE DB WRITE READ READ MODEL WRITE MODEL Q UI
Read Model / Store • Optimized for Reading • Denormalized out the wazoo! • Matches UI model requirements • No logic – DTO • One “table” per screen • SELECT * FROM TABLE WHERE … • No joins • It’s a cache, not a database!
Write Model / Store • Accepts Commands • Executes Business Rules • Generates Business Events
Write / Read Side Sync • Processes Domain Events • Updates tables in read store
What’s a Command? • A message • Named in the imperative • AddNewUser • PublishDocument • LaunchMissiles • Task Oriented
Command Processing • UI Validates before sending • UI Sends command • Write model re-validates • Write model processes business rules • Write model generates events • Assume commands will succeed most of the time
What’s an event? • A message • Named in the past tense • UserAdded • NewDocumentPublished • WentBoom • Express Changes in the domain over time • Save the event stream for reprocessing
Event Processing • Receive events as they come out • Update read stores
How is this scalable? • Web Farms • Event Processors • Read Stores • Harder to scale the write side • But we have lots more reads anyway
Other Advantages • External System Integration • Events write to external system • Commands when external system wants you to do something • You know it works, you’re using it!
Mapping to Azure • Queues • Table Store • Event Store • Read Stores • Worker role • Command processors • Event Processors • Web role • Front end
A special bonus pattern! Event Sourcing
What is event sourcing? • Model Persistence • ORM • We’re generating events anyway • Events record changes to the domain over time • So we know every state change that’s happened anyway
Event Sourcing • Load domain entities by “playing back” domain events • No need for ORM • Use snapshots for efficiency
Resources • UdiDahan • http://www.udidahan.com • Greg Young • http://codebetter.com/blogs/gregyoung/ • http://cqrs.wordpress.com/ • Mark Nijhof • http://cre8ivethought.com/blog/index • http://www.agilification.com/post/CQRS-Series-from-Mark-Nijhof.aspx