مم‌کشد

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
ممکشد
توسعه‌دهنده دانگا اینراکتیو
نخستین نسخه ۲۲ مه ۲۰۰۳ (۲۰۰۳-05-۲۲)
چرخهٔ ارائهٔ نرم‌افزار ۱.۴.۱۵ / ۰۳ سپتامبر ۲۰۱۲؛ ۵۹۰ روز پیش[۱]
زبان‌های برنامه‌نویسی سی
سیستم‌عامل چندسکویی
نوع سیستم نهان‌سازی حافظه توزیع‌یافته
پروانه نرم‌افزار پروانه بی‌اس‌دی
وب‌گاه www.memcached.org

مِمکَشد (به انگلیسی: Memcached) یک سامانه حافظه پنهان توزیع‌شده است[۲][۳]. این سامانه معمولا برای افزایش سرعت وب‌سایت‌های استفاده کننده از پایگاه‌داده، با استفاده از ذخیره داده‌ها و اشیا در حافظه اصلی (RAM) برای کاهش تعداد دفعات خواندن داده از منبع داده خارجی (برای نمونه پایگاه‌داده) به کار می‌رود[۲][۴][۵][۶].

تاریخچه[ویرایش]

ممکشد در سال ٢٠٠٣ توسط «برد فیتزپاتریک» برای استفاده در لایوجورنال توسعه داده شد[۲].

معماری[ویرایش]

این سامانه از معماری کارخواه-کارساز استفاده می‌کند. سرورها هر کدام دارای یک آرایه انجمنی شامل مقادیر کلید-مقدار هستند، که کلاینت‎‌ها این آرایه را پر کرده و از آن استفاده می‌کنند. اندازه کلیدها حداکثر ٢٥٠ بایت، و اندازه مقادیر حداکثر یک مگابایت است.

کلاینت‌ها از کتابخانه‌های سمت کارخواه برای ارتباط با سرورها می‌‌کنند، که معمولا سرویس خود را در درگاه ۱۱۲۱۱ ارائه می‌دهند. هر کلاینتی تمام سرورها را می‌شناسد؛ سرورها با همدیگر ارتباط برقرار نمی‌کنند. اگر کلاینتی بخواهد مقدار متناظر با یک کلید را تنظیم کند یا بخواند، کتابخانه کلاینت ابتدا مقدار درهم‌سازی کلید را محاسبه می‌کند تا سروری که باید استفاده شود را تعیین کند. سپس با سرور تماس می‌گیرد. سرور مقدار درهم‌سازی دیگری را برای کلید محاسبه می‌کند تا محل ذخیره‌سازی یا خواندن کلید را محاسبه کند.

سرورها مقادیر را در حافظه اصلی (RAM) کامپیوتر ذخیره می‌کنند. اگر حافظه اصلی یک سرور پر شود، مقادیر قدیمی‌تر را نادیده می‌گیرد. بنابراین، کلاینت‌ها باید ممکشد را به عنوان یک حافظه‌نهان گذرا رفتار کنند، و فرض نکنند که هر مقداری که در آن قرار داده شد همواره در آن خواهد ماند. ممکش‌دی‌بی و ممبیس در حالی که با پروتکل ممکشد سازگار هستند، ذخیره‌سازی ماندگار نیز ارائه می‌دهند.

اگر تمام کتابخانه‌های کلاینت از الگوریتم درهم‌سازی یکسان برای مشخص کردن سرور استفاده کنند، آن‌گاه می‌توانند به داده‌های نهان شده یکدیگر دسترسی پیدا کنند؛ که به‌طور آشکار این ویژگی مطلوب است.

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

مثال[ویرایش]

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

در ادامه، مثال پیاده‌سازی با زبان پی‌اچ‌پی می‌زنیم. برای این‌کار، ابتدا ممکشد را در تعدادی از ماشین‌های سرور نصب و اجرا می‌کنیم. سپس در کد برنامه یک نمونه از شی ممکشد ایجاد می‌کنیم و این سرورها معرفی می‌کنیم[۷]:

$MEMCACHE_SERVERS = array(
    "10.1.1.1", //server 1
    "10.1.1.2", //server 2
    "10.1.1.3", //server 3
);
 
$memcache = new Memcache();
foreach ($MEMCACHE_SERVERS as $server) {
    $memcache->addServer ( $server );
}

سپس می‌توانیم از ممکشد به صورت استفاده کنیم:

$result_of_slow_query = $memcache->get("query_variable_name");
if ($result_of_slow_query == false) {
   $result_of_slow_query = query_result_from_database();
   // Cache for 5 minutes
   $memcache->set("query_variable_name", $result_of_slow_query, 0, 5 * 60);
}

کاربران سرشناس[ویرایش]

از کاربران سرشناس ممکشد می‌توان به وب‌گاه‌های زیر اشاره کرد:

کتابخانه‌های کلاینت در زبان‌های مختلف[ویرایش]

منابع[ویرایش]

پیوند به بیرون[ویرایش]