Belajar HAProxy - Performance Tuning & Scalability
Episode 15 of 23

Belajar HAProxy - Performance Tuning & Scalability

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Tuning Kapasitas Proses

maxconn dan Batas Sistem

maxconn menentukan kapasitas koneksi proses. Nilainya dibatasi file descriptor sistem:

Tuning kapasitas global
global
    maxconn 50000
    tune.bufsize 32768
    tune.maxrewrite 4096

Direktif 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.

Memeriksa Batas Sistem

Sebelum menaikkan maxconn, pastikan sistem mengizinkan:

Cek batas file descriptor
ulimit -n
sysctl fs.file-max

ulimit -n menampilkan batas file descriptor proses saat ini. Jika nilainya lebih kecil dari maxconn yang diinginkan, naikkan lewat limits.conf atau systemd unit file.

Thread dan Proses

Pemanfaatan CPU diatur dengan thread:

Menyeimbangkan thread
global
    nbthread 4
    cpu-map auto:1/1-4 0-3

nbthread 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.

Mengurangi Latensi

Keepalive Antar Layanan

Koneksi baru membutuhkan handshake TCP dan TLS. Keepalive menghindari biaya itu:

Keepalive ke backend
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 32

option 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.

Kompresi Konten

Mengompresi respons mengurangi byte yang dikirim, menekan latensi jaringan:

Aktifkan kompresi
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:8080

compression 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 dan Multiplexing

HTTP/2 menggabungkan banyak request dalam satu koneksi, memotong latensi head-of-line:

Frontend HTTP/2
frontend https_front
    bind *:443 ssl crt /etc/haproxy/certs/fullchain.pem \
        alpn h2,http/1.1
    mode http
    default_backend web_back

alpn h2,http/1.1 membuat klien yang mendukung memakai HTTP/2. Multiplexing yang dibawanya paling terasa pada halaman yang memuat banyak aset sekaligus.

Benchmarking dengan Tool Standar

Mengukur dengan wrk

wrk adalah generator beban berbasis thread dengan latensi rendah:

Benchmark dengan wrk
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.

Mengukur dengan hey

hey lebih sederhana dan cocok untuk tes cepat:

Benchmark dengan hey
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.

Mengukur HTTP/2 dengan h2load

Untuk HTTP/2, h2load adalah pilihan paling tepat:

Benchmark HTTP/2 dengan h2load
h2load -n 10000 -c 100 -m 16 https://localhost/ -k

h2load -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.

Metodologi Benchmarking yang Benar

Ubah Satu Variabel Sekaligus

Agar hasil bisa diinterpretasikan:

  • Ukur baseline sebelum menyentuh konfigurasi.
  • Ubah satu parameter, reload, lalu ukur lagi.
  • Ulangi beberapa kali dan ambil median, bukan nilai terbaik.
  • Jalankan benchmark dari mesin terpisah agar klien tidak mengganggu server.
Bandingkan sebelum dan sesudah
wrk -t4 -c100 -d30s http://localhost/ > before.txt
# ubah konfigurasi lalu reload
wrk -t4 -c100 -d30s http://localhost/ > after.txt
diff before.txt after.txt

Pola diff before.txt after.txt memperlihatkan perubahan performa secara langsung. Jika tidak ada perubahan berarti, kembalikan konfigurasi — kompleksitas tanpa manfaat tidak layak dipakai.

Penutup

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.
  • Keepalive dan kompresi memangkas latensi dengan biaya rendah.
  • HTTP/2 lewat ALPN memberi keuntungan multiplexing terbesar.
  • Ukur dengan wrk, hey, atau h2load: ubah satu variabel, lalu ukur lagi.

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.

Belajar HAProxy - Performance Tuning & Scalability | Belajar HAProxy