امروزه در دنیای اینترنت، سرعت حرف اول را میزند. کاربران انتظار دارند وبسایتها به سرعت بارگذاری شوند و محتوا به صورت آنی در دسترسشان قرار گیرد. اینجاست که نقش کش سرور (Cache Server) پررنگ میشود. کش سرور، ابزاری قدرتمند برای افزایش کارایی وبسایتها و بهبود تجربه کاربری است.
در این مقاله جامع، به کاوش مفهوم کش سرور، نحوه عملکرد آن، مزایا و معایب راهاندازی آن و انواع مختلف آن میپردازیم. با درک درستی از آن، قادر خواهید بود از این فناوری برای وبسایت خود بهره برده و عملکرد آن را به طرز چشمگیری ارتقا دهید.
کش سرور چیست؟
کش سرور یک سرور یا سرویس اختصاصی شبکه است که به عنوان مخزنی برای ذخیره سازی محلی صفحات وب و سایر محتوای اینترنت عمل می کند. با قرار دادن اطلاعاتی که قبلاً درخواست شده اند در یک حافظه موقت به نام کش، سرور کش سرعت دسترسی به داده ها را افزایش می دهد و در عین حال تقاضا بر روی پهنای باند سازمان را کاهش میدهد. سرورهای کش همچنین به کاربران این امکان را می دهند تا به صورت آفلاین به محتوا، از جمله فایل های چند رسانه ای یا سایر اسناد، دسترسی داشته باشند.
یک سرور پروکسی معمولا یک کش سرور نیز محسوب میشود، زیرا کاربران را از طریق رهگیری درخواستهای اینترنتی آنها و شیوه مدیریتشان نمایش میدهد. بهطور معمول، این منابع سازمانی توسط یک سرور فایروال محافظت میشوند. این سرور درخواستهای خروجی را میسر میکند، اما تمام ترافیک ورودی را نیز تحت نظر میگیرد.
از آنجایی که یک پروکسی سرور به تطبیق پیامهای دریافتی با درخواستهای خروجی کمک میکند، بهخوبی میتواند فایلهایی را که برای فراخوانی بعدی توسط هر کاربر دریافت میشود، ذخیره کند. یک پروکسی سرور که درعینحال یک کش سرور نیز بهحساب میآید، معمولا یک پروکسی کش نامیده میشود. عملکرد دوگانهی این سرور باعث میشود تا گاهی اوقات بهعنوان پروکسی کش وب یا Web Proxy Caching نامیده شود.
نحوه عملکرد کش سرور
هنگامی که بازدیدکنندهای به وبسایت شما مراجعه میکند و صفحهی خاصی را درخواست مینماید، سرور نسخهی ذخیرهشدهی صفحهی درخواستشده را بازیابی کرده و آن را به بازدیدکننده نمایش میدهد. این روش بسیار سریعتر از فرآیند سنتیِ سر هم کردنِ صفحه وب از بخشهای مختلف ذخیرهشده در پایگاه داده است.
در ادامه به نحوهی عملکرد کش سرور میپردازیم:
الگوهای درخواست (Request Patterns): کش (Cache) فرکانس و الگوهای درخواست برای صفحات یا منابع خاص را بررسی میکند. صفحاتی که بیشتر مورد درخواست قرار میگیرند، کاندیداهای اصلی برای caching به شمار میآیند.
محتوای ایستا در مقابل پویا (Static vs. Dynamic Content): محتوای ایستا (مانند تصاویر، فایلهای CSS و جاوااسکریپت) به دفعات تغییر نمیکند و معمولاً در کش ذخیره میشود. با این حال، محتوای پویا (مانند صفحات HTML که بر اساس جلسات کاربر یا پرسوجوهای پایگاهداده تغییر میکنند) به رویکرد متفاونی نیاز دارد. این محتوا قابل کش شدن است، اما معمولاً برای مدتزمان کوتاهتر یا با استفاده از مکانیزمهای پیچیدهتر.
اندازهی منابع (Resource Size): حافظه کش همچنین ممکن است اندازهی منابع را در نظر گرفته و ترجیح دهد که موارد کوچکتر و با دسترسی بیشتر را برای به حداکثر رساندن کارایی و سرعت ذخیره کند.
منطق سفارشی در برنامهها (Custom Logic in Applications): گاهی اوقات، خود برنامه (مانند برخی افزونههای وردپرس) میتواند منطقی داشته باشد که به کش دستور دهد چه چیزی را ذخیره کند، بهویژه برای محتوای پویا.
سیاستهای انقضا و اعتبارسنجی (Expiration and Validation Policies): کشها بر اساس نحوهی مدیریت انقضا (مدت زمان نگهداشتن داده) و اعتبارسنجی (بررسی اینکه آیا دادههای کششده همچنان بهروز هستند) تصمیمگیری میکنند.
علاوه بر این، مفاهیم Cache Hit و Cache Miss نیز برای درک بهتر عملکرد کش سرور از اهمیت بالایی برخوردار هستند:
- Cache Hit: هنگامی که یک درخواست میتواند مستقیماً از کش ارائه شود، زیرا منبع قبلاً ذخیره شده است، Cache Hit رخ میدهد. این روش سریع و کارآمد است و میتوان آن را ایدهآلترین حالت در نظر گرفت.
- Cache Miss: این اتفاق زمانی میافتد که منبع درخواستشده در کش نباشد. این موضوع میتواند به این دلیل باشد که درخواست ارسال شده یک درخواست جدید است، به دلیل سیاستهای کش حذف شده است و یا منقضی شده است. در این موارد، سرور به بازیابی منبع از منبع اصلی باز میگردد که با آن Miss گفته میشود.
نرمافزارهای مختلفی وجود دارند که به مدیریت بهتر کش سرور کمک میکنند. این ابزارها با نامهایی مثل Varnish، Redis و Memcached شناخته میشوند.
انواع کش سرور
کش سرورها را میتوان بر اساس نحوهی پیادهسازی و موقعیت مکانی آنها به انواع مختلفی تقسیم کرد. در ادامه به بررسی متداولترین انواع کش سرور میپردازیم:
-
کش سرور اختصاصی (Dedicated Cache Server): این نوع از کش سرور، یک سرور مجزا است که به طور اختصاصی برای ذخیرهسازی محتوای وبسایت راهاندازی میشود. راهاندازی و مدیریت این نوع کش سرور نیازمند دانش فنی و زیرساخت سختافزاری مناسب است.
-
کش سرور اشتراکی (Shared Cache Server): در این نوع، چندین وبسایت از یک سرور کش مشترک استفاده میکنند. این نوع از کش سرور، مقرون به صرفهتر از راهاندازی یک سرور اختصاصی است اما ظرفیت ذخیرهسازی و کنترل کمتری را در اختیار وبسایتها قرار میدهد.
-
کش مرورگر (Browser Cache): مرورگرهای وب نیز دارای حافظه کش داخلی هستند که صفحات و فایلهای پربازدید را به صورت موقت ذخیره میکنند. این نوع کش، اولین خط دفاعی برای افزایش سرعت بارگذاری صفحات است.
-
کش سرور CDN (Content Delivery Network): شبکه توزیع محتوا (CDN) مجموعهای از سرورهای توزیعشده در سراسر جهان است که وظیفه تحویل سریع محتوا به کاربران را بر عهده دارد. بسیاری از سرویسهای CDN از قابلیت کش سرور نیز برخوردار هستند و میتوانند محتوای پربازدید وبسایتها را در سرورهای مختلف خود ذخیره کنند. این امر باعث میشود کاربران از نزدیکترین سرور CDN محتوا را دریافت کنند و سرعت بارگذاری به طور چشمگیری افزایش یابد.
Caching یعنی چه؟
از آغاز عصر محاسبات، مفهوم کش یا حافظه پنهان نقشی کلیدی ایفا کرده است. این مفهوم به ذخیرهسازی دادههایی در حافظهای سریعتر و گرانتر (معمولاً به نام کش) برای دسترسی سریعتر پردازنده یا CPU اشاره دارد. ریشه این اصطلاح به مکانی برای پنهان کردن سلاح یا اشیاء باارزش در گذشته برمیگردد.
هنگامی که پردازنده به دنبال دادهای در حافظه کش میگردد و آن را پیدا میکند، به آن “کش هیت” میگویند. در مقابل، اگر دادهها در کش موجود نباشد، به آن “کش میس” میگویند و باید از منبع اصلی یا از سطح دیگری از حافظه کش (در صورت وجود چند سطح) واکشی شود.
کش میسها به عنوان سربار عمل میکنند و میتوانند هدف اصلی ذخیرهسازی دادهها را که دسترسی سریع است، به خطر بیندازند. برای به حداقل رساندن این اتفاق، الگوریتمهای کارآمدی برای کش کردن مورد نیاز هستند. در برخی موارد، الگوریتمهای کش میتوانند به طور خاص برای یک برنامه یا سرویس خاص سفارشیسازی شوند. این برنامه میتواند در سرور مجازی شما میزبانی شود و برای بهبود تجربه کاربری، از مزایای این الگوریتم بهره ببرد.
یکی دیگر از مفاهیم کلیدی ذخیرهسازی این است که دادهها ممکن است کهنه شوند. این یعنی دادهها در منبع بهروز میشوند، اما نسخه کششدهی همان دادهها بهروزرسانی جدیدی را دریافت نمیکنند. در بسیاری از موارد، این موضوع مشکلی ایجاد نمیکند، زیرا دادهها به طور مکرر تغییر نمیکنند.
با این حال، در مواردی که کاربر نیاز به مشاهده فوری یا در یک بازه زمانی معقول تغییرات در دادهها دارد، یا زمانی که کاربر به طور خاص درخواست بهروزرسانی میکند (مانند کلیک بر روی دکمه “Refresh” در مرورگر)، الگوریتم کش باید به طور مناسب با دادههای قدیمی برخورد کند.
کش سرور از الگوریتمهایی برای پیشبینی محتوای مورد نیاز در مکانی جدید و همچنین تعیین زمان تغییر منبع برای بهروزرسانی حافظه کش استفاده میکند. بهترین الگوریتمهای کش سرور، دسترسی سریعتر به محتوا را برای کاربران فراهم میکنند، به طوری که بدون اطلاع از استفاده از یک نسخه کپی، به سرعت به خواسته خود میرسند.
شبکههای تحویل محتوا (CDN) و کش
شبکههای تحویل محتوا (CDN) به شدت به حافظه کش برای ارائه خدمات بهینه به برنامههایی مانند سرویسهای استریمینگ ویدیو متکی هستند. یک ارائهدهنده سرویس استریمینگ میتواند از طریق API مجهز به الگوریتمهای کش به CDN دسترسی پیدا کند تا تاخیرها را به حداقل برساند و از پهنای باند به طور کارآمد استفاده کند.
برای ارائه بهترین تجربه به کاربران در یک منطقه جغرافیایی خاص، میتوان یک سرور مجازی یا اختصاصی نیز در همان مکان راهاندازی کرد. به عنوان مثال، خرید سرور اختصاصی ایران میتواند تجربه به مراتب بهتری را به کاربرانی که با IP ایران به وبسایت یا سرویس استریمینگ شما متصل میشوند، ارائه دهد.
انواع مختلف الگوریتمهای کش چیست؟
استراتژیهای مختلفی برای کش کردن وجود دارد که هر کدام مزیتهای خاص خود را دارند. استراتژی به نوع محتوا، خدمات و الگوهای استفاده بستگی دارد. به عنوان مثال، محتوا ممکن است ویدیو و سرویس یک سرویس استریمینگ باشد. استراتژی کش کردن در مورد الگوهای استفاده برای یک منطقه جغرافیایی معین پیشبینی انجام میدهد و سپس محتوای ویدیویی را تا حد امکان به کاربرانی که به احتمال زیاد محتوا را درخواست میکنند تا نزدیک میکند.
الگوریتمهای کش دو چیز را در نظر میگیرند. اولین ملاحظه این است که وقتی حافظه کش پر است، چه دادههایی را حذف کنیم. در زیر چهار نوع الگوریتم حذف کش آمده است:
- اولین ورود، اولین خروج (FIFO): بدون در نظر گرفتن تعداد دفعات استفاده از دادهها، ابتدا قدیمیترین محتوا حذف میشود. نوع دیگری از FIFO، آخرین ورودی، اولین خروجی است که در آن ابتدا جدیدترین دادهها حذف میشود.
- کمترین استفاده اخیر (LRU): ابتدا محتوایی که اخیرا کمتر به آن دسترسی داشتهاند حذف میشود.
- کمترین استفاده (LFU): در این الگوریتم، محتوایی با کمترین دفعات استفاده ابتدا حذف میشود.
- ترکیبی از LFU و LRU: محتوایی با کمترین میزان استفاده ابتدا حذف میشود. هنگامی که دو قطعه از محتوا به تعداد یکسان استفاده شده باشد، ابتدا محتوایی که اخیرا کمتر مورد استفاده قرار گرفته است از بین میرود.
نکته دوم این است که در مورد دادههای کهنه چه باید کرد؟ فرایند حذف دادههای کهنه یا قدیمیشده از کش، باطل کردن کش نامیده میشود. در زیر به دو تکنیک رایج برای باطل کردن دادههای کش اشاره کردهایم:
- Write-Through Cache: نرمافزاری که دادهها را بهروز میکند، بهروزرسانی را ابتدا در حافظه کش و سپس بلافاصله در منبع مینویسد. این تکنیک زمانی استفاده میشود که بهروزرسانیهای زیادی بهصورت همزمان وجود نداشته باشد.
- Write-Back Cache: نرمافزاری که دادهها را بهروز میکند، ابتدا بهروزرسانی را در حافظه کش مینویسد و سپس منبع را بهروز میکند اما این کار بلافاصله انجام نمیشود. نرمافزار فقط بهصورت دورهای دادههای جدید را در منبع مینویسد تا امکان ارسال همزمان چندین بهروزرسانی را داشته باشد.
جمع بندی
کش سرور حافظهای است که اطلاعات پربازدید را به صورت موقت ذخیره میکند تا از درخواستهای مکرر به سرور اصلی جلوگیری شود. این امر به نوبه خود، سرعت بارگذاری صفحه را افزایش میدهد، مصرف پهنای باند را کاهش میدهد و به طور کلی عملکرد وبسایت را بهبود میبخشد.
نوشته کش سرور؛ بهینه سازی عملکرد وبسایت! اولین بار در مجله آقای وب. پدیدار شد.