Czy możesz mieć tysiące użytkowników w Postgres?


9

Tworzymy SAAS, w którym będziemy mieli co najwyżej 50 000 klientów. Rozważamy utworzenie użytkownika w bazie danych Postgres dla każdego klienta. Mapujemy każdego użytkownika, który loguje się w naszym serwisie, do użytkownika w bazie danych, aby mieć pewność, że mają oni dostęp tylko do własnych danych. Chcemy również wdrożyć ścieżkę audytu bezpośrednio w bazie danych za pomocą tych rozwiązań , które wykorzystują wyzwalacze. Jeśli każdy klient ma własnego użytkownika bazy danych, bardzo łatwo byłoby zobaczyć, kto co zrobił, nawet jeśli dwóch klientów podzieliłoby te same dane.

Czy napotkamy jakieś nieoczekiwane problemy, ponieważ w naszej bazie danych znajduje się 50 000 użytkowników? Pod względem wydajności lub administracji. Może pula połączeń byłaby trudniejsza, ale tak naprawdę nie wiem, czy byśmy tego potrzebowali.


2
Nie będziesz w stanie wykonywać żadnego rodzaju łączenia pul, jeśli używasz uwierzytelniania DB, prawda? Ważną kwestią dla wydajności jest liczba równoczesnych połączeń i ilość wykorzystywanych zasobów, a nie liczba użytkowników w bazie danych.
Jack mówi, że spróbuj topanswers.xyz 14.01.15

2
@JackDouglas Tak, możesz korzystać z puli połączeń. Połącz się wtedy jako „commonUser”set role actualUser
Neil McGuigan

2
@ Nie jestem pewien, ale to nie jest autoryzacja DB. Jeśli uwierzytelniasz się przy użyciu hasła użytkownika bazy danych, musisz użyć jakiegoś zewnętrznego uwierzytelnienia w postgresie.
Jack mówi, że spróbuj topanswers.xyz 14.01.15

2
@JackDouglas masz rację, to uwierzytelnianie proxy w przeciwieństwie do uwierzytelniania db.
Neil McGuigan

Odpowiedzi do tej pory zakładają dużą liczbę równoczesnych użytkowników, czy tak się stanie?
Jack mówi, że spróbuj topanswers.xyz 15.01.2015

Odpowiedzi:


12

Tak, powinno być dobrze. Powinieneś jednak używać puli połączeń, ponieważ pg zużywa sporo pamięci na połączenie (około 10 MB AFAIK).

Problemem będzie jednak ponad 500 jednoczesnych połączeń na skrzynkę (np. Aktywne odpytywanie bazy danych w tym samym czasie). Więcej procesorów / rdzeni jest lepsze. Używaj dysków SSD z macierzą RAID 10.

Twoja aplikacja SaaS powinna łączyć się jako jeden użytkownik, a następnie set roleprawdziwy użytkownik. Pozwala to na użycie puli połączeń, ponieważ parametry połączenia będą takie same, ale będą używać różnych użytkowników. Powinieneś reset rolepowracać do puli.

To nie jest tak naprawdę uwierzytelnianie bazy danych. To uwierzytelnianie przez proxy (inaczej Personifikacja).

Można również rozważyć oddzielne pule dla firmy lub roli.

Aby ułatwić administrowanie, możesz umieszczać użytkowników w grupach i ustawiać uprawnienia za pośrednictwem grup. Nazywa się to RBAC.

Aktualizacja: Udało mi się utworzyć 50 000 użytkowników w 2,4 sekundy. PGAdmin jest zauważalnie wolniejszy ze względu na liczbę użytkowników. Jednak łączenie przez JDBC jest tak szybkie, jak wcześniej. Nie mogłem zrzucić 50 000 użytkowników naraz, ale mogłem zrobić około 10 000 naraz.


Dziękuję bardzo za badania. Czy w ogóle można było pracować w PGAdmin? Czy to był duży problem z wydajnością?
David

@David PGAdmin był w porządku, tylko powoli. psql powinno być w porządku. Być może uda się ulepszyć PGAdmin, aby przyspieszyć działanie.
Neil McGuigan

2

Wydajność: tysiące równoczesnych połączeń pochłonie Twoją pamięć, w przybliżeniu wartość powyżej 1000 równoczesnych połączeń zaleca się korzystanie z puli połączeń, pgbouncer jest dobrym rozwiązaniem opracowanym przez skype.

Administrowanie: administracja 50 000 użytkowników będzie wielkim zadaniem IMO. Co powiesz na różnicowanie klienta z tym samym dostępem do danych przy użyciu różnych application_name, więc każdy klient będzie łączył się z bazą danych przy użyciu tej samej nazwy użytkownika.

Przykład:

używając innej nazwy użytkownika, ciąg połączenia z każdym klientem byłoby: --user user1, --user user2, itd.

Ale stosując różne application_name, ciąg połączenia z każdym klientem byłoby: --user user1 --application_name costumer1, --user user1 --aplication_name costumer2, itd.

application_nameJest rejestrowana w pg_stat_activityi mogą być również rejestrowane. Myślę, że łatwiej byłoby to wdrożyć. I application_namejest również zalogowany w wyzwalaczu kontroli, który chcesz zastosować. Więcej informacji tutaj .

Mam nadzieję, że to pomoże.


4
W jaki sposób administrowanie 50 000 użytkownikami bazy danych jest trudniejsze niż 50 000 użytkowników aplikacji?
Neil McGuigan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.