Memcached یک نرم افزار متن باز است و جهت بهبود عملکرد برنامههای پویا که به پایگاه داده متصل هستند، به کار میرود. این نرم افزار با در نظر گرفتن حافظه رم (RAM) به عنوان یک انبار داده، باعث میشود دسترسی به اطلاعات بدون خواندن هارد دیسک صورت گیرد. این روش باعث کاهش فشار روی سرور و همچنین کم شدن تأخیر (latency) در برقراری ارتباط می گردد. وب سایت های محبوبی مانند یوتیوب، فیسبوک، توییتر و ویکی پدیا سالها است که از مزایای این نرم افزار متن باز بهره میبرند و به کاربران خود امکان وبگردی با سرعت بالاتر را میدهند. حالا سوال این است که Memcached چگونه کار میکند و چگونه میتوان از آن استفاده کرد؟
تصویر(1)
Memcached چیست؟
Memcached یک سیستم کش پر سرعت است که تقریبا بیست سال پیش توسط شرکت Danga Interactive برای پورتال اینترنتی LiveJournal توسعه داده شد. هدف اصلی ساخت این سرور کش، دور زدن دسترسیهای زمانبر به پایگاه داده در هنگام استفاده از وبسایتهای پرمخاطب است. راهحل این بود که از یک انبار داده درون حافظه رم (RAM) استفاده شود تا بتواند عناصر کششده را به سرعت برای کاربران وبسایت فراهم کند. Memcached بسیار کاربرپسند است و نصب، راهاندازی و استفاده از آن آسان می باشد. همچنین تحت مجوز BSD است، بنابراین میتواند به صورت رایگان مورد استفاده، اصلاح و کپی قرار گیرد.
معماری Memcached چگونه است؟
ساختار کلی معماری ممکشد نسبتاً ساده می باشد. شباهتهایی به یک سیستم پایگاه داده توزیعشده دارد و از سه بخش اصلی تشکیل شده است که شامل برنامهی کاربردی، یک کتابخانه سمت کاربر (client library) و تعدادی از نمونههای Memcached می شود. هر تعداد از این نمونهها میتوانند روی حافظه اصلی یک سرور نصب گردند. توصیه میشود روی هر سروری که رم اضافی دارد، یک نمونه را فعال کنید. این نمونهها با هم کار میکنند تا فضای خالی در دسترس را برای کش به دست آورند. کتابخانه سمت کاربر، واسط بین برنامه کاربردی و ممکشد است. این کتابخانه دادهای که باید ذخیره شود را میگیرد و آن را روی یکی از سرورهای موجود قرار میدهد. Memcached با استفاده از معماری چند رشتهای (multi-thread)، میتواند همزمان از چند هسته پردازنده استفاده کند.
تصویر(2)
Memcached چگونه کار میکند؟
برخلاف پایگاه داده های سنتی که اطلاعات را روی هارد دیسک یا به طور ایدهآل روی درایو حالت جامد (SSD) ذخیره میکنند، ممکشد اطلاعات را در حافظه (RAM) ذخیره میکند. این امر به Memcached اجازه میدهد تا به اطلاعات در کسری از ثانیه دسترسی پیدا کند. در روشهای سنتی، زمان قابل توجهی صرف جستجوی اطلاعات روی دیسک میشود.
اگرچه میتوان اطلاعات را برای مدت طولانیتری در ممکشد ذخیره کرد اما اکثر اطلاعات پس از گذشت زمان مشخصی به طور خودکار حذف میشوند زیرا Memcached صرفاً یک کش موقت است و یک پایگاه داده نیست. به همین دلیل، زمانی که فضای کافی برای اطلاعات جدید وجود نداشته باشد، ابتدا اطلاعات قدیمی که کمتر استفاده می شوند، حذف خواهند شد.
در ادامه، فرآیند ذخیرهسازی در Memcached به صورت دقیق تر بررسی می شود:
- داده ها فقط به یک سرور ارسال می شوند.
- داده ها به صورت جفت کلید-مقدار (key-value) ذخیره می گردند.
- سرورهای مختلف داده ها را با یکدیگر به اشتراک نمی گذارند.
- سرور فقط داده ها را در memory ذخیره می کند.
- اگر فضای کافی وجود نداشته باشد، سرور قدیمی ترین داده ها را حذف می کند.
آیا Memcached برای شما مناسب است؟
این بستگی به نیازها و پیچیدگی برنامه شما دارد. سیستم حافظه موقت ممکشد برای وبسایتها و برنامههای پر بازدید که به پایگاهدادههای حجیم دسترسی دارند، بسیار کارآمد است اما طبیعتا در کنار مزایای زیاد، معایبی هم دارد. در ادامه مزایا و معایب Memcached ذکر می شود:
مزایا |
معایب |
به دلیل استفاده از حافظه داخلی برای ذخیرهسازی دادهها، سرعت پاسخگویی Memcached بسیار بالا است. |
دادهها را فقط به طور موقت ذخیره میکند. در صورت خرابی Memcached، تمام دادهها از بین میروند. |
ممکشد از معماری چند رشتهای استفاده میکند، به این معنی که میتوان با اضافه کردن پردازندههای بیشتر، ظرفیت پردازش آن را افزایش داد. |
رابط کاربری برای مشاهده دادهها ندارد. این موضوع اشکالزدایی برنامههایی که از Memcached استفاده میکنند را دشوار میکند. |
Memcached یک راهحل متنباز پیشرفته با یک مخزن داده عمومی است. |
طول کلید برای مقادیر در ممکشد به ۲۵۰ کاراکتر محدود است. |
استفاده از آن آسان و در توسعه اپلیکیشن انعطافپذیر است. |
ممکشد به طور پیشفرض هیچ ویژگی امنیتی ندارد. برای امن کردن ممکشد، باید فایروالهای اضافی راهاندازی کنید. |
از فرمتهای داده و اکثر کتابخانهها و زبانهای برنامهنویسی رایج پشتیبانی میکند. |
ممکشد از خود هیچ گونه قابلیت بازیابی ندارد. در صورت خرابی یک سرور Memcached، تمام دادههای آن سرور از بین میروند. |
جدول(1)
تصویر(3)
Memcached برای چه کارهایی استفاده میشود؟
کاربردهای Memcached شامل کش کردن و ذخیره سازی اطلاعات مربوط به جلسات (session) میشود. کش کردن باعث میشود تا به دادههای کش شدهای مثل فایلها، فراداده (metadata) و تصاویر با سرعتی فوقالعاده بالا دسترسی پیدا کنید. همچنین این امکان را به شما میدهد که در زمان افزایش حجم کاری، کسب و کار خود را گسترش دهید و عملکرد برنامهتان را بهبود بخشید.
توسعهدهندگان از حافظههای داخلی (in-memory) برای مدیریت دادههای جلسات مانند پروفایلهای کاربری یا وضعیت جلسات آنلاین استفاده میکنند. البته این کار نیازمند آن است که پایداری داده (data persistence) ضروری نباشد. به طور کلی، Memcached راهحلی مناسب برای اپلیکیشن ها است که به یک کش با مقیاس بزرگ و کارایی بالا نیاز دارند.
سخن پایانی - شروع کار با Memcached
نکات قوت اصلی ممکشد بدون شک سرعت، قابلیت ارتقا و پشتیبانی آن از تمامی واسط های برنامهنویسی (API) و زبانهای برنامهنویسی رایج از جمله روبی، جاوا، جاوا اسکریپت، پایتون، Go، پیاچپی، سی، سی++، سی شارپ و Node.js است. همچنین نصب آن روی سیستمعاملهای ویندوز یا یونیکس ساده می باشد. علاوه بر پکیج توسعهدهنده، شما به کتابخانه libevent نیز نیاز دارید که اعلانهای رویداد غیرهمزمان را فراهم میکند. پس از نصب، با توجه به زبان برنامهنویسی مورد استفاده، گزینههای پیکربندی مختلفی برای سمت کاربر و سرور در دسترس خواهد بود.
از آنجایی که Memcached یک پروژه متنباز می باشد، برای سالهای متمادی توسط یک جامعه بزرگ مورد استفاده و توسعه قرار گرفته است. این یک مزیت می باشد زیرا اطلاعات دقیق در مورد استفاده، مدیریت و عیبیابی API ها و سیستمعاملهای مختلف به صورت آنلاین در دسترس شما قرار میگیرد.