Pengumpul sambungan ialah komponen perisian yang menguruskan sambungan pangkalan data. Ini boleh membantu dalam pelbagai cara untuk meningkatkan penggunaan sumber, membantu dengan pengimbangan beban atau failover dan boleh mengurangkan masa transaksi dengan banyak. Dalam catatan blog ini, kita akan melihat apa itu pengumpul sambungan dan cara mengkonfigurasinya.
Pengumpul sambungan ialah komponen perisian yang menguruskan sambungan pangkalan data. Ini boleh membantu dalam pelbagai cara untuk meningkatkan penggunaan sumber, membantu dengan pengimbangan beban atau failover dan boleh mengurangkan masa transaksi dengan banyak. Dalam catatan blog ini, kita akan melihat apa itu pengumpul sambungan dan cara mengkonfigurasinya.
Membuka sambungan ke pangkalan data memerlukan banyak langkah. Kami perlu menyambung ke pelayan dan melakukan jabat tangan awal, bersetuju dengan penyulitan dan tetapan sambungan, dan kemudian menyimpan sumber sambungan baharu merentas semua lapisan (pemacu rangkaian, lapisan OS, lapisan pangkalan data, dll.). Setiap sambungan menggunakan memori yang saiznya bergantung pada enjin pangkalan data. Untuk PostgreSQL, ini boleh menjadi 1.3MB memori untuk satu sambungan. Membuka sambungan juga mengambil masa kerana kami perlu merundingkan tetapan sambungan baharu.
Jika kami terus membuka sambungan baharu untuk setiap pertanyaan SQL, kami mungkin menyebabkan beberapa isu untuk pelayan pangkalan data:
Membuka sambungan memerlukan masa dan sumber, jadi transaksi kami lebih perlahan
Kami mungkin melebihi had sambungan aktif (yang secara lalai boleh ditetapkan kepada sesuatu seperti seratus sambungan)
Pangkalan data mungkin menggunakan lebih banyak memori yang boleh menjejaskan nisbah hit cache dan memori percuma yang tersedia untuk pertanyaan
Daripada membuka sambungan baharu untuk setiap pertanyaan SQL, kami boleh mengumpulkan sambungan. Kami boleh mengkonfigurasi pengumpul sambungan yang mengekalkan jumlah sambungan dan menggunakannya semula untuk semua pelanggan. Dengan cara ini, aplikasi kami menyambung kepada pengumpul dan bukannya pangkalan data secara langsung, dan kemudian pengumpul menyambung kepada pangkalan data. Ini membawa pelbagai kelebihan:
Pengumpul sambungan memastikan sambungan terbuka lebih lama yang mengurangkan overhed membuka dan menutup sambungan pada hujung pangkalan data dan mengurangkan kependaman.
Kami boleh mendapatkan pengimbangan beban antara sambungan atau antara pangkalan data yang meningkatkan prestasi.
Pengumpul boleh mengekalkan bilangan sambungan yang stabil, jadi kami mengelakkan isu tersebut terlalu banyak sambungan aktif yang mengurangkan penggunaan sumber.
Pengumpul boleh mengubah hala sambungan antara pelayan utama dan siap sedia untuk menyediakan failover yang meningkatkan kestabilan dan kebolehskalaan.
Pengumpul boleh menyimpan kata laluan ke pangkalan data di tempat pusat yang meningkatkan keselamatan.
Pengumpul boleh cache keputusan untuk meningkatkan prestasi pertanyaan.
Pengumpul sambungan juga mempunyai beberapa kelemahan:
Ia merupakan satu lagi komponen dalam sistem kami yang mungkin menjadi titik kegagalan.
Kependaman rangkaian mungkin meningkat sedikit disebabkan lompatan rangkaian lain antara aplikasi dan pangkalan data.
Pengumpul sambungan yang tidak cekap mungkin menjadi halangan.
Kita perlu menala dan mengekalkan penyambung sambungan yang meningkatkan beban penyelenggaraan.
Terdapat banyak cara untuk melaksanakan pengumpulan sambungan. Dalam bahagian ini, kami melihat pelbagai butiran pelaksanaan.
Dalam kes biasa, kami menyambung daripada aplikasi kami ke pangkalan data. Kami kini boleh meletakkan pengumpul sambungan di salah satu daripada dua tempat: dalam aplikasi itu sendiri atau di suatu tempat antara aplikasi dan pangkalan data.
Meletakkan kumpulan sambungan dalam aplikasi (pengumpul sambungan sisi aplikasi) boleh menjadi sangat mudah kerana banyak ORM atau pemacu pangkalan data menyokongnya di luar kotak. Sebagai contoh, JDBC menyokongnya dengan c3p0 dan ODBC menyokongnya di luar kotak. Ini membawa banyak faedah. Kami tidak perlu memasang dan menyelenggara sebarang komponen tambahan kerana pengumpul tinggal di dalam aplikasi. Kami hanya perlu menggunakan versi baharu aplikasi dan kami menyediakan pengumpulan. Ini juga mengurangkan kependaman rangkaian, kerana kami tidak mempunyai sebarang lompatan rangkaian tambahan (semuanya hidup dalam aplikasi kami).
Malangnya, pengumpul sambungan sisi aplikasi mempunyai beberapa kelemahan. Yang terbesar ialah ia dikonfigurasikan untuk satu aplikasi sahaja. Jika kita mempunyai banyak aplikasi (terutamanya dalam persekitaran yang diedarkan), maka kita perlu mengkonfigurasi pengumpul di banyak tempat. Apatah lagi bahawa kami mungkin masih mencapai had kiraan sambungan pada bahagian pelayan kerana pengumpul tidak mengetahui satu sama lain. Mempunyai banyak pengumpul sambungan juga menyebabkan penggunaan sumber yang lebih tinggi dan biasanya kurang berprestasi.
Kami juga boleh menggunakan pengumpul sambungan luaran yang terletak di suatu tempat antara aplikasi dan pangkalan data. Ini boleh berfungsi dengan mana-mana bilangan aplikasi dan membolehkan kami mengawal had sambungan dengan tepat. Pengumpul sambungan berpusat juga boleh mengawal sumber dengan lebih baik dan membolehkan kami mencapai failover atau pengagihan beban.
Pengumpul sambungan luaran juga mempunyai beberapa kelemahan. Pertama sekali, ia adalah satu lagi komponen yang perlu kita pasang, konfigurasi, penalaan dan penyelenggaraan dari semasa ke semasa. Kami juga perlu mengkonfigurasi semula setiap aplikasi untuk menggunakan pengumpul sambungan (yang sepatutnya semudah menukar beberapa rentetan sambungan dan mengatur semula aplikasi). Pengumpul luaran juga menambah beberapa kependaman rangkaian kerana ia merupakan satu lagi komponen rangkaian antara aplikasi dan pangkalan data.
Pengumpul sambungan luaran juga boleh menjadi titik kegagalan. Jika pooler tidak berfungsi atas apa jua sebab, aplikasi tidak boleh menyambung ke pangkalan data lagi. Jika pooler lambat atau tidak cekap, maka ia menjejaskan semua aplikasi yang menggunakannya. Oleh itu, pengumpul mestilah berkualiti tinggi untuk tidak merosot prestasi keseluruhan.
Setiap pengumpul perlu membuat keputusan tentang cara menetapkan sambungan kepada pelanggan. Secara umumnya terdapat tiga pendekatan.
Yang pertama ialah pengumpulan sesi. Dalam pendekatan ini, sambungan diberikan kepada klien untuk tempoh sesi (jadi sehingga klien memutuskan sambungan atau tamat masa dicapai). Ini adalah pendekatan yang paling mudah, namun, ini mengehadkan bilangan pelanggan dengan berkesan kerana lazimnya setiap pelanggan menggunakan satu sambungan.
Penyelesaian seterusnya ialah pengumpulan transaksi. Dalam pendekatan ini, pengumpul memberikan sambungan untuk setiap transaksi dan hanya untuk tempoh transaksi. Jika pelanggan ingin menjalankan transaksi lain, mereka perlu mendapatkan sambungan lain (dan mungkin perlu menunggu beberapa sambungan lain tersedia). Ini membolehkan pengumpul mengendalikan lebih ramai pelanggan dan merupakan pendekatan yang disyorkan.
Pendekatan terakhir ialah menetapkan sambungan bagi setiap pernyataan SQL secara bebas. Secara teori, ini membawa fleksibiliti tertinggi dan penggunaan sambungan. Walau bagaimanapun, ini menyebabkan satu transaksi menjangkau banyak sambungan. Memandangkan banyak tetapan transaksi terikat pada sambungan, ini mungkin menjadi had teknikal.
Bergantung pada jenis pangkalan data yang anda gunakan, mungkin terdapat beberapa penyelesaian terbina dalam, atau anda mungkin perlu mengkonfigurasinya secara manual. Mari lihat beberapa contoh.
Bergantung pada pembekal infrastruktur anda, anda mungkin boleh menggunakan penyelesaian terbina dalam atau hampir terbina dalam:
Pangkalan data Neon PostgreSQL mempunyai PgBouncer terbina dalam
Supabase mempunyai Supavisor terbina dalam
Pangkalan data Azure untuk PostgreSQL menyokong PgBouncer terbina dalam
DigitalOcean's PostgreSQL termasuk PgBouncer
Pangkalan data Azure boleh digunakan dengan ProxySqlPangkalan data Azure boleh digunakan dengan Proksi Pangkalan Data Heimdall
ADO.NET menyokong kolam sambungan terbina dalam
Oracle menyokong kumpulan Sambungan Universal untuk JDBC
Pangkalan Data Autonomi Oracle menyokong Kolam Sambungan Residen Pangkalan Data
Penyelesaian Luaran
Amazon RDS Proxy
Pgpool
PgBouncer
odyssey
Proksi Pangkalan Data Heimdall
ProxySQL
pg>cat
Kami mulakan dengan memasangnya seperti dalam dokumentasi.
Kami kemudiannya perlu mengkonfigurasinya. Tetapan yang paling penting adalah:
pool_mode: Cara mengendalikan sambungan; kita boleh menggunakan transaksi
Tingkatkan prestasi pangkalan data dengan pengumpulan sambungan
pgbench -c 10 -p -j 2 -t 1000 database_name
Supercharging PostgreSQL dengan PgBouncer
Atas ialah kandungan terperinci Mengkonfigurasi Kolam Sambungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!