فهرست محتوا
دارندگان کسبوکارهای آنلاین بیشازپیش به دنبال بهبود عملکرد و افزایش سرعت سرورها و وبسایتهای خود هستند زیرا این امر به صورت مستقیم بر سطح رضایت بازدیدکنندگان و مشتریان و در نتیجه میزان درآمد آنها تأثیر میگذارد. علاوهبراین، آمارهای وبسایت Sweor نشان میدهند که حدود ۴۷٪ از افراد، صفحات وبی که مدت زمان بارگذاری آنها بیش از ۲ ثانیه باشد را میبندد. اما چگونه سرعت وبسایت خود را در هاست اشتراکی، سرور مجازی یا سرور اختصاصی افزایش دهیم؟ قبلا در مقالات افزایش سرعت سرور مجازی و افزایش سرعت سایت به نکات مختلفی اشاره کردیم. امروز اما قصد داریم در خصوص کش (به آن کشینگ، کشکردن یا Caching هم میگویند) صحبت کنیم. کش به صورت خلاصه به حافظهای گفته میشود که دادههای مختلفی را به صورت موقت در خود ذخیره میکند.
کش چیست؟
کش (Cache) یا حافظه پنهان، نرمافزار و یا سختافزاری است که دادههای سرورها، مرورگرها، اپلیکیشنها و … را به شکلی موقت و خودکار در حافظه خود ذخیره کرده و در نتیجه کاربران میتوانند در مدت زمان بسیار کمی به محتوایی که قبلا آنها را مشاهده کردهاند، دسترسی باشند. دادهها در چنین حالتی معمولا به صورت محلی و جدا از حافظه اصلی سرور ذخیره میشوند. حافظه کش معمولا توسط مرورگرهای وب، وبسرورها، سیستمعاملها (لینوکس، ، ویندوز و …)، اپلیکیشنها، CPUها مورد استفاده قرار گرفته و دارای مزایای مختلف میباشد که از جمله میتوان به بهبود دسترسی کاربران به دادهها و کاهش زمان بارگذاری صفحات وب اشاره کرد. مرورگرها، سرورها، CDNها، وبسرورها، پایگاههای داده و DNSها از جمله فناوریهای کامپیوتری هستند که از قابلیت کشینگ استفاده میکنند. حافظه کش مانند کتابخانه اتاق شخصی شماست که تمام کتابهای مورد نیاز شما در آن قرار داشته و دیگر نیاز نیست برای مطالعه آنها به کتابخانه محل زندگی و کتابخانه مرکزی شهر خود بروید. اما کش دقیقا به چه شکلی کار میکند؟
کش چگونه کار میکند؟
همانطور که گفته شد، فرآیند کشینگ در مجموع از طریق ذخیرهسازی موقت دادهها و فایلهای پراستفاده کاربران در حافظه یک دستگاه، مرورگر، وبسرور و … انجام میشود و بنابراین در اکثر موارد کاربران نیازی نیست دادههای مورد نظر خود را از منبعی بسیار دورتر از مکان جغرافیایی حال حاضر خود دریافت کنند. به عنوان مثال وقتی یک نسخه از دادهها در سرورهای لبه CDN ذخیره میشوند، دیگر نیاز نیست کلاینتها درخواست خود را به سروری که در مکانی دورتر قرار دارد، ارسال کنند. دادهها تنها بر اساس TTL (مخفف Time-To-Live) در حافظه پنهان باقی میمانند و TTL در واقع سازکاری است که مشخص میکند دادهها چه مدت زمانی باید در حافظه کش بمانند. شاید از خودتان بپرسید که چرا دادهها تنها به صورت موقت ذخیره میشوند. علت آن این است که دادهها پس از مدتی قدیمی شده و نیاز به آپدیت شدن دارند و بنابراین کلاینتها باید دوباره درخواستی را به سرور یا وبسرور منبع ارسال کنند و از همین رو وجود قابلیت TTL ضروری است.
مراحل کشینگ دادهها
۱. ایجاد و ارسال درخواست
کاربر به منظور دریافت فایلها و یا محتوای مورد نظر خود درخواستی را از طریق کلاینت (مرورگرها، اپلیکیشنها و …) ایجاد میکند. این درخواست در ابتدا به سمت حافظه کش میرود.
۲. بررسی حافظه کش
کلاینت در ابتدا حافظه کش خود را به منظور پیدا کردن محتوای مورد نیاز کاربر مورد بررسی قرار میدهد.
۳. ارسال محتوا به کاربر
اگر محتوای مربوطه در حافظه پنهان موجود باشد، در این صورت آن را فورا به سمت کاربر ارسال میکند. به چنین حالتی در اصطلاح کامپیوتری کش هیت (Cache Hit) میگویند.
۴. ارسال درخواست به سرور
اگر فایلهای درخواستی کاربر پیدا نشود، در این صورت کلاینت درخواستی را به سمت سرور مربوطه ارسال میکند. به حالتی که در آن فایلهای درخواستی در حافظه کش کلاینت موجود نیست نیز کش میس (Cache Miss) میگویند.
۵. دریافت فایلها از سرور
در این مرحله، سرور درخواست را مورد پردازش قرار داده و دادههای مورد نظر کاربر را به سمت کلاینت ارسال میکند. انجام اینکار نسبت به حالت کش هیت نیاز به زمان بیشتری دارد.
۶. ذخیرهسازی دادهها
پس از دریافت دادهها، کلاینت یک نسخه از آنها را در حافظه پنهان خود ذخیره میکند.
توجه: حافظه کش دارای ظرفیت محدود بوده و بنابراین تنها آیتمهای ضروری را ذخیره میکند. حافظه کش همچنین در صورت تغییر محتواهای موجود در سرور، آنها را جایگزین محتواهای قدیمی میکند.
انواع مختلف کشینگ
کشینگ در فناوریهای کامپیوتری مختلفی بکار گرفته شده و باعث بهبود سرعت و عملکرد آنها میشود. در ادامه با مهمترین انواع کشینگ آشنا میشوید:
کش مرورگر
کش مرورگر (کروم، فایرفاکس، سافاری و …) یکی از رایجترین انواع کشینگ میباشد. وقتی شما برای اولین بار از صفحه وبی بازدید میکنید، مرورگر یک نسخه کپی از محتوای آن را از وبسرور گرفته و در حافظه کش خود ذخیره میکند که شامل مواردی مانند عکسها، فایلهای جاوا اسکریپت، و … میشود. بنابراین اگر دفعات بعد هم از همان سایت بازدید کنید، مرورگر محتوای آن را از حافظه کش خود دریافت کرده و به شما نمایش میدهد و در نتیجه دیگر نیازی به ارتباط با سرور نیست.
،کش سمت سرور
سرور دستگاهی سختافزاری است که معمولا در یک دیتاسنتر نگهداری شده و از آن برای ذخیرهسازی، مدیریت، پردازش و تحویل دادهها و فایلها استفاده میکنند. کش سمت سرور نوعی تکنیک کشینک است که در سمت سرور یک وبسایت، اپلیکیشن و یا سرویس آنلاین انجام شده و شامل کش وبسرور، پایگاهداده، CDN و … میشود.
کش CDN
شبکه توزیع محتوا یا CDN (مخفف Content Delivery Network)، شبکهای از سرورهای متصل بههم به نام سرورهای لبه (Edge Server) میباشد که در سرتاسر جهان پراکنده شدهاند. CDNها (Cloudflare ، و …) محتوای صفحات وبسایتها را در سرورهای لبه خود ذخیره کرده و بنابراین وقتی کاربری درخواستی را از طریق مرورگر خود ایجاد میکند، شبکه توزیع محتوا فورا به آن پاسخ داده و محتوای مورد نظر کاربر را از طریق نزدیکترین به محل زندگی یا مکان فعلی او به سمتش ارسال میکند که این عمل باعث افزایش سرعت بارگذاری صفحات وب میشود. با وجود CDN دیگر نیاز نیست مرورگرها به صورت مستقیم با سرورهایی که در فاصلهای دور قرار دارند، ارتباط برقرار کنند.
کش DNS
سیستم نام دامنه یا DNS (مخفف Domain Name System) یکی از مهمترین سیستمهای اینترنتی است که وظیفه تبدیل نامهای دامنه مانند Maralhost.com به آدرسهای IP مانند 192.0.2.1 را بر عهده دارد و علت آن این است که مرورگرها تنها از طریق IPها میتوانند با سرورها ارتباط برقرار کنند. وقتی کاربری آدرس اینترنتی مانند Google.com را تایپ میکند، مرورگر برای پیدا کردن آدرس IP مرتبط با آن، درخواستی را به سمت سرور DNS مربوطه میفرستد. سرور DNS نیز پس از یافتن آدرس IP درخواستی، آن را در قالب یک پاسخ به سمت مرورگر ارسال میکند. مرورگرها و یا سرورهای DNS در مجموع آدرسهای IP را در حافظه کش خود ذخیره میکنند و بنابراین کاربران دیگر نیاز نیست هر بار برای دریافت IP وبسایتهایی که قبلا از آن بازدید کردهاند، درخواست جدیدی را به سمت سرورهای DNS ارسال کنند.
کش CMS
سیستم مدیریت محتوا یا CMS (مخفف Content Management System) نرمافزار یا پلتفرمی است که با استفاده از آن و بدون نیاز به دانش فنی میتوانید در مدت زمان بسیار کوتاهی برای خود یک وبسایت طراحی کنید و از میان مهمترین پلتفرمهای CMS موجود در بازار میتوان به وردپرس، جوملا و دروپال اشاره کرد. این پلفترمها دارای قابلیتها و افزونهها کشینگ متعددی هستند که باعث افزایش سرعت بارگذاری صفحات وبسایت شما برای کاربران و بازدیدکنندگان میشود. به عنوان مثال WP Rocket، W3 Total Cache و WP Super Cache از مهمترین ابزارهای کش وردپرس هستند.
کش وبسرور
وبسرور (Web Server) نرمافزاری است که درخواستهای آپاچی، انجینایکس و لایتاسپید از مهمترین وبسرورهای موجود در بازار هستند. وبسرورها با ذخیرهسازی صفحات وب مانند فایلهای جاوا اسکریپت در حافظه کش خود علاوه بر افزایش سرعت بارگذاری وبسایت، مانع از فشار آمدن بر سرورها میشود.
که کاربران از طریق مرورگرها ارسال میکنند را مورد پردازش قرار داده و سپس محتوای مورد نظر آنها را به سمتشان ارسال میکند.کش پایگاهداده
پایگاهداده یا دیتابیس به مجموعهای سازماندهی شده از دادهها و اطلاعات گفته میشود که بر روی یک سیستم کامپیوتری ذخیره شده و میتوان آنها را از طریق یک مدیریت کرد. پایگاههای داده معمولا مجهز به یک سازوکار کشینگ هستند که مانع از ارسال بیش از حد از طرف کلاینتها میشود. دیتابیسها در واقع با کشکردن نتایج آخرین کوئریهای ارسال شده، با سرعت بسیار بالایی آنها را به کلاینتها ارائه میدهند.
کش سمت کلاینت
در علم کامپیوتر، کلاینت به سیستم، نرمافزار و یا دستگاهی گفته میشود که به منظور دریافت دادهها، سرویسها، فایلها و یا منابع مورد نیاز خود با سرورها ارتباط برقرار میکنند. کش سمت کلاینت نوعی تکنیک کشینگ است که در سمت کلاینت (مرورگرهای وب،
، اپلیکیشنها و …) انجام شده و باعث کاهش ارسال درخواستها به سمت سرور و افزایش سرعت تحویل محتوا به کاربران میشود.کش وبسایت
کش وبسایت به فرآیند ذخیرهسازی موقت فایلها و دادههای وبسایتها در حافظه کش CDNها، پایگاههای داده، مرورگرها، DNSها و
میگویند.کش CPU
نوعی حافظه کش سختافزاری است که میان حافظه
و پردازنده کامپیوتر قرار گرفته و این امکان را به میدهد تا با سرعت بسیار بیشتری دستورالعملهای مرتبط با برنامهها را اجر کنند و در کل نیز شامل سه سطح L2، L1 و L3 میشود.کش L1
سریعترین و کم ظرفیتترین کش CPU (معمولا بین ۱۶ تا ۱۲۸ کیلوبایت) است که داخل هستههای پردازنده تعبیه شده و خود به دو نوع کش دستورالعمل و داده تقسیم میشود. کش دستورالعمل حاوی دستورالعملهایی است که پردازنده برای اجرای برنامهها به آنها نیاز دارد و کش داده نیز دادههای حافظه اصلی سیستم که CPU به آنها نیاز دارد را در خود ذخیره میکند.
کش L2
معمولا ظرفیت بیشتری از نوع L1 داشته (بین چند مگابایت تا دهها مگابایت) و بر روی هستههای خود پردازنده و یا یک قطعه سختافزاری مجزا قرار میگیرد. کش L2 با وجود ظرفیت بیشتر، دارای سرعتی پائینتر از L1 و بالاتر از RAM است.
کش L3
حافظه پنهانی است که به صورت خاص برای افزایش عملکرد کشهای L1 و L2 ایجاد شده و ظرفیت آنها معمولا بین دهها تا صدها مگابایت میباشد. توجه داشته باشید که سرعت L3 پائینتر از L1 و L2 است.
کش توزیعی
نوعی تکنیک کشینگ است که در آن دادهها به صورت توزیعی در سرورها و یا دستگاههای مختلفی در مکانهای جغرافیایی متعددی ذخیره میشوند و در نتیجه کاربران میتوانند با سرعت بسیار بالایی به محتوای درخواستی خود دسترسی پیدا کنند و این نوع تکنیک در مجموع مانع از فشار آمدن بر روی پایگاههای داده میشود.
مزایای کش کدامند؟
- افزایش سرعت وبسایتها و اپلیکیشنها
- افزایش و بهینهسازی عملکرد
- کاهش پهنایباند و بهینهسازی
- کاهش فشار وارده به سرورها
- دسترسی آفلاین و بهبود
- کاهش مصرف و هزینههای
- افزایش پایداری سرور
معایب کش کدامند؟
- ممکن است دادههای قدیمی را بارگذاری کند.
- دادهها را به صورت موقت ذخیره میکند.
- منابع را مصرف و فضای ذخیرهسازی را اشغال میکند.
- میتواند باعث کند شدن مرورگر شود.
- ممکن است باعث کاهش امنیت شود.
کشینگ در چه حوزههایی کاربرد دارد؟
- وبسایتها، اپلیکیشنها
- اینترنت اشیاء و دستگاههای هوشمند
- سرویسهای پخش ویدئو
- بورس و خدمات بانکداری آنلاین
- تجارت الکترونیک و بازیهای آنلاین
- پلتفرمهای شبکههای اجتماعی
- موتورهای جستجو
- GPSها و سیستمهای ناوبری
- پلتفرمهای آموزش آنلاین
- و …
الگوریتمهای کشینگ
الگوریتم LRU
LRU یا Least Recently Used (اخیرا کمتر استفاده شده)، یکی از رایجترین الگوریتمهای کشینگ است که در صورت پربودن حافظه کش، در ابتدا آیتمها و صفحات وبی را حذف میکند که برای زمان طولانی استفاده نشدهاند.
الگوریتم LFU
LFU یا Least Frequently Used تکنیک کشینگی است که بر اساس میزان استفاده کاربران از آیتمهای حافظه کش در بازه زمانی مشخصی عمل کرده و دادههایی که در کل استفاده چندانی ندارند را حذف میکند. به عنوان مثال الگوریتم LFU دادههای صفحه وبی که کاربر تنها یک یا دو بار از آن استفاده کرده است را از حافظه کش حذف میکند.
الگوریتم MRU
الگوریتم MRU یا Most Recently Used (اخیرا بیشتر استفاده شده)، آیتمها و دادههای که اخیرا بیشترین استفاده را داشتهاند را از حافظه پنهان پاک میکند. الگوریتم MRU مناسب مواقعی است که در آن صفحات و آیتمهای قدیمی بیشتر مورد استفاده قرار میگیرند.
الگوریتم FIFO
الگوریتم FIFO یا First-In-First-Out یکی از سادهترین الگوریتمهای کشینگ است که بر اساس زمان قرارگیری آیتمها در حافظه پنهان عمل کرده و در صورت پر شدن کش، قدیمیترین آیتم موجود را حذف میکند.
سؤالات متداول
آیا استفاده از کش باعث بهبود رتبه وبسایتها میشود؟
استفاده از تکنیکهای کشینگ باعث کاهش زمان بارگذاری صفحات وب و در نهایت منجر به بهبود رتبه وبسایتها در
میشود.آیا پاککردن حافظه کش باعث ایجاد مشکلی میشود؟
پاککردن حافظه کش معمولا باعث ایجاد مشکل خاصی نمیشود اما با پاککردن حافظه کش ممکن است محتوای برخی وبسایتها در ابتدا با کمی تأخیر بارگذاری شوند زیرا مرورگرها برای دریافت عناصری مانند تصاویر باید دوباره درخواستی را به سمت سرور ارسال کنند.
آیا مرورگرها میتوانند محتوای دینامیک را در حافظه کش ذخیره کنند؟
بله مرورگرهای مدرن میتوانند تا حدی محتوای دینامیک وبسایتها را در حافظه کش خود ذخیره کنند. با این حال فرآیند کشینگ محتوای دینامیک پیچیدهتر از
است زیرا این نوع محتواها به صورت مداوم تغییر کرده و با توجه به تعاملات در لحظه کاربران با عناصر وبسایتها ایجاد میشوند.آیا کشینگ در سطح سختافزار انجام میشود یا نرمافزار؟
هر دو حالت ممکن است و میتوان دادهها را بر روی نرمافزارهای کشینگ و یا حافظههای سختافزاری ذخیره کرد.
منابع: Amazon ،Auth0 ،Cloudflare و Sematext