สถาปัตยกรรมแบบผู้เช่าหลากหลาย Multi-tenancy Architecture

การบริการคลาวด์ในปัจจุบัน มีบริการหนึ่งคือ SaaS หรือ Software as a Service ซึ่งผู้ให้บริการ SaaS รายใหญ่ๆ ในการบริการให้กับลูกค้า หรือผู้เช่า โดยส่วนมากและให้ความสำตัญไปที่การใช้สถาปัตยกรรม Multi-tenancy การบริการนี้สามารถใช้ทรัพยากร(resources)ร่วมกัน ที่ยังคงมีการแยกความแตกต่างระหว่างผู้เช่า(tenant)แต่ละรายไว้

การแยกระหว่างผู้ใช้

การออกบบ multi-tenancy application จะต้องมีการแยกระหว่าง tenant เป็นสิ่งที่ขาดไม่ได้

Application แบบ multi-tenancy จะเป็น single instant (เป็น 1 instant application ที่ทำงานได้หลายๆ tenant) และส่งต่อไปยังฐานข้อมูล ระบบฐานข้อมูลจะแยกตามแต่ละ tenant ในการเข้าถึงการใช้งาน วิธีการแยกตามฐานข้อมูลสามารถทำได้หลายรูปแบบ เช่น

  1. การแยกเฉพาะ database ของผู้เช่า(tenant)แต่ละราย(database separation) คือสร้างฐานข้อมูลตามแต่ละ tenant
  2. ใช้ database เดียวแต่แยกด้วยการใช้ database schema(ใช้ table หรือ column มาเกี่ยวข้อง) เป็นการสร้างฐานข้อมูลเดียว แยกด้วยการกำหนด column
  3. ใช้แบบ database sharding - การแยกฐานข้อมูลเป็นส่วนๆ

แต่ละแบบจะมีวิธีการเข้าถึงและการเขียน(code) application ใช้งานแตกต่างกัน รวมถึงข้อดีและข้อเสีย

สถาปัตยกรรม

โครงสร้่างของ multi-tenancy architecture ลักษณะการออกแแบแสดงตามรูปข้างล่าง เป็นดังนี้

  1. Application - โปรแกรมใช้งาน ทำหน้าที่ติดต่อกับผู้ใช้ตามแต่ละ tenant และเชื่อมไปยังส่วนหลัง middle ware
    การปรับหรือ customize ของแต่ละ tenant จะทำที่ชั้น application นี้
  2. Middleware - ทำหน้าที่เชื่อมกับ application และ mapping เข้ากับ database
  3. Database - ฐานข้อมูลของผู้ใช้งานตามแต่ละ tenant
  4. Virtual machine/container - สำหรับทำหน้าที่ให้โปรแกรมทำงานโดยใช้ resources จากส่วนกลาง ซึ่งสามารถเป็นได้ทั้ง virtual machine หรือ container(เข่น docker หรือ podman) ในหนึ่ง virtual machine หรือ container สามารถทำงานได้หลายๆ tenant ขึ้นอยู่กับ resources ที่ได้กำหนดไว้
  5. Common-resources(hardware, networking, etc) - resources ส่วนกลางที่ผู้ให้บริการ(service provider)จัดหาให้ และส่วน networking เชื่อมต่อไปยังปลายทางที่ต่างๆ

นอกจากนี้การออกแบบ multi-tenancy ยังสามารถสร้าง database กลางเพื่อใช้กับ tenant ต่างๆ ซึ่งเป็นข้อมูลที่ต้องการแบ่งปันการใช้ระหว่าง tenant(เป็นข้อมูลเปิด)

multi-tenancy architecture, kksEHR

ประโยชน์

การใช้ multi-tenancy ได้ประโยชน์ดังนี้

  1. การใช้ resources ได้มีประสิทธิภาพ
  2. การ upgrade ทำได้ง่ายและรวดเร็ว
  3. การแก้ไขหรือเพิ่ม feature ทำครั้งเดียวได้ทุกๆ tenant
  4. การขยายทำได้ง่าย และอื่นๆ

สรุป

ในบทความนี้กล่าวถึงระบบโครงสร้างของ multi-tenancy และประโยชน์จากการใช้ โดยโปรแกรมคลินิก kksEHR เป็น Online Cloud-based Application ใช้สถาปัตยกรรมนี้ด้วยเทคโนโลยี Jakarta EE