ایونت سورسینگ Event Sourcing چیست؟
«ایونت سورسینگ» در واقع یک عملیات است که طی یک فرایند انجام می شود. در منبعی که بنده قصد دارم توضیحاتم رو در این جواب برگرفته از اون تشریح کنم، اینگونه به عنوان تعریف ایونت سورسینگ ذکر شده:
Capture all changes to an application state as a sequence of events.
به این معنی که «ثبت و ضبط کردن تمام تغییرات در وضعیت یک اپلیکیشن به طور بهم پیوسته و دنباله دار» رو ایونت سورسینگ میگن.
برای ابزار هم، متناسب با معماری نرم افزار و تکنولوژی هایی که درش بکار رفته، باید تصمیم گرفت که از چه دیتابیسی و با چه مدلی این تغییرات وضعیت نرم افزار رو ثبت کرد. نکته مهم در این حوزه پیوستگی این دیتای ثبت شده است. به این معنی که دیتا باید بگونه ای ثبت شده باشه که شما باید قادر باشید مسیر تغییر رفتارها رو ببینید و تحلیل بکنید.
باید بتونید تشخیص بدید که دقیقا در چه مرحله ای رفتار و عملکرد نرم افزار (یا همون اپلیکیشن) اشتباه و غیر قابل انتظار بوده. ایونت سورسینگ فواید زیادی داره که از جمله مهمترینش میشه به دیباگ کردن منطقی پروژه و کنترل کیفی و رفتاری پروژه اشاره کرد.
به عنوان مثال، در سامانه های مالی که به طور مستقیم با حساب و کتاب پولی ارتباط دارن، پیاده سازی همچین مکانیسمی برای track کردن مقادیر مالی و کشف کسورات پولی در انتهای محاسبات و گزارشات بشدت حائز اهمیت هست. همچنین وقتی شما یک ورژن جدید از پروژه رو ارائه میکنید و طبیعتا انتظار دارید که در بعضی جاهاش که تغییرش دادید، این تغییرات رو در رفتار پروژه هم ببینید که با ایونت سورسینگ و مقایسه با دیتای ضبط شده سابق میشه به این مهم دست یافت.
ایونت سورسینگ چگونه کار میکنه؟
به طور کلی یک آبجکتی وجود داره به اسم event که باید مطمین باشیم تمام تغییرات بلا استثناء توی اون آبجکت دارن ذخیره میشن؛ که این این آبجکت ها خودشون با ترتیب مشخص و قابل track (بازگشتی) توی دیتابیس ثبت میشن. به عنوان مثال برای اینکه ببینم دقیقا یک کِشتی چه موقع یک بندرگاه رو ترک میکنه یا به یک بندرگاه جدید میرسه، همچین مکانیسمی لازمه:
توی مورد بالا، اینطوریه که وقتی سرویس صدا زده میشه، سیستم کشتی مورد نظر رو پیدا میکنه و محل جدیدش رو بروزرسانی میکنه؛ و ship objects (شیء هایی که توی کد برای کِشتی نوشتیم) وضعیت فعلی که پروژه از کشتی داره رو ثبت میکنن. ایونت سورسینگ دقیقا به این مرحله، یک گام دیگه اضافه میکنه؛ یعنی سرویس یک event object (یک شی به نام event) می سازه که تمام تغییرات رو ثبت کنه و به مرحله بعدی که بروزرسانی وضعیت کشتی هست پروسه رو انتقال بده.
وقتی به پروسه بالا نگاه میکنیم، شاید احساس کنیم که یک گام بیهوده به پروسه اضافه شده. ولی وقتی به صورت out of box (نگاه از بیرون یا همون نگاهی فراتر) بهش نگاه میکنیم، میبینیم که چقدر دقت کاری نرم افزار رو ارتقاء دادیم و بطوری که کوچکترین تغییرات هم توی این مدل قابل پیگیری و کنترل هستن. فرض کنید:
- کشتی King Roy به سمت کشور سانفرانسیسکو حرکت میکنه.
- کشتی Prince Trevor به کشور لس آنجکس میرسه.
- کشتی King Roy به کشور هونگ-کونگ میرسه.
اگه از ایونت سورسینگ استفاده نکنیم، ما فقط وضعیت آخر هر کشتی رو خواهیم دید، در صورتی که در مدل استفاده از ایونت سورسینگ، ما دقیقا میتونیم بفهمیم زمانی که کشتی x فلان جا بوده، کشتی y کجا بوده و دقیقا ثبت تمام این تغییرات ریز و درشت رو بهش میگن «ایونت سورسینگ».
وضعیت کشتی ها بدون ایونت سورسینگ:
وضعیت کشتی ها با ایونت سورسینگ:
خلاصه از نگاه یک مدیر فنی یا یک مالک محصول، و یا از نگاه یک برنامه نویسی که نگاه وسیعی داره، استفاده از ایونت سورسینگ کیفیت و دقت پروژه رو خیلی ارتقاء میده و ضریب خطا و از دست داده دیتا رو به حداقل میرسونه. شایان ذکره که با استفاده از ایونت سورسینگ event sourcing بعد از یک مدتی میشه یک سری نمودارها و چارت های تحلیلی هم از رفتار و عملکرد بخش های مختلف پروژه ترسیم کرد که در یک نگاه مختصر دیتا و اطلاعات زیادی رو به ما میده و میتونه توی تصمیم گیریها و اولیت بندی توسعه محصول بهمون کمک کنه.