NCache یک راه حل ذخیره سازی ذخیره سازی منبع باز 100% بومی .NET / .NET Core از Alachisoft است که می تواند به افزایش عملکرد و مقیاس پذیری برنامه شما با جهش و مرز کمک کند. این یک حافظه پنهان توزیع شده سریع در حافظه است که می تواند به صورت خطی مقیاس بندی کند و ویژگی های همگام سازی کش قوی را ارائه می دهد. می توانید سرورهای بیشتری را در صورت نیاز اضافه کنید تا بتوانید مقیاس خطی را انجام دهید. این مقاله بحثی را در مورد اینکه چگونه میتوانیم از NCache PubSub برای مقیاسبندی میکروسرویسها استفاده کنیم، ارائه میکند.
این مقاله به نکات زیر می پردازد
- مقیاس پذیری چیست؟
- مدل ناشر – مشترک چیست؟
- مقیاس پذیری چیست؟
- میکروسرویس چیست؟
- Pub/Sub Model چیست؟
- NCache به عنوان In-Memory Pub/Sub برای Microservices
- برنامه نویسی: انتشار و اشتراک پیام به/از یک موضوع
پیش نیازها
برای کار با و اجرای نمونه کدهای مورد بحث در این مقاله، باید موارد زیر را در سیستم خود نصب کنید.
- Visual Studio 2019
- .NET. Core 3.0
مقیاس پذیری چیست؟
اصطلاح مقیاس پذیری یک برنامه کاربردی به عنوان توانایی آن برای پاسخگویی به بارهای تراکنش افزایش یافته بدون کاهش سرعت تعریف می شود. به عبارت دیگر، مقیاس پذیری یک برنامه، توانایی آن برای ادامه کار به همان سرعت است، حتی زمانی که حجم کاری اضافی برای برآورده کردن خواسته های کاربر اضافه می شود. یک برنامه مقیاس پذیر برنامه ای است که با تقاضاهای رو به رشد (کاربران همزمان بیشتر، تراکنش های بیشتر در ثانیه و غیره) در طول زمان سازگار باشد. مقیاس پذیری برنامه های کاربردی مبتنی بر میکروسرویس، توانایی آن در مدیریت افزایش ترافیک و در نتیجه تقاضای منابع در طول زمان است. توجه داشته باشید که توانایی مقیاس پذیری آسان یکی از مزایای کلیدی معماری میکروسرویس ها است.
توجه داشته باشید که حتی اگر اصطلاحات مقیاس پذیری و کشش هر دو به افزایش توانایی برنامه در حفظ حجم کاری مربوط می شوند، تفاوت های ظریفی بین این دو وجود دارد. در حالی که مقیاس پذیری به توانایی یک برنامه کاربردی برای حفظ حجم کار اضافی با استفاده از منابع سخت افزاری فعلی یا موجود مربوط می شود، کشش به توانایی برنامه برای حفظ تقاضا برای حجم کار اضافی با استفاده از منابع سخت افزاری فعلی و اضافی که در صورت تقاضا اضافه می شوند، مربوط می شود.
میکروسرویس چیست؟
مارتین فاولر می گوید: "به طور خلاصه، سبک معماری میکروسرویس رویکردی برای توسعه یک برنامه کاربردی واحد به عنوان مجموعه ای از سرویس های کوچک است که هر کدام در فرآیند خاص خود اجرا می شوند و با مکانیسم های سبک وزن، اغلب یک API منبع HTTP ارتباط برقرار می کنند. این سرویس ها بر اساس ساخته شده اند. قابلیت های تجاری و به طور مستقل توسط ماشین آلات استقرار کاملاً خودکار قابل استقرار است."
معماری میکروسرویس گونهای از معماری سرویسمحور است و میتواند برای ساخت سرویسهای سبک وزن که میتوانند به طور مستقل ساخته، آزمایش، استقرار و مدیریت شوند، استفاده شود. به طور معمول، یک برنامه کاربردی مبتنی بر ریزسرویس شامل چندین سرویس با اتصال آزاد است که برای اجرا بر روی ترکیبی ناهمگن از پلتفرمها ساخته شدهاند. به عبارت دیگر، میتوانید از معماری میکروسرویسها برای ایجاد سرویسهای انعطافپذیر، توسعهپذیر و مستقل قابل استقرار در پلتفرمهای متفاوت استفاده کنید.
معماری میکروسرویسها مجموعهای از فناوریها و پلتفرمهای متفاوت است - نتیجه نیازهای تجاری در حال تغییر صنعت. شما می توانید یک برنامه کاربردی مبتنی بر میکروسرویس بسازید که می تواند شامل دات نت، جاوا، پی اچ پی و غیره باشد - شما محدود به استفاده از فناوری یکسان در سراسر کشور نیستید. در مقابل، هنگام کار بر روی یک برنامه یکپارچه، شما مجبور به استفاده از پلتفرم فناوری یکسان هستید - ساختن یکپارچه با فناوریهای متفاوت برای شما بسیار متفاوت است - موانع بیشتر از مزایا هستند و بنابراین ارزش انتخاب کردن را ندارد.
قبل از ظهور معماری میکروسرویسها، برنامههای کاربردی سنتی به روشی یکپارچه ساخته میشدند - عملکرد تجاری برنامه در یک فرآیند واحد ذخیره میشد. در نتیجه، چرخه های تغییر همه با هم گره خوردند. بنابراین، اگر نیاز به ایجاد یک تغییر جزئی در برنامه داشته باشید، مجبور خواهید بود کل برنامه را دوباره بسازید و مجدداً مستقر کنید. برعکس، معماری میکروسرویسها، عملکرد برنامه شما را به تعدادی از خدمات قابل استقرار مستقل تقسیم میکند - این سرویسها میتوانند به طور مستقل ساخته، مستقر و مدیریت شوند. شما می توانید مقیاس پذیری برنامه مبتنی بر میکروسرویس خود را با توزیع این خدمات در سرورها بهبود بخشید. مهمتر از همه، اگر تغییری در بخشی از برنامه مورد نیاز است، میتوانید فقط سرویس یا سرویسهایی را که تغییر کردهاند، مستقر کنید.
مدل ناشر-مشترک چیست؟
پیام انتشار/اشتراک، نوعی پیام رسانی ناهمزمان یا نوعی سرویس ناهمزمان برای ارتباطات سرویس است. این نوع پیامرسانی معمولاً در معماریهای محاسباتی بدون سرور و میکروسرویسها استفاده میشود. در یک مدل معمولی public-subscribe (که معمولاً به عنوان pub-sub شناخته میشود)، ناشر رویداد اعلانها یا پیامهای رویداد را به مشترکین ارسال میکند. مدل پیامرسانی pub-sub اعلانهای رویداد را برای برنامههای کاربردی توزیع شده تسهیل میکند - روشی را که ناشران و مشترکین میتوانند به طور ناهمزمان با یکدیگر متصل شده و با یکدیگر ارتباط برقرار کنند، توضیح میدهد.
مدل ناشر-مشترک مزایای زیر را ارائه می دهد:
- اتصال سست
- امنیت بهتر
- تست پذیری بهبود یافته
- عملکرد بهبود یافته است
سه جزء در یک الگوی معمولی ناشر-مشترک وجود دارد. این موارد شامل موارد زیر است،
- ناشر - این مؤلفه ای است که پیام ها را به یک زیرساخت ارتباطی منتشر می کند
- مشترک - این مؤلفه ای است که در یک یا چند پیام منتشر شده مشترک می شود
- زیرساخت ارتباطی - این زیرساخت از کانالهایی تشکیل شده است و مسئول فراهم کردن زیرساختهای لازم برای برقراری ارتباط موثر است.
چرا Pub/Sub در معماری Microservices؟
مدل pub-sub ارتباط سرویس به سرویس ناهمزمان را در برنامه های کاربردی مبتنی بر میکروسرویس تسهیل می کند. در یک سیستم پیامرسانی میخانه/فرعی، پیامها با استفاده از یک کانال واسطه که به عنوان موضوع شناخته میشود، بین چندین برنامه رد و بدل میشود، بدون هر گونه دانشی از برنامههای ارسال یا دریافت. مدل pub/sub عمدتاً به دلیل ماهیت ناهمزمان و رویداد محور آن در معماری میکروسرویس مناسب است - شما می توانید از مزیت مدل pub-sub برای ساخت معماری های میکروسرویس با کارایی بالا، قابل اعتماد و مقیاس پذیر استفاده کنید.
انواع اشتراک Pub/Sub در NCache
هنگام کار با برنامههای مبتنی بر میکروسرویس، انعطافپذیری از اهمیت بالایی برخوردار است - تضمین میکند که یک یا چند میکروسرویس میتوانند از خرابیها بازیابی شوند و شکست یک قسمت از برنامه، کل برنامه را از بین نخواهد برد.
NCache از چندین اشتراک میخانه/اشتراک بین ناشران و مشترکین پشتیبانی می کند. دو نوع اشتراک پشتیبانی می شود - این موارد شامل موارد زیر است (برای جزئیات به اسناد NCache مراجعه کنید)،
- اشتراک مبتنی بر الگو
- اشتراک بادوام و غیر بادوام
هنگام استفاده از اشتراک مبتنی بر الگو، مشتریان می توانند الگوهای سبک را برای اشتراک در موضوعات متعدد ارائه دهند. به محض ایجاد اشتراک در یک موضوع مبتنی بر الگو، مشتریان پیام هایی را دریافت می کنند که در مورد موضوعاتی که با الگوی مطابقت دارند منتشر می شوند.
NCache از دو نوع اشتراک بادوام پشتیبانی می کند - اشتراک بادوام مشترک و اشتراک بادوام انحصاری. در حالت اول، مشترکین متعدد می توانند در یک اشتراک مشترک شوند و از روش دور روبین برای ارسال پیام به مشترکین استفاده می شود. در حالت دوم، برای هر اشتراک فقط یک مشترک فعال وجود دارد. درخواست برای مشترکین جدید تا زمانی که اتصال فعال است پردازش نمی شود.
مدلهای Pub-Sub مبتنی بر موضوع و محتوا
در مدل انتشار-اشتراک، پیامها با استفاده از یکی از این دو روش انتخاب میشوند: سیستمهای مبتنی بر موضوع و سیستمهای مبتنی بر محتوا. توجه داشته باشید که در یک سیستم مبتنی بر موضوع معمولی، پیامهایی که برای یک موضوع منتشر میشوند، در واقع توسط همه مشترکین موضوع بلافاصله دریافت میشوند. در یک سیستم مبتنی بر محتوا، پیامها تنها در صورتی تحویل داده میشوند که محدودیتها و معیارهای مشخصی که توسط مشترک تعریف شده است، برآورده شوند.
توجه داشته باشید که در یک صف یک پیام تنها به یک مشترک می رسد. برعکس در یک موضوع پیامی به تک تک مشترکین می رسد. در حالی که موضوعات برای مدل ناشر-مشترک مناسب هستند، صف ها انتخاب خوبی برای نقطه به نقطه هستند.
در اکثر سیستمهای میخانه/زیر، ناشران پیامها را در یک واسطه پیام میانی یا یک اتوبوس رویداد ارسال میکنند. کارگزار پیامها را از ناشران به مشترکان هدایت میکند و همچنین ممکن است به صورت اختیاری پیامها را قبل از مسیریابی اولویتبندی کند.
NCache به عنوان In-Memory Pub/Sub برای Microservices
مدل پیامرسانی ناشر/مشترک معمولاً در برنامههای کاربردی توزیعشده بهعنوان راهی برای مبادله پیامها بین چندین برنامه بهصورت جداشده استفاده میشود - بدون اینکه این برنامهها نیازی به دانستن مبدع پیام از کجا دارند. اتفاقاً، این پیامها سپس با استفاده از یک کانال واسطه رد و بدل میشوند - که به عنوان موضوع شناخته میشود.
NCache برای ارتباطات مبتنی بر رویداد در برنامههای مبتنی بر میکروسرویس برای میخانه/زیر حافظه در حافظه مناسب است. میتوانید با تعریف موضوعی که سرویسها میتوانند از آن برای انتشار رویدادها یا اشتراک در آن استفاده کنند، ویژگی pub-sub را در NCache فعال کنید. ناشر یک جزء (یا یک میکروسرویس) است که پیامی را به موضوع NCache منتشر می کند. رویدادها برای کارگزار پیام NCache منتشر می شوند. هر میکروسرویس مشترک از یک کنترل کننده رویداد استفاده می کند تا به محض اینکه یک میکروسرویس ناشر پیامی را برای کارگزار پیام NCache منتشر کرد، رویداد مناسب را مدیریت کند.
قطعه کد ساده شده ارائه شده در زیر نشان می دهد که چگونه پیام ها می توانند در گذرگاه رویداد NCache منتشر شوند.
- [Route("CheckoutItems")]
- [HttpPost]
- public async Task < ActionResult > CheckoutItemsAsync([FromBody] Item item) {
- var items = _itemService.GetItemAsync(item.Id);
- //Write your code to build the message here.
- //Assume that the message instance is named eventMessage.
- try {
- _eventBus.Publish(eventMessage);
- } catch (Exception ex) {
- _logger.LogError(ex, "Error publishing event");
- throw;
- }
- return Ok(items);
- }
با فرض اینکه برنامه شما به حافظه نهان متصل است، قطعه کد زیر نحوه انتشار پیام ها را در حافظه پنهان نشان می دهد.
- try {
- string topicName = "demoTopic";
- ITopic demoTopic = cache.MessagingService.GetTopic(topicName);
- if (demoTopic != null) {
- //Write code here to build the message instance
- demoTopic.Publish(demoMessage, DeliveryOption.All, true);
- } else {
- //There is no topic in the name specified.
- }
- } catch (Exception ex) {
- //Write your error handling code here
- }
برای حذف یک موضوع، می توانید از کد کد زیر استفاده کنید:
- try {
- string topicName = "demoTopic";
- cache.MessagingService.DeleteTopic(topicName);
- } catch (Exception ex) {
- //Write code error handling code here
- }
با فرض اتصال برنامه به حافظه نهان، قطعه کد زیر نشان می دهد که چگونه می توانید در یک اشتراک غیر بادوام مشترک شوید.
- try {
- string topicName = "demoTopic";
- ITopic demoTopic = cache.MessagingService.GetTopic(topicName);
- if (orderTopic != null) {
- ITopicSubscription demoSubscriber = demoTopic.CreateSubscription(MessageReceived);
- } else {
- //There is no topic in the name specified.
- }
- } catch (Exception ex) {
- //Write your error handling code here
- }
- private void MessageReceived(object sender, MessageEventArgs args) {
- if (args.Message.Payload is Item item) {
- //Write your code to perform some operation here
- } else {
- // Error occurred
- }
- }
با فرض اینکه حافظه نهان از قبل متصل شده باشد، قطعه کد زیر نشان می دهد که چگونه می توانید از روش CreateDurableSubscription برای ایجاد یک اشتراک بادوام استفاده کنید.
خلاصه
معماری Microservices شامل مجموعهای از ماژولهایی است که بهطور آزاد به هم متصل شدهاند که میتوانند از طریق APIهای ساده با یکدیگر ارتباط برقرار کنند. مدل Pub/sub روشی زیبا برای ارتباط سرویسها در یک برنامه کاربردی مبتنی بر میکروسرویسهای معمولی است.
شما می توانید از NCache به عنوان یک واسطه پیام رسانی برای ارتباطات ناهمزمان بین میکروسرویس ها با استفاده از مدل Pub/Sub استفاده کنید. این مقاله بحثی را در مورد اینکه چگونه میتوانیم با مدل pub-sub با استفاده از NCache برای بهبود مقیاسپذیری برنامههای مبتنی بر میکروسرویس کار کنیم، ارائه کردیم.
- ۰۱/۱۰/۳۰