سرور

Memcached چیست؟ معرفی راهکار هوشمند برای افزایش سرعت سایت

آموزش کامل، مزایا، نحوه عملکرد و تاثیر آن بر سئو سایت

Memcached چیست؟ این راهکار هوشمندانه حکایت تقلب رساندن به سرور است؛ به جای اینکه هر بار سرور از اول همه داده‌ها را پردازش کند، اطلاعات پرکاربرد و پرتکرار را در حافظه‌ سریع نگه می‌دارد تا مثل یک دستیار کمکی، پاسخ‌ها را در کسری از ثانیه ارائه دهد. در این مقاله، به صورت جامع و کاربردی با Memcached آشنا می‌شویم و طرز کار آن را بررسی می‌کنیم. اگر می‌خواهید سایت یا اپلیکیشن‌تان مثل برق و باد سریع پاسخگو باشد، تا انتهای مطلب همراه ما باشید.

Memcached چیست؟ معرفی ابزار همه‌فن‌حریف برای ذخیره پنهان داده

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

نحوه عملکرد Memcached؛ ساختار و معماری پشت‌صحنه

برخلاف دیتابیس‌هایی که داده‌ها را روی دیسک یا SSD ذخیره می‌کنند، Memcached اطلاعات را به‌طور کامل در حافظه (RAM) نگه می‌دارد؛ درنتیجه خبری از تاخیرهای ناشی از جستجوی روی دیسک نیست و داده‌ها در کسری از ثانیه در دسترس هستند. به بیانی ساده‌تر، داده‌های با تعداد درخواست بالا فقط یک بار بازخوانی و در حافظه ذخیره می‌شوند. سپس هر زمان که به آن نیاز داشتید، در کسری از ثانیه از RAM برایتان لود خواهد شد. البته این فقط بخشی از ماجراست. در پشت پرده این سرعت، یک معماری هوشمند و منسجم قرار دارد که در ادامه به‌صورت کامل آن را بررسی می‌کنیم:

۱. معماری کلی Memcached

ساختار Memcached براساس مدل کلاینت-سرور (Client-Server) طراحی شده است. یعنی چندین کلاینت (مثل اپلیکیشن‌های وب یا موبایل) به یک یا چند سرور Memcached متصل می‌شوند و داده‌ها را از آن‌ها می‌خوانند یا در آن‌ها ذخیره می‌کنند.

۲. عملیات سمت کلاینت؛ از درخواست تا پاسخ

وقتی کلاینت می‌خواهد داده‌ای را ذخیره یا دریافت کند، ابتدا یک کلید (key) را با استفاده از الگوریتم «هشینگ پایدار» (Consistent Hashing) پردازش می‌کند. این الگوریتم نشان می‌دهد درخواست به کدام سرور کش ارسال شود. عملیات‌های اصلی در Memcached به‌صورت زیر است:

  • Delete: حذف یک داده از کش.
  • Get: دریافت مقدار مربوط به یک کلید.
  • Set: ذخیره یا به‌روزرسانی یک جفت کلید-مقدار.
  • Add: فقط درصورتی‌که کلید وجود نداشته باشد، آن را ذخیره می‌کند.
  • Replace: فقط درصورتی‌که کلید وجود داشته باشد، آن را به‌روزرسانی می‌کند.
  • Increment / Decrement: افزایش یا کاهش عددی مقدار یک کلید.

۳. عملیات سمت سرور؛ ذخیره‌سازی هوشمند در حافظه

Memcached از روشی به نام مدیریت حافظه اسلبی (Slab Allocation) استفاده می‌کند. حافظه به بخش‌های کوچکی به نام اسلب تقسیم می‌شود که هر کدام از آن برای اندازه خاصی از داده‌ها بهینه شده است. این ساختار باعث می‌شود حافظه به شکل بهینه مصرف شود و سرعت پاسخ‌دهی بسیار بالا بماند.

۴. توزیع بار با هشینگ پایدار

در محیط‌هایی که چندین سرور Memcached فعال است، الگوریتم Consistent Hashing تضمین می‌کند هر کلید همیشه به همان سرور مشخص ارسال شود. این قابلیت باعث توزیع یکنواخت بار و کاهش اختلال هنگام اضافه یا حذف سرورها می‌شود.

۵. مدیریت کش؛ حذف و زمان انقضا

وقتی کش پر است، Memcached با استفاده از سیاست LRU قدیمی‌ترین و کم‌استفاده‌ترین داده‌ها را پاک می‌کند. همچنین با قابلیت زمان انقضا (Expiration Time) می‌توانید برای هر داده یک زمان مشخص کنید تا پس از آن، به‌طور خودکار حذف شود.

۶. مدیریت Cache Miss

اگر داده‌ای در کش پیدا نشود (Cache Miss)، برنامه داده را از منبع اصلی (مثلا دیتابیس) می‌خواند و سپس آن را در کش ذخیره می‌کند تا دفعات بعد سریع‌تر پاسخ داده شود.

۷. مقیاس‌پذیری بالا و توزیع بار هوشمند

Memcached به‌راحتی مقیاس‌پذیر است. کافی است سرور جدید اضافه کنید تا با کمک هشینگ پایدار، داده‌ها به‌طور یکنواخت بین سرورها توزیع شوند؛ یعنی بدون افت سرعت، می‌توانید سیستم را بزرگ‌تر کنید.

۸. تحمل خطا و سازگاری داده

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

۹. مانیتورینگ و نگهداری

برای اطمینان از عملکرد صحیح، باید مواردی مثل ترافیک شبکه، مصرف حافظه، نرخ Hit/Miss و تعداد آیتم‌ها را کنترل کنید. ابزارهایی مانند memcached-tool و سیستم‌های مانیتورینگ مثل Nagios و Munin در این کار به شما کمک می‌کنند.

کاربرد Memcached در دنیای واقعی چیست؟

حالا که فهمیدیم Memcached چیست و چطور کار می‌کند، شاید برایتان این سؤال پیش بیاید که واقعا چه کسی  از آن استفاده می‌کند؟  آیا فقط برای پروژه‌های کوچک قابل استفاده است یا غول‌های فناوری هم به Memcached تکیه دارند؟ در پاسخ باید گفت بزرگ‌ترین پلتفرم‌های اینترنتی دنیا برای بهبود عملکرد و مقیاس‌پذیری‌شان به شدت به Memcached وابسته‌ هستند؛ برای مثال:

Memcached چیست

Facebook؛ کش کردن دیتای میلیاردی در لحظه

در بازه‌ای که میلیاردها کاربر به‌طور همزمان وارد حساب کاربری خود می‌شوند و عکس‌ها را باز می‌کنند، فیسبوک برای اینکه بتواند حجم سنگین درخواست‌ها را مدیریت کند، از Memcached استفاده می‌کند. داده‌هایی مثل اطلاعات پروفایل، سشن‌های کاربر و حتی بخش‌هایی از تایم‌لاین با Memcached کش می‌شوند. 

کش کردن دیتای میلیاردی در لحظه

Wikipedia؛ صفحات آماده برای بارگذاری سریع‌تر

جالب است بدانید ویکی پدیا نیز با آن عظمت و تعداد بالای کاربران فعالش برای حفظ سرعت بارگذاری و پاسخ‌گویی از Memcached کمک می‌گیرد. به این ترتیب با کش کردن صفحات رندر شده و اطلاعات پرتکرار سرور اصلی دیتابیس را از فشار نجات می‌دهد. 

Twitter؛ کش کردن تایم‌لاین کاربران

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

استفاده از Memcached فقط مخصوص غول‌های فناوری نیست. اگر شما هم وب‌سایتی دارید که روی وردپرس، لاراول یا هر فریم‌ورک دیگری اجرا شده و با دیتابیس سنگینی کار می‌کند، فعال‌سازی Memcached تفاوت چشمگیری در سرعت بارگذاری صفحات و تجربه کاربر ایجاد خواهد کرد. نکته مهم اینجاست: برای استفاده مؤثر از Memcached به سروری نیاز دارید که از این قابلیت پشتیبانی کند. پیشنهاد ما استفاده از سرور مجازی ایران‌ هاست یا سرور ابری با دسترسی کامل است که به‌راحتی می‌توانید Memcached را روی آن نصب و پیکربندی کنید. همچنین می‌توانید نصب ممکشد را به کارشناسان ایران هاست بسپارید. 

کاربردهای اصلی Memcached چیست و چه زمانی از آن استفاده کنیم؟ 

پس از تمام این بررسی‌ها سوال مهم اینجاست: چه زمانی ممکشد به کارمان می‌آید. پاسخ این سوال را در ادامه خواهید خواند. 

صفحات وب (Web Page Caching) را کش کنید

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

برای آگاهی از سایر راهکارهای کاربردی برای بهبود عملکرد سایت، مقاله زیر را از دست ندهید:

۵ روش برای بهبود پرفورمنس سایت وردپرسی شما

سشن کاربران (Session Management) را مدیریت کنید

در اپ‌هایی که چند سرور دارند یا به‌صورت لود بالانس‌شده کار می‌کنند، نگهداری اطلاعات سشن کاربر بسیار اهمیت دارد. Memcached این کار را به بهترین شکل انجام می‌دهد:

  • ذخیره‌سازی سریع اطلاعات سشن توی حافظه
  • دسترسی به اطلاعات کاربر از هر سرور بدون نیاز به دیتابیس
  • حفظ پایداری و در دسترس بودن حتی در معماری‌های توزیع‌شده

 کش کردن کوئری‌های دیتابیس (Database Query Caching)

هر بار که یک کوئری پیچیده اجرا می‌شود، کلی از منابع دیتابیس مصرف خواهد شد. اگر آن کوئری قرار است چند بار پشت سر هم اجرا شود، بهتر است نتیجه را در کش ذخیره کنید. به این ترتیب، Memcached نتایج کوئری‌های پرتکرار را  نگه می‌دارد و  سرعت پاسخ‌دهی به درخواست‌های کاربر را افزایش می‌دهد.

کش داده‌های اپلیکیشن (Application Data Caching)

برخی از داده‌ها مثل تنظیمات کلی برنامه یا پروفایل کاربران زیاد تغییر نمی‌کند، اما به‌طور مداوم به آن نیاز دارید. دسترسی به این داده‌ها از دیتابیس در هر درخواست چندان منطقی‌ نیست. Memcached اینجا وارد عمل شده و داده‌های پیکربندی را که زیاد خوانده می‌شوند اما کم تغییر می‌کنند، کش کند.

 کش پاسخ‌های API ( یا API Response Caching)

اتصال به APIهای خارجی همیشه با تاخیر همراه است. گاهی نیز محدودیت نرخ (Rate Limit) دارند. چاره آن استفاده از قدرت کاربردی ممکشد است. به این ترتیب، از مصرف بیش از حد درخواست جلوگیری کرده و ارتباط بین سرویس‌ها را در معماری میکروسرویس بهینه می‌کند. 

بیشتر بخوانید: چگونه image برنامه memcached را می توان در Docker دریافت نمود؟

تفاوت Memcached با سایر سیستم‌های کش چیست؟

در این بخش نگاهی به تفاوت Memcached با سایر سیستم‌های کش همچون Memcache و Redis خواهیم انداخت:

 مقایسه Memcache و Memcached 

فرق Memcache و Memcached چیست؟ در پاسخ باید بگوییم تفاوت Memcached و Memcache حکایت فرق بجنورد و بروجرد است. شاید در نگاه اول هر دو یکی به‌نظر برسند اما تفاوت‌هایی دارند که روی انتخاب نهایی شما تاثیرگذار خواهند بود. Memcache یک  نسخه‌ قدیمی‌تر از ماژول کش برای زبان PHP محسوب می‌شود. مهم‌ترین ویژگی Memcached این است که  تمام داده‌ها را به شکل رشته (String) ذخیره می‌کند، فارغ از اینکه نوع اصلی آن داده چه چیزی خواهد بود. یعنی حتی اگر عدد، آرایه یا بولین باشد، Memcache آن را  به متن تبدیل می‌کند. 

Memcached چیست

Memcached نسخه‌ به‌روزرسانی‌شده، قدرتمندتر و کاربردی‌تر در دنیای برنامه‌نویسی محسوب می‌شود. برخلاف Memcache، داده‌ها را در نوع اصلی خودشان نگه می‌دارد. برای مثال، عدد، آرایه و بولین را به همان شکلی که هستند ذخیره و بازیابی می‌کند. علاوه‌براین، از نظر عملکردی سریع‌تر، مقیاس‌پذیرتر و به‌روزتر است. 

ویژگیMemcacheMemcached
نوع ذخیره‌سازیهمه چیز به صورت رشتهذخیره در نوع اصلی داده
محبوبیتکمتر و قدیمی‌ترمدرن، سریع و پراستفاده‌تر
مناسب برایپروژه‌های ساده یا قدیمی‌تراپلیکیشن‌های داینامیک و پرسرعت
پشتیبانی در PHPنسخه‌ی قدیمی‌تر PHP extensionنسخه‌ی جدید و پیشرفته‌تر

مقایسه Memcached با Redis

در مقایسه Redis و Memcached باید بگوییم هر دو ابزار محبوب برای کش کردن داده در حافظه محسوب می‌شود. Memcached گزینه‌ای سبک، سریع و ساده برای ذخیره‌سازی موقت داده‌ها به صورت key-value است و اغلب برای پروژه‌هایی با نیازهای کش پایه مناسب است. در مقابل، Redis یک ابزار قدرتمند و چندمنظوره است که علاوه‌بر کش، نقش دیتابیس، صف پیام، سیستم تحلیل لحظه‌ای و موارد دیگر را ایفا می‌کند؛ چون از ساختارهای داده متنوع و امکانات پیشرفته‌تری مثل persistency، replication و pub/sub برخوردار است.

در پاسخ به اینکه تفاوت ردیس و Memcached چیست، به سادگی می‌توانید با یک نگاه تفاوت‌های این دو ابزار را در جدول زیر مشاهده کنید. 

مقایسهMemcachedRedis
سادگی یا پیچیدگی؟فوق‌العاده ساده و سبکپرامکانات و منعطف
ساختار داده‌هافقط key-value سادهانواع ساختار داده پیشرفته
قابلیت‌های اضافیندارددارد (Replication، Persistence و…)
موارد استفادهکش ساده و سریعدیتابیس، پیام‌رسانی، تحلیل آنی و…
نصب و راه‌اندازیبسیار راحتنیازمند تنظیمات بیشتر

نصب و راه‌اندازی Memcached در لینوکس

پیش از نصب Memcached  نیاز است مطمئن شویم سرور آماده اجرای این فرایند است یا خیر. برای شروع نیاز است یک سرور  Ubuntu 20.04 در اختیار داشته باشید که:

  • دسترسی به کاربر با دسترسی sudo داشته باشید.
  •  فایروال فعال و روی سرور تنظیم شده باشد.

 مرحله اول: نصب Memcached روی اوبونتو

برای نصب Memcached روی سرور با دستور زیر آغاز کنید:

نصب Memcached

۱. به‌روزرسانی لیست پکیج‌ها

sudo apt update

۲. نصب پکیج اصلی Memcached

sudo apt install memcached

۳. نصب ابزارهای مدیریتی (اختیاری اما کاربردی)

sudo apt install libmemcached-tools

۴. بعد از نصب، برای اجرای Memcached فقط کافی‌است دستور زیر را وارد کنید:

sudo systemctl start memcached

مرحله دوم: پیکربندی Memcached

اگر برایتان سوال است که چگونه به سرویس Memcached کاربر مشخصی اضافه کند تا فقط همان فرد اجازه اتصال داشته باشد، نیاز است با مفهومی به نام SASL آشنا شوید. SASL یا Simple Authentication and Security Layer یک چارچوب امنیتی برای تایید هویت کاربران است که امکان می‌دهد تا رمز عبور و نام کاربری برای Memcached تعریف و دسترسی‌ها را کنترل کنیم. با فعال‌سازی SASL، فقط کاربرانی که نام کاربری و رمز صحیح داشته باشند، به Memcached وصل خواهند شد. 

۱. نصب ابزار SASL

sudo apt install sasl2-bin

۲. ایجاد پوشه و فایل تنظیمات SASL برای Memcached

sudo mkdir -p /etc/sasl2

sudo nano /etc/sasl2/memcached.conf

محتوای زیر را در فایل بنویسید:

log_level: 5

mech_list: plain

sasldb_path: /etc/sasl2/memcached-sasldb2

۳. ساخت کاربر تایید شده

sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

در ادامه، دسترسی‌های مناسب را به این فایل می‌دهیم:

sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2

مرحله سوم: فعال‌سازی SASL در تنظیمات Memcached

برای اینکه Memcached از SASL استفاده کند، باید فایل پیکربندی را ویرایش کنیم:

sudo nano /etc/memcached.conf

در انتهای فایل این خط رو اضافه کنید:

-S

سپس خط مربوط به خروجی‌های کامل لاگ (برای بررسی) را هم از حالت کامنت خارج کنید:

-vv

فایل را ذخیره و خارج شوید. 

 

مرحله چهارم: راه‌اندازی دوباره Memcached و بررسی لاگ‌ها

در چهارمین مرحله از آموزش نصب مقاله «Memcached چیست؟» باید Memcached را ری‌استارت کنیم:

sudo systemctl restart memcached

برای اطمینان از اینکه SASL فعال شده، دستور زیر را وارد می‌کنیم:

sudo journalctl -u memcached | grep SASL

اگر خروجی مشابه پیغام زیر دریافت کردید یعنی کارتان درست پیش رفته است:

Output

Sep 23 17:00:55 memcached systemd-memcached-wrapper[2303930]: Initialized SASL.

مرحله پنجم: بررسی اتصال با و بدون احراز هویت

در این مرحله می‌خواهیم مطمئن شویم آیا می‌توان بدون لاگین به Memcached متصل شد یا خیر. 

memcstat –servers=”۱۲۷.۰.۰.۱″

اگر هیچ خروجی نگرفتید و با دستور زیر مقدار ۱ برگشت خورد:

echo $?

یعنی ورود بدون احراز هویت ناموفق بوده است؛ دقیقا همان چیزی که ما می‌خواستیم.

کلام پایانی؛ Memcached، شتاب‌دهنده‌ای سبک اما قدرتمند

Memcached چیست؟ پاسخ را به‌طور کامل در این مقاله بررسی کردیم. Memcached با عملکرد فوق‌العاده سریع، ساختار ساده‌ کلید-مقدار و مصرف ناچیز منابع، یک انتخاب محبوب برای پیاده‌سازی کش در سمت سرور است. هرچند محدودیت‌هایی مانند ناپایداری داده‌ها یا نبود قابلیت رمزنگاری دارد، اما برای بسیاری از کاربردهای روزمره از جمله کش کردن نتایج دیتابیس یا Sessionها، گزینه‌ای ایده‌آل و کارآمد به شمار می‌رود.

منابع: digitalocean، scalegrid.io

نمایش بیشتر
دکمه بازگشت به بالا