Skip to main content

การแยกส่วนสำหรับระบบหลายผู้เช่า (Multi-Tenancy Isolation)

Ultimate Multisite: Multi-Tenancy 1.2.0 รองรับการแยกฐานข้อมูลและไฟล์ของแต่ละ subsites สำหรับลูกค้าที่เป็นอิสระ (sovereign tenants) ซึ่งช่วยให้ข้อมูลของแต่ละเทนเนนต์ถูกเก็บแยกออกจากกัน ในขณะที่ยังคงรักษาการจัดเตรียมเครือข่าย การเรียกเก็บเงิน และการบริหารจัดการในระดับเครือข่ายไว้

กลยุทธ์การแยกส่วน (Isolation strategy)

ให้ใช้การแยกส่วนแบบอิสระ (sovereign isolation) สำหรับลูกค้าที่ต้องการการแยกข้อมูลที่เข้มงวดกว่า ต้องการพื้นที่จัดเก็บไฟล์เฉพาะ หรือมีขอบเขตโฮสต์ที่แยกต่างหาก

แต่ละเทนเนนต์ที่เป็นอิสระควรมี:

  • ฐานข้อมูลสำหรับเทนเนนต์โดยเฉพาะ หรือกลยุทธ์คำนำหน้าฐานข้อมูล (database prefix strategy) ที่ได้รับการอนุมัติจากโฮสต์
  • รากของระบบไฟล์ (filesystem root) สำหรับเทนเนนต์โดยเฉพาะ
  • รายการลงทะเบียนเทนเนนต์ (tenant registry entry) ที่แมปไซต์เข้ากับฐานข้อมูล, พาธราก (root path), ชื่อโฮสต์ (hostname) และรูปแบบการแยกส่วน (isolation model)

และต้องมีผลการตรวจสอบการย้ายข้อมูล (migration verification result) ก่อนที่เทนเนนต์จะถือว่าพร้อมใช้งานจริง

การผูกโฮสต์ฐานข้อมูล (Database host binding)

เวอร์ชัน 1.2.0 เปลี่ยนพฤติกรรมการผูกโฮสต์บนเครื่องเดียวกัน (same-machine host binding) เป็นค่าเริ่มต้นสำหรับการติดตั้งแบบอิสระ (sovereign installs) ค่าที่อยู่บนเครื่องเดียวกัน เช่น localhost จะถูกปรับให้เป็นมาตรฐาน เพื่อให้ Bedrock, FrankenPHP และการติดตั้ง WordPress แบบ containerized สามารถกำหนดและตรวจสอบสิทธิ์เทียบกับสตริงโฮสต์ที่ MySQL มองเห็นได้จริง

เมื่อตั้งค่าเทนเนนต์ที่เป็นอิสระ:

  1. กำหนด host ฐานข้อมูลเป็นค่าที่ runtime ของเทนเนนต์ต้องการ
  2. ใช้ localhost สำหรับการติดตั้งแบบ socket ในเครื่อง เมื่อโฮสต์คาดหวังการเชื่อมต่อภายในเครื่อง (local connections)
  3. ใช้ 127.0.0.1 หรือชื่อโฮสต์บริการ (service hostname) เฉพาะเมื่อเซิร์ฟเวอร์ฐานข้อมูลอนุญาตสิทธิ์ให้กับโฮสต์นั้นเท่านั้น
  4. รันการตรวจสอบการย้ายข้อมูล (migration verification) หลังจากเปลี่ยนการผูกโฮสต์แล้ว

หากรายงานการตรวจสอบแสดงข้อผิดพลาดในการให้สิทธิ์ ให้เปรียบเทียบสิทธิ์ผู้ใช้ใน DB ของเทนเนนต์กับการผูกโฮสต์ที่ตั้งค่าไว้ ผู้ใช้ที่ได้รับสิทธิ์สำหรับ user@localhost จะแตกต่างจาก [email protected] หรือ user@%

รากของระบบไฟล์ (Filesystem root)

root ของผู้เช่าควรมีความเสถียรตลอดการเริ่มต้นใหม่และการติดตั้ง (restarts and deployments) ควรหลีกเลี่ยงการใช้พาธ mount ชั่วคราว สำหรับการติดตั้งแบบ Bedrock ให้ตรวจสอบว่า root ของผู้เช่าชี้ไปยัง web root ของ WordPress ที่คาดหวังโดย tenant bootstrap ไม่ใช่แค่ project root เท่านั้น

ลำดับการเตรียมระบบ (Provisioning order)

สำหรับผู้เช่าที่เป็น sovereign ใหม่ ให้ใช้ลำดับนี้:

  1. สร้างรายการใน tenant registry
  2. สร้างฐานข้อมูลและผู้ใช้ฐานข้อมูลของผู้เช่า
  3. Bootstrap schema ของผู้เช่า
  4. เตรียมผู้ใช้ของผู้เช่า
  5. กำหนดพาธ filesystem ของผู้เช่า
  6. รันการตรวจสอบการย้ายข้อมูล (migration verification)
  7. เปลี่ยนเส้นทาง (routing) หรือ DNS หลังจากผ่านการตรวจสอบ

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

กระบวนการจัดการลูกค้าสำหรับลูกค้า sovereign

Ultimate Multisite v2.13.0 จะเก็บการดำเนินการจัดการลูกค้าไว้ที่เว็บไซต์หลักเมื่อเปิดใช้งานโหมด sovereign แม้ว่าผู้เช่าจะยังสามารถทำงานเป็น WordPress install ที่แยกออกมาได้ แต่การดำเนินการที่เกี่ยวข้องกับลูกค้าซึ่งขึ้นอยู่กับการเรียกเก็บเงินผ่านเครือข่าย การเป็นสมาชิก หรือข้อมูลบัญชีร่วม ควรส่งลูกค้ากลับไปยังเว็บไซต์หลักแทนที่จะพยายามทำรายการให้เสร็จสิ้นภายใน runtime ของผู้เช่า

กระบวนการของเว็บไซต์หลักนี้ใช้กับ:

  • การชำระเงินและการเปลี่ยนแปลงแผน
  • ภาพรวมบัญชีและการดำเนินการโปรไฟล์ลูกค้า
  • การอัปเดตที่อยู่สำหรับเรียกเก็บเงินและหน้าจัดการการชำระเงิน
  • มุมมองใบแจ้งหนี้และประวัติการชำระเงิน
  • การดำเนินการจัดการเว็บไซต์ เช่น การเพิ่มหรือลบไซต์
  • การสลับเทมเพลต (Template switching)
  • การแมปโดเมนและการเปลี่ยนแปลง primary-domain

เมื่อลูกค้าเริ่มดำเนินการใดๆ จากเทนเนนต์ที่เป็นอิสระ (sovereign tenant) Ultimate Multisite จะสร้าง URL ของเว็บไซต์หลักที่เกี่ยวข้อง และเก็บเทนเนนต์ต้นทางไว้เป็นเป้าหมายที่จะกลับไป เมื่อทำได้อย่างปลอดภัย วิธีนี้ช่วยให้ลูกค้าสามารถดำเนินการตามขั้นตอนที่จัดการนั้นกับบันทึกของเครือข่ายได้ จากนั้นจึงกลับไปยังบริบทของเทนเนนต์โดยไม่ต้องซ้ำซ้อนสถานะการเรียกเก็บเงินหรือสมาชิกในฐานข้อมูลของเทนเนนต์ที่เป็นอิสระ

สำหรับผู้ดูแลระบบ กฎปฏิบัติในทางปฏิบัติคือ: ให้คงหน้าต่างๆ เช่น หน้าการเรียกเก็บเงิน (billing), บัญชี (account), การชำระเงิน (checkout), ใบแจ้งหนี้ (invoice), เทมเพลต (template) และการจัดการโดเมน (domain-management) ไว้บนเว็บไซต์หลักสำหรับเครือข่ายที่เป็นอิสระ แดชบอร์ดของเทนเนนต์สามารถลิงก์ไปยังหน้าเหล่านั้นได้ แต่เว็บไซต์หลักยังคงเป็นแหล่งข้อมูลที่ถูกต้องสำหรับการดำเนินการนั้น