حماسه: نحوه اجرای معاملات پیچیده تجاری بدون تعهد دو مرحله.

ساخت وبلاگ

من این هفته بیش از 3 بار در مورد ساگاس صحبت کردم ، بنابراین وقت آن است که یک پست وبلاگ در مورد آن بنویسم.

حماسه چیست؟

الگوی SAGA نحوه حل معاملات توزیع شده (تجارت) بدون تعهد دو فاز را توصیف می کند زیرا این امر در سیستم های توزیع شده مقیاس نمی یابد. ایده اصلی این است که معامله کلی را به چندین مرحله یا فعالیت تقسیم کنیم. فقط مراحل داخلی می تواند در معاملات اتمی انجام شود اما از قوام کلی توسط حماسه مراقبت می شود. حماسه وظیفه دارد یا معامله تجاری کلی را به اتمام برساند یا سیستم را در یک حالت خاتمه شناخته شده ترک کند. بنابراین در صورت بروز خطاها ، یک روش بازگشت به تجارت اعمال می شود که با فراخوانی مراحل جبران خسارت یا فعالیت ها به ترتیب معکوس اتفاق می افتد.

با تماشای صحبت های کیتی مک کافری ، می توان یک مرور کلی در مورد ساگاس ها را یافت:

یک مثال کلاسیک رزرو سفر است:

این الگوی اخیراً با افزایش و پیچیده تر شدن سیستم ها ، توزیع و از راه دور ، کشش بیشتری کسب می کند - بنابراین معاملات اسیدی "خوب قدیمی" سرانجام به حد خود رسیده است. سلام به قوام نهایی. الگوی اصلی حماسه به هر حال قدیمی است (https://www.cs. coell. edu/andru/cs711/2002fa/reading/sagas. pdf).

شما در جوامع مختلف غالباً با جمله های کمی متفاوت ، ساگاها را پیدا می کنید. پت هلند از آمازون این موضوع را در مقاله معروف "زندگی فراتر از معاملات توزیع شده" بیان می کند:

فرضیاتی که ما را به سمت نهادها و پیام ها سوق می دهد ، ما را به این نتیجه می رساند که برنامه مقیاس-آگنوستیک باید در صورت نیاز به توافق در بین اشخاص چندگانه ، عدم اطمینان را با استفاده از گردش کار مدیریت کند.

در طراحی دامنه محور (DDD) این الگوی به خوبی شناخته شده است زیرا شما باید به محض استفاده از مواردی که شامل چندین زمینه محدود برای همکاری است ، آن را اعمال کنید. در جامعه میکروسرویس کمتر شناخته شده است اما هر زمان که یک جریان کلی شامل چندین سرویس باشد ، ضروری است.

چگونه یک حماسه را پیاده سازی کنیم؟

یک حماسه شامل رسیدگی به دولت است زیرا شما باید به خاطر انجام فعالیت های جبران خسارت ، آنچه را که قبلاً انجام داده اید به خاطر بسپارید. بنابراین یک حماسه یک جریان طولانی است و می توانید از انواع مختلفی از نحوه اجرای جریان های طولانی در حال اجرا استفاده کنید.

اما من می خواهم یک رویکرد بسیار جالب را در اینجا برجسته کنم: موتورهای جریان مبتنی بر BPMN (مدل فرآیند تجارت و نماد) می توانند به طور مستقیم جبران خسارت را از جعبه اجرا کنند ، همانطور که توسط خود BPMN زبان ارائه شده است. مثال از بالا را می توان مانند این مدل کرد:

این مدل می تواند مستقیماً توسط یک موتور مربوطه اجرا شود. فعالیت های جبران کننده به فعالیت اصلی متصل می شوند و موتور از بقیه مراقبت می کند. بنابراین یک موتور گردش کار قادر به BPMN می تواند به عنوان هماهنگ کننده حماسه عمل کند!

اگر با نمادهای گرافیکی احساس ناراحتی می کنید (همانطور که ممکن است گمان کنید چیزی در مدل به طرز جادویی پنهان است یا فقط از مدل سازان گرافیکی و پدیده های "مرگ و میر-پانل" متنفر هستید) نیز می توانید همان حماسه را در کد بیان کنید. کد زیر از API مدل Camunda در پس زمینه استفاده می کند. Camunda یک موتور منبع باز سبک است که قادر است BPMN را بصورت بومی اجرا کند. Camunda (از نسخه 7. 7 ON) همچنین می تواند نمایش گرافیکی را برای جریان های تعریف شده در کد ایجاد کند. این باعث می شود یک حماسه بسیار خواندنی (در اینجا با استفاده از کد جاوا) تعریف کنید:

می توانید تمام جزئیات موجود در برنامه مثال کار را در GitHub پیدا کنید. ویرایش: من اخیراً با استفاده از کد C# در GitHub ، همان مثال را بارگذاری کردم.

نمایش گرافیکی در نظارت به عنوان تولید خودکار نشان داده می شود (در گرافیکی که به زودی حل خواهیم کرد ، اشکالات جزئی وجود دارد-اما در حال حاضر بسیار جالب است):

بیایید به سرعت آنچه را که کیتی ذکر کرده است برای ساگاس یادآوری کنیم:

  • ورود به سیستم حماسه بادوام - این توسط موتور گردش کار پیاده سازی شده است
  • فرآیند SEC (هماهنگ کننده اجرای) - این توسط موتور گردش کار اجرا می شود
  • Idempotence از اقدامات جبران خسارت - این در این سناریو به عهده شماست زیرا باید توسط خدماتی که در حماسه خود تماس می گیرید (به عنوان مثال لغو رزرو ماشین) اجرا شود.

یک موتور گردش کار برای حماسه؟

من بعضی اوقات هنگام پیشنهاد موتور گردش کار برای ساگاس - بسیار پیچیده ، بسیار سنگین ، عملکرد پایین یا مقیاس خوب ، اعتراض می کنم. اما این فقط موضوع انتخاب ابزار مناسب است. از 7 گناه گردش کار خودداری کنید - از موتورهای سبک وزن (مانند کاموندا) استفاده کنید که حتی می تواند به عنوان کتابخانه ساده تعبیه شود همانطور که در کد منبع یا مثال خرده فروشی جریان می بینید. بنابراین من هیچ دلیلی نمی بینم که از چنین موتور برای این مشکل استفاده نکنیم.

مدیر فرآیند (ارکستراسیون) یا رقص رقص

راه حلی که من پیشنهاد می کنم استفاده از یک مدیر فرآیند برای الگوی SAGA است. اگر حماسه با این کار قابل اجرا باشد ، بحث هایی کاملاً در جریان است. غالباً استدلال می شود که این ایده خوبی نیست زیرا یک نقطه از شکست را معرفی می کند و به خوبی مقیاس نمی یابد. گزینه جایگزین یک رویکرد رقص است که به عنوان مثال لغزش مسیریابی است. یک مرور کلی در این باره توسط Clemens Vasters ارائه شده است.

برای روشن شدن: همه پیاده سازی های معتبر برای الگوی SAGA هستند ، آن را به عنوان مثال با Aon Rotem-Gal-Oo مقایسه کنید:

وی گفت: "من ساگاس را به عنوان مفهوم توافق توزیع شده از یک فرآیند با ضمانت های کاهش یافته […] می بینم-بنابراین ، اساساً ، یک حماسه جریان مانند معامله است که در صورت عدم موفقیت ، خدمات درگیر مراحل جبران خسارت را انجام می دهند […]

براساس این تعریف ، هر دو فرآیند مدیریت شده مرکزی و یک فرآیند "رقص" ساگاس هستند - تا زمانی که معناشناسی و نیت ذکر شده در بالا نگهداری شوند. ارکستراسیون مدیریت شده مرکزی ، امکان مشاهده فرآیندها ، سهولت مدیریت و غیره را فراهم می کند. Sagas مشترک مبتنی بر رویداد تعاونی ، انعطاف پذیری را فراهم می کند و امکان استفاده از فرآیندهای جدید را فراهم می کند. هر دو شایستگی دارند و هر دو مکان دارند ، حداقل به نظر من :)

بنابراین برای من انتخاب چندان مذهبی نیست بلکه بسیار کاربردی است: کدام راه حل می تواند نیازهای من را برآورده کند؟

بیایید فرض کنیم دلایل عدم استفاده از یک مدیر فرآیند می تواند مورد توجه قرار گیرد از این راه حل مزایایی دارد: شما می توانید به راحتی وضعیت حماسه خود را در مدیر فرآیند بازرسی کنید و می توانید از ویژگی های اضافی ابزارهای مربوطه مانند دید جریان و نسخه سازی خود استفاده کنید. تعریف حماسه.

و تا کنون ، من دیدم که نیازهای معمولی مشتری با موتورهای گردش کار سبک به طور کامل قابل پرداخت است. نکته مهمی که باید در نظر داشته باشید این است: شما لازم نیست که موتور اصلی تک نقطه ای-کار-کار-جریان را اجرا کنید ، اما می توانید این موتورها را در مؤلفه خود در دست اجرا قرار دهید تا حماسه را اجرا کنید. بنابراین برای مثال بالا می توانید یک زمینه محدود یا میکروسرویس "رزرو سفر" داشته باشید:

موتور یکی از کتابخانه هایی است که شما در آن سرویس از آن استفاده می کنید تا حماسه را آسانتر کند (از آن که خودتان کدگذاری کنید). افکار مشابه را می توان در مثال خرده فروشی جریان و پست وبلاگ در مورد همکاری خدمات با رقص و ارکستراسیون یافت.

در Camunda ما از راه کار روی مقیاس پذیری افقی واقعی برای این موتور هستیم که پس از آن بر اساس سیاهههای فقط ضمیمه خواهد بود. هنگام داشتن این امر ، داشتن یک "زیرساخت حماسه" مقیاس پذیر و انعطاف پذیر برای هر محیط نیز قابل فکر است. اما من فقط با صدای بلند فکر می کنم ؛-)

نتیجه

حماسه الگوی مهمی است که در سیستم های توزیع شده شناخته می شود. الگوی معماری به معنای اجرای خاص نیست ، گرفتن من یک موتور کار سبک وزن است که قادر به BPMN است مانند من با مثال Camunda در بالا نشان داد. این قبلاً ثابت شده است که در بسیاری از پروژه های زندگی واقعی بسیار کار می کند.

فارکس حرفه ای...
ما را در سایت فارکس حرفه ای دنبال می کنید

برچسب : نویسنده : مرتضی احباب بازدید : <-PostHit-> تاريخ : يکشنبه 6 فروردين 1402 ساعت: 16:46