ฉันกำลังพยายามสร้างโซลูชัน SaaS ทางเว็บและฉันเข้าสู่ถนนที่ฉันไม่แน่ใจว่าจะใช้หลายผู้เช่าหรืออินสแตนซ์หลาย ฉันจะพยายามอธิบายสิ่งที่ฉันพยายามที่จะบรรลุและแต่ละวิธีข้อดีและข้อเสีย (ความเห็นของฉันตามสิ่งที่ฉันอ่าน) โปรดระบุคำแนะนำของคุณในกรณีที่ฉันพลาดอะไรในแนวทางเดียว
แอปพลิเคชันที่ฉันพยายามสร้างคือดังที่ฉันกล่าวถึงโซลูชัน SaaS ที่ บริษัท สามารถสร้างบัญชีของตนเองและแต่ละบัญชี / บริษัท มีผู้ใช้ลูกค้าผลิตภัณฑ์บริการ ... ฯลฯ ผู้ใช้แต่ละคน; ใครเป็นพนักงาน บริษัท ที่เกี่ยวข้องกับหนึ่งบัญชี / บริษัท จะสามารถเข้าถึงลูกค้า บริษัท ผลิตภัณฑ์และบริการของตนเท่านั้น บริษัท ต่างๆอาจมีลูกค้าผลิตภัณฑ์และบริการไม่ จำกัด จำนวนดังนั้นแต่ละ บริษัท ควรมีศูนย์ข้อมูลของตัวเอง
เพื่อที่ฉันตัดสินใจที่จะสร้างฐานข้อมูลที่ใช้ร่วมกัน (บันทึกข้อมูลประจำตัวของผู้ใช้ทั้งหมดเพื่อวัตถุประสงค์ในการเข้าสู่ระบบ) และหลายสคีมาฐานข้อมูลที่ใช้ร่วมกัน (ฐานข้อมูลต่อบัญชี / บริษัท ) โดยทั่วไปมีหลายครอบครอง
จากนั้นมีคนแนะนำให้ใช้Multi Instanceแทนซึ่งแต่ละ บริษัท จะมีอินสแตนซ์ของแอปพลิเคชันของตัวเอง (เช่นรหัสห้องสมุดฐานข้อมูลกรอบงาน ... ฯลฯ ) แยกออกจาก บริษัท อื่นโดยสิ้นเชิง ฟังดูดีกว่าเพราะฉันไม่ต้องดูแลเลเยอร์พิเศษที่ฉันต้องตรวจสอบให้แน่ใจว่าผู้ใช้ของผู้เช่าแต่ละรายสามารถเข้าถึงข้อมูลของ บริษัท ได้เท่านั้น ฉันคิดว่ามันดีที่จะพูดถึงว่าฉันขึ้นอยู่กับDockerเพื่อให้บรรลุวิธีการนี้ (ฉันไม่เคยใช้มาก่อน) แต่ฉันคิดว่ามันไม่มีคุณสมบัติ (เพิ่มเติมในภายหลัง) ฉันจะต้องใช้ในอนาคต (อย่างน้อยฉันก็ไม่ได้ทำ หาพวกมันด้วยการค้นหาเล็กน้อย)
อย่างไรก็ตามแต่ละวิธีมีข้อดีและข้อเสียดังนั้นฉันจึงไม่สามารถตัดสินใจได้ว่าจะใช้วิธีใด นี่คือรายการ แต่เปลือยกับฉันเมื่อฉันขาดความรู้ในพวกเขาทั้งสองจึงอาจมีบางสิ่งที่ฉันไม่ทราบหรือวิธีแก้ปัญหาที่ฉันไม่พบในเว็บ: [แต่ละวิธีมี รายการที่เรียงลำดับแล้วซึ่งฉันติดตามรายการหนึ่งรายการเปรียบเทียบ]
การครอบครองหลายแห่ง :
- โฮสต์ / ฮาร์ดแวร์ที่ใช้ร่วมกันรหัสที่ใช้ร่วมกันและฐานข้อมูลหลากหลาย
- มันเป็นเรื่องง่ายที่จะขยายการทำงานของรหัสและการแก้ไขข้อบกพร่อง (รหัสที่ใช้ร่วมกัน)
- เป็นการยากที่จะขยายฮาร์ดแวร์ (อาจใช้บริการคลาวด์) หรือย้ายฐานข้อมูลของผู้เช่ารายบุคคลไปยังระบบอื่นโดยไม่ทำการเปลี่ยนแปลงรหัส
- ที่สำคัญที่สุดดังที่ฉันได้กล่าวไว้ก่อนหน้านี้ฉันต้องเพิ่มเลเยอร์พิเศษในระบบเพื่อให้แน่ใจว่าผู้ใช้นั้นเป็นของ บริษัท ของเขา / เธอจริง ๆ และไม่เข้าถึงข้อมูลของ บริษัท อื่น
อินสแตนซ์หลาย :
- โฮสต์ / ฮาร์ดแวร์ที่แชร์หรือไม่ใช้รหัสต่ออินสแตนซ์และฐานข้อมูลต่ออินสแตนซ์
- เป็นการยากที่จะขยายฟังก์ชันการทำงานหรือแก้ไขข้อบกพร่อง (ฉันไม่แน่ใจว่ามีวิธีการทำใน Docker หรือไม่ซึ่งคุณสามารถเพิ่มฟังก์ชันการทำงาน / คุณสมบัติให้กับอินสแตนซ์หนึ่งหรือคอนเทนเนอร์ Docker และปรับใช้กับผู้อื่น)
- มันเป็นเรื่องง่ายที่จะย้ายอินสแตนซ์ทั้งหมดไปยังพื้นที่ที่แตกต่างกัน / ฮาร์ดแวร์
- ตามตัวอย่างฉันไม่จำเป็นต้องดูแลเลเยอร์นั้นเนื่องจากแต่ละอินสแตนซ์จะมีฐานข้อมูลของตัวเอง
ข้อดีและข้อเสียทั้งหมดนั้นซ้ำซ้อนในกรณีที่ฉันต้องการทำอะไรด้วยตนเอง (เป็นการสร้างตัวอย่างสำหรับผู้เช่าแต่ละคนด้วยตนเอง) และนั่นคือสาเหตุที่ฉันสงสัยว่าโซลูชัน Docker นั้นมีวิธีแก้ปัญหาซึ่งอาจเป็นวิธีหลัก เหตุผลของคำถาม ฉันจะขอบคุณถ้าคุณจะตอบคำถามที่มีการอ้างอิงถึงการแก้ปัญหาและทำไมคุณคิดว่าวิธีนี้ดีกว่าอีก
ในกรณีที่จะช่วยได้ (อาจจะ?) เรากำลังใช้Laravelเป็นเฟรมเวิร์กหลักสำหรับแบ็คเอนด์ (ทั้งหมด RESTfully)