Varnish Cache | bet365 Tech Blog

pengantar

Caching HTTP adalah bagian penting dari Jaringan Pengiriman Konten kami. Tidak hanya untuk meningkatkan kinerja situs yang dihadapi pelanggan, tetapi juga sejumlah besar data internal yang terkait dengan aplikasi waktu nyata yang mendukung ribuan sesi bersamaan.

Mekanisme cache

Tujuan dari cache HTTP adalah untuk mengurangi sebanyak mungkin beban pada server web backend. Untuk melakukan ini, respons HTTP disimpan langsung di server caching. Setiap objek memiliki Time To Live (TTL); penghitung yang menentukan kapan objek itu basi dan harus di-refresh dari backend. Agar objek direferensikan dan untuk menjaga efisiensi cache setinggi mungkin, hash digunakan untuk setiap objek.

Setiap permintaan yang masuk memiliki nilai hash yang dihitung dan dibandingkan dengan objek yang sudah ada di cache. Jika suatu objek cocok dan TTL belum kedaluwarsa, objek tersebut disajikan secara langsung, alih-alih membuat banyak lompatan jaringan dan menghasilkan beban komputasi pada sistem ujung belakang.

Sebuah hash cache dapat terdiri dari sejumlah atribut dan merupakan kunci kinerja. Misalnya, menggunakan URL sebagai hash — objek dapat disajikan di seluruh domain untuk aset yang sama:

Permintaan 1:

www.domain.com/assets/ilovecaching.jpg

Data hash: /assets/ilovecaching.jpg

File ini diambil dari server web dan disimpan dalam cache kami.

Permintaan 2:

www.domain.com/assets/ilovecaching.jpg

Data hash masih: /assets/ilovecaching.jpg

Objek yang diambil sebelumnya dikembalikan langsung dari cache.

Permintaan 3:

www.anotherdomain.com/assets/ilovecaching.jpg

Data hash masih: /assets/ilovecaching.jpg

Objek yang diambil sebelumnya dikembalikan langsung dari cache.

Menggunakan kombinasi atribut permintaan untuk menghasilkan hash objek dapat memenuhi persyaratan untuk setiap peluang cache, sambil mempertahankan efisiensi tinggi. Biasanya, solusi dan peralatan cache akan menggunakan header dan URL Host — menghasilkan lebih banyak permintaan, dalam contoh kita, daripada yang sebenarnya dibutuhkan. Di mana Anda berurusan dengan tingkat permintaan yang tinggi, ada baiknya untuk menjadi cerdas dengan hashing dan menghemat beban komputasi dan bandwidth jaringan!

Masalah Kami

Mengingat kasus penggunaan awal kami, kami beralih ke alat komersial kelas atas yang juga memberikan solusi untuk kasus penggunaan lain yang kami miliki, Anda dapat menganggapnya sebagai solusi pisau tentara Swiss. Mengingat ledakan pertumbuhan kami, ini terbukti menjadi strategi jangka pendek dan batas mulai tercapai.

Kami memulai program pertumbuhan dan pengujian kapasitas, sehingga kami dapat memprediksi kapan solusi saat ini tidak lagi memenuhi kebutuhan kami. Kami menemukan bahwa tabel hashing dapat mendukung ratusan ribu objek. Ini tampak seperti jumlah yang besar, sampai kami mulai meningkatkan volatilitas data dan mengurangi TTL objek.

Saatnya untuk Sesuatu yang Baru

Kami mengambil keputusan untuk memisahkan caching dari solusi pisau tentara Swiss kami dan menggantinya dengan solusi khusus.

Sudah waktunya untuk berpikir ulang…

Analisis lebih lanjut di ruang ini membawa kami untuk mengeksplorasi teknologi open source. Pada saat itu kami memiliki pengalaman operasional yang terbatas dalam bekerja dengan open source dan komputasi generik, namun kami menerima peluang tersebut. Kami tidak hanya dapat memecahkan masalah kapasitas kami, tetapi juga mendapatkan fleksibilitas tambahan.

Kami membeli beberapa server “off-the-shelf”, menginstal distribusi Linux pilihan kami dan kami pergi untuk menguji teori kami. Dengan cepat menjadi jelas bahwa solusi khusus mampu memberikan kinerja yang lebih baik.

Tantangan

Setelah kami memverifikasi solusi di lingkungan pengujian kami, sudah waktunya untuk mulai memperkenalkan teknologi ke dalam produksi. Menjadi teknologi baru, ia datang dengan tantangannya — baik dari sudut pandang teknis maupun keterampilan.

Secara teknis, kami harus mengintegrasikan teknologi — mengintegrasikan proses bisnis semulus mungkin. Misalnya, untuk hari pertama, kami tidak ingin mengubah proses atau peralatan yang digunakan tim Operasi kami untuk membersihkan cache. Untuk memenuhi ini, kami menulis komponen integrasi kecil yang dapat dicapai oleh alat kami yang ada — mengabstraksi teknologi baru. Ini terbukti sangat efektif, memungkinkan kami untuk mem-flush dua teknologi cache yang berbeda secara paralel secara transparan!

Memiliki tingkat hit yang tinggi, secara teratur lebih dari 20.000 permintaan per detik, menghasilkan konfigurasi default yang terus-menerus membuat utas penanganan permintaan untuk memenuhi permintaan. Terkadang, ini terjadi dengan sangat cepat, sehingga kami tidak dapat membuat utas dengan cukup cepat! Untungnya, ini ternyata merupakan perbaikan sederhana, mengharuskan kami untuk memulai cache pada jumlah utas awal yang jauh lebih tinggi.

Sebagai teknologi baru dan open source, kami perlu memastikan bahwa anggota tim kami siap dengan kecepatan tinggi. Konsensusnya adalah bahwa pelatihan formal diperlukan, jadi kami menghubungi vendor komersial teknologi tersebut. Bekerja dengan mereka, kami dapat menyesuaikan kursus pelatihan dua hari untuk staf kami. Ini adalah sukses besar dan menunjukkan semangat kami untuk teknologi dan kesempatan pelatihan yang tersedia.

Hasil

Sebagai hasil dari pekerjaan ini, kami sekarang memiliki sistem yang dapat beroperasi pada kapasitas BERBAGAI kali lipat dari solusi sebelumnya. Peningkatan nyata juga dilakukan pada kinerja cache. Gambar 1 menunjukkan peningkatan waktu respons untuk objek tertentu, menunjukkan waktu respons yang buruk pada solusi lama. Gambar 2 menunjukkan waktu respons rata-rata keseluruhan di semua objek.

Gambar 1: Waktu respons cache P95 sebelum/sesudah untuk objek tertentu.

Gambar 2: Waktu rata-rata keseluruhan untuk menerima respons cache penuh.

Berjalan pada platform server standar, tidak memerlukan komponen berpemilik; memberikan solusi keseluruhan yang lebih transparan dan fleksibel. Sebagai efek samping, biaya pengiriman solusi ini juga berkurang secara signifikan.

Efisiensi cache kami telah meningkat, karena penghapusan kebocoran cache, dan kemampuan kami untuk mendukung pertumbuhan yang berkelanjutan tidak lagi menjadi perhatian.

Author: Sean Washington