الگوی CQRS and Event Sourcing چیست

با درود خدمت شما. امروز در الیکسیر به یک کتابخانه ای https://github.com/pedroassumpcao/incident دیدم که به بحثی مربوط به CQRS and Event Sourcing اشاره کرده است که تاحالا نشنیده بودم که به یک ویدیویی هم لینک داده بخاطر ضعف در انگلیسی زیاد متوجه نشدم

با سرچ فارسی به یک مطلب نیز برخورد کردم :

که گفته اطلاعات در جدول رابطه ای پردازش و دستورات در NoSql ولی به چه صورت متوجه نشدم

و همینطور در جای دیگه گفته شده است که CQRS and Event Sourcing هر کدوم یک موضوع جدا ولی در ارتباط با هم هستند

اگر دوستان در این رابطه اطلاعاتی دارند ممنون می شم اشتراک بزارند با مثال کاربردی که اگر چیز خوبی هست به عنوان یک امکان ویژه در محصولاتمون قرار بدهیم با تشکر

فکر کنم پیاده سازی دستورات پیچیده دیتابیس در دو سرور باشه در کل این چیزی که کلا فهمیدم بدون هیچ درک اضافه ای :smiley:

2 Likes

Event Sourcing:
ایده اصلی event sourcing اینکه هر تغییر در سیستم به صورت پیام ارسال میشه و جایی ذخیره میشه دقیقا مثل حساب بانکی که حساب دار ها هر خرید فروش یا پول برداشتن یا به حساب ریختن را حفظ میکنن با زمان انجام transaction در الگو event sourcing همین کار انجام میشه
برای مثال کاربر با اسم فلان در این زمان ساخته شد… هر پیام immutable هست
و state کل سیستم و میشه دوباره از اول تا آخر ساخت

یک مثال
فرض کن برنامه داریم که شبیه تویترهست
برای event sourcing هر تغییر از جمله ساخته شدن کاربر , پاک شدن کاربر یا ساخته شدن توییت یا تغییر و پاک شدن توییت یک پیام میفرستیم

Command Query Responsibility Segregation CQRS:
این الگو وظیفه خواندن رو از نوشتن جدا میکنه سیستم شما از دو component کاملا مجزا برای خواندن و نوشتن بهره میگیره

https://martinfowler.com/bliki/CQRS.html#:~:text=CQRS%20stands%20for%20Command%20Query,you%20use%20to%20read%20information.

این دو الگو خیلی مواقع کنار هم کار میکنند و پیام های event source به لایه نوشتن سرو کار داره و خواندن از لایه های stateful در حافظه مثل actor ها استفاده میکنه
یک مثال
فرض کن برنامه داریم که شبیه تویترهست
برای event sourcing هر تغییر از جمله ساخته شدن کاربر , پاک شدن کاربر یا ساخته شدن توییت یا تغییر و پاک شدن توییت یک پیام میفرستیم

 {
      "type": "tweet",
      "action": "created"
      "user": "12abc-saasdasf-..",
      "from": "",
      "to": "hello world",
      "created_at": "2020-06-30 24:13:00"
    }

اگه ما cqrs هم داریم این پیام ها در یک database ذخیره میشوند ولی در هنگام خواندن یک سیستم دیگه که یک قسمت داده رو در حافظه ذخیره کرده بر میگردونه
و کاربر به اون سرور که این داده رو داره فرستاده میشه

5 Likes