विषयसूची:
- वार्निश का एक परिचय
- मूल बातें: कैश छवियाँ
- मानक: कैश चित्र और पृष्ठ
- मानक ++: सर्वर लचीलापन बढ़ाएँ
- उन्नत उपयोग: वितरित वातावरण में एक लचीला वेब सर्वर बनाएँ
- एक शक्तिशाली उपकरण
जब वेबसाइट के प्रदर्शन की बात आती है, तो वार्निश एक गर्म तकनीक है। एक साधारण इंस्टॉलेशन और कॉन्फ़िगरेशन के साथ, किसी भी वेबसाइट के प्रदर्शन को बढ़ावा देना और केवल एक छोटे आभासी निजी सर्वर के साथ एक लाख पृष्ठों तक सेवा करना संभव है।, मैं आपको चार संभावित कॉन्फ़िगरेशन दिखाऊंगा जो आपकी साइट के प्रतिक्रिया समय को बेहतर बनाने में आपकी सहायता करेंगे, चाहे आप सैकड़ों, हजारों या लाखों पृष्ठों की सेवा करें।
वार्निश का एक परिचय
वार्निश-कैश एक वेब एक्सीलेरेटर है जो वेबसाइट की सामग्री को कैशिंग करने के लक्ष्य के साथ है। यह एक ओपन-सोर्स प्रोजेक्ट है, जिसका उद्देश्य गैर-इनवेसिव रूप से वेबसाइटों तक पहुंच को अनुकूलित करना और गति देना है - कोड को बदले बिना - और आपको अपनी वेबसाइट में अपना हाथ डालने की अनुमति देता है।
यह वार्निश कैश के निर्माता थे जिन्होंने इसे वेब त्वरक कहा, क्योंकि इसका प्राथमिक उद्देश्य वेबसाइट के फ्रंट एंड को बेहतर बनाना और गति देना है। वार्निश ने अपने कैश में वेब सर्वर द्वारा दी गई पृष्ठों की प्रतियां संग्रहीत करके इसे प्राप्त किया। अगली बार जब एक ही पृष्ठ का अनुरोध किया जाता है, तो वार्निश वेब सर्वर से पृष्ठ का अनुरोध करने के बजाय प्रतिलिपि का काम करेगा, जिसके परिणामस्वरूप जबरदस्त प्रदर्शन को बढ़ावा मिलेगा।
वार्निश कैश की प्रमुख विशेषताओं में से एक, इसके प्रदर्शन के अलावा, इसकी कॉन्फ़िगरेशन भाषा, वीसीएल का लचीलापन है। वीसीएल यह सुनिश्चित करना चाहता है कि आने वाले अनुरोधों को कैसे संभाला जाए, इस पर नीतियां लिख सकें। ऐसी नीति में, आप यह तय कर सकते हैं कि आप किस सामग्री की सेवा करना चाहते हैं, जहाँ से आप सामग्री प्राप्त करना चाहते हैं और अनुरोध या प्रतिक्रिया को कैसे बदलना चाहिए।
कॉन्फ़िगरेशन के निम्नलिखित उदाहरणों में, मैं आपको दिखाऊंगा कि वीसीएल नियमों का उपयोग कुछ लक्ष्यों को प्राप्त करने के लिए करता है, छवियों और स्थिर वस्तुओं के एक साधारण कैशिंग से, वितरित वातावरण में वार्निश का उपयोग करने के लिए या इसे लोड बैलेंसर के रूप में कार्य करने के लिए।
निम्नलिखित सभी उदाहरण वार्निश 3.x के लिए हैं। कृपया ध्यान दें कि वार्निश 2.x विभिन्न सिंटैक्स और नियमों का उपयोग करता है, इसलिए ये उदाहरण उस संस्करण के साथ संगत नहीं हैं।
वार्निश के मुख्य राज्य निम्नलिखित हैं, जिन्हें हम VCL कॉन्फ़िगरेशन फ़ाइल में उपयोग करेंगे:
recv
यह पहला फ़ंक्शन है जिसे अनुरोध प्राप्त करते समय कहा जाता है। यहां हम यह जांचने से पहले अनुरोध को जोड़ सकते हैं कि यह कैश में मौजूद है या नहीं। यदि कोई अनुरोध कैश में नहीं डाला जा सकता है, तो बैक-एंड सर्वर जिसके लिए अनुरोध भेजा जाएगा उसे भी इस चरण में चुना जा सकता है।
उत्तीर्ण करना
हम इस फ़ंक्शन का उपयोग तब कर सकते हैं जब हम वेब सर्वर से अनुरोध पारित करना चाहते हैं और उत्तर को कैश करना चाहते हैं।
पाइप
यह फ़ंक्शन वार्निश को बायपास करता है और वेब सर्वर को अनुरोध भेजता है।
देखो
लुकअप के साथ, वार्निश यह सत्यापित करने के लिए कहता है कि कैश में प्रतिक्रिया मौजूद है या नहीं।
लाना
इस फ़ंक्शन को पीछे के छोर से सामग्री की वसूली के बाद कहा जाता है जो एक पास या एक मिस द्वारा आह्वान किया जाता है।
मूल बातें: कैश छवियाँ
तो चलो विन्यास का एक उदाहरण देखते हैं। इस पहले उदाहरण में, हम सिर्फ छवियाँ और CSS फ़ाइलों की तरह स्थिर फ़ाइलों को कैश करेंगे। यह कॉन्फ़िगरेशन वास्तव में उपयोगी है जब आप उस वेबसाइट को नहीं जानते हैं जिसे आप बढ़ावा देना चाहते हैं, इसलिए आप बस यह तय कर सकते हैं कि सभी चित्र, सीएसएस और जावास्क्रिप्ट सभी उपयोगकर्ताओं के लिए समान हैं। उपयोगकर्ताओं को अलग करने के लिए, HTTP प्रोटोकॉल कुकीज़ का उपयोग करता है, इसलिए हमें उन्हें इस प्रकार के अनुरोध में समाप्त करना होगा ताकि वे वार्निश के लिए सभी समान हों:
sub vcl_recv{
if(req.url ~ " * \.(png|gif|jpg|swf|css|js)"{
unset req.http.cookie;
unset req.http.Vary;
return(lookup);
}
# strip the cookie before the image is inserted into cache.
sub vcl_fetch {
if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") {
unset beresp.http.set-cookie;
}
और बस। इस VCL फ़ाइल से आप आसानी से स्थैतिक सामग्री को कैश कर सकते हैं।
मानक: कैश चित्र और पृष्ठ
आमतौर पर, आप न केवल अपनी वेबसाइट की स्थिर सामग्री को कैश करना चाहते हैं, बल्कि आप अपने वेब सर्वर द्वारा उत्पन्न कुछ डायनेमिक पेजों को भी कैश करना चाहते हैं, लेकिन यह सभी उपयोगकर्ताओं के लिए समान हैं - या कम से कम आपके सभी अनाम के लिए उपयोगकर्ताओं। इस चरण में, आपको पता होना चाहिए कि कौन से पृष्ठ कैश किए जा सकते हैं और कौन से नहीं।
एक अच्छा उदाहरण Wordpress है, जो सबसे अधिक उपयोग की जाने वाली सामग्री प्रबंधन प्रणालियों में से एक है। Wordpress PHP के साथ वेबसाइट पेजों को उत्पन्न करता है और MySQL डेटाबेस में क्वेरी करता है। यह अच्छा है क्योंकि आप अपनी वेबसाइट को कुछ क्लिक के साथ प्रशासन इंटरफ़ेस से आसानी से अपडेट कर सकते हैं, लेकिन यह उपयोग किए गए संसाधनों के मामले में भी महंगा है। हर बार मुखपृष्ठ पर उपयोगकर्ता की भूमि पर वही PHP स्क्रिप्ट और MySQL क्वेरी क्यों चलाते हैं? हम सबसे अधिक देखे गए पृष्ठों को कैश करने और अविश्वसनीय परिणाम प्राप्त करने के लिए वार्निश का उपयोग कर सकते हैं।
ये कुछ नियम हैं जो एक वर्डप्रेस इंस्टॉलेशन में उपयोगी हो सकते हैं:
sub vcl_recv{
# Let's make sure we aren't compressing already compressed formats.
if (req.http.Accept-Encoding) {
if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|mp3|mp4|m4v)(\?. * |)$") {
remove req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
remove req.http.Accept-Encoding;
}
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
# Unset all cookies if not Wordpress admin - otherwise login will fail
if (!(req.url ~ "wp-(login| admin )")) {
unset req.http.cookie;
return(lookup);
}
# If you request the special pages go directly to them
if (req.url ~ "wp-(login| admin )") {
return (pipe);
}
}
sub vcl_miss {
if (!(req.url ~ "wp-(login| admin )")) {
unset req.http.cookie;
}
if (req.url ~ "^/+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {
unset req.http.cookie;
set req.url = regsub(req.url, "\?.$", "");
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
}
sub vcl_fetch {
if (req.url ~ "^/$") {
unset beresp.http.set-cookie;
}
# Unset all cookies if not Wordpress admin - otherwise login will fail
if (!(req.url ~ "wp-(login| admin )")) {
unset beresp.http.set-cookie;
}
}
आप देख सकते हैं कि इस उदाहरण में, हम अपनी वेबसाइट के सभी पृष्ठों को कैश करते हैं, लेकिन उन लोगों के लिए जो "wp- admin" या "wp-login" हैं url में स्ट्रिंग "विशेष" स्थान हैं, जिसमें लॉग इन करने के लिए उपयोग किया जाता है। व्यवस्थापक के रूप में वर्डप्रेस। जैसे, हम सीधे वेब सर्वर से बात करना चाहते हैं और वार्निश कैश को बायपास करना चाहते हैं।
स्वाभाविक रूप से, यदि आप Drupal, Joomla या एक कस्टम-निर्मित वेबसाइट का उपयोग करते हैं, तो आपको इन नियमों को बदलना होगा, लेकिन लक्ष्य हमेशा एक ही होता है: सभी डायनेमिक पेज और कैश को आपके बैक एंड में भेजने के लिए।
मानक ++: सर्वर लचीलापन बढ़ाएँ
कुछ समय के लिए वेब सर्वर धीमा हो जाता है क्योंकि उनके पास एक उच्च भार होता है। वार्निश इसमें भी मदद कर सकता है। वार्निश को बताने के लिए हम कुछ विशेष निर्देशों का उपयोग कर सकते हैं यदि यह नीचे है या बहुत धीरे-धीरे उत्तर दे रहा है तो पीछे के छोर से बात करने से बचें। इन मामलों के लिए वार्निश "अनुग्रह" निर्देश का उपयोग करता है।
वार्निश के दायरे में अनुग्रह का अर्थ है, अन्यथा समाप्त हो चुकी वस्तुओं को वितरित करना जब परिस्थितियां इसके लिए कॉल करती हैं। यह हो सकता है क्योंकि:
- बैक-एंड निर्देशक चयनित है
- एक अलग थ्रेड ने पहले ही बैक एंड के लिए एक अनुरोध किया है जो अभी तक समाप्त नहीं हुआ है।
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
}
sub vcl_fetch {
set beresp.grace = 1h;
}
यह कॉन्फ़िगरेशन वार्निश को पीछे के अंत का परीक्षण करने और अनुग्रह अवधि बढ़ाने के लिए कहता है यदि इसमें कुछ समस्याएं हैं। ऊपर दिया गया उदाहरण भी "req.backend.healthy" निर्देश का परिचय देता है, जिसका उपयोग बैक एंड को जांचने के लिए किया जाता है। यह वास्तव में उपयोगी है जब आपके पास कई बैक एंड होते हैं, तो आइए एक अधिक उन्नत उदाहरण पर एक नज़र डालते हैं।
उन्नत उपयोग: वितरित वातावरण में एक लचीला वेब सर्वर बनाएँ
यह हमारी अंतिम कॉन्फ़िगरेशन फ़ाइल है जिसमें हमने अब तक देखे गए सभी विकल्पों के साथ और दो बैक की परिभाषा जांच के लिए कुछ विशेष निर्देश के साथ समाप्त होती है। यह कैसे वार्निश निर्धारित करता है कि एक वेब सर्वर जीवित है या नहीं।
.url
वार्निश इस URL के साथ बैक एंड के लिए अनुरोध करेगा।
।समय समाप्त
निर्धारित करता है कि जांच कितनी तेजी से खत्म होनी चाहिए। आपको एक संख्या इकाई को एक संख्या के साथ निर्दिष्ट करना होगा, जैसे "0.1 एस", "1230 एमएस" या "1 एच"।
।मध्यान्तर
चुनावों के बीच कब तक इंतजार करना होगा आपको यहां एक टाइम यूनिट भी बताना होगा। ध्यान दें कि यह "दर" नहीं बल्कि "अंतराल" है। सबसे कम मतदान दर (.timeout + .interval) है।
।खिड़की
यह निर्धारित करने के लिए कि पिछले छोर स्वस्थ है या नहीं, इस पर विचार करने के लिए कितने नवीनतम चुनाव हैं।
.threshold
पिछले अंत चुनावों में से कितने पिछले चुनाव में स्वस्थ घोषित किए जाने के लिए अच्छे होने चाहिए।
अब हम निर्देश "req.backend.healthy" का उपयोग कर सकते हैं और एक बूलियन परिणाम प्राप्त कर सकते हैं जो हमें बताता है कि बैक एंड्स जीवित हैं या नहीं।
#
# Customized VCL file for serving up a Wordpress site with multiple back-ends.
#
# Define the internal network subnet.
# These are used below to allow internal access to certain files while not
# allowing access from the public internet .
acl internal {
"10.100.0.0"/24;
}
# Define the list of our backends (web servers), they Listen on port 8080
backend web1 { .host = "10.100.0.1"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}
backend web2 { .host = "10.100.0.2"; .port = "8080"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }}
# Define the director that determines how to distribute incoming requests.
director default_director round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
# Respond to incoming requests.
sub vcl_recv {
set req.backend = default_director;
# Use anonymous, cached pages if all backends are down.
if (!req.backend.healthy) {
unset req.http.Cookie;
set req.grace = 6h;
} else {
set req.grace = 30s;
}
# Unset all cookies if not Wordpress admin - otherwise login will fail
if (!(req.url ~ "wp-(login| admin )")) {
unset req.http.cookie;
return(lookup);
}
# If you request the special pages go directly to them
if (req.url ~ "wp-(login| admin )") {
return (pipe);
}
# Always cache the following file types for all users.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {
unset req.http.Cookie;
}
}
# Code determining what to do when serving items from the web servers.
sub vcl_fetch {
# Don't allow static files to set cookies.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?+)?$") {
# beresp == Back-end response from the web server.
unset beresp.http.set-cookie;
}
# Allow items to be stale if needed.
set beresp.grace = 6h;
}
एक शक्तिशाली उपकरण
ये कुछ उदाहरण हैं जो वार्निश का उपयोग करने में आपकी सहायता कर सकते हैं। यह उपकरण वास्तव में शक्तिशाली है और आपको अधिक हार्डवेयर या वर्चुअल मशीन खरीदने के बिना एक शानदार प्रदर्शन को बढ़ावा देने में मदद कर सकता है। कई वेबसाइट प्रशासकों के लिए, यह एक वास्तविक लाभ है।
