Tôi đang cố gắng xây dựng một giải pháp SaaS dựa trên web và tôi đã đi vào một con đường mà tôi không chắc chắn sử dụng nhiều hợp đồng thuê nhà hay đa thể. Tôi sẽ cố gắng mô tả những gì tôi đang cố gắng đạt được, và mỗi cách tiếp cận đều có ưu điểm và nhược điểm (theo ý kiến của tôi, theo những gì tôi đọc). Vui lòng bao gồm các đề xuất của bạn trong trường hợp tôi bỏ lỡ bất cứ điều gì trong một phương pháp khác.
Ứng dụng mà tôi đang cố gắng xây dựng là, như tôi đã đề cập, một giải pháp SaaS nơi các công ty có thể tạo tài khoản của họ và mỗi tài khoản / công ty đều có người dùng, khách hàng, sản phẩm, dịch vụ ... vv. Mỗi người dùng; ai là nhân viên công ty; liên quan đến một tài khoản / công ty sẽ chỉ có quyền truy cập vào khách hàng, sản phẩm và dịch vụ của công ty. Các công ty có thể có số lượng khách hàng, sản phẩm và dịch vụ không giới hạn, do đó mỗi công ty nên có trung tâm dữ liệu riêng.
Vì vậy, tôi đã quyết định tạo một cơ sở dữ liệu dùng chung (lưu tất cả thông tin đăng nhập của người dùng cho mục đích đăng nhập) và nhiều lược đồ chia sẻ cơ sở dữ liệu (cơ sở dữ liệu cho mỗi tài khoản / công ty). Về cơ bản, thuê nhà nhiều .
Sau đó, một số người đề nghị sử dụng Multi Instance thay vào đó, trong đó mỗi công ty sẽ có phiên bản ứng dụng riêng (ví dụ mã, thư viện, cơ sở dữ liệu, khung ... vv) hoàn toàn tách biệt với các công ty khác. Điều này nghe có vẻ tốt hơn vì tôi không phải chăm sóc thêm một lớp mà tôi cần đảm bảo rằng mỗi người dùng của người thuê chỉ có quyền truy cập vào dữ liệu của công ty họ. Tôi nghĩ thật tốt khi đề cập rằng tôi phụ thuộc vào Docker để đạt được phương pháp này (tôi chưa bao giờ sử dụng nó trước đây), nhưng tôi nghĩ rằng nó thiếu các tính năng (nhiều hơn về những điều này sau) tôi sẽ cần trong tương lai (ít nhất là tôi đã không 't tìm thấy chúng với một chút tìm kiếm).
Tuy nhiên, mỗi cách tiếp cận đều có ưu và nhược điểm, vì vậy tôi không thể đưa ra quyết định nên tiếp cận với phương pháp nào. Đây là một danh sách, nhưng trần trụi với tôi vì tôi thiếu kiến thức về cả hai, vì vậy có thể có điều gì đó mà tôi không biết hoặc giải pháp cho một vấn đề tôi không tìm thấy trên web: [Mỗi cách tiếp cận đều có một danh sách theo thứ tự mà tôi đã theo dõi từng người một so sánh]
Nhiều người thuê nhà :
- Máy chủ / phần cứng được chia sẻ, mã được chia sẻ và cơ sở dữ liệu đa.
- Nó dễ dàng hơn để mở rộng chức năng của mã và sửa chữa lỗi (mã chia sẻ).
- Việc mở rộng phần cứng trở nên khó khăn hơn (có thể sử dụng dịch vụ đám mây) hoặc di chuyển cơ sở dữ liệu của người thuê nhà sang hệ thống khác mà không thực hiện thay đổi mã.
- Quan trọng nhất, như tôi đã đề cập trước đây, tôi cần thêm một lớp bổ sung vào hệ thống để đảm bảo rằng người dùng thực sự thuộc về công ty của họ và không truy cập thông tin của công ty khác.
Đa trường hợp :
- Máy chủ / phần cứng được chia sẻ hoặc không chia sẻ, mã cho mỗi phiên bản và cơ sở dữ liệu cho mỗi phiên bản.
- Việc mở rộng chức năng hoặc sửa lỗi khó hơn (Tôi không chắc có cách nào để thực hiện điều đó trong Docker hay không, nơi bạn có thể thêm chức năng / tính năng vào một phiên bản hoặc bộ chứa Docker và triển khai nó cho người khác).
- Nó dễ dàng hơn để di chuyển toàn bộ dụ đến một máy chủ khác nhau / phần cứng.
- Ví dụ, tôi không cần phải quan tâm đến lớp đó vì mỗi thể hiện sẽ có cơ sở dữ liệu riêng.
Tất cả các ưu điểm và nhược điểm đều dư thừa trong trường hợp tôi muốn làm bất cứ điều gì thủ công (như tạo một ví dụ cho mỗi người thuê một cách thủ công), và đó là lý do tại sao tôi nghi ngờ giải pháp Docker, trừ khi có cách giải quyết, đó có thể là chính lý do của câu hỏi. Tôi sẽ đánh giá cao nếu bạn trả lời câu hỏi với các tham chiếu đến các giải pháp và tại sao bạn nghĩ cách tiếp cận này tốt hơn phương pháp khác.
Trong trường hợp điều đó có ích (có thể?), Chúng tôi đang sử dụng Laravel làm khung chính cho back-end (tất cả RESTly).