پیاده سازی Load Balancing در سمت سرور

یکشنبه 23 آبان 1395

در این مقاله مطالبی درباره پیاده سازی Load Balancing سمت سرور در WCF خواهیم آموخت و سپس آن را در برنامه ای استفاده خواهیم کرد تا بتوانیم روش کار آن را بررسی کنیم. سپس مزایای این روش را بررسی خواهیم کرد.

پیاده سازی Load Balancing در سمت سرور

Load balancing یک ویژگی بسیار مفید در WCF است که به وسیله ی آن می توانیم بار پردازشی موجود بر روی سیستم را در بین سرور های مجزا در یک گروه تقسیم کنیم. با این کار می توانیم زمان پاسخ به درخواست کاربر را به میزان زیادی کاهش بدهیم و سریع تر عملیات مورد نیاز کاربر را انجام بدهیم. در این فرآیند، مجبور نیستیم برای پردازش درخواست ها، مدت زمان زیادی صبر کنیم و می توانیم پاسخ را از سرور های دیگه دریافت کنیم.

چرا به Load balancing نیاز داریم؟

• داشتن بیشترین میزان بازدهی

• کاهش زمان پاسخ دهی به کاربر

•سرور های مجزا برای پردازش های حساس

• بهینه سازی منابع

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

تنظیم Load balancing

در تصویر بالا می بینید که یک کاربر می تواند درخواست های متفاوت و زیادی انجام بدهد. اگر پردازش های حساسی مانند رزرو بلیت به سرویس Load Balancer بیاید، این سرویس، عملیات را به سرور مجزایی که مخصوص این عملیات است، هدایت می کند تا به این ترتیب سیستم بتواند سرعت بالایی در پردازش درخواست های کاربر داشته باشد. درخواست های عادی به این سرور (که مخصوص پردازش های حساس است) فرستاده نمی شوند و توسط سرویس های دیگری مدیریت می شوند. بیایید نحوه پیاده سازی این سرویس ها را با استفاده از WCF بررسی کنیم.

پیکربندی سرویس ها

در اولین گام، نیاز داریم تا دو سرویس تعریف کنیم. که یکی برای مدیریت پردازش های حساس استفاده شود و دیگری برای پردازش های عادی سیستم مورد استفاده قرار بگیرد. هر یک از این دو سرور، در صورت لزوم می توانند به تنهایی همه عملیات ها را مدیریت کنند. در تصویر زیر می توانید ببینید که کدام سرور، مسئول انجام چه وظیفه ای است.

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

پیکربندی Load Balancer

حالا بیایید Load_balancer را پیکربندی کنیم تا بتوانیم عملیات رزرو بلیت را بر روی یک سرور مجزا و سایر عملیات های معمولی را بر روی یک سرور دیگر انجام دهیم. در پروژه ما، Service 2 درخواست های مربوط به رزرو بلیت ها را مدیریت می کند و Service 1 درخواست های نرمال را مدیریت و پردازش می کند. برای ارجاع و آدرس دهی ها باید از "Service the FilterTable and FilterEnd" استفاده کنیم که کار ما را در آدرس دهی ها بسیار ساده می کند. 

مطابق روشی که در شکل زیر نشان داده شده است، می توانید بخش routing  سرویس ها را تنظیم کنید ، نام آن را همیشه برابر "System.ServiceModel.Routing.RoutingService" قرار بدهید و آدرس و سایر اطلاعات را مطابق با نیاز خودتان پیاده سازی کنید. 

قدم بعدی، تعریف  Filter table است که در آن باید فیلتر ها و نقطه نهایی آن را تعریف کنید. زمانی که می خواهیم یک فیلتر تعریف کنیم، باید filtertype  و filterData را نیز پر کنیم. در پروژه ما زمانی که درخواست ها به سرور می رسد، باید به url مشخص شده در تصویر زیر منتقل شوند. 

در تصویر بالا می توانید ببینید که درخواستی که از سمت عملیات BookTicket می آید، مقصد خودش را در filtertable پیدا می کند. در پروژه ما، مسیر اختصاص داده شده به  "TktBookFilter" ، "ept_TktBookLoadBalanceServer" است. سپس ، اگر پیامی از این طریق برسد، به مسیر مشخص شده خودش ارسال و هدایت می شود.  منطق پروژه به این صورت است که درخواست های پردازشی و رزرو بلیت به  http://localhost:8650/RailServices2 و سایر درخواست های عادی به http://localhost:8650/RailServices1 ارسال می شوند. 

خروجی :

در دو تصویر انتهایی می توانید ببینید که ابتدا آدرس سرویس ها مشخص شده است.(آدرس مربوط به هاست سرور ها) سپس درخواست های کابران به درخواست های معمولی و پردازشی (رزرو بلیت) تفکیک می شود و به سرور های مربوطه برای پردازش فرستاده می شود. 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • WCF
  • 3k بازدید
  • 0 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید