การจัดการจำนวนผู้เช่าที่เพิ่มขึ้นในสถาปัตยกรรมฐานข้อมูลผู้เช่าหลายคน


26

การจัดการกับจำนวนลูกค้า (ผู้เช่า) ในเซิร์ฟเวอร์ทั่วไปที่มีฐานข้อมูลแยกกันสำหรับอินสแตนซ์ของผู้เช่าแต่ละรายของแอปพลิเคชันนั้นค่อนข้างตรงไปตรงมาและโดยปกติแล้วเป็นวิธีที่ถูกต้องในการทำเช่นนี้ ขณะนี้ฉันกำลังดูสถาปัตยกรรมสำหรับแอปพลิเคชันที่ผู้เช่าแต่ละรายมีอินสแตนซ์ฐานข้อมูลของตนเอง

อย่างไรก็ตามปัญหาคือแอปพลิเคชันนี้จะมีผู้เช่าจำนวนมาก (5,000-10,000) ที่มีผู้ใช้จำนวนมากอาจจะ 2,000 สำหรับผู้เช่ารายเดียว เราจะต้องสนับสนุนการเติบโตของระบบโดยผู้เช่าหลายรายทุกสัปดาห์

นอกจากนี้ผู้เช่าทั้งหมดและผู้ใช้ของพวกเขาจะถูกนำเสนอด้วยกระบวนการเข้าสู่ระบบทั่วไป (เช่นผู้เช่าแต่ละคนไม่สามารถมี URL ของตัวเอง) ในการทำสิ่งนี้ฉันต้องการกระบวนการล็อกอินแบบรวมศูนย์และวิธีการในการเพิ่มฐานข้อมูลลงในระบบและลงทะเบียนผู้ใช้แบบไดนามิก

  • กระบวนการลงทะเบียนและการสร้างฐานข้อมูลจะเป็นไปโดยอัตโนมัติอย่างมีประสิทธิภาพได้อย่างไร

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

  • ฉันจะจัดการการพิสูจน์ตัวตนจากส่วนกลางในวิธีที่ข้อมูลรับรองผู้ใช้จะเชื่อมโยงกับฐานข้อมูลของผู้เช่าโดยเฉพาะได้อย่างไร แต่ผู้ใช้สามารถเข้าสู่ระบบผ่านหน้าทั่วไปได้ (เช่นทั้งหมดผ่าน URL การเข้าสู่ระบบเดียวกัน ) ผู้เช่าจะต้องสามารถเข้าสู่ระบบและการอนุญาตของตัวเอง แต่ระบบการเข้าสู่ระบบกลางจะต้องตระหนักถึงสิ่งเหล่านี้ ใครสามารถแนะนำวิธีการทำเช่นนี้?

  • หากฉันต้องการ 'ลดขนาด' ด้วยการเพิ่มเซิร์ฟเวอร์ฐานข้อมูลหลาย ๆ คนใครสามารถแนะนำปัญหาที่ฉันอาจต้องจัดการกับการจัดการข้อมูลประจำตัวผู้ใช้ข้ามเซิร์ฟเวอร์ (การรับบทบาท ฯลฯ ) และวิธีการบางอย่างเพื่อบรรเทาปัญหาเหล่านั้น


1
ฉันไม่ได้จัดการกับสถานการณ์เช่นนี้ แต่ปรีชาญาณของฉันคือการจัดการการเปิดตัวของผู้เช่าโดยการกำหนดค่าเซิร์ฟเวอร์ที่มีฐานข้อมูลผู้เช่าจำนวนมากอย่างที่คุณคิดว่าพวกเขาสามารถจัดการได้จากนั้นกำหนดฐานข้อมูลผู้เช่าที่สร้างไว้ล่วงหน้า ลงชื่อ. วิธีนี้คุณไม่ต้องกังวลเกี่ยวกับการช่วงชิงทรัพยากรในขณะที่ปรับใช้ฐานข้อมูลผู้เช่าอย่างน้อย
Joel Brown

1
แน่ใจหรือไม่ว่าคุณจะอยู่ใกล้ผู้เช่า 5,000-10,000 คน และผู้เช่าทั้งหมดของคุณจะอยู่ในช่วง 2,000 ผู้ใช้หรือไม่ ในระบบของฉันฉันคิดว่าจำนวนผู้ใช้แอปพลิเคชันของเราที่ใหญ่ที่สุดสำหรับผู้เช่ารายเดียวคือประมาณ 100 และในจำนวนนั้นมีเพียง 20 คนหรือมากกว่านั้นที่มีการใช้งานอย่างต่อเนื่อง ฉันสามารถถามได้ว่าอุตสาหกรรม / แอปพลิเคชันคืออะไร
Aaron Bertrand

@AaronBertrand เป็นระบบจัดการเรียนรู้ที่ให้บริการฟรีและจ่ายบางส่วน
coddey

คำตอบ:


25

ในตอนล่าง (ผู้เช่า 500 คน / ผู้ใช้ 10,000 คน) นี่คือสิ่งที่ฉันทำ ก่อนอื่นคุณมีฐานข้อมูล "ควบคุม" ที่เป็นส่วนกลางส่วนกลางและมีข้อมูลทั้งหมดเกี่ยวกับผู้เช่าและผู้ใช้ (ฉันไม่คิดว่าคุณต้องการจัดการสิ่งเหล่านี้ในการเข้าสู่ระบบรับรองความถูกต้องของ SQL) ลองนึกภาพฐานข้อมูลที่เรียกว่า "การควบคุม" ด้วยตารางต่อไปนี้:

CREATE TABLE dbo.Instances
(
  InstanceID INT PRIMARY KEY,
  Connection VARCHAR(255)
  --, ...
);

INSERT dbo.Instances SELECT 1, 'PROD1\Instance1';
INSERT dbo.Instances SELECT 1, 'PROD2\Instance1';
-- ...

CREATE TABLE dbo.Tenants
(
  TenantID INT PRIMARY KEY,
  Name NVARCHAR(255) NOT NULL UNIQUE,
  InstanceID INT -- Foreign key tells which instance this tenant's DB is on
  --, ...
);

INSERT dbo.Tenants SELECT 1, 'MyTenant', 1;
-- ...

CREATE TABLE dbo.Users
(
  UserID INT PRIMARY KEY,
  Username VARCHAR(320) NOT NULL UNIQUE,
  PasswordHash VARBINARY(64), -- because you never store plain text, right?
  TenantID INT -- foreign key
  --, ...
);

INSERT dbo.Users SELECT 1, 'foo@bar.com', 0x43..., 1;

ในกรณีของเราเมื่อเราเพิ่มผู้เช่าใหม่เราจะสร้างฐานข้อมูลแบบไดนามิก แต่ไม่ใช่เมื่อผู้ใช้ผู้ดูแลระบบคลิกตกลงใน UI ... เรามีงานพื้นหลังที่ดึงฐานข้อมูลใหม่ออกจากคิวทุก ๆ 5 นาทีตั้งค่าแบบจำลองเป็น single_user แล้วสร้างแต่ละฐานข้อมูลใหม่ตามลำดับ เราทำสิ่งนี้เพื่อ (ก) ป้องกันผู้ใช้ที่เป็นผู้ดูแลจากการรอการสร้างฐานข้อมูลและ (b) เพื่อหลีกเลี่ยงผู้ใช้ที่ดูแลระบบสองคนที่พยายามสร้างฐานข้อมูลในเวลาเดียวกันหรือมิฉะนั้นการปฏิเสธความสามารถในการล็อคแบบจำลอง )

ฐานข้อมูลถูกสร้างขึ้นด้วยรูปแบบชื่อTenant000000xxที่เป็นตัวแทนxx Tenants.TenantIDงานนี้ทำให้การบำรุงรักษาค่อนข้างง่ายแทนที่จะมีทุกชนิดของฐานข้อมูลชื่อBurgerKing, McDonalds, KFCฯลฯ ไม่ว่าเราอยู่ในอาหารอย่างรวดเร็วเพียงแค่ใช้ที่เป็นตัวอย่าง

เหตุผลที่เราไม่ได้จัดสรรฐานข้อมูลนับพันไว้ล่วงหน้าเนื่องจากความคิดเห็นที่แนะนำคือผู้ใช้ผู้ดูแลระบบของเรามักจะมีความคิดว่าผู้เช่าจะมีขนาดใหญ่ขึ้นไม่ว่าพวกเขาจะมีลำดับความสำคัญสูง ฯลฯ ดังนั้นพวกเขาจึงมีตัวเลือกพื้นฐานใน UI จะกำหนดขนาดเริ่มต้นและการตั้งค่า autogrowth ซึ่งระบบย่อยของดิสก์ข้อมูล / ล็อกไฟล์ของพวกเขาจะไปที่การตั้งค่าการกู้คืนของพวกเขากำหนดการสำรองข้อมูลเพื่อบานพับออกและแม้แต่ฉลาดเกี่ยวกับอินสแตนซ์ที่จะปรับใช้ฐานข้อมูล แม้ว่าผู้ดูแลระบบของเราสามารถแทนที่สิ่งนี้ได้) เมื่อสร้างฐานข้อมูลแล้วตารางผู้เช่าจะได้รับการอัปเดตด้วยอินสแตนซ์ที่เลือกผู้ใช้ที่เป็นผู้ดูแลระบบจะถูกสร้างขึ้นสำหรับผู้เช่าและผู้ดูแลระบบของเราจะส่งข้อมูลประจำตัวเพื่อส่งผ่านไปยังผู้เช่ารายใหม่

หากคุณกำลังใช้การเข้าสู่จุดเดียวมันเป็นไปไม่ได้ที่จะอนุญาตให้ผู้เช่าหลายคนมีผู้ใช้ที่มีชื่อผู้ใช้เดียวกัน เราเลือกที่จะใช้ที่อยู่อีเมลซึ่งหากผู้ใช้ทุกคนทำงานให้กับ บริษัท และใช้ที่อยู่อีเมล บริษัท ของพวกเขาควรจะถูกต้อง แม้ว่าวิธีการแก้ปัญหาของเราจะซับซ้อนกว่าด้วยเหตุผลสองประการ:

  1. เรามีที่ปรึกษาที่ทำงานให้กับลูกค้าของเรามากกว่าหนึ่งคนและต้องการการเข้าถึงหลายคน
  2. เรามีผู้เช่าที่ตัวเองประกอบไปด้วยผู้เช่าหลายคน

ดังนั้นเราจึงลงเอยด้วยTenantUsersตารางที่อนุญาตให้ผู้ใช้หนึ่งคนเชื่อมโยงกับผู้เช่าหลายคน

เริ่มแรกเมื่อผู้ใช้ลงชื่อเข้าใช้แอปจะรู้สตริงการเชื่อมต่อสำหรับฐานข้อมูลการควบคุมเท่านั้น เมื่อล็อกอินสำเร็จจะสามารถสร้างสตริงการเชื่อมต่อตามข้อมูลที่พบ เช่น

SELECT i.Connection
  FROM dbo.Instances AS i
  INNER JOIN dbo.Tenants AS t
  ON i.InstanceID = t.InstanceID
  INNER JOIN dbo.TenantUsers AS u
  ON i.TenantID = u.TenantID
  WHERE u.UserID = @UserID;

ตอนนี้แอปสามารถเชื่อมต่อกับฐานข้อมูลของผู้ใช้ (ผู้ใช้แต่ละคนมีผู้เช่าเริ่มต้น ) หรือผู้ใช้สามารถเลือกจากผู้เช่าใด ๆ ที่พวกเขาสามารถเข้าถึง จากนั้นแอปจะเรียกค้นสตริงการเชื่อมต่อใหม่และเปลี่ยนเส้นทางไปยังหน้าแรกสำหรับผู้เช่ารายนั้น

หากคุณเข้าสู่พื้นที่ผู้ใช้ 10 มม. ที่คุณเสนอคุณจะต้องได้สิ่งนี้เพื่อความสมดุลที่ดีขึ้น คุณอาจต้องการรวมแอปพลิเคชันเพื่อให้มีจุดเชื่อมต่อที่แตกต่างกันไปยังฐานข้อมูลการควบคุมที่แตกต่าง หากคุณให้โดเมนย่อยแก่ผู้เช่าแต่ละคน (เช่น TenantName.YourApplicationDomain.com) จากนั้นคุณสามารถทำสิ่งนี้เบื้องหลังกับ DNS / การกำหนดเส้นทางโดยไม่รบกวนพวกเขาเมื่อคุณต้องการขยายเพิ่มเติม

มีอะไรอีกมากมายในนี้ - เช่น @Darin ฉันแค่เกาที่นี่เท่านั้น แจ้งให้เราทราบหากคุณต้องการคำปรึกษาฟรี :-)


ขอบคุณที่แบ่งปันประสบการณ์ของคุณให้ฉันรู้แจ้งดูเพิ่มเติมเกี่ยวกับมัน แต่คุณเขียนแล้วไม่ใช่ฟรี :(
coddey

1
ประเด็นของฉันคือฉันมีเวลามากพอที่จะจัดสรรให้คำแนะนำฟรี :-)
Aaron Bertrand

+1 - แนวทางเดียวกับที่ฉันเคยใช้มาก่อน ~ จำนวนผู้เช่าเท่ากันก็ทำงานได้ดีจริงๆ
AdaTheDev

วิธีจัดการความสัมพันธ์ระหว่างฐานข้อมูลหลักและฐานข้อมูลผู้เช่า (โดยไม่ต้องใช้ทริกเกอร์ ฯลฯ )
Jitendra Pancholi

@jitendra มีตัวเลือกไม่มาก - คุณมีข้อมูลจำนวนเท่าใดในฐานข้อมูลผู้เช่าที่จำเป็นต้องเกี่ยวข้องกับข้อมูลในฐานข้อมูลหลัก ฉันเองก็ไม่แน่ใจเหมือนกันว่าฉันเข้าใจความกลัวที่เป็นที่นิยมของทริกเกอร์ - ทริกเกอร์ที่เขียนอย่างถูกต้องไม่มีอะไรที่จะต้องกลัว ...
Aaron Bertrand

10

คุณมีโครงการที่น่าสนใจ ฉันไม่เคยเห็นใครพยายามใช้สิ่งที่มีขนาดใหญ่อย่างน้อยใน SQL Server ยิ่งฉันอ่านโพสต์ของคุณยิ่งฉันมีคำถามมากขึ้น ...

โครงสร้างพื้นฐานของสถานการณ์กรณีที่เลวร้ายที่สุดที่ชาญฉลาด (ซึ่งจริง ๆ แล้วเป็นสถานการณ์สมมติที่ดีที่สุดธุรกิจที่ฉลาด) คุณต้องใช้ฐานข้อมูล 10K คูณ 2k ผู้ใช้ นั่นคือ 20,000,000 ผู้ใช้ คุณจะไม่ประสบความสำเร็จในการพยายามจัดการการเข้าสู่ระบบ SQL Server 20 M IMO แค่จัดการกับการย้ายจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์ระวังการชนกันของ ID และรหัสที่ไม่ตรงกันรวมทั้งฉันไม่แน่ใจว่า SQL Server จะทำงานกับแถว 20 M ใน sys.server_principals ได้อย่างไร นอกจากนี้แอปพลิเคชันเว็บของคุณอาจต้องการเชื่อมต่อกับผู้ใช้เพียงรายเดียวหรือมีจำนวนน้อยมาก IIS ไม่สามารถเชื่อมต่อพูลได้เว้นแต่ว่าสตริง DSN จะเหมือนกัน หนึ่งในคุณสมบัติของสตริง DSN คือชื่อผู้ใช้ ผู้ใช้ที่แตกต่างกันหมายถึงไม่มีการรวมกำไร

คุณจะต้องม้วนโครงร่างข้อมูลรับรองผู้ใช้ของคุณเอง มันจะต้องสามารถเข้าใจได้ว่าผู้เช่าเป็นผู้ใช้อะไรจากนั้นเว็บโค้ดของคุณจะต้องเลือกฐานข้อมูลที่เหมาะสม ข้อมูลเมตาของผู้ใช้นั้นสำคัญมากจะต้องถูกเก็บไว้ที่ไหนสักแห่งมันจะต้องมีการรวมกลุ่มหรือทำมิเรอร์มันจะต้องรวดเร็วและจะต้องได้รับการปกป้องอย่างดี (จากมุมมองด้านความปลอดภัย IOW, เข้ารหัสมัน.) สมมติว่า SQL เป็นความคิดที่ดีที่นี่ฉันจะเก็บฐานข้อมูลนี้จากอินสแตนซ์ที่ผู้เช่าเซิร์ฟเวอร์ สิ่งนี้ช่วยได้จากมุมมองด้านความปลอดภัยและจากมุมมองโหลดแม้ว่าฉันจะเดาว่าเมื่อผู้ใช้ผ่านการตรวจสอบความถูกต้องและเว็บแอปถูกนำไปยังฐานข้อมูลที่ถูกต้องในอินสแตนซ์อื่น ผู้ใช้งาน

คำถามด่วน: ผู้ใช้สองคนที่แตกต่างกันซึ่งเป็นของผู้เช่าที่แตกต่างกันสองคนควรได้รับอนุญาตให้มีชื่อผู้ใช้เดียวกัน

อีกคำถามที่รวดเร็ว: ถ้าฉันบอกคุณว่าฉันทำงานให้กับ FuBar, Inc. คุณจะรู้ได้อย่างไร? FuBar จะให้รายชื่อผู้ใช้แก่คุณหรือไม่และคุณจะให้รายชื่อผู้ใช้กลับมาหรือพวกเขาจะจัดเตรียมตนเองหรือไม่

คุณจะต้องไปหลายตัวอย่าง หากแม้แต่เศษส่วนของผู้ใช้เหล่านั้นตัดสินใจที่จะตีแอปพลิเคชันในครั้งเดียวอินสแตนซ์เดียวจะละลาย ไม่มีเธรดผู้ทำงานเพียงพอที่จะเรียกใช้การร้องขอเหล่านั้นทั้งหมดในครั้งเดียว หากมีผู้ใช้เพียง 1,000 รายที่เข้าใช้อินสแตนซ์ของคุณในเวลาเดียวกันอาจเป็นเพราะเธรดผู้ปฏิบัติงานหมดและคำขอจะเริ่มซ้อนและรอ ฉันเคยเห็นสิ่งนี้เกิดขึ้น; อาการใกล้เคียงคือการเชื่อมต่อใหม่จะไม่สามารถเข้าสู่อินสแตนซ์ได้เนื่องจากไม่มีเธรดผู้ปฏิบัติงานที่พร้อมให้บริการ หากนี่เป็นพฤติกรรมที่สั้นมากคุณอาจมีชีวิตรอด ถ้าไม่เช่นนั้นแอพของคุณจะยุ่งเหยิงผู้ใช้จะได้รับข้อผิดพลาด

แม้ว่าคุณจะไม่ได้มีผู้เช่าจำนวนมากที่จะเริ่มต้นคุณควรเริ่มคิดถึงอนาคตและระบบอัตโนมัติเพราะเมื่อคุณเห็นว่าเซิร์ฟเวอร์ของคุณจมลงและมีผู้เช่าใหม่ 10 รายที่จะนำออนไลน์มันก็สายเกินไปแล้วและบริการของคุณ (และ ลูกค้าของคุณและลูกค้าที่กำลังจะเป็นลูกค้าเก่า) จะประสบจนกว่าคุณจะเขียนวิธีการแก้ปัญหา

คุณจะต้องมีวิธีในการย้ายฐานข้อมูลจากเซิร์ฟเวอร์ที่โอเวอร์โหลดไปยังเซิร์ฟเวอร์ที่โหลด (หรือใหม่) เบา ๆ ไม่ว่าคุณจะได้หน้าต่างการหยุดทำงานหรือไม่นั้นจะขึ้นอยู่กับ SLA ของคุณ

คุณให้แอปพลิเคชันเฉพาะเช่น SalesForce หรือฐานข้อมูลเหล่านี้เป็นเพียงตู้คอนเทนเนอร์สำหรับสิ่งที่ผู้เช่าของคุณต้องการใส่หรือไม่

ฐานข้อมูลมีขนาดใหญ่แค่ไหน หากไฟล์ไม่ใหญ่มากคุณสามารถกู้คืนจากไฟล์สำรองข้อมูลที่มีแม่แบบ (นี่ไม่แตกต่างไปจากที่ฐานข้อมูลโมเดลทำ แต่ฉันไม่เคยเห็นใครใช้โมเดลในทางที่ดีนับตั้งแต่วันที่ฉันใช้ SQL 6.5) เมื่อเทมเพลตได้รับการกู้คืนเป็นชื่อฐานข้อมูลใหม่คุณสามารถ จากนั้นปรับแต่งฐานข้อมูลใหม่ตามความจำเป็นสำหรับผู้เช่าเฉพาะ คุณไม่สามารถปรับแต่งได้ก่อนที่คุณจะมีผู้เช่าอย่างชัดเจน หากฐานข้อมูลมีขนาดใหญ่คุณอาจทำตามขั้นตอนพื้นฐานเดียวกันยกเว้นคุณทำการคืนค่าก่อนเวลาก่อนที่ผู้เช่ารายใหม่จะต้องการพื้นที่ คุณอาจเก็บฐานข้อมูลเหล่านี้ไว้สองสามรอบต่อหนึ่งครั้ง หากคุณเก็บไว้มากเกินไปสิ่งนี้จะบังคับให้คุณซื้อฮาร์ดแวร์และ / หรือพื้นที่เก็บข้อมูลเกินกว่าที่คุณต้องการ

หากเป็นแอพของคุณเองคุณจะจัดการกับการอัพเดตสกีมาได้อย่างไร คุณจะรักษาเวอร์ชันของฐานข้อมูลให้ตรงกับรุ่นของรหัสได้อย่างไรหากคุณใช้ URL เดียวที่เข้าสู่แอปพลิเคชันเว็บของคุณ

คุณจะตรวจจับและทำลายฐานข้อมูลที่ไม่ได้ใช้งานอีกต่อไปได้อย่างไร คุณรอจนกว่ากลุ่ม A / R ของคุณจะบอกว่ามีคนไม่ได้จ่ายบิลเป็นเวลาสามเดือนหรือไม่?

หากผู้เช่ามีการจัดการสิทธิ์นั่นหมายความว่าพวกเขามีความเข้าใจในการทำงานภายในของแอพหรือว่าแอพของคุณมีโครงสร้างบทบาทที่ง่ายมาก การใช้บางสิ่งเช่นบล็อกเกอร์เป็นตัวอย่างคร่าวๆผู้ใช้สามารถ (อ่านโพสต์), (อ่านโพสต์และแสดงความคิดเห็น), (... และสร้างโพสต์), (... และแก้ไขโพสต์ของผู้อื่น), ... และสามารถรีเซ็ตได้ รหัสผ่านผู้ใช้รายอื่น) หรือ (... และอะไรก็ได้) การมีบทบาทสำหรับชุดของสิทธิ์ที่แตกต่างกันเหล่านั้นและการกำหนดผู้ใช้ให้กับบทบาทหนึ่งหรืออีกบทบาทหนึ่งนั้นไม่ควรยากเกินไป แต่คุณไม่ต้องการให้แอปของคุณใช้คำสั่ง 'GRANT' ระวังบทบาทที่มีลำดับชั้นและขึ้นอยู่กับการสืบทอดมันอาจทำให้สับสนได้ หากคุณกำลังโปรโมตหรือลดระดับผู้ใช้ฉันจะบอกว่าดึงพวกเขาออกจากบทบาทที่เกี่ยวข้องทั้งหมดแล้วเพิ่มพวกเขากลับไปยังบทบาทที่พวกเขาต้องการ โอ้

ฉันคิดว่าฉันมีรอยขีดข่วนที่นี่และโพสต์นี้ยาวเกินไป สิ่งที่คุณต้องการจริงๆคือหนังสือหรืออย่างน้อยก็กระดาษขาวจากคนที่ทำสิ่งนี้ พวกเขาส่วนใหญ่จะไม่พูดถ้าพวกเขาเห็นว่าเป็นข้อได้เปรียบในการแข่งขัน


ขอบคุณสำหรับความคิดเห็นแนะนำโครงการเป็นที่น่าสนใจ เนื่องจากข้อ จำกัด ของคำฉัน vl ให้ความคิดเห็นที่แม่นยำมาก เป็นระบบจัดการการเรียนรู้ที่ผู้เช่าแต่ละคนจะมีประมาณ 120-150 โต๊ะผู้ใช้จะไม่มีชื่อผู้ใช้เดียวกันโดยไม่คำนึงถึงผู้เช่า เพื่อลดความซับซ้อนของการทำแผนที่ DNS CNAME ตัวอย่างเช่น tenant1.abc.com ตอนนี้จุดจุดเดือดคือ - ออกแบบในลักษณะที่ถูกต้องดังนั้นมันจะตอบสนองข้อเสนอแนะทั้งหมดที่คุณแบ่งปันและฉันกังวล การได้รับกระดาษแข็งสีขาวจะได้รับการยกย่อง แต่ก็ไม่ใช่เรื่องง่ายบางทีการป้อนข้อมูลมากขึ้นถ้าคุณทำได้ !!!!
coddey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.