Rumah Perisian Varnish: bersedia untuk menjadi slashdotted!

Varnish: bersedia untuk menjadi slashdotted!

Isi kandungan:

Anonim

Apabila ia datang kepada prestasi laman web, Varnish adalah teknologi panas. Dengan pemasangan dan konfigurasi yang mudah, mungkin untuk meningkatkan prestasi mana-mana laman web dan berkhidmat sehingga satu juta halaman dengan hanya pelayan peribadi maya yang kecil., Saya akan menunjukkan kepada anda empat konfigurasi yang mungkin membantu anda meningkatkan masa tindak balas tapak anda, sama ada anda beratus-ratus, beribu-ribu halaman atau jutaan halaman.

Pengenalan kepada Varnish

Varnish-Cache adalah web accelerator dengan matlamat kandungan laman web caching. Ia merupakan projek sumber terbuka yang bertujuan untuk mengoptimumkan dan mempercepat akses ke laman web yang tidak invasif - tanpa menukar kod tersebut - dan membolehkan anda meletakkan tangan anda ke laman web anda.


Ia adalah pencipta Varnish Cache yang memanggilnya sebagai pemecut Web, kerana objektif utamanya adalah untuk meningkatkan dan mempercepatkan satu ujung depan laman web. Varnish mencapai ini dengan menyimpan salinan halaman yang dilayan oleh pelayan Web dalam cachenya. Pada masa yang sama halaman yang sama diminta, Varnish akan menyampaikan salinan bukannya meminta halaman dari pelayan Web, menghasilkan peningkatan prestasi yang luar biasa.


Satu lagi ciri utama Varnish Cache, selain prestasinya, adalah fleksibiliti bahasa konfigurasinya, VCL. VCL membolehkan penulisan dasar tentang bagaimana permintaan masuk perlu dikendalikan. Dalam dasar sedemikian, anda boleh memutuskan kandungan yang ingin anda layani, dari mana anda ingin mendapatkan kandungan dan bagaimana permintaan atau tindak balas itu harus diubah.


Dalam contoh konfigurasi berikut, saya akan menunjukkan kepada anda peraturan VCL yang hendak digunakan untuk mencapai matlamat tertentu, dari caching imej dan objek statik yang mudah, untuk menggunakan Varnish dalam persekitaran yang diedarkan atau mempunyai fungsi sebagai pengimbang beban.


Semua contoh berikut adalah untuk Varnish 3.x. Sila ambil perhatian bahawa Varnish 2.x menggunakan sintaks dan peraturan yang berbeza, jadi contoh-contoh ini tidak serasi dengan versi itu.


Berikut adalah keadaan utama Varnish, yang akan kita gunakan dalam fail konfigurasi VCL:


recv

Ini adalah fungsi pertama yang dipanggil apabila menerima permintaan. Di sini kita boleh memanipulasi permintaan sebelum memeriksa sama ada ia berada di dalam cache. Sekiranya permintaan tidak boleh dimasukkan ke dalam cache, pelayan belakang yang permintaannya akan dihantar juga boleh dipilih dalam fasa ini.


lulus

Kita boleh menggunakan fungsi ini apabila kita mahu lulus permintaan ke pelayan Web dan cache jawapannya.


paip

Fungsi ini memintas Varnish dan menghantar permintaan kepada pelayan Web.


lookup

Dengan mencari, Varnish meminta untuk mengesahkan sama ada tindak balas hadir dan sah dalam cache.


ambil

Fungsi ini dipanggil selepas pemulihan kandungan dari hujung belakang dipanggil oleh lulus atau ketinggalan.

Asas-asas: Imej Cache

Oleh itu, mari kita lihat contoh konfigurasi. Dalam contoh pertama ini, kami hanya akan menyembunyikan imej dan fail statik seperti fail CSS. Konfigurasi ini sangat berguna apabila anda tidak mengetahui tapak web yang ingin anda dorong, jadi anda hanya boleh memutuskan bahawa semua imej, CSS dan JavaScript adalah sama untuk semua pengguna. Untuk membezakan pengguna, protokol HTTP menggunakan kuki, jadi kita perlu menghapuskannya dalam permintaan jenis ini supaya semuanya sama untuk Varnish:

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;

}

Dan itu sahaja. Dengan fail VCL ini anda boleh cache kandungan statik dengan mudah.

Standard: Imej dan Halaman Cache

Biasanya, anda tidak hanya mahu menyembunyikan kandungan statik laman web anda tetapi anda juga ingin menyembunyikan beberapa halaman dinamik yang dihasilkan oleh pelayan Web anda, tetapi itu adalah sama untuk semua pengguna - atau sekurang-kurangnya untuk semua anonim anda pengguna. Dalam fasa ini, anda mesti tahu memilih halaman mana yang boleh di cache dan yang tidak boleh.


Contoh yang baik ialah Wordpress, salah satu sistem pengurusan kandungan yang paling biasa digunakan. Wordpress menjana laman web secara dinamik dengan PHP dan pertanyaan kepada pangkalan data MySQL. Ini bagus kerana anda boleh mengemas kini laman web anda dengan mudah dari antara muka pentadbiran dengan beberapa klik, tetapi ia juga mahal dari segi sumber yang digunakan. Mengapa menjalankan skrip PHP yang sama dan pertanyaan MySQL setiap kali pengguna melayari laman utama? Kita boleh menggunakan Varnish untuk menyembunyikan halaman yang paling banyak dikunjungi dan mencapai hasil yang luar biasa.


Ini adalah beberapa peraturan yang boleh digunakan dalam pemasangan Wordpress:

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;

}

}

Anda dapat melihat bahawa dalam contoh ini, kita menyembunyikan semua halaman dari laman web kami, tetapi untuk yang mempunyai "wp-admin" atau "wp-login" dalam url, rentetan adalah lokasi "khusus" yang digunakan untuk log masuk Wordpress sebagai pentadbir. Oleh itu, kami ingin bercakap terus ke pelayan Web dan memintas cache Varnish.


Sememangnya, jika anda menggunakan Drupal, Joomla atau tapak web yang dibuat khas, anda perlu mengubah peraturan ini, tetapi matlamatnya adalah sama: Untuk menghantar semua halaman dinamik dan cache yang anda boleh ke hujung belakang anda.

Standard ++: Meningkatkan Ketahanan Server

Kadang-kadang pelayan web menjadi lambat kerana mereka mempunyai beban tinggi. Varnish juga boleh membantu dengan ini. Kita boleh menggunakan beberapa arahan khas untuk memberitahu Varnish untuk mengelakkan bercakap dengan hujung belakang jika turun atau menjawab terlalu perlahan. Untuk kes ini Varnish menggunakan arahan "rahmat".


Rahmat dalam skop Varnish bermaksud menyampaikan objek yang tamat tempoh apabila keadaan memanggilnya. Ini boleh berlaku kerana:

  • Pengarah sokongan akhir dipilih
  • Benang yang berbeza telah membuat permintaan ke hujung belakang yang belum selesai.
Kedua-dua kes dikendalikan sama dalam VCL:

sub vcl_recv {

if (req.backend.healthy) {

set req.grace = 30s;

} else {

set req.grace = 1h;

}

}


sub vcl_fetch {

set beresp.grace = 1h;

}

Konfigurasi ini memberitahu Varnish untuk menguji hujung belakang dan menaikkan tempoh tangguh jika ada masalah. Contoh di atas juga memperkenalkan arahan "req.backend.healthy", yang digunakan untuk memeriksa hujung belakang. Ini sangat berguna apabila anda mempunyai beberapa hujung belakang, jadi mari kita lihat pada contoh yang lebih maju.

Penggunaan Lanjutan: Buat Pelayan Web Berdaya tahan dalam Persekitaran Teragih

Ini adalah fail konfigurasi terakhir kami dengan semua pilihan yang telah kita lihat setakat ini dan definisi dua kembali berakhir dengan beberapa arahan khas untuk siasatan. Inilah cara Varnish menentukan sama ada pelayan Web masih hidup atau tidak.


.url

Varnish akan membuat permintaan ke hujung belakang dengan URL ini.


.masa tamat

Menentukan berapa pantas siasatan mesti selesai. Anda mesti menentukan unit masa dengan nombor, seperti "0.1 s", "1230 ms" atau "1 jam".


.interval

Berapa lama menunggu antara pemilihan. Anda mesti menentukan unit masa di sini juga. Perhatikan bahawa ini bukan "kadar" tetapi "selang". Kadar undian terendah ialah (.timeout + .interval).


.window

Berapa banyak pemilihan terkini untuk dipertimbangkan apabila menentukan sama ada hujung belakang adalah sihat.


.threshold

Berapa banyak dari pemilihan terakhir yang harus dilakukan untuk tujuan akhir yang diisytiharkan sebagai sihat.


Sekarang kita boleh menggunakan arahan "req.backend.healthy" dan mendapatkan hasil Boolean yang memberitahu kita sama ada belakang belakang (s) hidup atau tidak.

#

# 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;

}

Alat Berkuasa

Ini hanyalah beberapa contoh yang dapat membantu anda memulakan Varnish. Alat ini sangat kuat dan boleh membantu anda mencapai peningkatan prestasi yang hebat tanpa membeli lebih banyak perkakasan atau mesin maya. Bagi kebanyakan pentadbir laman web, itu adalah manfaat sebenar.

Varnish: bersedia untuk menjadi slashdotted!