Memcache (d) vs. Varnish untuk mempercepat arsitektur web 3 tingkat

111

Saya mencoba untuk mempercepat benchmark saya (arsitektur web 3 tingkat), dan saya memiliki beberapa pertanyaan umum terkait Memcache (d) dan Varnish.

  • Apa bedanya?
    Menurut saya, Varnish berada di belakang server web, menyimpan halaman web dalam cache dan tidak memerlukan perubahan dalam kode, hanya konfigurasi.
    Di sisi lain, Memcached adalah sistem cache tujuan umum dan sebagian besar digunakan untuk menyimpan hasil dari database dan memang memerlukan perubahan getmetode (pencarian cache pertama).

  • Bisakah saya menggunakan keduanya? Pernis di server web depan dan Memcache untuk cache database?

  • Apa pilihan yang lebih baik?

    (skenario 1 - kebanyakan tulis,
    skenario 2 - kebanyakan baca,
    skenario 3 - baca dan tulis serupa)

pengguna449219
sumber

Jawaban:

269
  • Varnish ada di depan webserver; Ia bekerja sebagai proxy http terbalik yang cache.
  • Anda bisa menggunakan keduanya.
  • Kebanyakan menulis - Varnish harus memiliki halaman yang terpengaruh dibersihkan. Ini akan menghasilkan overhead dan sedikit manfaat untuk halaman yang dimodifikasi.
  • Sebagian besar dibaca - Varnish mungkin akan mencakup sebagian besar.
  • Baca & tulis serupa - Varnish akan menyajikan banyak halaman untuk Anda, Memcache akan memberikan info untuk halaman yang memiliki campuran data baru dan yang dikenal sehingga Anda dapat menghasilkan halaman lebih cepat.

Contoh yang dapat diterapkan ke stackoverflow.com: menambahkan komentar ini membuat cache halaman tidak valid, jadi halaman ini harus dibersihkan dari Varnish (dan juga halaman profil saya, yang mungkin tidak layak untuk disimpan dalam cache sejak awal. Ingat untuk membatalkan semua halaman yang terpengaruh mungkin sedikit menjadi masalah). Semua komentar, bagaimanapun, masih dalam Memcache, jadi database hanya perlu menulis komentar ini. Tidak ada lagi yang perlu dilakukan oleh database untuk menghasilkan halaman. Semua komentar ditarik oleh Memcache, dan halaman tersebut disimpan kembali sampai seseorang memengaruhinya lagi (mungkin dengan memberi suara pada jawaban saya). Sekali lagi, database menulis pemungutan suara, semua data lain ditarik dari Memcache, dan hidup berjalan cepat.

Memcache menghemat DB Anda dari melakukan banyak pekerjaan baca, Varnish menghemat server web dinamis Anda dari beban CPU dengan membuat Anda lebih jarang menghasilkan halaman (dan meringankan beban db sedikit juga jika bukan karena Memcache).

Jeff Ferland
sumber
3
ini: "(mungkin dengan memberi suara pada jawaban saya)" membuat saya memberikan suara untuk jawaban Anda
Cesc
jadi tidak disarankan untuk situs seperti stackoverflow (atau situs seperti facebook dengan halaman feed aktivitas) untuk menggunakan varnish. Apakah itu?
Mohammad Reza Esmaeilzadeh
@jbferland Pertanyaan saya dalam contoh Anda adalah bahwa di bagian atas halaman ini terdapat foto saya dengan jumlah poin yang telah saya terima, bagaimana kita dapat menyimpan cache dengan Varnish tetapi menunjukkan area tersebut dinamis?
Hossj
@Hossj menggunakan tag ESI.
Johny Pie
Varnish mungkin berada di depan server web tetapi juga di belakang server web. Ia juga dapat berada pada waktu yang sama di depan dan di belakang server web yang sama ;-) Misalnya Varnish tidak mendukung SSL sehingga tidak jarang memiliki server web di depan Varnish untuk menangani HTTPS. Lalu lintas kemudian diproksikan ke Varnish yang kemudian berkomunikasi dengan server web aplikasi - yang mungkin merupakan server yang sama dengan yang menangani lalu lintas HTTPS.
matt
32

Pengalaman saya berasal dari penggunaan Varnish dengan Drupal. Dalam istilah yang sesederhana mungkin, inilah jawaban saya:

Secara umum, Varnish bekerja untuk lalu lintas yang tidak diautentikasi (melalui cookie) dan memcache akan menyimpan cache lalu lintas yang diautentikasi.

Jadi gunakan keduanya.

Joe Hyde
sumber
5
Anda berhasil, menurut saya Varnish bekerja lebih baik dalam menyimpan pengguna anonim ...
Allan Jikamu