การบริการคลาวด์ในปัจจุบัน มีบริการหนึ่งคือ SaaS หรือ Software as a Service ซึ่งผู้ให้บริการ SaaS รายใหญ่ๆ ในการบริการให้กับลูกค้า หรือผู้เช่า โดยส่วนมากและให้ความสำตัญไปที่การใช้สถาปัตยกรรม Multi-tenancy การบริการนี้สามารถใช้ทรัพยากร(resources)ร่วมกัน ที่ยังคงมีการแยกความแตกต่างระหว่างผู้เช่า(tenant)แต่ละรายไว้
การแยกระหว่างผู้ใช้
การออกบบ multi-tenancy application จะต้องมีการแยกระหว่าง tenant เป็นสิ่งที่ขาดไม่ได้
Application แบบ multi-tenancy จะเป็น single instant (เป็น 1 instant application ที่ทำงานได้หลายๆ tenant) และส่งต่อไปยังฐานข้อมูล ระบบฐานข้อมูลจะแยกตามแต่ละ tenant ในการเข้าถึงการใช้งาน วิธีการแยกตามฐานข้อมูลสามารถทำได้หลายรูปแบบ เช่น
- การแยกเฉพาะ database ของผู้เช่า(tenant)แต่ละราย(database separation) คือสร้างฐานข้อมูลตามแต่ละ tenant
- ใช้ database เดียวแต่แยกด้วยการใช้ database schema(ใช้ table หรือ column มาเกี่ยวข้อง) เป็นการสร้างฐานข้อมูลเดียว แยกด้วยการกำหนด column
- ใช้แบบ database sharding - การแยกฐานข้อมูลเป็นส่วนๆ
แต่ละแบบจะมีวิธีการเข้าถึงและการเขียน(code) application ใช้งานแตกต่างกัน รวมถึงข้อดีและข้อเสีย
สถาปัตยกรรม
โครงสร้่างของ multi-tenancy architecture ลักษณะการออกแแบแสดงตามรูปข้างล่าง เป็นดังนี้
- Application - โปรแกรมใช้งาน ทำหน้าที่ติดต่อกับผู้ใช้ตามแต่ละ tenant และเชื่อมไปยังส่วนหลัง middle ware
การปรับหรือ customize ของแต่ละ tenant จะทำที่ชั้น application นี้ - Middleware - ทำหน้าที่เชื่อมกับ application และ mapping เข้ากับ database
- Database - ฐานข้อมูลของผู้ใช้งานตามแต่ละ tenant
- Virtual machine/container - สำหรับทำหน้าที่ให้โปรแกรมทำงานโดยใช้ resources จากส่วนกลาง ซึ่งสามารถเป็นได้ทั้ง virtual machine หรือ container(เข่น docker หรือ podman) ในหนึ่ง virtual machine หรือ container สามารถทำงานได้หลายๆ tenant ขึ้นอยู่กับ resources ที่ได้กำหนดไว้
- Common-resources(hardware, networking, etc) - resources ส่วนกลางที่ผู้ให้บริการ(service provider)จัดหาให้ และส่วน networking เชื่อมต่อไปยังปลายทางที่ต่างๆ
นอกจากนี้การออกแบบ multi-tenancy ยังสามารถสร้าง database กลางเพื่อใช้กับ tenant ต่างๆ ซึ่งเป็นข้อมูลที่ต้องการแบ่งปันการใช้ระหว่าง tenant(เป็นข้อมูลเปิด)
ประโยชน์
การใช้ multi-tenancy ได้ประโยชน์ดังนี้
- การใช้ resources ได้มีประสิทธิภาพ
- การ upgrade ทำได้ง่ายและรวดเร็ว
- การแก้ไขหรือเพิ่ม feature ทำครั้งเดียวได้ทุกๆ tenant
- การขยายทำได้ง่าย และอื่นๆ
สรุป
ในบทความนี้กล่าวถึงระบบโครงสร้างของ multi-tenancy และประโยชน์จากการใช้ โดยโปรแกรมคลินิก kksEHR เป็น Online Cloud-based Application ใช้สถาปัตยกรรมนี้ด้วยเทคโนโลยี Jakarta EE