வீடு மென்பொருள் வார்னிஷ்: குறைக்கப்படுவதற்கு தயாராகுங்கள்!

வார்னிஷ்: குறைக்கப்படுவதற்கு தயாராகுங்கள்!

பொருளடக்கம்:

Anonim

வலைத்தள செயல்திறனைப் பொறுத்தவரை, வார்னிஷ் ஒரு சூடான தொழில்நுட்பமாகும். ஒரு எளிய நிறுவல் மற்றும் உள்ளமைவுடன், எந்தவொரு வலைத்தளத்தின் செயல்திறனையும் அதிகரிக்கவும், ஒரு சிறிய மெய்நிகர் தனியார் சேவையகத்துடன் ஒரு மில்லியன் பக்கங்கள் வரை சேவை செய்யவும் முடியும்., நீங்கள் நூற்றுக்கணக்கான, ஆயிரக்கணக்கான அல்லது மில்லியன் கணக்கான பக்கங்களுக்கு சேவை செய்தாலும், உங்கள் தளத்தின் மறுமொழி நேரத்தை மேம்படுத்த உதவும் நான்கு சாத்தியமான உள்ளமைவுகளை நான் உங்களுக்குக் காண்பிப்பேன்.

வார்னிஷ் ஒரு அறிமுகம்

வார்னிஷ்-கேச் என்பது வலைத்தள உள்ளடக்கத்தை தேக்கத்தின் குறிக்கோளுடன் ஒரு வலை முடுக்கி. குறியீட்டை மாற்றாமல் - ஆக்கிரமிப்பு இல்லாத வலைத்தளங்களுக்கான அணுகலை மேம்படுத்துவதற்கும் விரைவுபடுத்துவதற்கும் இது ஒரு திறந்த மூல திட்டமாகும், மேலும் உங்கள் வலைத்தளத்திற்கு உங்கள் கைகளை வைக்க அனுமதிக்கும்.


வார்னிஷ் கேச் உருவாக்கியவர்கள் தான் இதை ஒரு வலை முடுக்கி என்று அழைத்தனர், ஏனெனில் அதன் முதன்மை நோக்கம் ஒரு வலைத்தளத்தின் முன் முடிவை மேம்படுத்துவதும் விரைவுபடுத்துவதும் ஆகும். வலை சேவையகம் வழங்கிய பக்கங்களின் நகல்களை அதன் தேக்ககத்தில் சேமிப்பதன் மூலம் வார்னிஷ் இதை அடைகிறது. அடுத்த முறை அதே பக்கம் கோரப்படும்போது, ​​வலை சேவையகத்திலிருந்து பக்கத்தைக் கோருவதற்குப் பதிலாக வார்னிஷ் நகலை வழங்குவார், இதன் விளைவாக மிகப்பெரிய செயல்திறன் அதிகரிக்கும்.


வார்னிஷ் கேச்சின் மற்றொரு முக்கிய அம்சம், அதன் செயல்திறனுடன் கூடுதலாக, அதன் உள்ளமைவு மொழியான வி.சி.எல். உள்வரும் கோரிக்கைகளை எவ்வாறு கையாள வேண்டும் என்பது குறித்த கொள்கைகளை எழுதுவதை வி.சி.எல் சாத்தியமாக்குகிறது. அத்தகைய கொள்கையில், நீங்கள் எந்த உள்ளடக்கத்தை வழங்க விரும்புகிறீர்கள், எங்கிருந்து உள்ளடக்கத்தைப் பெற விரும்புகிறீர்கள், கோரிக்கை அல்லது பதிலை எவ்வாறு மாற்ற வேண்டும் என்பதை நீங்கள் தீர்மானிக்கலாம்.


உள்ளமைவின் பின்வரும் எடுத்துக்காட்டுகளில், சில இலக்குகளை அடைய எந்த வி.சி.எல் விதிகள் பயன்படுத்தப்பட வேண்டும் என்பதைக் காண்பிப்பேன், படங்கள் மற்றும் நிலையான பொருள்களின் எளிமையான தேக்ககத்திலிருந்து, விநியோகிக்கப்பட்ட சூழலில் வார்னிஷ் பயன்படுத்துவது அல்லது சுமை இருப்புநிலையாக செயல்படுவது வரை.


பின்வரும் எடுத்துக்காட்டுகள் அனைத்தும் வார்னிஷ் 3.x. வார்னிஷ் 2.x வெவ்வேறு தொடரியல் மற்றும் விதிகளைப் பயன்படுத்துகிறது என்பதை நினைவில் கொள்க, எனவே இந்த எடுத்துக்காட்டுகள் அந்த பதிப்போடு பொருந்தாது.


வார்னிஷின் முக்கிய மாநிலங்கள் பின்வருபவை, அவை வி.சி.எல் உள்ளமைவு கோப்பில் பயன்படுத்துவோம்:


recv

கோரிக்கையைப் பெறும்போது அழைக்கப்படும் முதல் செயல்பாடு இதுவாகும். தற்காலிக சேமிப்பில் உள்ளதா என்பதைச் சரிபார்க்கும் முன் கோரிக்கையை இங்கே கையாளலாம். ஒரு கோரிக்கையை ஒரு தற்காலிக சேமிப்பில் வைக்க முடியாவிட்டால், கோரிக்கை அனுப்பப்படும் பின்-இறுதி சேவையகத்தையும் இந்த கட்டத்தில் தேர்வு செய்யலாம்.


கடந்து

வலை சேவையகத்திற்கு கோரிக்கையை அனுப்ப மற்றும் பதிலை கேச் செய்ய விரும்பும் போது இந்த செயல்பாட்டைப் பயன்படுத்தலாம்.


குழாய்

இந்த செயல்பாடு வார்னிஷைத் தவிர்த்து, கோரிக்கையை வலை சேவையகத்திற்கு அனுப்புகிறது.


பார்வை

ஒரு தேடலுடன், வார்னிஷ் பதிலில் உள்ளதா மற்றும் தற்காலிக சேமிப்பில் செல்லுபடியாகுமா என்பதை சரிபார்க்க கேட்கிறார்.


எடுக்க

பின் முனையிலிருந்து உள்ளடக்கத்தை மீட்டெடுப்பது பாஸ் அல்லது மிஸ் மூலம் செயல்படுத்தப்பட்ட பிறகு இந்த செயல்பாடு அழைக்கப்படுகிறது.

அடிப்படைகள்: கேச் படங்கள்

எனவே உள்ளமைவின் உதாரணத்தைப் பார்ப்போம். இந்த முதல் எடுத்துக்காட்டில், படங்களையும் CSS கோப்புகள் போன்ற நிலையான கோப்புகளையும் கேச் செய்வோம். நீங்கள் அதிகரிக்க விரும்பும் வலைத்தளம் உங்களுக்குத் தெரியாதபோது இந்த உள்ளமைவு மிகவும் பயனுள்ளதாக இருக்கும், எனவே எல்லா படங்களும், 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;

}

அது தான். இந்த வி.சி.எல் கோப்பு மூலம் நிலையான உள்ளடக்கத்தை எளிதாக கேச் செய்யலாம்.

தரநிலை: கேச் படங்கள் மற்றும் பக்கங்கள்

வழக்கமாக, உங்கள் வலைத்தளத்தின் நிலையான உள்ளடக்கங்களை நீங்கள் தற்காலிகமாக சேமிக்க விரும்பவில்லை, ஆனால் உங்கள் வலை சேவையகத்தால் உருவாக்கப்பட்ட சில டைனமிக் பக்கங்களையும் கேச் செய்ய விரும்புகிறீர்கள், ஆனால் அவை எல்லா பயனர்களுக்கும் ஒரே மாதிரியாக இருக்கும் - அல்லது குறைந்தபட்சம் உங்கள் அநாமதேய அனைவருக்கும் பயனர்கள். இந்த கட்டத்தில், எந்த பக்கங்களை தற்காலிகமாக சேமிக்க முடியும், எது முடியாது என்பதை தேர்வு செய்ய வேண்டும்.


ஒரு சிறந்த எடுத்துக்காட்டு வேர்ட்பிரஸ், பொதுவாக பயன்படுத்தப்படும் உள்ளடக்க மேலாண்மை அமைப்புகளில் ஒன்றாகும். வேர்ட்பிரஸ் வலைத்தள பக்கங்களை 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;

}

}

இந்த எடுத்துக்காட்டில், எங்கள் வலைத்தளத்திலிருந்து எல்லா பக்கங்களையும் நாங்கள் கேச் செய்கிறோம் என்பதை நீங்கள் காணலாம், ஆனால் URL இல் "wp- நிர்வாகி" அல்லது "wp-login" உள்ளவர்களுக்கு சரங்கள் உள்நுழைய பயன்படும் "சிறப்பு" இடங்கள் ஒரு நிர்வாகியாக வேர்ட்பிரஸ். எனவே, நாங்கள் வலை சேவையகத்துடன் நேரடியாக பேச விரும்புகிறோம் மற்றும் வார்னிஷ் தற்காலிக சேமிப்பை புறக்கணிக்க விரும்புகிறோம்.


இயற்கையாகவே, நீங்கள் 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 s", "1230 ms" அல்லது "1 h" போன்ற எண்ணைக் கொண்ட நேர அலகு ஒன்றை நீங்கள் குறிப்பிட வேண்டும்.


.interval

வாக்கெடுப்புகளுக்கு இடையில் எவ்வளவு காலம் காத்திருக்க வேண்டும். நீங்கள் இங்கே ஒரு நேர அலகு குறிப்பிட வேண்டும். இது ஒரு "வீதம்" அல்ல "இடைவெளி" என்பதை கவனியுங்கள். மிகக் குறைந்த வாக்கெடுப்பு வீதம் (.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;

}

ஒரு சக்திவாய்ந்த கருவி

வார்னிஷ் பயன்படுத்துவதைத் தொடங்க உங்களுக்கு உதவக்கூடிய சில எடுத்துக்காட்டுகள் இவை. இந்த கருவி மிகவும் சக்தி வாய்ந்தது மற்றும் அதிக வன்பொருள் அல்லது மெய்நிகர் இயந்திரங்களை வாங்காமல் சிறந்த செயல்திறன் ஊக்கத்தை அடைய உதவும். பல வலைத்தள நிர்வாகிகளுக்கு, இது ஒரு உண்மையான நன்மை.

வார்னிஷ்: குறைக்கப்படுவதற்கு தயாராகுங்கள்!