توزیع برنامه های جاوا بر روی چندین jvm (یا java virtual amachin) این امکان را فراهم می کند تا بتوانیم درخواست های بیشتری را پاسخ دهیم. توزیع برنامه های جاوا بر روی jvm های مختلف که هر jvm بر روی یک ماشین قرار دارد، به عبارتی بیان کننده یک سیستم توزیع شده (distributed system) است که مزایای توزیع شدگی را همراه دارد.

هدف دیگر از توزیع برنامه جاوا روی jvm های مختلف در کنار مزیت های سیستم توزیع شده، پاسخی خواهد بود به رشد تجارت و نیازهای شرکت که با زیاد شدن مشتری ها و یا کاربران نهایی، شرکت نیاز دارد سیستم را گسترش دهد تا بتواند به صورت همزمان به کاربران بیشتری پاسخ دهد.

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

مزیت های سیستم توزیع شده

 

سیستم های توزیع شده (distributed systems) مجموعه ای از کامپیوترهای به هم متصل شده درون یک شبکه هستند که هدف آنها انجام یک کار یا هدف مشترک است. کلاسترها (clusters) نوعی از سیستم های توزیع شده هستند که برای انجام محسابات (computing) طراحی می شوند.

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

مهمترین چیزی که باید به یاد داشته باشید این است که کل کلاستر (مجموعه کامپیوترهای درون یک شبکه) برای کاربر به صورت یک تک ماشین خواهد بود. شکل زیر (شکل ۱) معماری کلاستر apache ignite را نشان می دهد. همانطور که پیش از این توضیح داده ایم، تمامی گره های درون کلاستر مشابه هم هستند و هیچ گره اصلی (master node) وجود ندارد.

مطابق شکل ۱ برای پیاده سازی کلاستر، توپولوژی حلقه ای (ring topology) است و هیچ گره اصلی وجود ندارد که کاربر بتواند با آن تعامل داشته باشد. زمانی که کاربر به کلاستر وصل شود، به صورت تصادفی به یکی از گره های وصل می شود.

نکته مهم این است که کاربر نمی داند کدام گره پاسخ درخواست آنرا پردازش می کند. در مطلب بعدی در مورد رویکردهای کَش توضیح می دهیم و خواهیم گفت که چگونه داده ها بر روی گره های کلاستر apache ignite پخش می شوند ولی کاربر به هیچ عنوان از چگونگی فرایند پردازش درخواستش توسط apache ignite اطلاع ندارد.

مقیاس پذیزی

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

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

 

انواع مقیاس پذیزی

به طور کلی دو روش scale-up و scale-out برای مقیاس دادن یک سیستم (کلاستر) وجود دارد. مطابق شکل زیر (۲) در روش scale-up یک سیستم را با افزودن منابع، افزایش مقایس می دهیم. به طور مثال سیستم نیاز به منبع ذخیره سازی بیشتری دارد، پس storage را درون همان سیستم افزایش می دهیم. ولی در روش scale-out یک گره جدید به کلاستر اضافه می شود. با این کار تعداد گره ها و همچنین کل ظرفیت منابع کلاستر افزایش پیدا می کند.

در مفاهیم مقیاس پذیری دو واژه vertical scalability یا مقایس پذیری عمودی معادل با مقایس پذیری scale-up است و واژه horizental scalability یا مقیاس پذیری افقی معادل با مقیاس پذیری scale-out است. به طور کلی مقایس پذیزی عمودی یعنی افزایش منابع یک تک سیستم ولی مقایس پذیری افقی یعنی افزایش مقایس از طریق افزودن یک گره جدید به کل سیستم.