کَش درون حافظه توزیع شده (distributed in-memory cache) و یا به اختصار کَش توزیع شده (distributed cache) اجازه می دهد تا بتوانیم داده ها را بر روی حافظه های گره های کلاستر پخش کنیم. توجه کنید که apache ignite یک پایگاه داده توزیع شده درون حافظه (in-memory distributed database) است که برای ذخیره سازی داده ها و برای بالا بردن کارایی (performance) محاسبات و پردازش داده ها، از حافظه اصلی استفاده می کند.

apache ignite سه رویکرد (توپولوژی) کلی را برای کَش کردن داده ها فراهم کرده است که شام: پارتیشن بندی شده (partitioned)، تکثر شده (replicated) و محلی (local) می شود. هر یک از این توپولوژی ها کاربرو هدف خودش را دارد و دارای مزیت یا عیب در مقایسه با رویکرد دیگری است.

رویکرد پارتیشن بندی

پارتیشن بندی (PARTIONED) اصلی ترین رویکرد برای پیاده سازی کَش توزیع شده (distributed cache)، که هدف آن فراهم کردن حداکثر مقیاس پذیری (scalability) است. در این حالت (یا mode) کل مجموعه داده ها (data set) به پارتیشن های مساوی تقسیم می شود و تمامی پارتیشن ها به صورت مساوی میان تمامی گره های شرکت کننده در پارتیشن بندی پخش یا توزیع (distribute) می شوند.

هدف دیگر از پارتیشن بندی برای این است که کل داده ها را در غالب پارتیشن ها، بر روی گره ها پخش کنیم تا باعث پخش بار (work load) بر روی گره های مختلف شویم. همچنین می توانیم با اضافه کردن گره جدید، منابع بیشتری را به کلاستر اضافه کنیم تا در نگهداری داده ها کمک کنند. شکل زیر (۱) نمای کلی رویکرد PARTIONED را نشان می دهد.

در شکل یک می بینید که کلید A در JVM1 و کلید B در JVM3 و کلید C در JVM3 ذخیره شده است. در مطالب بعدی توضیح خواهیم داد که چگونه کَش ایجاد و حالت یا mode آنرا نیز تعیین کنیم. کَش پارتیشن بندی شده برای حجم زیادی از داده ها که به صورت مکرر بروز می شوند مناسب است.

در شکل ۱ بر روی هر jvm دو گره وجود دارد، یک گره که primary node گفته می شود و داده را نگهداری می کند که بروزرسانی بر روی آن انجام خواهد شد. گره دیگر که گره پشتیبان یا backup node گفته می شود و یک نسخه پشتیان را نگه می دارد. به عبارت دیگر هر زمان که تغییری روی یک داده (یا کلید) رخ دهد، این تغییر اول بر روی نسخه اصلی و سپس به نسخه پشتیبان اعمال می شود.

توجه کنید که تمامی فرایندهای بالا به شفاف (transparent) توسط apache ignite انجام می شود. به عبارات دیگر رویکرد پارتیشن بندی برای داده های مکرر بروز شدنی مفید است زیر تنها همان داده که در کَش وجود دارد، بروز می شود و نیازی به دیگر گره ها نیست.

در مطلب قبلی در مورد اجرای یک برنامه بر روی jvm های مختلف و به صورت توزیع شده صحبت کردهیم.

 

رویکرد تکثیر شدن

تکثیر شدن (replicated) کل داده ها بر روی تک تک گره ها تکثیر می شود. گفتیم که partitioned برای عملیات هایی مانند update و یا هر عملیات dml (یا data manipulation language) دیگر مناسب است به این دلیل که عملیات تنها بر روی همان گره ای ایجاد می شود که کلید در آن وجود دارد، اما در این حالت عملیات خواندن بسیار پر هزینه (از نظر صرف منابع مانند پهنای باند شبکه) خواهد بود زیرا ممکن است مکرر عملیات بر روی یک گره انجام می شود.

در حال

هدف اصلی از رویکرد تکثیر کردن، فراهم کردن حداکثر کارایی (performance) است به این صورت که تمامی داده ها بر روی تمامی گره ها وجود دارند و به همین خاطر هیچ درخواستی معتل نخواهد ماند. به عبارت دیگر چون هر گره کل داده ها را دارد، عملیات خواندن بسیار سریع خواهد بود. همانطور که در شکل ۲ می بینید داده ها در تمامی گره های کلاستر وجود دارند.

مقایسه دو رویکرد پارتیشن بندی و تکثیر کردن داده ها

۱ – اگر عملیات نوشتن بر روی داده ها زیاد است، پس باید از رویکرد پارتیشن بندی استفاده شود.

۲ – زمانی که حجم داده ها بالا باشد و عملیات نوشتن روی داده ها مکرر انجام شود، پس باید از رویکرد پارتیشن بندی استفاده کنیم.

۳ – اگر عملیات خواندن از داده ها زیاد است، پس باید از رویکرد تکثیر کردن داده ها استفاده شود.

۴ – زمانی که حجم داده ها کم باشد و عملیات خواندن از داده ها مکرر انجام شود، س باید از رویکرد تکثیر کردن داده ها استفاده کنیم.

کَش محلی یا Local Cache

هر زمان که تنها داده های فقط خواندنی (read only) داشته باشیم و یا اینکه نیاز داریم تا به صورت مدوام و مکرر به یک سری از داده ها دسترسی داشته باشیم، می توانیم از رویکرد کَش محلی استفاده کنیم. در این حالت این داده ها توزیع یا پخش نمی شوند.

به عبارت ساده تر زمانی که به یک سری از داده ها به صورت مکرر و فقط خواندنی نیاز داشته باشیم، رویکرد کَش محلی کاربردی خواهد بود. در کَش محلی به هر دلیلی داده های درون کَش از بین برورند، می توانیم با استفاده از منبع داده (data source) کَش را بازیابی کنیم. به طور کلی در بحث تعامل میان کَش و منبع داده سه رویکرد کلی زیر وجود دارد: