کلاسترینگ

مفهوم کلاسترینگ یا همان خوشه بندی در محیط یک Application Server زمانی مطرح می شود که بخواهیم سیستم هایی مقیاس پذیر و مقاوم در برابر خرابی داشته باشیم به این معنی که با افزایش بار و درخواست بر روی سرور، سرور قدرت پاسخدهی به حجم بیشتر درخواست را داشته باشد و یا در صورت بروز خرابی سامانه همچنان قادر به پاسخگویی و تحمل شرایط خرابی باشد. ابتدا انواع مقیاس پذیری مطرح می شوند.
مفهوم مقیاس پذیری به دو شکل عمودی و افقی مطرح می شود. در مقیاس پذیری عمودی ما سرور موجود را به تجهیزات سخت افزاری بیشتر و قوی تر مجهز می کنیم. به عنوان مثال تعدادی بشتری رم به سرور اضافه می کنیم یا دیسک سخت بیشتری در اختیار سرور قرار می دهیم. گاهی نیز تعداد هسته های پردازنده را افزایش می دهیم. حسن این روش در این است که سیستم عامل به صورت اتوماتیک سخت افزار جدیدی که افزوده شده است را تشخیص می دهد و تقریبا نیازی به تغییر در سطح برنامه های کاربردی تولید شده (application ها) نیست.
در مقیاس پذیری افقی ما سرور های جدید به مجموعه ی سرور موجود اضافه می کنیم به این معنا که سرور قدیمی موجود تغییری نخواهد داشت بلکه ما با شبکه ای از سرور ها (که به اصلاح به هر سرور در این شبکه گره یا نود گفته می شود) شروع به کار کرده و به مرور این شبکه را گسترش می دهیم. در حقیقت به مرور ما به این شبکه گره های بشتری می افزاییم. در مقیاس پذیری افقی معمولا نیاز به پیکربندی و تنظیم (tune) نود های جدید و باز نویسی application داریم. در حال حاضر خوشه بندی یا همان کلاسترینگ گزینه ی غالب برای رسیدن به مقیاس پذیری افقی موثر در بخش زیادی از برنامه های کاربردی تولید شده در سمت سرور است.
به دلیل تصورات غلط فراوانی که در حوزه ی سیستم های توزیع شده و همچنین در حوزه ی خوشه بندی وجود دارد نیاز است تا برخی واژگانی که در حوزه ی خوشه بندی و سیستم های توزیع شده بارها استفاده می شوند تعریف شوند که عبارتند از :
۱- cluster یا همان خوشه
۲- load balancer یا همان متوازن ساز بار
3- replication یا همان رونوشت
۴- failover یا غلبه بر خرابی
۵- high availability یا دسترس پذیری بالا

خوشه یا همان Cluster

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

متوازن ساز یا همان Load Balancer

معمولا در محیط خوشه شده هر نود در خوشه قابلیت توازن بار را دارد به این معنی که در صورتی که بار کاری یک نود بسیار بالاست، آن نود درخواست های جدید را به نود دیگر در همین خوشه واگذار می کند. اما گاهی این وظیفه به عهده ی مولفه ای دیگر به اسم متوازن ساز بار یا همان Load Balancer گذاشته می شود به نحوه ی که هر درخواست ورودی به خوشه ابتدا توسط متوازن ساز بار بررسی و سپس با استفاده از یک الگوریتم مشخص بار به نودی در خوشه واگذار می شود که برای پردازش درخواست متناسب تر باشد که معمولا نودی با حجم باری کم است. بدین ترتیب درخواست های جدید به سمت نود های با فشار کاری بالا هدایت نمی شوند. در صورتی که مجددا بار کاری یک نود که قبلا تحت فشار کاری بالا بوده است کم شود مجددا متوازن ساز بار درخواست های جدید را به سمت این نود هدایت می کند. در حقیقت متوازن ساز بار به نوعی تقیسم کننده ی درخواست ها بین نود های موجود است به نحوی که به هر نود بیش از حد توان بار و فشار تحمیل نشود.
روش های مختلفی برای تقسیم بار وجود دارد که توسط متوازن ساز بار به کار گرفته می شوند. بعضی از آنها عبارتند از :
۱- ارسال درخواست ورودی جدید به اولین نود موجود و در دسترس
۲- ارسال درخواست ورودی جدید به صورت نوبتی (وقتی نوبت یک نود برسد درخواست به آن نود ارسال می شود)
۳- روش sticky session که در آن درخواست های بعدی در یک سشن (مثلا سشن http) همواره به همان نودی هدایت می شوند که اولین درخواست این سشن به آن فرستاده شده بود.
۴- …
نکته مهم این که متوازن ساز بار به پارامتر های مختلف یک نود نگاه می کند، مثلا به میزان cpu usage آن نود و یا پهنای باند آزاد یک نود و در صورت مناسب بودن شرایط آن نود و کم بودن بار کاری درخواست را به آن نود هدایت می کند.

رونوشت یا همان Replication

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

غلبه بر خرابی با همان Failover

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

دسترس پذیری بالا یا همان High Availability

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

گیتوی پیامک ارمغان (وصال) چگونه خوشه بندی شده است و مزایای این معماری چیست؟

گیتوی پیام کوتاه شرکت ارمغان(وصال) اخیرا با تکنیک خوشه بندی راه اندازی و اجرا شده است و این بدین معنی است که درخواست هایی که از طرف کاربران و مشتریان به گیتوی ارسال می شوند بین نود های خوشه تقسیم و سپس پردازش می شوند. از مزایای این امر حاصل شدن دسترس پذیری بالا در سامانه است بدین معنی که در صورتی که در هر زمانی مانند شب یا ساعت های شلوغ یکی از نود های خوشه از دسترس خارج شود و دچار مشکل گردد نود های دیگر فعال و در حال پاسخ گویی هستند. به علاوه به صورت بالقوه خوشه بندی باعث افزایش ظرفیت پاسخگویی سیستم به درخواست های همزمان است زیرا این تعداد درخواست زیاد بین نود های خوشه تقسیم می شوند. همین خاصیت به طور طبیعی باعث کاهش زمان پاسخگویی و response time نیز خواهد شد. به علاوه لود بالانسری که در حال حاضر سامانه با آن تست شده است امکان تقسیم بار بر اساس توان پردازنده و پارامتر های سرور را دارد بدین ترتیب می توان از سرور های با توان پردازش متفاوت (سخت افزار متفاوت) در خوشه استفاده کرد به نحوی که بیش از حد توان هر سرور بار به آن تحمیل نشود.
یکی از محاسنی که با خوشه بندی سامانه حاصل می شود قابلیت غلبه بر محدودیت های فیزیکی مانند میزان RAM موجود است که توسط Application و پلتفرمی که Application با آن پیاده سازی شده است می باشد. به معنی که در بعضی از پلتفرم ها ی توسعه (از قبل Java و .NET محدودیت هایی برای فضای RAM موجود برای برنامه وجود دارد). وجود خوشه می تواند با تقسیم بار میزان RAM مصرفی هر نود را کنترل کند.
در معماری کنونی سامانه، لود بالانسر از الگوریتم Sticky Session برای درخواست هایی که نیازمند سشن Http هستند استفاده می کند بدین معنی که در صورتی که مشتری بر روی پورتال سامانه لاگین کند درخواست های Http او بعد از لاگین همواره به همان نودی در خوشه می روند که کاربر اولین بار بر روی آن لاگین کرده بوده است. بدین ترتیب داده های کاربر در زمان کار با پورتال از دست نمی روند و سشن Http او حفظ می شود.
یکی از تغییرات دیگری که در معماری خوشه بندی شده ی سامانه ی وصال لحاظ شده است ایجاد رپلیکیشن و رونشت برای زیر سیستم Messaging آن است. وجود ریپلیکیشن باعث می شود در صورتی که در حین کار زیر سیستم Messaging دچار خرابی گردد داده ها و پیام های در صف ارسال از بین نروند زیرا یک کپی از آن ها در نود دیگر در دسترس است که نود های خوشه به صورت اتوماتیک برای ادامه ی کار به این نود پشتیبان وصل خواهند شد.
در مجموع معماری کلی وصال در حال حاضر شامل وجود Load Balancer در ابتدای مسیر، سپس Application Server خوشه بندی شده در ادامه ی مسیر، و در ادامه زیر سیستم Messaging است که به صورت رپلیکیت شده عمل می کند. کلیه ی این تمهیدات باعث می شود سیستم وصال در زمان خرابی یا در روز های پیک کاری و یا در زمان هایی که نیاز به از دسترس خارج کردن یک نود برای تجهیز یا تعمیر آن است همچنان در دسترس باقی بماند.