Varnish Cache یک شتابدهنده http و پروکسی معکوس است که توسط Danish مشاور و توسعهدهنده اصلی Freebsd به همراه توسعهدهندههای دیگر در Norwegian Linpro AS ایجاد و در سال 2006 منتشر شد. طبق گفته سایت pingdom.com، سایتی که روی کارایی وب تمرکز دارد، در سال 2012 وارنیش (Varnish) بهعنوان افزایشدهنده سرعت وب در بین تمام توسعهدهندگان و وبسایتها معروف بود و هم اکنون در سایتهایی مانند Wired, SlideShare, Zappos, SoundCloud, Weather.com, Business Insider, Answers.com, Urban Dictionary, MacRumors, DynDNS, OpenDNS, Lonely Planet, Technorati, ThinkGeek and Economist.com از آن استفاده میکنند.
Varnish تحت مجوز BSD لایسنس شده است. varnish یک لایه تجاری به نام varnish plus هم دارد که روی مشتریان سازمانی تمرکز کرده است و ویژگی های منحصر به فرد و ماژول ها و پشتیبانی به موقع را ارائه می دهد.
اگرچه راهحلهای دیگری مانند shine هم وجود دارد اما varnish یک راهحل بهتری است که میتواند باعث بهبود چشمگیر سرعت وبسایت، کاهش بار اضافی برنامهها روی پردازندههای سرور شود و حتی یک برنامه برای حفاظت از حملات DDOS هم ارائه میدهد.
سایت keyCDN پیشنهاد میکند که آنها روی سرور اصلی قرار دهید. در سایتهای پربازدید میتوانید varnish را روی یک سرور اختصاصی پیکربندی کنید و بدین ترتیب مطمئن میشوید که سرور اصلی از درخواستهای زیاد کاربران تأثیر نمیگیرد.
نحوه کار Varnish Cache
Caching معمولا با نگهداری خروجی از قبل محاسبه شده یک برنامه در حافظه یا روی دیسک کار میکند و باعث می شود که محاسبات سنگین با هر درخواستی که از سوی کاربر می آید به طور مداوم محاسبه نشود.
Varnish از حالت دوم استفاده میکند. معمولاً طوری پیکربندی میشود که بتواند بر درخواستهایی که از طریق پورت استاندارد http یعنی پورت 80 ردوبدل میشود گوش دهد و سپس منابع درخواست شده کاربران را به آنها ارسال میکند. بهمحض اینکه یک url و یک مسیر درخواست شود، varnish درخواست را از سرور اصلی گرفته و آنها را برای بیننده سایت آماده میکند که به این فرایند cache miss گفته میشود، که بسته به تنظیمات varnish میتوان آن را از هدر http Reponse خواند.
هنگامی که یک آبجکت، هر نوع محتوا مثل عکس یا یک صفحه در cache ذخیره نشود ما با حالتی روبرو میشویم که اصطلاحاً به آن cache miss گفته میشود که در این مورد varnish میتواند محتوا را از وب سرور گرفته، آن را ذخیره و یک کپی از آن را به کاربر تحویل دهد و آن را برای درخواستهای آتی در کش ذخیره نماید.
هنگامی که یک url مشخص یا یک منبع توسط varnish کش شده و در حافظه ذخیره شود، می توان آن منبع را به طور مستقیم از رم سرور درخواست کرد و نیازی نیست که هر بار از سرور اصلی آن منبع را درخواست کرد. Varnish شروع به تحویل دادن یک cache hit در عرض چند میکروثانیه میکند.
که به این معنی است که نه سرور اصلی و نه وب اپلیکیشنها که شامل دیتابیس هم میشوند نیازی به پاسخ به درخواستهایی که از طرف کاربران میآیند ندارند. حتی نیازی نیست آنها بدانند که آدرس درخواستها در کش ذخیره شدهاند. در این مورد ما از varnish بهعنوان یک load balancer استفاده کردیم که طوری پیکربندی شدهاند تا به پورتهای غیراستاندارد مثل ۸۸۸۸ گوش دهند، و varnish آنها را از آدرس و پورت خودشان آگاه میکند.
ویژگیهای Varnish Cache
Varnish اصطلاحاً Theaded است و مطابق گزارشها قادر میباشد که بیش از ۲۰۰۰۰۰ درخواست در ثانیه را تنها روی یک نمونه (instance) مدیریت کند. اگر varnish بهدرستی پیکربندی شود تنها محدودیت برنامه وب شما توان شبکه و میزان رم خواهد بود.
Varnish با VMODS گسترش پیدا میکند. اینها ماژولهایی هستند که از کتابخانه استاندارد استفاده کرده و عملکرد varnish را افزایش می دهند. آنها کارهایی از قبیل تغییر هدر تا اسکریپتنویسی به زبان lue، روشهای کاهش درخواستها، احراز هویت و مسائلی ازاینقبیل انجام میدهند.
Varnish یک زبان domain-specific مختص به خود به نام VCL دارد. VCL یک روش جامع برای پیکربندی ارائه می دهد.
هنگامی که ما یک وبسایت دینامیک با صدها یا هزاران صفحه به همراه مسیرهای مختلف را با پارامترهای کوئری Get کش میکنیم، میخواهیم بعضی از آنها را از داخل کش خارج یا نقشهای cache-expiration متفاوتی را برای آن تنظیم کنیم.
بعضی مواقع میخواهیم که درخواستهای Ajax را کش کنیم، یا آنها را از کش خارج کنیم. این کار از یک پروژه تا پروژه دیگر فرق میکند و نمیتوان یک روش از قبل طراحی شده برای آن ارائه داد. بعضی مواقع ما میخواهیم که Varnish تصمیم بگیرد که بسته به هدر درخواست، چه کاری را انجام دهد.
پاکسازی حافظه کش باید بهصورت پویا انجام شود که این کار توسط انتشار یک مقاله، یا بهروزرسانی یک وبسایت اتفاق میافتد. به این معنی که باید کوچکترین محدوده ممکن را مانند یک منبع یا مسیر هدف قرارداد. این بدان معنی است که قوانین خاص باید به ترتیب اولویت تعریف Varnish یک مجموعهای از ابزارها برای نظارت و مدیریت سرورها دارد که در زیر به توضیح مختصر برخی از آنها میپردازیم:
Varnishtop
که به ما اجازه میدهد urlهای درخواست شده به همراه تعداد دفعات درخواست را مانیتور کنیم.
Varnishncsa
که برای چاپ logهای مربوط به حافظه اشتراکی Varnish بهاختصار VSL استفاده میشود و موارد مربوط به یک دامنه و زیر دامنههای خاص را نشان میدهد.
Varnishhist
حافظه اشتراکی varnish یا VSL را خوانده و یک هیستوگرام زنده از توزیع آخرین تعداد درخواستها را نشان میدهد و در نهایت یک خلاصهای از عملکرد سرور و کارایی back-end آن را به ما نشان می دهد .
Varnishtest
که برای تست فایل های پیکربندی VCL و توسعه VMODS استفاده می شود.
Varnishstat
که یک آماری را درباره instance های Varnish را نشان می دهد.
Varnishlog
که برای گرفتن اطلاعاتی درباره کلاینت ها و یک درخواست خاص استفاده می شود.