Cloud Architecture ด้วยเทคนิค CQRS pattern
CQRS (Command and Query Responsibility Segregation) ถ้าอธิบายแบบง่ายๆ เป็นเทคนิคที่มอง Read Operation กับ การ Write Operation (Create / Read / Update) แยกออกจากกัน เพื่อทำให้เกิด Performance, Scalability and Security ในระบบได้สูงสุด อีกทั้งทำให้ Architecture ค่อนข้างมีความยืดหยุ่นสูง
ระบบทั่วไปในปัจจุบัน มักจะทำงานได้ดีก็ต่อเมื่อมี Business Logic มีความซับซ้อนไม่มาก อีกทั้งเทคนิค Scaffold Resources ที่ทำให้ การพัฒนาระบบที่เข้าถึงข้อมูลได้อย่างรวดเร็ว และจากนั้น อาจจะมีการปรับเปลี่ยนให้ตรง Business Logic
อย่างไรก็ตามระบบเหล่านี้มักเวลาที่เกิดปัญหาที่มักจะมีปัญหา ที่สามารถจะก่อตัวเป็นปัญหาใหญ่ถ้าเกิดการปรับเปลี่ยนในอนาคต ยกตัวอย่างเช่น
- การเกิด Update Conflict ทำให้เกิด Deadlock ของข้อมูล เกิดช่วงเวลาที่หยุดนิ่งถ้า Developer ไม่จัดการส่วนนี้ดีๆ
- อาจจะเกิดช่วงเวลาที่ Performance ต่ำเนื่องจาก Complexity ของการ Queries ในเวลาที่มีอัตรา Read Operation สูง
- Security มีความซับซ้อนเนื่องจากการเข้าถึงข้อมูลอยู่ใน Data Layer ที่สามารถ Read/Write Operation ได้พร้อมกัน
ทางเลือกที่จะมานำเสนอในบทความนี้
เทคนิค CQRS ทำให้เราแยกส่วนของ การ Write และ Read ข้อมูล ดังรูปข้างบน Domain Logic (Business Logic เฉพาะส่วน Write Operation) จะมีความซับซ้อนน้อยลง เนื่องจากสามารถ มุ่งเน้นที่ Write Operation อย่างเดียว Read Data Store จะสร้าง Queries (Bussiness Logic ส่วน Read Operation) ขึ้นมาสำหรับจัดการ Read Operation เพียงอย่างเดียว Developer สามารถที่จะพัฒนาได้รู้เป้าหมายในแต่ละ Module ได้ง่ายขึ้น
อีกหนึ่งประโยชน์จากการใช้ CQRS ทำให้เราสามารถทำให้ Read Data Store เป็น Replica Set และทำให้ เราสามารถเพิ่มหรือลดปริมาณ Replica Set ให้เหมาะสมกับปริมาณของการ Operation Read นั้น ช่วยให้เพิ่ม Performance โดยไม่ส่งผลกระทบกับระบบส่วนอื่นๆ อีกทั้ง Operation Write ไม่ส่งผลต่อ Operation Read อีกต่างหาก
จะเห็นว่าเทคนิค CQRS ทำให้แก้ปัญหาบางอย่างในแง่ของ Software Architect ได้อย่างดี แต่ว่าต้องแลกกับการที่ Afford ของ Developer ที่สูงขึ้น เพราะไม่สามารถ ใช้ เทคนิค Scaffold ได้
Part 2 ผมจะมาขยายความต่อในหัวข้อ สิ่งที่ต้องพิจารณาในการใช้เทคนิค CQRS เราควรจะใช้เทคนิค CQRS เมื่อไรดี? และ Event Sourcing Pattern
Metromerce คือ Startup Incubator ที่คอยสนับสนุนทุกไอเดีย เริ่มตั้งแต่การระดมความคิด ให้คำปรึกษา ตลอดไปจนถึงการพัฒนา MVP และต่อยอด Scale พร้อมเติบโต ถ้าใครสนใจก็มาจอยกันได้นะ :D