【问题标题】:Developing a Multitenant SaaS开发多租户 SaaS
【发布时间】:2010-11-19 02:27:03
【问题描述】:
我正在开发一个用于农业数据集数据分析的网络应用程序。其实我想做的
应用程序是多租户,我希望将该 SaaS 应用程序部署在私有云中(在我们学校)。
我在编程部分遇到了一些基本的疑问。
我是否需要在 Hadoop 的 map/reduce 功能中开发应用程序?
其次,数据库的选择。由于数据本质上是高度结构化的(如 sql),我可以使用 sql server 来管理云中的数据吗?在这种情况下,除了 IaaS 设置和 SaaS 应用程序之外,我还需要任何中间件吗?
我正在使用 J2EE 技术进行 SaaS 开发。并且租户的数量将在 50 个以内。在数据库方面哪种方法更好。实际上,这里的安全性并不是一个大问题。
-
您能否告诉我开发多租户 SaaS 的基本要求是什么?即是否所有的应用程序、平台和数据库都配置为多租户,还是只配置数据库部分?
我是这项技术的新手,我更喜欢只使用开源技术进行开发。
请给我您的建议,这可能对朝着正确的方向前进非常有帮助。
感谢您宝贵的时间。
问候,
桑吉塔
【问题讨论】:
标签:
jakarta-ee
cloud
saas
multi-tenant
【解决方案1】:
我需要在 Hadoop 的 map/reduce 功能中开发应用程序吗?
map/reduce 与 SaaS 或多租户无关
其次,数据库的选择。由于数据本质上是高度结构化的(如 sql),我可以使用 sql server 来管理云中的数据吗?在这种情况下,除了 IaaS 设置和 SaaS 应用程序之外,我还需要任何中间件吗?
这主要取决于您的数据使用情况。然而,多租户系统的主要方面之一是数据模型扩展。在 RDBMS 世界中有多种既定选项可以支持这一点。查看here 了解更多详情。
一般来说,NoSQL 数据库是首选,因为它们支持更多的非结构化数据结构。
我正在使用 J2EE 技术进行 SaaS 开发。并且租户的数量将在 50 个以内。在数据库方面哪种方法更好。实际上,这里的安全并不是一个大问题。
如果安全性不是什么大问题,那么您可以将所有客户的数据放在同一个单一数据库模式实例中。这是最简单的方法,但意味着更多的 dba 头痛,如归档/备份等。看看利弊here
您能否告诉我开发多租户 SaaS 的基本要求是什么?即是否所有的应用程序、平台和数据库都配置为多租户,还是只配置数据库部分?
品牌(客户特定的 UI 主题等)、工作流程、数据模型扩展和访问控制是任何多租户系统都需要考虑的 4 个主要方面。 (Source)。因此,您选择的任何设计或架构都应该能够解决这些方面的问题。
推荐阅读:Force.com multi-tenant architecture
【解决方案2】:
基本的 SAAS 应用程序必须:
- 为多个租户实例使用一个代码库实例
- 将 URL 映射到应用程序的用户实例
- 将数据库中的租户映射到他们的应用程序实例。
如果您使用的是 SQL,并且对 MSQL 或 Oracle 没有任何特定的技术要求,则可以使用 Postgres 或 MySQL,或者您最熟悉的任何一个。他们都做同样的事情。在构建数据时,请确保向每个表添加额外的列“tenant_id”,以便能够选择与该实例相关的内容。
如果您正在构建 ACL,您需要为系统设置一个 ACL,并为每个租户设置一个通用应用程序 ACL。因此,当用户登录时,他们会看到一个控制面板,允许他们控制他们的实例。如果您只是希望他们在没有控制面板的情况下直接登录到他们的实例,那么您可以放弃一层代码和数据库的复杂性。
就 J2EE 而言,我无能为力。
SAAS 最重要的方面之一是租户实例安全性。您必须始终显示正确的数据,并且您必须确保对单个帐户的数据库所做的任何更改都不会影响任何其他帐户。最重要的是,数据库和代码库必须免受注入攻击。
您的应用程序仅与最薄弱的组件一样强大,如果您没有正确保护它,它会在第一个障碍时崩溃。