Episode ini memeras performa HAProxy: tuning maxconn, buffer, dan thread, pengurangan latensi lewat keepalive, compression, dan HTTP/2, serta cara mengukur hasil dengan tool benchmarking seperti wrk, hey, dan h2load.

HAProxy sudah cepat sejak awal, tapi kalibrasi yang salah bisa membuatnya terasa lambat: buffer terlalu kecil, thread tidak seimbang, atau kompresi yang tidak diaktifkan. Episode 15 membahas seni tuning performa.
Kalian akan mengatur kapasitas proses, mengurangi latensi dengan keepalive, compression, dan HTTP/2, lalu membuktikan perubahannya dengan tool benchmarking. Prinsip yang ditekankan: ukur dulu, ubah satu hal, ukur lagi.
maxconn menentukan kapasitas koneksi proses. Nilainya dibatasi file descriptor sistem:
global
maxconn 50000
tune.bufsize 32768
tune.maxrewrite 4096Direktif tune.bufsize 32768 memperbesar buffer per koneksi, berguna untuk request besar. tune.maxrewrite menyisihkan ruang buffer untuk rewrite header. Keduanya hanya perlu dinaikkan jika request kalian besar.
Sebelum menaikkan maxconn, pastikan sistem mengizinkan:
ulimit -n
sysctl fs.file-maxulimit -n menampilkan batas file descriptor proses saat ini. Jika nilainya lebih kecil dari maxconn yang diinginkan, naikkan lewat limits.conf atau systemd unit file.
Pemanfaatan CPU diatur dengan thread:
global
nbthread 4
cpu-map auto:1/1-4 0-3nbthread 4 menciptakan empat thread. cpu-map mengikat thread ke core tertentu agar cache CPU lebih hangat. Untuk sebagian besar beban, nbthread sebesar jumlah core fisik sudah cukup.
Koneksi baru membutuhkan handshake TCP dan TLS. Keepalive menghindari biaya itu:
frontend web_front
bind *:80
mode http
option http-keep-alive
default_backend web_back
backend web_back
server web1 127.0.0.1:8080 keepalive 32
server web2 127.0.0.1:8081 keepalive 32option http-keep-alive menjaga koneksi klien tetap hidup, dan keepalive 32 di baris server membatasi berapa request per koneksi backend sebelum ditutup. Ini memangkas latensi per request secara signifikan.
Mengompresi respons mengurangi byte yang dikirim, menekan latensi jaringan:
backend web_back
mode http
compression algo gzip
compression type text/html text/plain text/css \
application/json application/javascript
server web1 127.0.0.1:8080compression algo gzip mengaktifkan gzip, dan compression type membatasi jenis konten yang dikompresi. Pastikan backend tidak sudah mengompresi sendiri untuk menghindari kerja dua kali.
HTTP/2 menggabungkan banyak request dalam satu koneksi, memotong latensi head-of-line:
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem \
alpn h2,http/1.1
mode http
default_backend web_backalpn h2,http/1.1 membuat klien yang mendukung memakai HTTP/2. Multiplexing yang dibawanya paling terasa pada halaman yang memuat banyak aset sekaligus.
wrk adalah generator beban berbasis thread dengan latensi rendah:
wrk -t4 -c100 -d30s http://localhost/wrk -t4 -c100 -d30s http://localhost/ membuka 100 koneksi lewat 4 thread selama 30 detik. Outputnya menampilkan Requests/sec, Latency rata-rata, dan persentil.
hey lebih sederhana dan cocok untuk tes cepat:
hey -n 10000 -c 50 http://localhost/hey -n 10000 -c 50 http://localhost/ mengirim 10.000 request dengan 50 koneksi paralel. Perhatikan bagian Total time dan Requests/sec untuk perbandingan sebelum dan sesudah tuning.
Untuk HTTP/2, h2load adalah pilihan paling tepat:
h2load -n 10000 -c 100 -m 16 https://localhost/ -kh2load -n 10000 -c 100 -m 16 https://localhost/ -k membuka 100 koneksi dengan 16 stream paralel tiap koneksi. Flag -k dipakai untuk sertifikat self-signed.
Agar hasil bisa diinterpretasikan:
wrk -t4 -c100 -d30s http://localhost/ > before.txt
# ubah konfigurasi lalu reload
wrk -t4 -c100 -d30s http://localhost/ > after.txt
diff before.txt after.txtPola diff before.txt after.txt memperlihatkan perubahan performa secara langsung. Jika tidak ada perubahan berarti, kembalikan konfigurasi — kompleksitas tanpa manfaat tidak layak dipakai.
Episode 15 mengajarkan cara membuat HAProxy lebih cepat secara terukur: kapasitas proses yang pas, latensi yang dikurangi lewat keepalive dan kompresi, serta kebiasaan benchmarking yang disiplin.
Inti yang harus dibawa pulang:
maxconn dibatasi file descriptor sistem; pastikan ulimit cukup.nbthread sebesar jumlah core fisik biasanya paling optimal.Di episode 16 selanjutnya kita akan membahas content switching & ACLs — ekspresi ACL tingkat lanjut, menggabungkan host, path, header, dan payload untuk routing kondisional, serta menyusun logika frontend yang kompleks.