Чи можливо мати тисячі користувачів у Postgres?


9

Ми створюємо SAAS, де маємо максимум 50 000 клієнтів. Ми розглядаємо можливість створення користувача в базі даних Postgres для кожного клієнта. Ми будемо картографувати кожного користувача, який входить у наш сервіс, користувачеві в базі даних, щоб бути впевненим, що він має доступ лише до власних даних. Ми також хочемо реалізувати аудиторський слід безпосередньо в базі даних за допомогою цих рішень , що використовує тригери. Якщо у кожного замовника є власний користувач бази даних, то було б дуже легко зрозуміти, хто що робив, навіть якщо двоє клієнтів поділяться однаковими даними.

Чи будемо мати якісь несподівані проблеми, оскільки в нашій базі даних є 50 000 користувачів? Продуктивність або адміністрація. Може бути, об'єднання з'єднань буде складніше, але я не знаю, чи потрібен він нам.


2
Ви не зможете виконати будь-яке об'єднання об'єднань, якщо ви використовуєте auth DB, чи не так? Для продуктивності важливим питанням є кількість одночасних підключень та кількість ресурсів, які вони використовують, а не кількість користувачів у БД.
Джек каже, спробуйте topanswers.xyz

2
@JackDouglas Так, ви можете використовувати об'єднання з'єднань. Підключіться як "звичайний користувач" тодіset role actualUser
Ніл МакГуган

2
@Neil впевнений, але це не автентична база даних. Якщо ви перевіряєте автентифікацію за допомогою пароля користувача бази даних, вам потрібно буде використовувати якийсь зовнішній аутентифікатор у постгресах.
Джек каже, спробуйте topanswers.xyz

2
@JackDouglas Ви маєте рацію, це proxy auth на відміну від db auth.
Ніл МакГуйган

Поки що відповіді передбачають велику кількість одночасних користувачів, це буде так?
Джек каже, спробуйте topanswers.xyz

Відповіді:


12

Так, це повинно бути добре. Вам слід використовувати об'єднання з'єднань, оскільки pg використовує достатню кількість пам'яті на з'єднання (близько 10 Мб AFAIK).

Більше 500 одночасних з'єднань у коробці будуть проблемою (як, наприклад, активно запитуючи базу даних в той самий час). Більше cpus / ядер краще. Використовуйте SSD з RAID 10.

Ваш додаток SaaS має підключитися як один користувач, а потім set roleреальний користувач. Це дозволяє використовувати об'єднання з'єднань, оскільки рядок з'єднання буде однаковою, але використовувати різні користувачі. Ви повинні reset roleповернути з'єднання з басейном.

Це насправді не автентифікація бази даних. Це аутентифікація проксі-сервера (також імперсонація).

Ви також можете розглянути окремі пули для кожної компанії чи за роллю.

Щоб полегшити адміністратор, ви можете розмістити користувачів у групи та встановити дозволи через групи. Це називається RBAC.

Оновлення: мені вдалося створити 50 000 користувачів за 2,4 секунди. PGAdmin помітно повільніше, через кількість користувачів. Однак підключення через JDBC проходить так само швидко, як і раніше. Я не зміг одразу скинути 50 000 користувачів, але міг зробити приблизно 10 000 одночасно.


Дуже дякую за дослідження. Чи взагалі можна було працювати в PGAdmin? Чи була це велика проблема з виступом там?
Давид

@David PGAdmin все в порядку, просто повільно. psql має бути добре. Можливо, ви зможете налаштувати PGAdmin, щоб прискорити роботу.
Ніл МакГуйган

2

Продуктивність: тисяча паралельних з'єднань з'їсть вашу пам’ять, приблизно значення, що перевищує 1000 одночасних з'єднань, радимо використовувати об'єднання з'єднань, гарний pgbouncer, розроблений Skype.

Адміністрація: Адміністрація 50 000 користувачів стане великою роботою IMO. Як щодо диференціювання клієнта з одним і тим же доступом до даних, використовуючи різні application_name, тож кожен клієнт підключиться до бази даних, використовуючи те саме ім’я користувача.

Приклад:

використовуючи інше ім'я користувача, то рядок підключення кожного клієнта буде: --user user1, --user user2і т.д.

Але , використовуючи різні application_name, то рядок підключення кожного клієнта буде: --user user1 --application_name costumer1, --user user1 --aplication_name costumer2і т.д.

Цей application_nameзапис записаний pg_stat_activityі може бути також ввійшов до журналу. Я думаю, що це було б легше здійснити. А application_nameтакож записується в тригер аудиту, який ви хочете застосувати. Детальніше тут .

Сподіваюся, це допомагає.


4
Як адмініструвати 50 000 db користувачів важче, ніж 50 000 користувачів додатків?
Ніл МакГуйган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.