参考:http://www.iteye.com/topic/648799
多租户架构
(Multitenancy)已成为软件行业的一个口号。你只要询问某家公司它对这个主题有什么看法,就能
判断该公司从事什么业务。对于靠该架构起家的公司(Salesforce.comcom和谷歌)而言,多租户架构必不可少。对
于传统的老牌开发商(微软、SAP和甲骨文)而言,多租户架构分别被认为是一种威胁、无名小卒或者是一种额外的
交付模式。本文详细介绍多租户架构以及它在如何改变软件行业。
什么是多租户架构?
多租户架构的核心思想就是,软件采用这种方式来开发:应用程序的一个实例可处理多个客户即租户的要求。
以Salesforce的模式为例,每个客户开始时都使用应用程序的同一版本。数据存储在共享数据库中,但每个客户
只可以访问自己的信息。整个应用程序由所谓的元数据(Metadata)
来描述; 元数据就是命令指示
,描述了应用程
序如何运行的各个方面。如果客户想定制应用程序,可以创建及配置新的元数据,以描述新的屏幕、数据库字段
或所需行为。
多租户架构之外的选择是单租户架构; 在这种模式中,每个客户都运行自己的软件实例,软件可通过元数据
或其他方式来配置。SAP公司为其Business by Design软件采用了单租户模式,该软件实施了众多商业应用程序。
多租户模式与单租户架构模式存在大片的潜在灰色区,往往被人们所忽视。单租户应用程序可由云环境中的
虚拟化服务器或数据中心内的服务器来提供,单租户应用程序的各部分可以共享或不共享。比方说,应用程序采
用单租户模式、而数据库进行共享这种现象并不罕见。
Salesforce在多租户架构方面表明了这个看法:它让软件开发商只需要为在一个运作环境下运行的软件的一
个版本而操心。不需要为不同的软硬件配置支持多个版本。因为Salesforce的所有客户都运行同一软件的同一版
本,他们就能看清楚什么在顺畅运行、什么需要改进。
一旦Salesforce进行了改进,所有客户就可以同时获得改进之处,不过客户总是可以选择启用新特性,还是
任由新特性被禁用。由于加大了关注度和集中化,创新步伐更快了。合作伙伴在开发兼容产品时,也可以把主要
精力放在支持软件的一个版本上。
与单租户架构相比,多租户架构的一个缺点就是,某一客户的问题会影响整个系统。
另外,如果集中式运作
出问题,所有客户都会受到影响。没有哪家软件即服务(SaaS)提供商是完美无缺的。它们都遇到过严重的服务停
用事件。不过与大多数内部数据中心的糟糕记录相比,它们的情况似乎都相当好。
Salesforce通过Force.com平台把多租户架构的优点扩大到了其他软件开发人员;该平台让第三方公司可以使
用其软件的原始构建模块和高级应用程序组件,开发自己的多租户应用程序。这种模式被称为“平台即服务
(Platform-as-a-Service); 谷歌等其他公司也有类似服务,支持多租户应用程序的开发。
随着支持应用程序的构建模块变得更加通用、较少经过改动以便开发多租户应用程序,你就会慢慢进入到基
础架构即服务(Infrastructure-as-a-Service)领域,这种服务提供了原始计算功能。显然,弄清楚所有这些层绝非
易事。
多租户架构是SaaS供应商取得成功的关键?
对用户和开发人员来说,真正的问题是,为什么应当在乎某应用程序或某平台采用单租户架构还是采用多租
户架构?Salesforce的首席执行官Marc Benioff在公开演讲中坚持认为,SaaS供应商要取得成功,就必须采用多
租户架构,另一些知名的分析师也这么认为。但真是这样吗?SaaS模式为客户减掉了开发及管理基础架构的负担。
针对单租户架构,同样可以做到这一点。
使用应用程序的惟一理由就是它可以完成你想要它完成的功能,而Salesforce已证明成千上万的客户需要它
的软件。但在其他领域,多租户架构还没有证明它就是灵丹妙药。比方说,Netsuite提供了采用多租户架构的企
业资源规划(ERP)软件包。SAP有其Business ByDesign产品,这套商业应用程序采用了单租户架构。这两家公司都还没有拥有Salesforce.com那么众多的客户。
可以解释Salesforce及其多租户服务取得成功的另一个理由与需求的共性有关。如果你认为客户关系管理
(CRM)是存在需求共性的一个领域,可以认为ERP领域的需求共性更为明显。
大多数客户需要从CRM获得所有可能功能中相同的20%。对ERP而言,可能每个客户需要的是不同的20%。
按照这条思路来推理,SaaS公司的成功关键也许在于选择正确的产品,对所有客户来说最常见的一个产品。
Salesforce采用多租户方案主攻这个领域,结果受益良多,但它所做的最明智的举动恐怕就是当初先选择CRM
作为主攻市场。
从开发人员的角度来看,多租户架构不是最值得注意的。使用一个平台的目的在于,迅速开发出所需的产品。
有些公司会发现,由于Force.com或谷歌应用引擎(Google App Engine)目前提供了广泛的功能范围(functional
footprint),能够尽快让自己实现想要企及的目标。其他公司会因使用Ruby on Rails或Engine Yard用于主机托管
所获得的极大灵活性而更快地取得成功。
要是阅读Salesforce的白皮书,你会看到一幅图片,上面介绍了新的元数据驱动型编程模式,应用程序恰好
是用多租户架构来提供的。与通过元数据大大提高抽象程度(这也许是Salesforce的最大成就)这个成就相比,多
租户架构是次要的。如果一家公司能够为客户提供通过元数据、轻松获取及配置应用程序的一种方式,它就能成
功。但许多软件公司一直在提供可通过元数据来配置的软件。Salesforce有什么质的不同吗?
Salesforce的成功秘诀在于,该公司选择了一个领域即CRM,许多客户对此有着共同的需求。然后Salesforce
致力于基于多租户架构,创建可以扩展的运作环境(SaaS模式)。多租户架构的最大价值倒并不在于Salesforce指
出的种种优点,而在于这个事实:该架构迫使Salesforce更好地开发元数据驱动的应用程序。
确保软件取得成功的一个关键方面在于可配置性。通过基于元数据的配置来满足客户要求越是容易,应用程
序越有希望成功,不管采用的是单租户架构还是多租户架构。但我们回答不了的一个问题是,基于元数据的可配
置性方面是不是存在极限。换句话说,简化像适用于世界上每个国家的会计科目表这样的复杂对象到底有没有可
能?是不是有些问题复杂到总是很难处理、因而无法配置的地步?
对我们来说,多租户架构的未来方面值得关注的问题在于,Salesforce取得的成就是否就是操作系统、应用
服务器层和编程语言向虚拟化环境扩展的先兆?Salesforce是从应用程序起家的。
其他厂商不会对迅猛发展的Force.com坐视不管;他们正开始从其他方向来解决这个问题。SAP、微软、甲骨
文、IBM、惠普和谷歌都在积极开发自己的产品。
分享到:
相关推荐
MERN多租户 特征 多层体系结构:应用程序>路由器>控制器>服务 后端使用TypeScript 租户按子域解决 MongoDB,每个租户的集合(例如,租户1, subdomain1后缀_t1 ) JWT认证 CORS,网域白名单 用盐和胡椒粉哈希密码 ...
PERN多租户特征多层体系结构:应用程序>路由器>控制器>服务后端使用TypeScript 租户按子域解决PostgreSQL使用Pool(事务)通过node-postgres( pg包)与DB交谈多租户:表使用tenant_id列JWT认证CORS,网域白名单用盐...
模态多租户 mongoid-multitenancy增加了在共享数据库策略模型的作用域到租户的功能。 租户由租户模型(例如Client 。 mongoid-multitenancy将帮助您在每个请求上设置当前租户,并确保在查看,搜索和创建时,所有...
生成器-jhipster-多租户 用于创建多租户应用程序的JHipster蓝图 介绍 这是用于创建多租户应用程序的蓝图。 该蓝图将: 生成一个JHipster应用程序 生成一个承租人实体 使用户和任何其他实体了解租户 目录 先决条件 ...
flutter_multitenancy 一个新的Flutter软件包项目。 入门 该项目是Dart的起点,Dart是一个库模块,其中包含可以在多个Flutter或Dart项目之间轻松共享的代码。 要获得Flutter入门方面的帮助,请查看我们的,其中...
JCConf 2014 的多租户示例 如何测试 克隆项目 $ git clone https://github.com/phstudy/eclipselink-jpa-multitenancy.git 更改目录 $ cd eclipselink-jpa-multitenancy 运行separate-database示例 $ ./gradlew ...
多租户套餐 该软件包旨在为将多租户添加到Laravel应用程序中的一种快速简便的方法。 它只是为租户和模型创建模型和关系。 程序包按子域标识传入的流量,并在“租户”表中找到相应的租户。 如果未找到任何内容,或者...
弹簧多租户Spring Web 应用程序多租户这个 repo 是一个简单的例子,用于演示现有项目中多租户机制注入的主要原则。 链接文章解释了所有步骤: : start文件夹包含使用 jhipster 生成的启动项目更新文件夹包含为多租户...
AdonisJS多租户 与adonis Preview v5一起使用 AdonisJS的简单多租户-WIP但功能正常:) 单个数据库(目前) @isTenant和@belongsToTenant清醒的装饰 将租户缓存在内存中 未提供租户时引发的错误 路线图:查询范围,...
适用于Laravel应用程序的不受限制的多租户软件包 该软件包可以使Laravel应用租户知道。 该软件包的理念是,它仅应提供实现多租户的基本要素。 包可以确定哪个承租人应该是该请求的当前承租人。 它还允许您定义将...
储存性 Storedom是一个简单的电子商务应用程序,用于图灵的各种课程和教程。 设置 要设置storedom应用程序,请通过git克隆它,并使用bundler引入gem依赖项: ...cd storedom bundle 并设置数据库并包含种子记录: ...
环回示例多租户该示例演示了一种通过基于Tenant模型对数据进行分区来允许多租户的策略,我试图做到这一点,因此只需最少的努力即可支持该策略。一般模式服务的客户消费者将需要通过http标头( X-Tenant-Key )提供...
Cloud CAP多租户 使用服务管理器创建的用于租户数据隔离的HANA容器,具有多租户的Cloud Application Programming(CAP)Node.JS示例代码项目。 描述 该存储库包含一个完整的多目标应用程序(MTA)示例项目,该示例...
多租户和联合身份示例 存储库目标:补充有关多租户,微服务和联合身份的博客文章(请参见下文),并创建易于理解的有意义的代码存储库(如果仍然没有意义,请告诉我)。 请注意,该存储库当前尚不包含微服务示例,...
OneRealm多租户使用一个AM领域部署AM多租户部署免责条款: ForgeRock提供的与ForgeRock的Deployment Support Services性能有关的任何示例代码,脚本,连接器或其他材料(统称为“示例代码”),只能由客户出于...
Multitenancy_laravel:Laravel中的多租户系统
Kubeinn是用于多租户集群的云容器服务平台。 它为集群管理员提供了轻松管理共享Kubernetes集群的工具。 使用 , 和作为前端,使用和作为中间件和后端,并使用作为数据库。 ••演示 特征 帐户和帐户用户代表共享...
预留子域多租户应用程序中应保留的名称列表。安装$ npm install reserved-subdomainsAPI参考特性names 字符串数组。 例如: ['www', 'ftp', 'mail', ...] 。nameMap 键为名称的对象。 例如: { www: true, ftp: true...
mulT v0.1Flask lib Multitenancy已准备就绪您的应用程序需要多租户基础架构,并且您不想浪费时间脱离业务规则吗? 使用MulT,将TenantModel继承到您自己的模型上,无需再花时间在体系结构上。 以及可以自定义主题的...
多域支持 :check_mark_button: 已发行 基于正则表达式的域 :check_mark_button: 已发行 动态路径 :check_mark_button: 已发行 租户道具注入 :check_mark_button: 已发行 异步配置文件 :check_mark_button: 已...