10. Lanjutan Ekstensif: Connection Pooling Platform Bisnis dengan PgBouncer (Transaction Mode)
149 views
Arsitektur Basis Data
Serangan Ribuan Lebah ke Sarang Madu
Arsitektur web server-side standar sering kali membina ulang jalur koneksi baru dari nol (TCP Handshake, Authentication) tiap kali penyambungan API, persis bagai membuka jalan aspal lintas propinsi setiap kali ada satu mobil hendak lewat. Bagi instalasi Odoo dengan parameter asikron (10 gunicorn workers + cron), puluhan koneksi bisa mendadak terbang menabrak peladen rentan
max_connections.Alih-alih mati memutar error "FATAL: Sorry, too many clients already", industri skala raksasa menyelipkan
PgBouncer berdiri angkuh tepat melintang sebagai gerbang tol penyambung aliran frontend ke kolam penambungan Postgres.Misteri Metode Transaction Pooling
PgBouncer mengilusi lapisan API dengan ribuan koneksi hampa (virtual) lalu perlahan memasukkannya bergilir menempati 50 celah lubang koneksi orisinil Database bawah (Real connection_pool). Untuk aplikasi stateless seperti kerangka Web ORM, model pool yang wajib dipakai adalah
pool_mode = transaction.Tiap transaksi query per baris diprioritaskan selesai dahulu untuk melemparkan kunci sesi koneksi itu ke pengunjung berikutnya. Konsekuensinya amatlah dahsyat, ribuan request Odoo hanya dimamah oleh 30-40 sesi Postgres nyata! Beban antrian CPU menjadi terdistribusi riang walau diserbu massal di kala detik puncak promosi (Flash Sale).
sql-- Konfigurasi Klasik pgbouncer.ini untuk Odoo E-Commerce [databases] odoo_prod = host=localhost port=5432 dbname=odoo_prod auth_user=dbadmin [pgbouncer] listen_port = 6432 pool_mode = transaction max_client_conn = 5000 default_pool_size = 60
Kesimpulan Integrasi Gerbang Lapis Baja
Jangan pernah biarkan Odoo terhubung telanjang ke PostgreSQL telanjang, apalagi apabila melintasi kabel WAN regional antar server benua yang tak luput dari selisih kelatenan (Latency Ping), karena itu akan membakar habis sumberdaya OS secara radikal!