我正在尝试构建一个基于Web的SaaS解决方案,但我遇到了一个问题,我不确定是否要使用多租户或多实例。我将尝试描述我想要实现的内容以及每种方法的优缺点(根据我所读的)。请在一种方法比另一种方法更好时提出您的建议。
我正在构建的应用程序是一个SaaS解决方案,公司可以创建自己的帐户,每个帐户/公司都有自己的用户、客户、产品、服务等。每个与帐户/公司相关联的用户(公司员工)仅能访问其公司的客户、产品和服务。公司可以拥有无限数量的客户、产品和服务,因此每个公司都应该有自己的数据中心。
为此,我决定创建一个共享数据库(保存所有用户凭据以进行登录)和多个数据库共享模式(每个帐户/公司一个数据库)。基本上,这就是多租户。
有人建议使用多租户,其中每个公司将拥有自己的应用程序实例(即代码、库、数据库、框架等),完全与其他公司分开。这听起来更好,因为我不必再关注额外的层次,在那里我需要确保每个租户的用户只能访问其公司的数据。值得一提的是,我依赖Docker来实现这种方法(我以前从未使用过它),但我认为它缺少我将来需要的功能(稍后会更详细地介绍),至少我在搜索中没有找到它们。
如果有帮助的话(也许?),我们使用Laravel作为后端的主要框架(全部都是RESTful)。
我正在构建的应用程序是一个SaaS解决方案,公司可以创建自己的帐户,每个帐户/公司都有自己的用户、客户、产品、服务等。每个与帐户/公司相关联的用户(公司员工)仅能访问其公司的客户、产品和服务。公司可以拥有无限数量的客户、产品和服务,因此每个公司都应该有自己的数据中心。
为此,我决定创建一个共享数据库(保存所有用户凭据以进行登录)和多个数据库共享模式(每个帐户/公司一个数据库)。基本上,这就是多租户。
有人建议使用多租户,其中每个公司将拥有自己的应用程序实例(即代码、库、数据库、框架等),完全与其他公司分开。这听起来更好,因为我不必再关注额外的层次,在那里我需要确保每个租户的用户只能访问其公司的数据。值得一提的是,我依赖Docker来实现这种方法(我以前从未使用过它),但我认为它缺少我将来需要的功能(稍后会更详细地介绍),至少我在搜索中没有找到它们。
然而,每种方法都有其优缺点,所以我无法决定选择哪种方法。以下是一个列表,但请容忍我对它们的知识不足,因此可能存在我不知道的问题或者我没有在网上找到的问题的解决方案:[每种方法都有一个有序列表,我按照顺序逐一进行比较]
多租户:
- 共享主机/硬件,共享代码和多数据库。
- 扩展代码功能并修复错误更容易(共享代码)。
- 要扩展硬件(可以使用云服务)或将个别租户的数据库移动到另一个系统而不对代码进行更改,则更难。
- 最重要的是,正如我之前提到的,我需要向系统添加额外的层,以确保用户实际上属于他/她的公司,而不是访问其他公司的信息。
多实例:
- 共享或不共享主机/硬件,每个实例有自己的代码和数据库。
- 要扩展功能或修复错误更加困难(我不确定是否有一种方法在Docker中可以向一个实例或Docker容器添加功能/特性,并将其部署到其他实例中)。
- 将整个实例移动到不同的主机/硬件更容易。
- 作为实例,我不需要考虑那一层,因为每个实例都有自己的数据库。
如果有帮助的话(也许?),我们使用Laravel作为后端的主要框架(全部都是RESTful)。