Mencoba melakukan apa yang tertulis dalam judul: pertahankan sesi yang ada di bawah beban tinggi, dan sajikan 503 pesan kepada pengunjung yang baru tiba.
Masalah: itu berhasil, tetapi sesi tidak bertahan lebih dari sekitar 90 detik.
Hasil saat ini membuat saya bertanya-tanya apakah ada pengaturan waktu habis yang saya lewatkan.
Tujuan
Saya mencoba membuat haproxy ke:
- kirim permintaan untuk sesi baru ke backend-001 ketika jumlah total sesi di frontend berada di bawah batas tertentu.
- melayani kesalahan 503 untuk sesi baru ketika jumlah total sesi di frontend berada di atas ambang batas itu
- memungkinkan permintaan untuk sesi yang ada bahkan jika jumlah sesi melebihi ambang batas
Dengan cara ini, pengunjung yang tengah mengisi formulir multi-langkah tidak akan dikejutkan oleh kesalahan 503, dan pengunjung baru dapat diminta untuk "silakan kembali lagi nanti karena kami benar-benar sibuk sekarang".
Mempersiapkan
Setup adalah sebagai berikut:
{visitors}
↓
[haproxy]
↓
[rails app on unicorn served by nginx] (right now just one
backend: 'backend-001')
pendekatan saat ini
Untuk mencapai hal di atas, saya menggunakan konfigurasi di bawah ini.
Yang ini untuk pengujian, dengan batas yang sangat rendah (10 koneksi di front-end (fe_conn gt 10)), untuk membuat pengujian lebih mudah.
Untuk menempatkan server di bawah beberapa beban, saya menggunakan httperf sebagai berikut:
httperf --hog --server staging.machine.tld --uri / do_some_things --wsess = 500,10,30 --rate 2
global
daemon
maxconn 10000
defaults
mode http
timeout connect 6s
timeout client 60s
timeout server 60s
balance roundrobin
option http-server-close
frontend http-in
bind [PUBLIC_IP]:80
default_backend backend-001
acl too_many fe_conn gt 10
use_backend b_too_many if too_many
backend backend-001
fullconn 10
appsession _session_id len 128 timeout 7200s
cookie SERVERID insert maxidle 7200s
server Server1 127.0.10.1:80 cookie backend-001 check
backend b_too_many
errorfile 503 /var/www/50x.html
masalah
Seperti disebutkan di atas, masalahnya adalah: hampir berhasil, tetapi sesi tidak bertahan lebih dari sekitar 90 detik.
Jika Anda terus mengklik, Anda bisa menjaga sesi Anda bahkan ketika ada 10 sesi sibuk.
Mencoba membuka halaman di server dengan contoh browser yang berbeda membuat Anda mendapatkan kesalahan-503.
Jadi, sepertinya saya hampir sampai. Adakah yang tahu apa yang menyebabkan waktu sesi singkat?
Dan khususnya bagaimana saya bisa memperbaikinya :)
(sunting: dihapus 'weight 1 maxconn 10' dari 'server'-line, tidak relevan dan mungkin membingungkan) (edit ke-2: koreksi '10 sesi di front-end' ke '10 koneksi di front-end ')