CQRS (CQRS)

communication pattern ทั่วไปอีกแบบหนึ่งที่ปรากฏใน distributed architecture หลายตัว (และ monolithic architecture บางตัว) คือ Command-Query-Responsibility-Segregation (CQRS) communication และ data pattern แบบง่าย ๆ นี้แยกการสื่อสารกับฐานข้อมูลที่มักเป็น monolithic ออกเป็นสองส่วน ดังแสดงใน Figure 20-3

Client/server versus CQRS

Figure 20-3. Client/server versus CQRS

ใน Figure 20-3 โครงสร้างด้านซ้ายแสดงการโต้ตอบกับ data แบบ client/server ทั่วไป ซึ่ง application query ฐานข้อมูลและทำ transactional write โดยใช้ฐานข้อมูลเป็นส่วนหนึ่งของ infrastructure ของ application แม้นี่จะเป็น pattern ที่พบได้ทั่วไป แต่บางระบบก็มี read volume กับ write volume ที่ต่างกันมาก หรือต้องการแยก read ออกจาก write เพื่อความปลอดภัยและเหตุผลอื่น ๆ สำหรับระบบเหล่านั้น CQRS ซึ่งแสดงอยู่ด้านขวาใน Figure 20-3 จะช่วยแก้ปัญหานี้ได้

CQRS แยก write ไปไว้ใน datastore หนึ่งตัว (โดยปกติคือฐานข้อมูล บางครั้งก็เป็น infrastructure อื่น เช่น durable message queue) ซึ่งจะ synchronize ข้อมูลไปยังอีกฐานข้อมูลหนึ่ง (โดยปกติแบบ asynchronous) ที่ให้บริการ read request

ด้วยการแยก read กับ write ออกจากกัน สถาปนิกสามารถแยก architectural characteristic ที่แตกต่างกันได้ตามชนิด ของข้อมูล ซึ่งยังทำให้ใช้ data model ที่ต่างกันสำหรับแต่ละฐานข้อมูลได้ด้วยหากจำเป็น

CQRS เป็นตัวอย่างที่ดีของ data communication pattern ที่ช่วยให้เกิด architectural characteristic ที่แตกต่างกันสำหรับ data capability, ประเด็นด้านความปลอดภัย หรือปัจจัยอื่น ๆ ที่ได้ประโยชน์จากการแยก ทาง physical