PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Penyatuan Koneksi PostgreSQL:Bagian 2 – PgBouncer

Dalam hal penyatuan koneksi di dunia PostgreSQL, PgBouncer mungkin adalah opsi yang paling populer. Ini adalah utilitas yang sangat sederhana yang melakukan satu hal – ia berada di antara database dan klien dan berbicara tentang protokol PostgreSQL, meniru server PostgreSQL. Seorang klien terhubung ke PgBouncer dengan sintaks yang sama persis seperti yang akan digunakan saat menghubungkan langsung ke PostgreSQL – PgBouncer pada dasarnya tidak terlihat.

PgBouncer didukung oleh hampir semua vendor DBaaS PostgreSQL, dan digunakan secara luas di seluruh komunitas. Dalam posting blog ini, kami akan menjelaskan cara kerja PgBouncer, pro dan kontra menggunakannya, dan cara mengatur pooler koneksi. Jika Anda ingin tahu lebih banyak tentang penggabungan koneksi secara umum, atau bertanya-tanya apakah itu tepat untuk penerapan Anda, lihat PostgreSQL Connection Pooling kami:Bagian 1 – Pos Pro &Kontra.

Seri Penyatuan Koneksi PostgreSQL

  • Bagian 1 – Pro &Kontra
  • Bagian 2 – PgBouncer
  • Bagian 3 – Pgpool-II
  • Bagian 4 – PgBouncer vs. Pgpool-II

Bagaimana Cara Kerja PgBouncer?

Saat PgBouncer menerima koneksi klien, pertama-tama PgBouncer melakukan otentikasi atas nama server PostgreSQL. PgBouncer mendukung semua mekanisme otentikasi yang didukung server PostgreSQL, termasuk konfigurasi akses berbasis host (catatan:kami tidak dapat merutekan koneksi replikasi melalui PgBouncer). Jika kata sandi diberikan, otentikasi dapat dilakukan dengan dua cara:

  1. PgBouncer pertama-tama memeriksa file userslist.txt – file ini menentukan satu set tupel (nama pengguna, kata sandi terenkripsi md5). Jika nama pengguna ada di file ini, kata sandi dicocokkan dengan nilai yang diberikan. Tidak ada koneksi ke server PostgreSQL yang dibuat.
  2. Jika otentikasi passthrough diatur, dan pengguna tidak ditemukan di file userslist.txt, PgBouncer mencari auth_query. Itu terhubung ke PostgreSQL sebagai pengguna yang telah ditentukan (yang kata sandinya harus ada di file userslist.txt) dan mengeksekusi kueri auth untuk menemukan kata sandi pengguna dan mencocokkannya dengan nilai yang diberikan.

Setelah otentikasi berhasil:

  1. PgBouncer memeriksa koneksi yang di-cache, dengan kombinasi nama pengguna+database yang sama.
  2. Jika koneksi yang di-cache ditemukan, koneksi akan dikembalikan ke klien.
  3. Jika koneksi yang di-cache tidak ditemukan, itu membuat koneksi baru, asalkan membuat koneksi baru tidak:
    • Tingkatkan jumlah koneksi ke> pool_size
    • Tingkatkan jumlah koneksi dari klien ke> max_client_connections
    • Meningkatkan jumlah koneksi ke database menjadi> max_db_connections
    • Meningkatkan jumlah koneksi dari pengguna ke> max_user_connections
  4. Semua nilai ini dapat ditentukan dalam pengaturan PgBouncer.
  5. Jika membuat koneksi baru akan melanggar salah satu pengaturan, PgBouncer mengantrekan koneksi hingga koneksi baru dapat dibuat, kecuali jika melanggar batasan max_client_connections.
    Catatan – Waktu langkah pasca-otentikasi sedikit berbeda berdasarkan mode PgBouncer. Di bawah mode penyatuan transaksi atau pernyataan, langkah-langkah pasca-otentikasi dijalankan hanya ketika klien mulai mengeksekusi transaksi/pernyataan. Kami membahas lebih lanjut tentang mode penyatuan di bawah ini.
  6. Jika melanggar batasan max_client_connections, koneksi akan dibatalkan.

Berdasarkan penyatuan mode, PgBouncer menunggu kesempatan untuk mengembalikan koneksi kembali ke database:

  • Dalam mode kumpulan sesi, koneksi dikembalikan ke kumpulan hanya ketika klien menutup sesi.
  • Dalam mode pooling transaksi, koneksi dikembalikan ke pool hanya ketika klien menyelesaikan transaksi (biasanya rollback atau commit dijalankan). Akibatnya, fitur berbasis sesi tidak didukung dalam mode ini. Tidak ada jaminan dua transaksi yang dijalankan pada koneksi PgBouncer klien yang sama akan berjalan pada koneksi server PgBouncer yang sama.
  • Dalam mode penyatuan pernyataan, koneksi dikembalikan ke kumpulan segera setelah pernyataan dijalankan. Di sini, autocommit selalu aktif.

Sebelum mengembalikan koneksi kembali ke database, PgBouncer menjalankan kueri reset untuk menghapus semua informasi sesi – ini membuatnya aman untuk berbagi koneksi antar klien. Dimungkinkan untuk mengonfigurasi kueri ini berdasarkan kebutuhan aplikasi.

Mode pengumpulan transaksi paling sering digunakan, meskipun mode pengumpulan sesi mungkin berguna untuk beban kerja tertentu. Anda dapat membaca lebih lanjut tentang PgBouncer di halaman Wiki mereka.

Penggabungan Koneksi PostgreSQL:Bagian 2 – PgBouncerKlik Untuk Tweet

Mengapa Memilih PgBouncer?

Ada banyak alasan mengapa PgBouncer adalah pilihan paling populer dalam hal penyatuan koneksi di PostgreSQL. Berikut adalah beberapa fitur dan kelebihan terbaik yang ditawarkan PgBouncer:

  • Mode Penggabungan – Dengan memberi pengguna kekuatan untuk memutuskan kapan koneksi dikembalikan ke kumpulan, PgBouncer mampu mendukung berbagai macam kasus penggunaan. Dan, karena penyiapan ini berada pada level kumpulan, Anda dapat menggunakan mode transaksi (kinerja lebih baik) untuk koneksi database biasa, dan mode sesi hanya jika Anda memerlukan fitur seperti pernyataan yang disiapkan!
  • Penyiapan &Penggunaan Mudah – PgBouncer adalah salah satu pooler koneksi PostgreSQL termudah untuk disiapkan, dan juga tidak memerlukan perubahan kode sisi klien.
  • Otentikasi Melewati – PgBouncer adalah salah satu dari sedikit kumpulan koneksi “middleware” yang dapat mengautentikasi pengguna dengan aman tanpa memiliki akses ke kata sandi mereka (dalam bentuk teks biasa atau terenkripsi). Hal ini membuat PgBouncer lebih aman dan lebih mudah dirawat – Anda tidak perlu memperbarui PgBouncer setiap kali pengguna memperbarui kata sandi mereka.
  • Ringan – Ini adalah proses tunggal, dan semua perintah dari klien dan tanggapan dari server melewati PgBouncer tanpa pemrosesan apa pun. Jadi, tidak perlu 'melihat' seluruh konten sekaligus, dan karenanya, mempertahankan jejak memori yang sangat kecil.
  • Skalabilitas &Performa – Seperti yang akan kita bahas secara lebih rinci di bagian akhir dari seri kami, PgBouncer dapat secara signifikan meningkatkan transaksi per detik yang dapat didukung oleh server PostgreSQL Anda, dan skalanya sangat baik untuk sejumlah besar klien.

Apa yang Tidak Dilakukan PgBouncer?

PgBouncer, meskipun merupakan pooler koneksi yang hebat, tidak mendukung penyeimbangan beban otomatis atau ketersediaan tinggi. Direkomendasikan untuk menggunakan alat linux umum lainnya seperti HAProxy untuk membuat arsitektur yang mendukung fitur ini.

Lihat contoh arsitektur PostgreSQL untuk membaca dengan keseimbangan beban di bawah ini:

Catatan – Node master (bahwa semua budak ini akan direplikasi dari) tidak ditampilkan dalam diagram.

Cara Menyiapkan PgBouncer

Jika Anda memiliki penerapan ScaleGrid PostgreSQL, Anda dapat mengatur PgBouncer dalam beberapa klik. Buka tampilan detail cluster PostgreSQL Anda dan klik ikon PgBouncer. Setelah Anda memilih "Aktifkan PgBouncer", Anda akan disajikan dengan opsi konfigurasi untuk menyesuaikan mode pooling dan ukuran pool Anda – Anda dapat menerima default (jangan khawatir, Anda dapat mengubahnya kapan saja tanpa downtime), dan klik Enable!

Dan hanya itu! Anda siap berangkat.

Jika Anda memiliki penerapan non-ScaleGrid, PgBouncer didistribusikan sebagai bagian dari repositori PostgreSQL dan dapat diinstal menggunakan pengelola paket masing-masing. Untuk petunjuk lebih detail, atau untuk membangun dari sumber, Anda dapat mengikuti petunjuk dari blog mereka.

Setelah diinstal, PgBouncer hanya mengharuskan Anda untuk menyiapkan beberapa parameter konfigurasi untuk memulai dan menjalankan:

  1. Daftar (nama pengguna, sandi terenkripsi md5) untuk mengautentikasi klien atau penyiapan otentikasi passthrough untuk penerapan yang lebih aman.
  2. Antarmuka/IP:port untuk mendengarkan koneksi masuk.
  3. Definisi kumpulan. Sebuah 'pool' adalah nama yang klien gunakan sebagai nama database saat menghubungkan ke PgBouncer - dapat dipetakan ke string koneksi penuh (host, port, dbname dan pengguna). Definisi paling sederhana adalah dalam bentuk:
    * = host=
    Ini akan membuat kumpulan dinamis untuk setiap kombinasi dbname+user, dan terhubung ke host yang ditentukan menggunakan port, dbname, dan nama pengguna yang disediakan oleh pengguna.

Dan hanya itu! Anda dapat memulai dan menjalankan dengan sangat cepat dengan PgBouncer. Namun, ada lebih banyak pengaturan yang harus disetel untuk distribusi produksi apa pun – itu berada di luar cakupan posting blog ini, tetapi Anda dapat membaca lebih lanjut tentangnya di ikhtisar konfigurasi PgBouncer ini.

Namun, PgBouncer bukan satu-satunya pilihan untuk penggabungan koneksi PostgreSQL – dalam posting berikutnya, kita akan membahas Pgpool-II, yang mungkin merupakan pesaing PgBouncer. Nantikan postingan keempat kami dalam seri empat bagian ini di mana kami membandingkan PgBouncer vs. Pgpool-II.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mencocokkan satu hari penuh dengan bidang datetime?

  2. Apa yang terjadi dengan duplikat saat menyisipkan banyak baris?

  3. Kesalahan saat menginstal psycopg2==2.6.2

  4. Operator PostgreSQL IN dengan kinerja buruk subquery

  5. Fungsi lower() pada karakter internasional di postgresql