Saya sedang mengerjakan proyek yang diharapkan dapat melayani jutaan pengguna segera setelah diluncurkan. Basis datanya adalah postgres, dan untuk saat ini saya mengasumsikan setidaknya diperlukan dua server. Admin sys (yang jelas berpengalaman dalam sistem scalable) telah menyarankan menempatkan penyeimbang beban di antara server web dan server database.
Pertanyaan saya berkaitan dengan perbedaan penyeimbangan beban versus penyatuan koneksi. Untuk mempertahankan kinerja, haruskah saya melihat satu atau yang lain, atau keduanya?
postgresql
bogeymin
sumber
sumber
Jawaban:
Dengan PostgreSQL Anda memiliki dua area berbeda yang dapat melakukan pooling, baik di lapisan aplikasi (yaitu jdbc yang dibangun di pooling dll) atau di lapisan menengah yang berada di antara aplikasi dan db (s), seperti pgbouncer atau pgpool.
Jika Anda melakukan penggabungan pada lapisan menengah, seperti pgbouncer atau pgpool, maka lapisan itu juga dapat melakukan penyeimbangan muatan dari kueri pilihan. Lebih lanjut ketika load balancing, Anda dapat melakukan penulisan dalam salah satu dari dua cara: Anda dapat memiliki master tulis tunggal yang mereplikasi melalui cara lain untuk budak baca Anda, menggunakan alat seperti slony atau replikasi streaming bawaan yang muncul di hal 9.0 dan di atas, atau Anda dapat meminta load balancer melakukan semua penulisan, sehingga pembacaan yang masuk hanya mencapai satu db, tetapi menulis mengenai setiap basis data agar semuanya diperbarui.
Atau jika Anda adventerous, Anda dapat memindahkan layer load balancing ke layer lain ke postgresql sendiri menggunakan plproxy. Ini adalah bahasa pl untuk pgsql yang dirancang untuk memungkinkan Anda menempatkan satu basis data pg di ujung depan yang tidak memiliki data aktual di dalamnya, dan basis data itu kemudian dapat berjalan di atas beberapa dbs yang mungkin berlebihan untuk throughput yang luar biasa. plpoxy cukup rumit untuk diatur dan dijalankan tetapi juga cukup skalabel. Perhatikan bahwa aplikasi Anda harus ditulis ulang untuk mendukungnya sehingga tidak dapat dilemparkan di bawah aplikasi lama dan hanya berfungsi.
http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/
sumber
Penyeimbangan beban dan penyatuan koneksi adalah dua hal yang sangat berbeda.
Koneksi pooling (saya berasal dari sisi dunia Microsoft, tetapi hal-hal serupa saya kira) memungkinkan aplikasi untuk menjaga koneksi ke database terbuka sehingga dapat digunakan kembali untuk permintaan berikutnya daripada harus memutuskan dan menyambung kembali untuk setiap kueri yang perlu dijalankan.
Load balancing memungkinkan Anda untuk memiliki beberapa server database di belakang load balancer sehingga Anda dapat menyebarkan beban di beberapa server alih-alih memiliki satu server yang menangani semua pekerjaan.
Anda dapat menggunakan pooling koneksi dengan load balancing namun perlu diingat bahwa karena koneksi tidak akan pernah jatuh Anda mungkin berakhir dengan beban yang tidak seimbang antara kedua server database.
Jika satu server database tidak dapat menangani pemuatan aplikasi, maka dapatkan 3 server kembali ke sana. Dengan begitu Anda dapat mem-boot ulang sesuai kebutuhan tanpa aplikasi mogok.
sumber