【问题标题】:Multi Organization SaaS mySQL Setup?多组织 SaaS mySQL 设置?
【发布时间】:2012-06-21 23:15:15
【问题描述】:

我是一个团队的一员,目前正在为特定的组织群体开发专门的 SaaS 服务。 我有 PHP 和 mySQL 方面的知识,所以我正在这些平台上开发它。将在云端部署并在多个国家/地区发布。

我已经到了在数据库中分离组织/主要用户的地步,想看看你们的想法。

当 SaaS 管理发票和许多其他敏感信息时,在 mySQL 服务器上分发这些信息的最佳流程是什么?我想到了以下选项:

1) 将单个数据库中的所有信息放在单个表中,并由组织标识行分隔。 - 当有几千个用户和 10,000 行时,是否看起来很安全并且可能会很慢?

2) 具有单个数据库,但使用用户 ID 分隔表,例如。 '1000_invoices' - 同样可能更快,但不安全。

3) 是否在每个组织注册时创建了单独的数据库,以及用于访问数据库的特定用户,并且数据库名称存储在会话/cookie 中?每个组织的用户。

无论如何,我想知道你们认为什么是最好的选择?如果不是以上那么你有什么建议?为什么?任何有关安全的事情都将不胜感激。以前没有使用过大型多组织应用程序。 提前致谢!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    我过去开发过许多 SaaS 应用程序,我们发现大型“公共”SaaS 服务(如 KashFlow,可能是 Salesforce?)所使用的“单一应用程序部署、单一数据库”设置并没有带来太多收益感觉。原因如下:

    • 第 1 点:拥有机密信息的客户公司希望确保他们的数据更加“安全”,并且当他们的数据被划分到应用层之外时,更容易做出这些承诺。
    • 它还使缩放更容易,至少在开始时是这样。通过将单个客户端的应用程序与其他应用程序分开配置到自己的服务器,更容易实现负载平衡,而对于单个应用程序,这意味着您需要花费更长的时间来开发它以使其具有可扩展性。
    • 数据库主键更易于使用。您的客户可能会开始提出问题,例如为什么他们的“CustomerID”值每次增加 500 而不是 1。
    • 如果您的客户分布在世界各地,那么在另一个国家/地区进行部署(使用自己的本地服务器和数据库服务器)会更容易,而不是在国外部署大型应用程序或强迫用户使用洲际(即慢速+延迟)连接到您位于数千英里外的服务器。

    除了应用程序软件部署之外,还有一些缺点,例如管理数百甚至数千个数据库的额外管理负担,但它对程序代码所做的大量简化使得它值得。此外,使用一堆 shell 脚本可以轻松实现自动配置和部署。

    【讨论】:

    • 感谢您的回答大卫,我想我会选择单独的数据库/组织选项。您建议如何发送数据库详细信息(数据库、登录名等)?当登录设置为会话变量?
    • 使用 PHP,我将所有内容都保持在会话状态中。数据库详细信息(例如连接字符串)是站点的属性,而不是用户的属性(因为它是一个站点-每个数据库-每个客户端),因此只需将其粘贴在站点的静态 Configuration.php 文件中即可。
    • 对不起,我以为您的意思是一个站点整体和一个数据库每个组织。因此,当每个用户登录时,它都会在会话中设置他们的特定数据库,然后该站点就是他们的信息,直接来自他们的特定数据库。每个组织没有单独的文件?你认为哪个会更好?那不是更容易吗?可以自动化。
    • “一个应用程序-多数据库”可以工作,假设您的所有客户都有相同的要求,但我们更喜欢“多应用程序-多数据库”设计,因为它提供了更大的灵活性。通过自动化解决了与复杂性相关的问题。
    猜你喜欢
    • 2018-01-31
    • 2011-02-12
    • 2020-08-03
    • 1970-01-01
    • 2012-04-22
    • 2017-05-23
    • 2016-02-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多