ممکشد (Memcached) چیست؟

ممکشد یا ممکش (Memcached) یک سیستم ذخیره سازی حافظه توزیع شده چند منظوره است. اغلب برای سرعت بخشیدن به وب سایت های مبتنی بر پایگاه داده پویا از طریق کش کردن داده ها و اشیاء در RAM استفاده می شود تا تعداد دفعاتی که یک منبع داده خارجی (مانند پایگاه داده یا API) باید خوانده شود، کاهش یابد. Memcached یک نرم افزار رایگان و منبع باز است که تحت مجوز BSD در دسترس است و میتوان آن را در سیستم‌عامل‌های شبه یونیکس (لینوکس و macOS) و مایکروسافت ویندوز [و حتی اندروید!] اجرا کرد.تاریخچه Memcachedاولین نسخه از ممکشد در سال ۲۰۰۳ توسط Danga Interactive با زبان Perl برنامه نویسی شد و آن را برای خدمت به وبسایتشان بنام LiveJournal به‌کار گرفت. بعد ها Anatoly Vorobey این برنامه را به زبان C بازنویسی کرد.در حال حاضر سرویس دهندگان بزرگی مانند یوتوب، ردیت، فیسبوک، پینترست، توییتر، ویکی‌پدیا، گوگل، مایکروسافت، آمازون و... از Memcached بهره می‌برد.ممکشد چگونه کار میکند؟این سیستم از معماری Server/Client استفاده می کند و اطلاعات را در قالب آرایه ای بصورت key:value ذخیره میکند. به صورت پیشفرض بر روی پورت ۲۲۱۲۲ اجرا میشود و از هر دو پروتکل TCP و UDP پشتیبانی میکند. کلایت میتواند اطلاعات را در این فرمت با کمک Memcached در RAM سرور ذخیره کند. اگر به هر علتی برنامه متوقف شود یا سرور خاموش بشود، تمام اطلاعات ذخیره شده در RAM نیز از بین میرود. طول key نباید از 250 بایت تجاوز کند و هر value حداکثر 1 مگابایت میتواند باشد.چرا از Memcached استفاده میشود؟ سرعت، سرعت، سرعت!قطعا ذخیره سازی اطلاعات در RAM باعث میشود سرعت فراخوانی آن نسبت به استفاده از دیتابیس و فایل سریع تر باشد. اما چون با خاموش شدن سرور تمام اطلاعات RAM از دست میرود، نمیتوان از آن به عنوان منبع ذخیره سازی دائمی استفاده کرد پس به عنوان یک راه حل برای ذخیره سازی موقت اطلاعاتی است که به آن زیاد نیاز داریم. مثلا برای کش کوئری های تکراری دیتابیس یا موارد اینچنینی میشه از Memcached استفاده کرد.علاوه بر مواردی که بالا گفتیم، برنامه های مختلف میتونن از اطلاعاتی که توسط یک برنامه دیگر روی سرور Memcached ذخیره شده استفاده کند که مزیت خوبی است.امنیت Memcachedهمانطور که گفتیم مکشد بصورت پیشفرض بر روی پورت ۲۲۱۲۲ اجرا میشود و درخواست ها را از هر کلاینتی میپذیرد. هیچ مکانیزمی برای احراز هویت کلایت ها ندارد. این یعنی زنگ خطر! چرا؟اگه پورت پیشفرض تغییر داده نشود و محدود سازی آیپی های مجاز جهت اتصال به Memcached انجام نشود هر کسی میتواند به این سرویس بر روی سرور شما دسترسی داشته باشد و یک حمله DDOS انجام دهد که نتیجه آن اختلال در سرویس دهی است.چگونه امنیت ممکش را افزایش دهیم؟برای افزایش ممکشد ۳ کار ساده اما مهم و ضروری را پیشنهاد میکنم حتما انجام بدید:محدود سازی کلاینت ها: در فایل پیکربندی ip مجاز را تعریف کنید و از دسترسی ip های غیر مجاز جلوگیری شود.با کمک Sasl کلاینت ها را احراز هویت کنید.معمولا ممکش روی سروری جداگانه اجرا میشود و سایر سرورها به آن متصل میشود و از آن برای کش داده های خود استفاده میکند. بهتره در این مواقع از شبکه خصوصی استفاده بشه و به سروری که Memcached روی اون اجرا میشه ip عمومی داده نشه و فقط در شبکه خصوصی امکان اتصال به آن وجود داشته باشد.آیا استفاده از Memcached همیشه بهترین راهکار است؟پاسخ ما به این سوال منفی است. ممکشد با همه مزایا، ویژگی و امکاناتی که دارد، محدودیت هایی هم دارد که در بالا به آن اشاره شد. برای مثال هر داده قابل ذخیره سازی در ممکشد نباید از ۱ مگابایت تجاوز کند. همچنین اگر از ممکشد روی همان سروی که دارید سرویس دهی میکنید استفاده بشه، تاثیر منفی بر کارکرد کل سرور داره. ما پیشنهادمون اینه اگه چند سرور دارید که به کش مموری نیاز دارن، Memcache را روی سروی مجزا راه اندازی کنید تا بتونن ازش استفاده کنن اما اگه یه سرور تنها دارید استفاده از ممکش توصیه نمیشه و پیشنهاد ما استفاده از Redis یا نرم افزارهای مشابه است.منبع این مقاله: https://www.halafi.ir/blog/memcached