Rumah  >  Artikel  >  Mengkonfigurasi Kolam Sambungan

Mengkonfigurasi Kolam Sambungan

百草
百草asal
2024-09-04 13:39:48843semak imbas

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.

Mengkonfigurasi Kolam Sambungan

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.

Apa Itu Pengumpul Sambungan dan Mengapa Ia Berguna

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.

Berbeza Jenis Pengumpulan Sambungan

Terdapat banyak cara untuk melaksanakan pengumpulan sambungan. Dalam bahagian ini, kami melihat pelbagai butiran pelaksanaan.

Pengumpul Sambungan Luaran atau Dalaman

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.

Jenis Pengumpulan

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.

Penyelesaian Penggabungan Sambungan

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.

Penyelesaian Terbina dalam

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

  • Terdapat banyak penyelesaian luaran yang anda boleh gunakan:

Amazon RDS Proxy

  • Pgpool

  • PgBouncer

  • odyssey

  • Proksi Pangkalan Data Heimdall

  • ProxySQL

  • pg>cat

  • Kajian Kes: Mengkonfigurasi PgBouncer


    Dalam contoh ini, kami akan memeriksa PgBouncer.

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


  • max_client_conn: Ini mengkonfigurasikan bilangan pelanggan yang boleh menyambung kepada pengumpul sambungan


  • default_pool_size: Mengkonfigurasikan bilangan sambungan pelayan yang dibenarkan untuk setiap pangkalan data pengguna


  • min_pool_size: Berapa banyak sambungan siap sedia untuk disimpan


  • Selepas mengkonfigurasi pengumpul, kami boleh mengesahkan prestasinya dengan pgbench:

Tingkatkan prestasi pangkalan data dengan pengumpulan sambungan


pgbench -c 10 -p -j 2 -t 1000 database_name

Supercharging PostgreSQL dengan PgBouncer

  • Ringkasan


    Pengumpul sambungan boleh meningkatkan prestasi dan mengurangkan penggunaan sumber. Terdapat banyak penyelesaian terbina dalam yang boleh kami gunakan dengan mudah dengan pangkalan data kami, tidak kira di mana kami mengehoskannya dan enjin pangkalan data yang kami gunakan. Kita perlu ingat bahawa pengumpul sambungan adalah satu lagi titik kegagalan dan perlu dikendalikan dengan berhati-hati. Pengumpul sambungan yang dikonfigurasikan dengan baik boleh hampir menggandakan bilangan urus niaga sesaat yang sangat meningkatkan prestasi.

Atas ialah kandungan terperinci Mengkonfigurasi Kolam Sambungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn