เป็นไปได้ไหมที่จะมีผู้ใช้นับพันคนใน Postgres?


9

เรากำลังสร้าง SAAS ที่เราจะมีลูกค้ามากที่สุด 50,000 คน เรากำลังพิจารณาที่จะสร้างผู้ใช้ในฐานข้อมูล Postgres สำหรับลูกค้าแต่ละราย เราจะแมปผู้ใช้แต่ละรายที่ลงชื่อเข้าใช้บริการของเรากับผู้ใช้ในฐานข้อมูลเพื่อให้แน่ใจว่าพวกเขาสามารถเข้าถึงข้อมูลของตนเองได้เท่านั้น นอกจากนี้เรายังต้องการใช้แนวทางการตรวจสอบโดยตรงในฐานข้อมูลด้วยโซลูชั่นนี้ซึ่งใช้ทริกเกอร์ หากลูกค้าแต่ละรายมีผู้ใช้ฐานข้อมูลของตัวเองมันจะง่ายมากที่จะดูว่าใครทำอะไรแม้ว่าลูกค้าสองคนจะแบ่งปันข้อมูลเดียวกัน

เราจะประสบปัญหาที่ไม่คาดคิดหรือไม่เพราะเรามีผู้ใช้งาน 50,000 คนในฐานข้อมูลของเราหรือไม่? ประสิทธิภาพที่ชาญฉลาดหรือการบริหารที่ชาญฉลาด อาจรวมการเชื่อมต่ออาจจะยากขึ้น แต่ฉันไม่รู้จริงๆว่าเราต้องการหรือไม่


2
คุณจะไม่สามารถทำการเชื่อมต่อร่วมกันใด ๆ ได้หากคุณใช้ DB auth อยู่หรือไม่ เพื่อประสิทธิภาพปัญหาที่สำคัญคือจำนวนการเชื่อมต่อพร้อมกันและจำนวนทรัพยากรที่ใช้มากกว่าจำนวนผู้ใช้ในฐานข้อมูล
แจ็คบอกว่าลอง topanswers.xyz

2
@JackDouglas ใช่คุณสามารถใช้การรวมการเชื่อมต่อ เชื่อมต่อเป็น "commonUser" แล้วset role actualUser
Neil McGuigan

2
@ ไม่แน่ใจ แต่นั่นไม่ใช่ DB auth หากคุณกำลังตรวจสอบความถูกต้องโดยใช้รหัสผ่านของผู้ใช้ฐานข้อมูลคุณจะต้องใช้การรับรองความถูกต้องภายนอกบางอย่างในภายหลัง
แจ็คบอกว่าลอง topanswers.xyz

2
@JackDouglas คุณพูดถูกมันเป็น proxy auth ซึ่งต่างจาก db auth
Neil McGuigan

คำตอบจนถึงตอนนี้สมมติว่ามีผู้ใช้งานพร้อมกันจำนวนมากในกรณีนี้
แจ็คบอกว่าลอง topanswers.xyz

คำตอบ:


12

ใช่มันน่าจะดี คุณควรใช้การรวมการเชื่อมต่อเนื่องจาก pg ใช้จำนวนหน่วยความจำพอสมควรต่อการเชื่อมต่อ (ประมาณ 10MB AFAIK)

มากกว่า 500 การเชื่อมต่อพร้อมกันต่อกล่องจะเป็นปัญหาแม้ว่า (เช่นการสอบถามฐานข้อมูลในเวลาเดียวกันอย่างแน่นอน) ซีพียู / แกนเพิ่มเติมจะดีกว่า ใช้ SSD กับ RAID 10

แอปพลิเคชัน SaaS ของคุณควรเชื่อมต่อเป็นผู้ใช้เดียวจากนั้นset roleต่อกับผู้ใช้จริง สิ่งนี้ช่วยให้คุณใช้การรวมการเชื่อมต่อเนื่องจากสตริงการเชื่อมต่อจะเหมือนกัน แต่ใช้ผู้ใช้ที่แตกต่างกัน คุณควรreset roleเมื่อกลับมาเชื่อมต่อกับสระว่ายน้ำ

นี่ไม่ใช่การพิสูจน์ตัวจริงของฐานข้อมูล มันคือการรับรองความถูกต้องของพร็อกซี

คุณสามารถพิจารณากลุ่มที่แยกต่างหากต่อ บริษัท หรือต่อบทบาท

เพื่อให้ผู้ดูแลระบบง่ายขึ้นคุณสามารถกำหนดผู้ใช้เป็นกลุ่มและกำหนดสิทธิ์ผ่านกลุ่ม สิ่งนี้เรียกว่า RBAC

อัปเดต: ฉันสามารถสร้างผู้ใช้ 50,000 รายภายใน 2.4 วินาที PGAdmin ช้าลงอย่างเห็นได้ชัดเนื่องจากจำนวนผู้ใช้ อย่างไรก็ตามการเชื่อมต่อผ่าน JDBC นั้นเร็วเหมือนก่อนหน้านี้ ฉันไม่สามารถทิ้งผู้ใช้ได้ 50,000 คนในคราวเดียว แต่สามารถทำได้ครั้งละประมาณ 10,000 คน


ขอบคุณมากสำหรับการวิจัยของคุณ เป็นไปได้หรือไม่ที่จะทำงานใน PGAdmin เลย? มันเป็นปัญหาใหญ่กับการแสดงที่นั่นเหรอ?
David

@ David PGAdmin ไม่เป็นไรช้า psql ควรใช้ได้ อาจสามารถปรับแต่ง PGAdmin เพื่อเร่งความเร็วของสิ่งต่างๆ
Neil McGuigan

2

ประสิทธิภาพการทำงาน: การเชื่อมต่อพร้อมกันนับพันจะกินหน่วยความจำของคุณประมาณค่าสูงกว่า 1,000 การเชื่อมต่อพร้อมกันแนะนำให้ใช้การเชื่อมต่อร่วมกัน 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 เดซิเบลยากกว่าผู้ใช้แอป 50,000 รายอย่างไร
Neil McGuigan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.