نگاهی به بوت کمپ آنلاین من که خود گام است بیندازید که به شما می آموزد چگونه از الگوهای Saga، API Composition و CQRS برای طراحی عملیاتی که چندین سرویس را در بر می گیرند استفاده کنید.
قیمت معمولی 395 دلار برای هر نفر است اما برای ثبت نام 190 دلار از کوپن WSSEULWL استفاده کنید (تا 30 نوامبر 2022 معتبر است)
متن نوشته
شما الگوی پایگاه داده در هر سرویس را اعمال کرده اید. هر سرویس پایگاه داده خاص خود را دارد. با این حال، برخی از تراکنشهای تجاری شامل چندین سرویس میشوند، بنابراین شما به مکانیزمی برای پیادهسازی تراکنشهایی نیاز دارید که خدمات را در بر میگیرد. به عنوان مثال، بیایید تصور کنیم که در حال ساخت یک فروشگاه تجارت الکترونیکی هستید که در آن مشتریان محدودیت اعتباری دارند. برنامه باید اطمینان حاصل کند که سفارش جدید از حد اعتبار مشتری تجاوز نمی کند. از آنجایی که سفارشها و مشتریان در پایگاههای داده متفاوتی هستند که متعلق به سرویسهای مختلف هستند، برنامه نمیتواند به سادگی از یک تراکنش محلی ACID استفاده کند.
مسئله
چگونه تراکنش هایی را اجرا کنیم که خدمات را در بر می گیرند؟
نیروها
- 2PC یک گزینه نیست
راه حل
اجرای هر معامله تجاری که چندین سرویس را در بر می گیرد یک حماسه است. حماسه دنباله ای از معاملات محلی است. هر تراکنش محلی پایگاه داده را به روز می کند و پیام یا رویدادی را برای راه اندازی تراکنش محلی بعدی در حماسه منتشر می کند. اگر یک تراکنش محلی به دلیل نقض یک قانون تجاری شکست بخورد، حماسه یک سری تراکنش های جبرانی را اجرا می کند که تغییرات ایجاد شده توسط تراکنش های محلی قبلی را خنثی می کند.
دو راه برای حماسه های هماهنگی وجود دارد:
- رقص - هر تراکنش محلی رویدادهای دامنه را منتشر می کند که تراکنش های محلی را در سایر سرویس ها آغاز می کند
- ارکستراسیون - یک ارکستراتور (شیء) به شرکت کنندگان می گوید که چه تراکنش های محلی را اجرا کنند
مثال: حماسه مبتنی بر رقص
یک برنامه تجارت الکترونیکی که از این رویکرد استفاده می کند، با استفاده از یک حماسه مبتنی بر رقص که شامل مراحل زیر است، سفارش ایجاد می کند:
- سرویس سفارش درخواست POST /orders را دریافت می کند و یک سفارش را در حالت PENDING ایجاد می کند
- سپس یک رویداد Order Created را منتشر می کند
- مسئول رویداد خدمات مشتری تلاش می کند اعتبار را رزرو کند
- سپس رویدادی را منتشر می کند که نتیجه را نشان می دهد
- کنترل کننده رویداد OrderService یا سفارش را تأیید یا رد می کند
مثال: حماسه مبتنی بر ارکستراسیون
یک برنامه تجارت الکترونیکی که از این رویکرد استفاده می کند، با استفاده از یک حماسه مبتنی بر ارکستراسیون که شامل مراحل زیر است، سفارش ایجاد می کند:
- سرویس سفارش درخواست POST /orders را دریافت می کند و ارکستراتور حماسه ایجاد سفارش را ایجاد می کند.
- ارکستراتور حماسه یک سفارش را در حالت در انتظار ایجاد می کند
- سپس یک دستور اعتباری رزرو را به خدمات مشتری ارسال می کند
- خدمات مشتری سعی در رزرو اعتبار دارد
- سپس پیام پاسخ را نشان می دهد که نتیجه را نشان می دهد
- ارکستر حماسه یا سفارش را تأیید یا رد می کند
زمینه
این الگوی مزایای زیر دارد:
- این برنامه را قادر می سازد بدون استفاده از معاملات توزیع شده ، سازگاری داده ها را در چندین سرویس حفظ کند
این راه حل اشکالاتی زیر دارد:
- مدل برنامه نویسی پیچیده تر است. به عنوان مثال ، یک توسعه دهنده باید معاملات جبران کننده ای را طراحی کند که به صراحت تغییرات را که در اوایل حماسه ایجاد شده است ، خنثیسازی کند.
همچنین موارد زیر برای پرداختن به موارد زیر وجود دارد:
برای اینکه قابل اعتماد باشد ، یک سرویس باید به صورت اتمی بانک اطلاعاتی خود را به روز کند و یک پیام/رویداد را منتشر کند. این نمی تواند از مکانیسم سنتی یک معامله توزیع شده استفاده کند که پایگاه داده و کارگزار پیام را شامل می شود. در عوض ، باید از یکی از الگوهای ذکر شده در زیر استفاده کند.
مشتری که حماسه را آغاز می کند ، که یک جریان ناهمزمان است ، با استفاده از یک درخواست همزمان (به عنوان مثال HTTP Post /سفارشات) باید بتواند نتیجه آن را تعیین کند. گزینه های مختلفی وجود دارد که هر کدام دارای معاملات مختلف هستند:
- این سرویس پس از اتمام حماسه ، به عنوان مثال ، پاسخی را ارسال می کند. پس از دریافت یک رویداد سفارش داده شده یا سفارش داده شده.
- این سرویس پس از شروع حماسه و مشتری به طور دوره ای (به عنوان مثال GET / سفارشات /) پاسخ (به عنوان مثال حاوی OrderID) را ارسال می کند تا نتیجه را تعیین کند.
- این سرویس پس از شروع حماسه ، پاسخ (به عنوان مثال حاوی OrderID) را ارسال می کند و سپس پس از اتمام حماسه ، یک رویداد (به عنوان مثال WebSocket ، Web Hook و غیره) را به مشتری ارسال می کند.
الگوهای مرتبط
- پایگاه داده در هر الگوی سرویس نیاز به این الگوی را ایجاد می کند
- الگوهای زیر راه هایی برای به روزرسانی اتمی حالت و انتشار پیام ها/رویدادها است:
بیشتر بدانید
-
الگوهای Microservice Book من این الگوی را با جزئیات بسیار بیشتری توصیف می کند. برنامه مثال کتاب ساگای مبتنی بر ارکستراسیون را با استفاده از چارچوب Eventuate Tram Sagas پیاده سازی می کند
نگاهی به بوت کمپ آنلاین من که خود گام است بیندازید که به شما می آموزد چگونه از الگوهای Saga، API Composition و CQRS برای طراحی عملیاتی که چندین سرویس را در بر می گیرند استفاده کنید.
رمز نمونه
مثالهای زیر به عنوان مثال مشتریان و سفارشات را به روش های مختلف اجرا می کنند:
-
جایی که سرویسها رویدادهای دامنه را با استفاده از چارچوب Eventuate Tram منتشر میکنند، جایی که سرویس سفارش از یک ارکستراتور حماسه استفاده میکند که با استفاده از چارچوب Eventuate Tram Sagas پیادهسازی شده است، جایی که سرویسها رویدادهای دامنه را با استفاده از چارچوب منبع رویداد رویداد منتشر میکنند.
درباره Microservices. io
Microservices. io توسط کریس ریچاردسون برای شما آورده شده است. معمار نرم افزار با تجربه، نویسنده POJOs in Action، خالق اصلی CloudFoundry. com و نویسنده الگوهای Microservices.
کریس به مشتریان در سراسر جهان از طریق مشارکتهای مشاوره و کلاسهای آموزشی و کارگاهها کمک میکند تا معماری میکروسرویس را اتخاذ کنند.
با نحوه ایجاد یک الگوی سرویس و شاسی میکروسرویس آشنا شوید
به Manning LiveProject من نگاهی بیندازید که به شما یاد می دهد چگونه یک الگوی سرویس و شاسی میکروسرویس ایجاد کنید.
بوت کمپ مجازی جدید: الگوهای داده توزیع شده در معماری میکروسرویس
بوت کمپ مجازی من، الگوهای داده توزیع شده در معماری میکروسرویس، اکنون برای ثبت نام باز است!
این الگوهای کلیدی مدیریت داده های توزیع شده از جمله Saga، API Composition و CQRS را پوشش می دهد.
این شامل سخنرانیهای ویدیویی، آزمایشگاههای کد و یک کنفرانس ویدیویی هفتگی از من بپرسید که در چندین منطقه زمانی تکرار میشود.
قیمت معمولی 395 دلار برای هر نفر است اما از کوپن WSSEULWL برای ثبت نام 190 دلار استفاده کنید (تا 30 نوامبر 2022 معتبر است). برای خرید چند صندلی تخفیف های عمیق تری وجود دارد.
در مورد میکروسرویس ها بیاموزید
کریس منابع متعددی را برای یادگیری معماری میکروسرویس ارائه می دهد.
کلاس های آموزشی
کریس کارگاههای جامع، کلاسهای آموزشی و بوتکمپها را برای مدیران اجرایی، معماران و توسعهدهندگان آموزش میدهد تا به سازمان شما کمک کند تا از میکروسرویسها به طور موثر استفاده کند.
از تلههای پذیرش میکروسرویسها اجتناب کنید و موضوعات ضروری را یاد بگیرید، مانند تجزیه و طراحی سرویس و نحوه بازسازی یکپارچه به میکروسرویسها.
تحویل حضوری و از راه دور.
کتاب: الگوهای میکروسرویس ها را دریافت کنید
کتاب کریس ریچاردسون را بخوانید:
نمونه برنامه های میکروسرویس
می خواهید نمونه ای را ببینید؟نمونه برنامه های کریس ریچاردسون را بررسی کنید. کد را ببینید
ساخت میکروسرویس ها
خدمات مشاوره
کریس را برای ایجاد نقشه راه پذیرش میکروسرویس ها درگیر کنید و به شما کمک کند معماری میکروسرویس خود را تعریف کنید.
پلت فرم رویداد
از پلتفرم Eventuate. io برای مقابله با چالش های مدیریت داده های توزیع شده در معماری میکروسرویس های خود استفاده کنید.
Eventuate آخرین استارت آپ کریس است. استفاده از الگوی Saga برای مدیریت تراکنش ها و الگوی CQRS برای پیاده سازی پرس و جوها را آسان می کند.