معماری برنامه های کاربردی یکپارچه مرسوم برای برنامه های سرور اخیراً دستخوش یک تغییر پارادایم در صنعت نرم افزار شده است و معماری میکروسرویس در حال حاضر جای آن را گرفته است. ایده مجموعهای از ماژولهای سبک وزن که به هم متصل شدهاند که هر کدام یک عملکرد واحد را نشان میدهند و در فرآیندهای خود اجرا میکنند، بسیار محبوب بوده و دلیل خوبی هم دارد. مقیاس پذیری، قابلیت اطمینان و در دسترس بودن بالا توسط معماری میکروسرویس امکان پذیر شده است زیرا هر سرویس جداگانه بدون هیچ گونه وابستگی به طور مستقل ایجاد، مدیریت و آزمایش می شود.
از آنجایی که ریزسرویسها به طور ضعیفی جفت میشوند، منطقی است که یک واسطه پیام در این زیرساخت قرار گیرد تا امکان ارتباط میکروسرویس ناهمزمان را فراهم کند، در حالی که جداسازی را حفظ میکند. ارتباط ناهمزمان به این معنی است که هر یک از سرویس ها نباید منتظر دیگری باشد. برای این کار، مدل انتشار-اشتراک به طور گسترده به عنوان رسانه ای برای ارتباط بین ریزسرویس ها پذیرفته شده است.
NCache یک ذخیرهسازی دادههای توزیعشده در حافظه برای داتنت است و pub/sub با ویژگیهای غنی و درون حافظه را برای ارتباطات مبتنی بر رویداد فراهم میکند. از این رو، NCache می تواند به راحتی به عنوان یک واسطه پیام برای ارتباطات ناهمزمان بین میکروسرویس ها با استفاده از مدل Pub/Sub پیکربندی شود.
استفاده از NCache In-Memory Pub/Sub برای Microservices
Pub/Sub در NCache با تعریف موضوعی فعال می شود که در آن میکروسرویس ها (ساخته شده در .NET/.NET Core) می توانند رویدادها را منتشر کنند و همچنین در آنها مشترک شوند. رویدادها خارج از میکروسرویس، به واسطه پیام NCache منتشر می شوند. هر میکروسرویس مشترک حاوی یک کنترل کننده رویداد است تا پس از انتشار میکروسرویس ناشر، رویداد مناسب را مدیریت کند.
استفاده از NCache In-Memory Pub/Sub برای Microservices
Pub/Sub در NCache با تعریف موضوعی فعال می شود که در آن میکروسرویس ها (ساخته شده در .NET/.NET Core) می توانند رویدادها را منتشر کنند و همچنین در آنها مشترک شوند. رویدادها خارج از میکروسرویس، به واسطه پیام NCache منتشر می شوند. هر میکروسرویس مشترک حاوی یک کنترل کننده رویداد است تا پس از انتشار میکروسرویس ناشر، رویداد مناسب را مدیریت کند.
مثال سریع استفاده از NCache In-Memory Pub/Sub
با استفاده از برنامه eShopOnContainers، NCache به عنوان یک واسطه پیام در چندین سناریو عمل می کند. یکی از سناریوهایی که در اینجا برجسته شده است، رویداد تسویه حساب کاربر است که در آن جزئیات سبد در گذرگاه رویداد NCache منتشر می شود و برنامه سفارش ممکن است برای پردازش سفارش در سبدهای ورودی در پرداخت کاربر مشترک شده باشد.
- انتشار: این قطعه کد ساده شده بخشی از منطق پرداخت سبد را در میکروسرویس Basket.API نشان می دهد که در آن شناسه کاربر و تمام جزئیات سبد مانند آدرس، شماره کارت و موارد دیگر به عنوان بار پیام اضافه شده و در اتوبوس رویداد منتشر می شود. کد Basket.API را می توان در کلاس BasketController.cs در GitHub یافت.
[Route("checkout")] [HttpPost] public async Task<ActionResult> CheckoutAsync([FromBody]BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId) { var userId = GetUserIdentity(); basketCheckout.RequestId = GetRequestID(); var basket = await GetBasketAsync(userId); var userName = User.FindFirst(x => x.Type == "unique_name").Value; var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.Address, basketCheckout.CardNumber, basketCheckout.RequestId, basket);
// This message is published to the NCache Pub/Sub store eventBus.Publish(eventMessage); } |
- اشتراک: قطعه کد زیر از میکروسرویس Ordering.API است که کد آن در GitHub آپلود شده است. این شامل یک اشتراک در رویداد UserCheckout است که در آن هنگامی که کاربر سبد خرید را بررسی کرد، یک رویداد به عنوان یک پیام منتشر میشود و کنترلکننده از مشترک برای پردازش بیشتر سفارش فراخوانده میشود.
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler<UserCheckoutAcceptedEvent>>(); |
دوام پیام Pub/Sub با اشتراک های بادوام
از آنجایی که میکروسرویسها بهطور ضعیفی جفت میشوند، به این معنی است که میکروسرویسها ممکن است در هر زمانی به برنامه ملحق شوند یا از آن خارج شوند. علاوه بر این، اگر در حین ارسال پیام با ترافیک بالا با مشکلی در شبکه مواجه شوید، چه؟ این بدان معنی است که اتصال میکروسرویس با گذرگاه رویداد باید به اندازه کافی انعطاف پذیر باشد، بنابراین پیام ها از بین نمی روند حتی اگر شبکه به طور موقت قطع شده باشد.
NCache دو نوع اشتراک بادوام را برای تطبیق دوام پیام شما در میان ریزسرویسهای NET/.NET Core ارائه میدهد:
- اشتراک های بادوام مشترک: چند مشترک می توانند مشترک یک اشتراک شوند. روش Round Robin برای ارسال پیام به چندین مشترک استفاده می شود. حتی اگر مشترکین شبکه را ترک کنند، پیام ها بین مشترکین فعال همچنان توزیع می شود.
- اشتراک های بادوام انحصاری: یک اشتراک هر بار فقط یک مشترک فعال دارد. هیچ درخواست مشترک جدیدی در همان اشتراک پذیرفته نمی شود تا زمانی که اتصال فعال باشد.
قابلیت اطمینان ارتباط با تلاش های مجدد اتصال
از آنجایی که ریزسرویسها برای ارتباط به شبکه متکی هستند، ممکن است خرابیهای غیرمنتظرهای در شبکه وجود داشته باشد که مستلزم داشتن مکانیزم برقراری ارتباط است. بنابراین، NCache یک پلت فرم ارتباطی قابل اعتماد را با تلاش های مجدد اتصال و ویژگی های زنده نگه می دارد تا مطمئن شود که سرویس های NET/.NET Core شما به طور خودکار سعی می کنند در صورت خرابی شبکه به حافظه پنهان متصل شوند. این امر نیاز به سیاست های امتحان مجدد توسط هر کتابخانه شخص ثالثی مانند Polly را از بین می برد.
چرا NCache؟
از آنجایی که سازمانها اکنون معماری میکروسرویس را بر روی برنامههای یکپارچه میپذیرند، NCache تبدیل به ذخیرهگاه دادههای توزیعشده درون حافظه شما میشود تا بهعنوان واسطهای برای برنامههای میکروسرویس هسته داتنت/.NET شما استفاده شود.
- بسیار سریع و مقیاسپذیر خطی: NCache به دلیل حافظه داخلی، ارتباط سریعتری را نسبت به سایر راهحلهای Pub/Sub فراهم میکند. علاوه بر این، توزیع به NCache این امکان را می دهد که به شما اجازه دهد در حین حرکت، با اضافه کردن سرورهای بیشتری به خوشه Message Broker برای مدیریت بارهای بیشتر، مقیاس کنید.
- در دسترس بودن بالا: NCache یک معماری خوشهای همتا به همتا پویا و خود ترمیمشونده ارائه میکند که هیچ نقطهای از شکست را تضمین نمیکند. علاوه بر این، NCache به طور هوشمندانه پیامها را تکرار میکند و همچنین اشتراکهای بادوام را فراهم میکند، بنابراین در صورت از کار افتادن سرور کش، پیامی از دست نمیرود و دسترسی بالا به میکروسرویسهای شما را برای ارتباط تضمین میکند. NCache همچنین در مواقعی که نیاز به افزایش تعداد سرورها در کلاستر دارید، با اجازه دادن به شما در اضافه کردن این سرورها در زمان اجرا بدون توقف خوشه، دسترسی بالایی را فراهم می کند.
- Native .NET Core: برای میکروسرویس های ساخته شده در .NET/.NET Core، NCache یک پشته اصلی .NET / .NET 100% برای ادغام یکپارچه در پشته برنامه شما فراهم می کند.
به طور خلاصه، در حالی که میکروسرویس ها برنامه شما را به واحدهای منطقی ساده می کنند، مدیریت ارتباط بین آنها نیز دشوار می شود. از این رو، NCache پیچیدگی افزوده معرفی یک واسطه پیام رسانی بسیار در دسترس را که همزمان به جداسازی نیز احترام می گذارد، از بین می برد.
- ۰۱/۱۰/۳۰