Postgres'de binlerce kullanıcı olması mümkün müdür?


9

En fazla 50.000 müşterimiz olacak SAAS yaratıyoruz. Her müşteri için Postgres veritabanında bir kullanıcı oluşturmayı düşünüyoruz. Hizmetimizde oturum açan her kullanıcıyı, yalnızca kendi verilerine erişebildiklerinden emin olmak için veritabanındaki bir kullanıcıyla eşleştireceğiz. Tetikleyicileri kullanan bu çözümlerle de doğrudan veritabanında bir denetim izi uygulamak istiyoruz . Her müşterinin kendi veritabanı kullanıcısı varsa, iki müşteri aynı verileri paylaşsa bile kimin ne yaptığını görmek çok kolay olurdu.

Veritabanımızda 50.000 kullanıcı olduğu için beklenmedik sorunlarla karşılaşacak mıyız? Performans açısından veya yönetim açısından. Belki bağlantı havuzu oluşturmak daha zor olurdu, ama gerçekten ihtiyacımız olup olmadığını bilmiyorum.


2
DB yetkilendirmesi kullanıyorsanız herhangi bir bağlantı havuzlaması yapamazsınız? Performans için önemli olan, eşzamanlı bağlantı sayısı ve DB'deki kullanıcı sayısı yerine ne kadar kaynak kullandıklarıdır.
Jack diyor ki topanswers.xyz

2
@JackDouglas Evet, bağlantı havuzlamayı kullanabilirsiniz. "CommonUser" olarak bağlanınset role actualUser
Neil McGuigan

2
@ Elbette, ama bu DB yetkisi değil. Veritabanı kullanıcısının parolasını kullanarak kimlik doğrulaması yapıyorsanız, postgres'te bir çeşit harici kimlik doğrulaması kullanmanız gerekir.
Jack diyor ki topanswers.xyz

2
@JackDouglas haklısın, db yetkisinin aksine proxy yetkilendirmesi.
Neil McGuigan

Şimdiye kadar cevaplar çok sayıda eşzamanlı kullanıcı olduğunu varsayıyor, durum böyle olacak mı?
Jack diyor ki topanswers.xyz

Yanıtlar:


12

Evet, iyi olmalı. Bağlantı bağlantı havuzu kullanmalısınız, çünkü pg bağlantı başına oldukça fazla bellek kullanır (yaklaşık 10 MB AFAIK).

Kutu başına 500'den fazla eşzamanlı bağlantı bir problem olacaktır (aynı anda veritabanını aktif olarak sorgulamak gibi). Daha fazla cpus / çekirdek daha iyidir. RAID 10 ile SSD'ler kullanın.

SaaS uygulamanız önce bir kullanıcı, ardından set rolegerçek kullanıcı olarak bağlanmalıdır. Bu, bağlantı dizesini aynı olacağından, ancak farklı kullanıcılar kullandığından bağlantı havuzunu kullanmanızı sağlar. reset roleHavuza bağlantıyı döndürürken yapmanız gerekir .

Bu gerçekten veritabanı kimlik doğrulaması değildir. Proxy kimlik doğrulamasıdır (Taklitleme olarak da bilinir).

Ayrıca şirket veya rol başına ayrı havuzları da düşünebilirsiniz.

Yöneticiyi kolaylaştırmak için kullanıcıları gruplara ayırabilir ve gruplar aracılığıyla izinler ayarlayabilirsiniz. Buna RBAC denir.

Güncelleme: 2.4 saniyede 50.000 kullanıcı oluşturabildim. PGAdmin, kullanıcı sayısı nedeniyle belirgin şekilde daha yavaştır. Ancak JDBC ile bağlanmak eskisi kadar hızlı. Bir seferde 50.000 kullanıcıyı bırakamadım, ancak bir kerede yaklaşık 10.000 kullanıcı yapabilirim.


Araştırmanız için çok teşekkür ederim. PGAdmin'de çalışmak mümkün mü? Buradaki performansla ilgili büyük bir sorun muydu?
David

@David PGAdmin iyiydi, sadece yavaş. psql iyi olmalı. İşleri hızlandırmak için PGAdmin'i değiştirebilir.
Neil McGuigan

2

Performans: binlerce eşzamanlı bağlantı yemek yiyecektir Hafızanız, yaklaşık 1000 eşzamanlı bağlantıdan fazla değerde bağlantı havuzu kullanmanız önerilir, pgbouncer skype tarafından geliştirilen iyi bir bağlantıdır.

Yönetme: 50.000 kullanıcıyı yönetmek büyük bir iş IMO'su olacaktır. Müşteriyi farklı veri kullanarak aynı veri erişimiyle ayırt application_nameetmeye ne dersiniz , böylece her müşteri aynı kullanıcı adını kullanarak veritabanına bağlanacaktır.

Misal :

Farklı kullanıcı adı kullanarak, her müşterinin bağlantı dizesi olacaktır: --user user1, --user user2vb

Ancak farklı kullanarak application_name, her müşterinin bağlantı dizesi olacaktır: --user user1 --application_name costumer1, --user user1 --aplication_name costumer2vb

application_nameKaydedilir pg_stat_activityve ayrıca açmış olabilir. Bunun uygulanması daha kolay olacağını düşünüyorum. Ve application_nameuygulamak istediğiniz denetim tetikleyicisine de kaydedilir. Daha fazla ayrıntı burada .

Umarım yardımcı olur.


4
50.000 db kullanıcısını yönetmek 50.000 uygulama kullanıcısından nasıl daha zor?
Neil McGuigan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.