वार्निश (सॉफ्टवेयर)

वार्निश एक HTTP एक्सिलरेटर (त्वरक) है जो सामग्री-भारी गतिशील वेब साइट के साथ-साथ APIs के लिए डिज़ाइन किया गया है। अन्य वेब त्वरक के विपरीत, जैसे कि स्क्विड (सॉफ्टवेयर), जिसने क्लाइंट-साइड कैश के रूप में जीवन प्रांरम्भ किया, या अपाचे HTTP सर्वर और nginx, जो मुख्य रूप से अपस्ट्रीम सर्वर हैं, वार्निश को HTTP एक्सेलेरेटर के रूप में डिजाइन किया गया था। वार्निश अन्य प्रॉक्सी सर्वर के विपरीत विशेष रूप से HTTP पर केंद्रित है जो प्रायः FTP, SMTP और अन्य नेटवर्क प्रोटोकॉल का समर्थन करते हैं।

इतिहास
यह परियोजना नॉर्वेजियन टैब्लॉइड अखबार वर्डेन्स गैंग (VG) की ऑनलाइन शाखा द्वारा प्रांरम्भ की गई थी। वास्तुकार और प्रमुख डेवलपर डेनिश स्वतंत्र सलाहकार पॉल-हेनिंग काम्प (एक प्रसिद्ध फ्रीबीएसडी डेवलपर) हैं, जिनका प्रबंधन, बुनियादी ढांचा और अतिरिक्त विकास मूल रूप से नॉर्वेजियन लिनक्स परामर्श कंपनी लिनप्रो द्वारा प्रदान किया गया है। वार्निश का समर्थन, प्रबंधन और विकास बाद में एक अलग कंपनी, वार्निश सॉफ्टवेयर में बदल दिया गया है।

वार्निश फ्री और ओपन सोर्स सॉफ़्टवेयर है, जो दो-खंड बीएसडी लाइसेंस के तहत उपलब्ध है। व्यावसायिक सहायता वार्निश सॉफ्टवेयर सहित अन्य से उपलब्ध है।

वार्निश का संस्करण 1.0 2006 में जारी किया गया था, 2008 में वार्निश 2.0, 2011 में वार्निश 3.0, 2014 में वार्निश 4.0, 2016 में वार्निश 5.0, मार्च 2018 में वार्निश 6.0, और सितंबर 2021 में वार्निश 7.0।

आर्किटेक्चर
वार्निश डेटा को आभासी मेमोरी में संग्रहीत करता है और यह तय करने का कार्य छोड़ देता है कि मेमोरी में क्या संग्रहीत है और ऑपरेटिंग सिस्टम की डिस्क पर क्या पृष्ठांकित होता है। यह उस स्थिति से बचने में मदद करता है जहां ऑपरेटिंग सिस्टम एप्लिकेशन द्वारा डिस्क पर ले जाए जाने पर डेटा को कैश करना प्रांरम्भ कर देता है।

वार्निश भारी रूप से थ्रेड (कंप्यूटर विज्ञान) है, जिसमें प्रत्येक क्लाइंट कनेक्शन को एक अलग वर्कर थ्रेड द्वारा नियंत्रित किया जाता है। जब सक्रिय वर्कर थ्रेड्स की संख्या पर कॉन्फ़िगर की गई सीमा पूरी हो जाती है, तो आने वाले कनेक्शनों को एक अतिप्रवाह कतार में रखा जाता है; जब यह कतार अपनी कॉन्फ़िगर की गई सीमा तक पहुंच जाती है तो आने वाले कनेक्शन अस्वीकार कर दिए जाते है।

प्रमुख कॉन्फ़िगरेशन तंत्र वार्निश कॉन्फ़िगरेशन लैंग्वेज (वीसीएल) है, एक डोमेन-विशिष्ट लैंग्वेज (डीएसएल) जिसका उपयोग हुक लिखने के लिए किया जाता है जिसे प्रत्येक अनुरोध के प्रबंधन में महत्वपूर्ण बिंदुओं पर बुलाया जाता है। अधिकांश नीतिगत निर्णय वीसीएल कोड पर छोड़ दिए जाते हैं, जिससे वार्निश अधिकांश अन्य HTTP त्वरक की तुलना में अधिक कॉन्फ़िगर करने योग्य और अनुकूलनीय बन जाता है। जब एक वीसीएल स्क्रिप्ट लोड की जाती है, तो इसे सी (प्रोग्रामिंग लैंग्वेज) में अनुवादित किया जाता है, सिस्टम कंपाइलर द्वारा एक साझा ऑब्जेक्ट में संकलित किया जाता है, और सीधे एक्सेलेरेटर में लोड किया जाता है जिसे इस प्रकार पुनरारंभ किए बिना पुन: कॉन्फ़िगर किया जा सकता है।

कई रन-टाइम पैरामीटर चीजों को नियंत्रित करते हैं जैसे कि वर्कर थ्रेड की अधिकतम और न्यूनतम संख्या, विभिन्न टाइमआउट आदि है। एक कमांड-लाइन प्रबंधन इंटरफ़ेस इन पैरामीटर को संशोधित करने और नई वीसीएल स्क्रिप्ट को संकलित, लोड और सक्रिय करने की अनुमति, त्वरक को पुनरारंभ किए बिना ही देता है।

तेज़ पथ में सिस्टम कॉल की संख्या को न्यूनतम करने के लिए, लॉग डेटा को शेयर्ड मेमोरी (इंटरप्रोसेस संचार) में संग्रहीत किया जाता है, और डिस्क पर लॉग डेटा की मॉनीटरिंग, ​​फ़िल्टरिंग, फ़ॉर्मेटिंग और लिखने का कार्य एक अलग एप्लिकेशन को सौंपा जाता है।.

प्रदर्शन मेट्रिक्स
वार्निश कैश सूचना वितरण को कई सौ गुना तेज कर सकता है। उचित संचालन और प्रदर्शन सुनिश्चित करने के लिए, वार्निश मेट्रिक्स को उजागर करता है जिसकी मॉनीटरिंग निम्नलिखित क्षेत्रों में की जा सकती है:
 * क्लाइंट मेट्रिक्स: क्लाइंट कनेक्शन और अनुरोध
 * कैश प्रदर्शन: कैश (कंप्यूटिंग) हिट, निष्कासन
 * थ्रेड मेट्रिक्स: थ्रेड निर्माण, विफलताएं, कतारें
 * बैकएंड मेट्रिक्स: फ्रंट और बैकएंड कनेक्शन की सफलता, विफलता और स्वास्थ्य

मीट्रिक संग्रह
मॉनिटरिंग और लॉगिंग टूल के साथ वार्निश कैश भेजा जाता है। सबसे अधिक उपयोग में से एक वार्निशस्टैट है जो वार्निश के वर्तमान प्रदर्शन का एक विस्तृत स्नैपशॉट देता है। यह इन-मेमोरी आँकड़ों तक पहुँच प्रदान करता है जैसे कैश हिट और मिस, संसाधन खपत, बनाए गए थ्रेड, और इत्यादि।

वार्निशस्टेट
कमांड लाइन से वार्निशस्टैट चलाने से सभी उपलब्ध वार्निश मेट्रिक्स की लगातार अद्यतन सूची मिलती है। यदि -1 ध्वज जोड़ा जाता है, तो वार्निशस्टैट सूची को एक बार प्रिंट करने के बाद बाहर निकल जाएगा। कैश की स्थिति की जांच करने के लिए वार्निशस्टैट का उपयोग एक स्टैंडअलोन टूल के रूप में किया जा सकता है। समय के साथ मेट्रिक्स को ग्राफ़ करने के लिए, बुनियादी ढांचे के अन्य आँकड़ों के साथ सहसंबंधित करने और उत्पन्न होने वाली किसी भी समस्या के बारे में अलर्ट सेट करने के लिए, मॉनीटरिंग सेवाएँ वार्निश के साथ एकीकृत हो सकती हैं और वार्निशस्टैट मेट्रिक्स एकत्र कर सकती हैं।



वार्निशलॉग
वार्निशलॉग एक उपकरण है जिसका उपयोग वार्निश के कॉन्फ़िगरेशन को डीबग या ट्यून करने के लिए किया जा सकता है, क्योंकि यह प्रत्येक व्यक्तिगत अनुरोध के बारे में विस्तृत जानकारी प्रदान करता है।

लोड संतुलन
वार्निश राउंड-रॉबिन शेड्यूलिंग और रैंडम डायरेक्टर दोनों का उपयोग करके प्रति-बैकएंड वेटिंग के साथ लोड संतुलन (कंप्यूटिंग)  का समर्थन करता है। बैकएंड की बेसिक  हेल्थ-चेकिंग   भी उपलब्ध है।

अन्य विशेषताएं
वार्निश कैश में ये भी विशेषताएं हैं:
 * वार्निश मॉड्यूल के साथ प्लगइन समर्थन, जिसे वीएमओडी भी कहा जाता है
 * एज साइड के लिए समर्थन में संपीड़ित ईएसआई टुकड़ों को एक साथ सिलाई करना सम्मिलित है
 * Gzip कम्प्रेशन (संपीड़न) और डिकंप्रेशन (विसंपीड़न)
 * DNS, रैंडम, हैशिंग और क्लाइंट आईपी-आधारित निदेशक
 * HTTP स्ट्रीमिंग पास और फ़ेच
 * एलआरयू निष्कासन के बिना, लगातार भंडारण के लिए प्रायोगिक समर्थन
 * संत और अनुग्रह मोड.
 * यदि कोई सर्वर खराब हो जाता है और HTTP स्टेटस कोड 500 सर्वर त्रुटियों की सूची लौटाता है, तो ग्रेस मोड समाप्ति हेडर को अनदेखा कर देगा और कैश्ड संस्करण लौटाना जारी रखेगा। लोड संतुलन (कंप्यूटिंग) करते समय सेंट मोड का उपयोग किया जाता है, जहां एक असफल सर्वर को संगरोध अवधि के लिए ब्लैकलिस्ट किया जाता है और सर्वर पूल से बाहर रखा जाता है।

यह भी देखें

 * वेब एक्सेलेरेटर जो होस्ट-आधारित HTTP एक्सीलेरेशन (त्वरण) पर चर्चा करता है
 * प्रॉक्सी सर्वर जो क्लाइंट-साइड प्रॉक्सी पर चर्चा करता है
 * रिवर्स प्रॉक्सी जो मूल-पक्ष प्रॉक्सी पर चर्चा करती है
 * वेब सर्वर की तुलना
 * इंटरनेट कैश प्रोटोकॉल
 * गुरु  मैडिटेशन - वार्निश द्वारा प्रयुक्त एक त्रुटि संदेश

बाहरी संबंध

 * Official commercial web site
 * [//www.varnish-cache.org/trac/wiki/ArchitectNotes Notes from the Architect]
 * "You're Doing It Wrong", June 11, 2010 ACM Queue article by Varnish developer Poul-Henning Kamp describing the implementation of the LRU list.
 * Varnish in Layman's Terms
 * Varnish Cache How-To
 * Varnish Cache How-To