Kami menciptakan SAAS di mana kami paling banyak memiliki 50.000 pelanggan. Kami sedang mempertimbangkan untuk membuat pengguna di database Postgres untuk setiap pelanggan. Kami akan memetakan setiap pengguna yang masuk ke layanan kami ke pengguna di basis data agar sangat yakin bahwa mereka hanya memiliki akses ke data mereka sendiri. Kami juga ingin menerapkan jejak audit langsung dalam database dengan solusi ini , yang memanfaatkan pemicu. Jika setiap pelanggan memiliki pengguna basis data sendiri, maka akan sangat mudah untuk melihat siapa yang melakukan apa, bahkan jika dua pelanggan akan berbagi data yang sama.
Apakah kami akan mengalami beberapa masalah yang tidak terduga karena kami memiliki 50.000 pengguna di basis data kami? Kinerja-bijaksana atau administrasi-bijaksana. Mungkin koneksi pooling akan lebih sulit, tetapi saya tidak benar-benar tahu apakah kita akan membutuhkannya.
set role actualUser
Jawaban:
Ya, itu seharusnya baik-baik saja. Anda harus menggunakan pooling koneksi, karena pg menggunakan jumlah memori yang cukup per koneksi (sekitar 10MB AFAIK).
Lebih dari 500 koneksi simultan per kotak akan menjadi masalah (seperti secara aktif menanyakan database pada saat yang bersamaan). Lebih banyak cpus / core lebih baik. Gunakan SSD dengan RAID 10.
Aplikasi SaaS Anda harus terhubung sebagai satu pengguna, kemudian
set role
ke pengguna sebenarnya. Ini memungkinkan Anda untuk menggunakan pooling koneksi, karena string koneksi akan sama, tetapi menggunakan pengguna yang berbeda. Anda harusreset role
ketika mengembalikan koneksi ke kolam renang.Ini sebenarnya bukan otentikasi basis data. Ini otentikasi proksi (alias Peniruan).
Anda juga dapat mempertimbangkan kumpulan terpisah per perusahaan atau per peran.
Untuk membuat admin lebih mudah, Anda dapat menempatkan pengguna ke dalam grup dan mengatur izin melalui grup. Ini disebut RBAC.
Pembaruan: Saya dapat membuat 50.000 pengguna dalam 2,4 detik. PGAdmin terasa lebih lambat, karena jumlah pengguna. Namun menghubungkan melalui JDBC secepat sebelumnya. Saya tidak dapat menurunkan 50.000 pengguna sekaligus, tetapi dapat melakukan sekitar 10.000 pengguna sekaligus.
sumber
Kinerja: ribuan koneksi konkuren akan memakan memori Anda, kira-kira nilai di atas 1.000 koneksi konkuren disarankan untuk menggunakan pooling koneksi, pgbouncer adalah koneksi yang bagus, dikembangkan oleh skype.
Mengelola: Mengelola 50.000 pengguna akan menjadi pekerjaan berat IMO. Bagaimana membedakan pelanggan dengan akses data yang sama menggunakan berbeda
application_name
, sehingga setiap pelanggan akan terhubung ke database menggunakan nama pengguna yang sama.Contoh:
menggunakan nama pengguna yang berbeda, koneksi string setiap klien akan:
--user user1
,--user user2
, dllTetapi menggunakan yang berbeda
application_name
, koneksi string setiap klien akan:--user user1 --application_name costumer1
,--user user1 --aplication_name costumer2
, dllItu
application_name
direkampg_stat_activity
dan juga bisa dicatat. Saya pikir itu akan lebih mudah diimplementasikan. Danapplication_name
juga log dalam pemicu audit yang ingin Anda terapkan. Lebih detail di sini .Semoga ini bisa membantu.
sumber