Memcached یک سیستم Cache رایگان و منبع باز با کارایی بالا است. معمولاً برای کش کردن داده های پایگاه داده، فراخوانی های API یا chunks های رندر صفحه در RAM برای افزایش عملکرد برنامه استفاده می شود.این سیستم کاملاً مقیاسپذیر و منبعباز است که برای ارائه پاسخهای کوتاهتر از میلیثانیه و بهعنوان سیستم کش یا حافظه پنهان سشنها استفاده میشود.
این می تواند داده ها را به اندازه یک عدد یا به اندازه یک صفحه HTML تمام شده ذخیره کند.
این سیستم به گونه ای طراحی شده است که از طریق TCP قابل دسترسی باشد، بنابراین می تواند در یک سرور جداگانه کار کند، و همچنین می تواند بین چندین سرور توزیع شود و یک جدول هش بزرگ برای ذخیره داده ها خلاصه شود.
وقتی فضای خالی تمام می شود، داده های قدیمی بازنویسی می شوند. بنابراین باید به عنوان یک حافظه پنهان موقت (غیر ماندگار) در نظر گرفته شود، به این معنی که ممکن است داده های شما هنوز آنجا نباشند.
Memcached چگونه کار می کند؟
هنگامی که کاربر یک رکورد یا چند رکورد را درخواست میدهد در گام اول کش را سرچ میزند که دو نتیجه ممکن ممکن است در دسترس باشد:
Restore Data: اگر داده ها در حافظه پنهان ذخیره شده باشند، داده ها را از Memcached بازیابی کنید.
حافظه پنهان حاوی داده نیست: پایگاه داده Memcached را اسکن، بازیابی و ذخیره کنید.
هر زمان که دادهها بهروزرسانی میشوند، یا یک شی دارای ارزش انقضا منقضی شده است، حافظه پنهان خود را بهروزرسانی میکند تا محتوای تازهای را در اختیار مشتری قرار دهد. این سیستم سرورهای زیادی و مشتریان زیادی را از آن درگیر می کند. برای استفاده از سرورهای ذخیره سازی Memcached، مشتریان از یک الگوریتم استفاده می کنند. این به پخش لود کمک می کند. سپس سرور هش دوم یک کلید را محاسبه می کند تا بفهمد که مقدار مربوطه در کجا باید در جدول هش داخلی ذخیره شود.
بررسی معماری Memcached
این سیستم از معماری server-client استفاده میکند. سرورها هرکدام دارای یک آرایه شامل مقادیر کلید – مقدار هستند که کلاینتها این آرایه را پرکرده و از آن استفاده میکنند. اندازه کلیدها حداکثر ۲۵۰ بایت، و اندازه مقادیر حداکثر یک مگابایت است.
کلاینتها از کتابخانههای سمت کلاینت برای ارتباط با سرورها استفاده میکنند که معمولاً سرویس خود را در پورت ۱۱۲۱۱ ارائه میدهند. هر کلاینتی تمام سرورها را میشناسد؛ سرورها با همدیگر ارتباط برقرار نمیکنند. اگر کلاینتی بخواهد مقدار متناظر با یک کلید را تنظیم کند یا بخواند، کتابخانه کلاینت ابتدا مقدار هش مربوط به کلید را محاسبه میکند تا سروری که باید استفاده شود را تعیین کند. سپس با سرور تماس میگیرد. سرور مقدار هش دیگری را برای کلید محاسبه میکند تا محل ذخیرهسازی یا خواندن کلید را محاسبه کند.
سرورها مقادیر را در حافظه اصلی (RAM) کامپیوتر ذخیره میکنند. اگر حافظه اصلی یک سرور پر شود، مقادیر قدیمیتر را نادیده میگیرد؛ بنابراین، کلاینتها باید با Memcached بهعنوان یک حافظه نهان گذرا رفتار کنند، و فرض نکنند که هر مقداری که در آن قرار داده شد همواره در آن خواهد ماند.
اگر تمام کتابخانههای کلاینت از الگوریتم هش یکسان برای مشخصکردن سرور استفاده کنند، آنگاه میتوانند به دادههای نهان شده یکدیگر دسترسی پیدا کنند که به طور آشکار این ویژگی مطلوب است.
وب سایت های مطرحی که از Memcached استفاده می کنند:
- یوتیوب
ردیت
فیسبوک
توییتر
ویکیپدیا
زبانهایی که Memcached ساپورت میکند:
- Python
- Java
- PHP
- C/C#/C++
- Perl
- Go
- Ruby
- JavaScript
- Node.js
- ASCII protocol
- Binary protocol
- TCP & UDP protocols
مزایای Memcached
- داده ها را روی سرور ذخیره می کند.
- کارآمد و ارزان است.
- این را می توان در بسیاری از پلتفرم ها مانند سیستم عامل مک، لینوکس، یونیکس و ویندوز استفاده کرد.
- این می تواند خواص ACID ناکافی را جبران کند و هرگز مسدود نمی شود.
معایب Memcached
- در مقایسه با حافظه پنهان In-Memory، بسیار کند است، عمدتاً به دلیل سریالسازی یا deserialization و تأخیر شبکه.
- دسترسی محدود به یک بسته داده توسط بیش از یک کاربر وجود دارد، زیرا فقط یک نسخه وجود دارد و در یک مکان نگهداری می شود.
- دیتا استور دائمی نیست.