در پست قبلی در مورد راههای بهبود عملکرد API توضیح دادیم. یکی از راههای موثر در بهبود عملکرد استفاده از استراتژیهای ذخیرهسازی (کش کردن) است. کش کردن شامل ذخیرهسازی موقت دادههایی است که به طور مداوم در حال استفاده هستند. به این ترتیب به کمک کش کردن، دفعه بعد که به دادهها نیاز داشته باشیم، آنها را سریعتر و بدون نیاز به تبادل داده با سرور دریافت میکنیم. شما میتوانید با استفاده از کش زمان پاسخگویی را کاهش داده، مقیاسپذیری را افزایش دهید و تجربه کاربری بهتری ارائه کنید.
در این پست ما عمیقتر به استراتژیهای کش کردن پرداخته و انواع کش مانند کش کردن سمت کلاینت و کش کردن سمت سرور را با هم بررسی میکنیم.
درک مفهوم کش کردن API
همانطور که گفتیم، کش کردن ترفندی است که برای برای ذخیرهسازی موقت دادهها به کار میرود. هدف از کش کردن دسترسی سریع به دادهها از طریق کاهش زمان بازیابی آنها از روی سورس است. به این ترتیب عملکرد کلی سیستم نیز به دلیل کاهش بار روی سورس (مثل پایگاه داده) بهبود پیدا میکند. در بحث API، سیستم با ذخیرهسازی دادهها، در نوبت بعدی فراخوانی داده را به جای سورس، از محل ذخیرهسازی بازیابی کرده و ارسال میکند. به این ترتیب سورس کمتر درگیر شده و فرصت پاسخگویی به سایر درخواستها را دارد. این موضوع به طور ویژه برای APIهای پرکاربرد با چند درخواست همزمان بسیار کاربردی است.
سمت سرور در برابر سمت کلاینت
کش کردن سمت سرور و سمت کلاینت دو نوع اصلی کش کردن هستند که برای بهبود عملکرد API به کار میروند. انتخاب هر کدام از این دو نوع بستگی به نیازمندیهای API شما و نوع دادهها دارد.
کش کردن سمت کلاینت (همانطور که از نام آن پیداست) داده را سمت کلاینت (روی دستگاه یا مرورگر) ذخیره میکند. این مدل از کش کردن با کم کردن ترافیک روی شبکه و کاهش بار سرور، عملکرد را بهبود میبخشد.
کش کردن سمت سرور دادهها را روی سرور ذخیره میکند. این مدل از کش کردن به طور معمول برای ذخیرهسازی نتیجه کوئریهای پایگاه داده و سایر محاسبات پرتکرار به کار میرود تا دادههای نتایج در نوبت بعدی فراخوانی سریعتر بازیابی شوند.
مزایای استفاده از کش کردن API
اما چرا باید از کش کردن استفاده کنیم؟ چون کش کردن مزایای زیر را به همراه دارد:
- بهبود زمان پاسخگویی: با ذخیرهسازی دادههای پراستفاده، APIها میتوانند دادهها را سریعتر بازیابی کرده و زمان پاسخگویی به کاربر را کاهش دهند.
- افزایش مقیاسپذیری: کش کردن با کاهش بار روی سورس امکان مقیاسپذیری را افزایش داده و به مدیریت ترافیک بیشتر روی شبکه کمک میکند.
- کاهش ترافیک روی شبکه: کش کردن با کاهش حجم دادههایی که باید روی شبکه ارسال شوند، حجم ترافیک شبکه را کاهش داده تجربه کاربری را به خصوص در جاهایی که شبکه کند است، بهبود میبخشد.
- بهبود ثبات: با کش کردن داده، APIها میتوانند حتی در صورت اختلال در سورس زیرساختی (مانند حملات سایبری یا بروز خطا) به کار خود ادامه داده و داده را ارسال کنند.
- کاهش هزینهها: کش کردن با کاهش بار روی سورس به خصوص در حجم داده بالا، هزینه اجرای API را کاهش میدهد.
پیادهسازی کش کردن سمت کلاینت برای APIها
وقتی کلاینت یک درخواست به API ارسال میکند، داده را میتوان سمت کلاینت (به طور معمول روی مرورگر) کش کرد تا در دفعات بعدی فراخوانی داده کاربر سریعتر پاسخ خود را دریافت کند.
کش کردن سمت کلاینت به طور معمول برای محتوای ثابت نظیر عکسها، ویدیوها و دیگر مواردی به کار میرود که به احتمال زیاد برای مدت زمان مشخصی تغییر نمیکنند. کش کردن سمت کلاینت به طور ویژه برای کاربران گوشیهای همراه که از شبکههای نت همراه استفاده میکنند، کاربردی است.
موقع تصمیمگیری برای استفاده از کش کردن سمت کلاینت، باید به نوع محتوا و مدت زمانی که داده تغییر نمیکند دقت کنید. اگر داده شما مدام در حال تغییر است (برای مثال نرخ ارزها)، کش کردن سمت کلاینت گزینه مناسبی نیست. برای کش کردن سمت کلاینت میتوانید از ترفندهای زیر استفاده کنید:
هدرهای کش HTTP
از هدرهای کش HTTP برای کنترل کش کردن محتوای سمت کلاینت استفاده میکنند. در این هدرها مدت زمانی که داده باید کش شود و شرایط استفاده از دادههای کششده قرار دارند.
ذخیرهسازی محلی
ذخیرهسازی محلی یک سازوکار ذخیرهسازی مبتنی بر مرورگر است داده سمت کلاینت ذخیره شود.
سرویس ورکرها
سرویس ورکرها اسکریپتهایی هستند که در پسزمینه یک سایت یا اپلیکیشن اجرا میشوند و میتوان از آنها برای کش کردن منابع برای استفاده آفلاین استفاده کرد. از سرویس ورکرها میتوان برای کش کردن پاسخهای API و بهبود عملکرد سایت یا اپلیکیشن بهره برد.
API کش
API کش یک نوع API است که سورسها را سمت کلاینت ذخیره میکند.
مزایا و معایب کش کردن سمت کلاینت
کش کردن سمت کلاینت مزایا و معایب خاص خودش را دارد. توسعهدهندههای API هنگام انتخاب کش کردن سمت کلاینت باید این موارد را در ذهن داشته باشند:
مزایا
- بهبود عملکرد
- تجربه کاربری بهتر
- کاهش ترافیک شبکه
- دسترسی آفلاین
در مورد مزایا قبلا توضیح دادیم، اما معایب کش کردن سمت کلاینت معایبی نیز دارد:
- دادههای قدیمی: اگر دادههای کششده تغییر کنند، ممکن است دادههای قدیمی به کاربر نمایش داده شود.
- فضای ذخیرهسازی محدود: حجم دادههای قابل ذخیره بستگی به فضای ذخیرهسازی دستگاه کاربر دارد.
- نگرانیهای امنیتی: در صورت دسترسی هکرها یا افراد دیگر به اطلاعات ذخیرهشده از طریق کش، خطرات امنیتی کاربر و سیستم را تهدید میکند.
- پیادهسازی پیچیده: پیادهسازی سیستم کش کردن به دلیل نیاز به دانش فنی، فناوریهای مختلف و نوع دادهها میتواند پیچیده باشد.
پیادهسازی کش کردن سمت سرور
این مدل از کش کردن با کاهش زمان درخواست به سرور و کاهش بار آن به بهبود عملکرد کمک میکند. کش کردن سمت سرور در موارد زیر کاربرد دارد:
- درخواستهای متعدد برای یک داده
- بار سنگین روی سرور
- زمان پاسخگویی طولانی
- دادههای ثابت
ترفندهای پیادهسازی کش کردن سمت سرور
این ترفندها شامل موارد زیر است:
- کش کردن پایگاه داده: کش کردن نتایج کوئریهای پایگاه داده روی سرور
- کش کردن داخل حافظه: ذخیره کردن داده روی RAM سرور
- کش کردن فایل سیستم: کش کردن داده روی فایل سیستم تا نیازی به فچ کردن داده از روی دیسک نباشد
- کش کردن پروکسی معکوس: استفاده از یک سرور واسطه (پروکسی معکوس) برای کش کردن پاسخهای API
- کش کردن CDN: استفاده از CDN برای کش کردن داده از سرور API
مزایا و معایب کش کردن سمت سرور
مزایا
- بهبود عملکرد
- کاهش ترافیک شبکه
- مقیاسپذیری
- کاهش هزینهها
معایب
- افزایش پیچیدگی
- افزایش هزینه نگهداری
- امکان ارسال داده قدیمی
- امکان افزایش تاخیر در ارسال داده (در صورتی که داده در کش موجود نباشد)
انتخاب استراتژی درست کش کردن API
تعیین بهترین استراتژی کش کردن API به موارد مختلفی از جمله نیازمندیها، اهداف و منابع موجود و معماری API بستگی دارد. علاوه بر این موارد، باید این نکات را نیز در نظر داشت:
- نرخ بهروزرسانی داده
- اندازه داده
- الگوی دسترسی داده
- هزینه
- پیچیدگی
- مقیاسپذیری
کش کردن سمت کلاینت با استفاده از ترفندهایی نظیر هدرهای HTTP و ذخیرهسازی محلی برای مواقعی مناسب است که داده به طور مداوم بهروزرسانی نمیشود و یا بهروزرسانی داده اهمیت چندانی ندارد، حجم فایل داده کوچک است پهنای باند شبکه و فضای ذخیرهسازی کلاینت محدود است.
کش کردن سمت سرور نیز در مواقعی که بهروزرسانی داده حیاتی و حجم داده بزرگ است، به کار میآید. همچنین در شرایطی که الگوی دسترسی داده پیچیده است و داده باید به چند کلاینت به طور همزمان ارسال شود، گزینه مناسبی به شمار میرود.
کش کردن سمت سرور روی RAM نیز وقتی که بهروزرسانی داده مهم و حجم آن کم است، کارایی دارد.
همچنین بسته به پیچیدگی سیستم و API، میتوان از ترکیب این استراتژیها برای بهبود عملکرد API استفاده کرد.
بهترین روشها برای تست و دیباگ کردن کش API
هنگام پیادهسازی سیستم کش کردن، تست و دیباگ کردن یک گام مهم و ضروری است. با کمک روشهای زیر میتواند از عملکرد سیستم کش خود مطمئن شوید:
- تست رفتار کش با هدرهای کش مختلف
- تست بهروزرسانی داده
- نظارت بر نرخ کش شدن داده
- تست عملکرد با و بدون کش کردن
- تست انواع محلهای ذخیرهسازی کش
- تست بازههای زمانی مختلف برای باطل شدن داده کش
مواردی که هنگام پیادهسازی سیستم کش باید از آنها دوری کنیم
تمرکز بیش از حد روش کش کردن API میتواند باعث بروز خطاها و پیچیدگیهای غیرضروری شود که به جای بهبود عملکرد، باعث افزایش پیچیدگی و پایین آمدن نرخ بازدهی میشوند. هنگام انتخاب و پیادهسازی سیستم کش از این موارد دوری کنید:
- کش کردن بیش از حد: که موجب بهروزرسانی کمتر داده و تاثیر منفی روی تجربه کاربری میشود.
- کم کش کردن: کش نکردن در جاهایی که باید داده کش شود، موجب افزایش بار سرور و کاهش عملکرد میشود.
- کش کردن دادههای حساس: در این صورت کاربر و سیستم در خطر سوء استفاده توسط هکرها قرار میگیرند.
- در نظر نگرفتن ثبات در کش کردن: ثبات در کش کردن از بهروزرسانی داده در مواقع لازم اطمینان حاصل کرده و تجربه کاربری را بهبود میبخشد.
- تست نکردن رفتار سیستم کش: تست نکردن سیستم کش ممکن است به بروز خطا و ایجاد اختلال در کل سیستم شود.
- مناسب نبودن نوع محل ذخیرهسازی کش: استفاده از محل ذخیرهسازی نامناسب منجر به اختلال در عملکرد میشود.
تاثیر کش کردن در عملکرد API
کش کردن یک راه موثر برای بهبود عملکرد API است. امروزه کمتر سیستم، اپلیکیشن و سایتی را میتوان یافت که از کش کردن برای ذخیرهسازی دادهها سمت سرور یا سمت کلاینت استفاده نکند. بدون وجود فناوری کش کردن داده بدون شک بسیاری از سرویسهایی که امروزه از آنها استفاده میکنیم، قابل استفاده نبودند. بنابراین هنگام توسعه API به استراتژی کش کردن آن فکر کنید.