基于多租户架构的PaaS构建剖析
何颖 唐彦 林勇 网络

引言

    云计算的价值通过云产品的价值体现出来,云产品的价值是通过云技术平台来实现的。云平台不仅是技术的集成,而且是体现云计算运营思路内涵的表达形式。本文对云计算产品平台进行深入剖析,展示了平台内在的关键支撑技术,在技术解析过程中始终紧扣云产品平台构建应符合云产品运营思路的重要思想。通过对成熟的云计算产品平台进行深刻解读,通过分析优秀云计算公司经营的思路,可以探寻适合企业自身发展的云计算产品平台开发之路。在众多的云产品平台中,Salesforce.com公司的PaaS平台是其中的典型代表,其独树一帜的产品平台对云计算的运营产生了深远的影响,对从事云计算服务业务的公司有很大的指导作用和借鉴意义。

1 Salesforce简介

    Salesforce.com公司成立于1999年,由甲骨文公司前高管MarcBenioff创立。企业成立之初,便提出了“消灭软件”的变革性运营理念,其目的是为了实现IT资源整合、集中化管理和运营,消灭企业数据中心的运行软件,通过互联网接入,按需提供软件服务于用户,并收取相应费用,实现企业与用户的价值共赢。非凡的理念使得Salesforce公司成为了云计算领域公认的领袖企业,其推出的产品不仅成熟,而且产品体现的技术运营理念也是独树一帜,被许多云计算经营公司效仿。Salesforce的PaaS平台无论是在架构设计上,还是在应用支持上,与另一云计算业界的先锋公司Google的PaaS相比,都有着重大的区别。Salesforce的PaaS最大的闪光点就在于采用了多租户架构,实现了云计算产品平台一体化。下面对多租户架构进行剖析,揭开云计算产品的神秘面纱。

2 多租户的概念和模型

    多租户的概念是在多用户概念基础上发展而来,不同于传统的多用户共享一个相同的实例,在权限上区分用户的使用范围。多租户是多个用户享用虚拟实例,虚拟实例由具体软件实例虚拟而成,共享的虚拟实例即使是同一个,也会存在差异。多租户是对共享实例进行技术创新,面向应用实例,而非虚拟化技术面向操作系统。由于在软件设计时就必需实现软件自身数据和配置信息的虚拟分区,所以多租户软件架构要进行必要的修改,特别是数据库需要特殊的设计,在安全隔离方面要做设置,毕竟共享同一软件资源存在一定的风险。

    常见的多租户实现模型有3种,区分就在于最底层采用的数据库模式。

    1)私有表。为每个用户单独定义数据并创建一个新表。实现简单,不过成本高。数据定义语言(DDL)操作涉及数据框架,这造成表之间整合度低。

    2)扩展表。分基本表和共享表,减少了DDL操作,表的整合度高,但用户占用基本表和共享表,这造成表的架构复杂。

    3)通用表。通用表包括租户位和数据位。租户位区分用户,数据位用来存放各种类型的数据。通用表为体现灵活扩展和通用性,采用了稀疏列的表格式。每一行的数据位中以一个键和一个值的形式存放数据,行很宽,里面有许多空值,表具有极高的整合性,也避免了DDL的操作,但架构实现难度较大。Salesforce公司采用了这种多租户模型。

3 基于多租户架构的PaaS平台

    Salesforce的PaaS平台整体架构分为两层,基础物理设施资源和Force.com平台。其中Force.com平台是整体架构的核心部件,它首先整合和利用基础物理设施资源,然后提供PaaS平台服务于软件开发者,最后将公司云产品应用以软件即服务(SaaS)的形式提供给用户。其整体架构如图1所示。

 

 
Salesforce公司的PaaS和SaaS基于同一个平台,统一的平台不仅成本低,而且应用得到了整合,突出表现为软件架构上API的统一,PaaS和SaaS的应用程序接口得到了重用,方便了应用服务的管理。
 
Force.com是业界第一个基于多租户架构的PaaS平台,不仅支持灵活的定制,并且承受负荷极强。其整体架构如图2所示。
 
 
 

 架构分两部分,网关和虚拟服务器群(POD)。整体架构设计实现机理如下:

    网关接受访问请求,根据请求区分访问的应用,将应用所属的租户转发给对应的POD。POD就是一组集群的服务器,每个POD运行着一套Force. com的系统,在此系统中可以支持上万的租户,由此可见Force.com平台强大的负荷承载力。POD之间能实现负荷均衡,接到请求后,通过负载均衡器将请求转发给负载较轻的应用服务器,这样能把租户平均分配至每个POD。POD中的应用服务器是无状态的,这样便于应对大规模的请求处理,使得架构充满弹性。当应用服务器在处理请求时,发现自身缓存中无请求所需的数据,这时共享数据库便发挥作用,应用服务器会调用共享数据库中请求所需的数据进行下一步的处理。面向运营,POD可以根据用户情况进行增加,使得整个架构可扩展性得到增强。

    在整体架构中,核心是POD。POD由负载均衡器、应用服务器和共享数据库组成。

    负载均衡器采用多输入/输出(I/O)理念,对于虚拟服务器而言,存在多个I/O服务器,只需通过I/O服务器互联,通过软件算法分配资源给各个服务器资源占用,就能达到负载均衡的目的。简言之,任务会分配到负载较轻的I/O服务器上。在具体实现过程中,采用负载均衡模式的服务器,客户就会通过负荷识别机制,自动寻找负载较轻的I/O服务器。

    应用服务器用于处理用户的请求,由以下5个模块组成,如图3所示。

 

 1)元数据缓存。存放新近常用的元数据,加速应用的生成。元数据是基于面向对象的,从某种意义上讲,也可以认为就是对象。对于Force.com而言,它是由一个个对象组成的,对象包含表格、用户接口(UI)和用户权限等,这些对象采用了元数据的形式在数据库中存储。Force.com的对象及其相关的字段对应一个数据库的表和表中的列,并且Force.com对象之间的关系受数据库的完整性约束。数据库中每个数据库表对应着独立的存储地址,Force.com在这点上进行了优化改进,Force.com使用多个共享的大数据库表作为存储放置对象。大数据库表中包含许多数据通用字典(UDD),UDD就是专门存储元数据的表格。另外,对于应用而言,运行在Force.com上的软件实例也是由多个对象生成的,同样一个应用实例也是使用元数据进行描述的。用户最初在使用软件的时候,对象版本和规模都是一致的,随着用户使用时间的增长,相应用户对应用软件的定制添加便会造成同一个软件实例的不同,系统就会对应用共享对象和定制对象进行严格分离。在实现上,并未为新对象生成数据库表格,而是采用元数据的形式存储在大表中。元数据的好处显而易见,作为数据存放比新建数据库表格易实现很多。在实际运行中,Force.com使用引擎分析数据库中的元数据以动态生成虚拟实例和虚拟实例所需的模块。

    2)大规模数据处理引擎。主要用于大数据量的读写和在线事务的加速处理。由于PaaS平台需要处理的数据量是巨大的,所以引入大规模数据处理引擎就显得很有必要。当一个API调用发生了很多待处理数据时,引擎能快速应对处理,显示出强大的优化处理能力。另外,当处理大规模数据时,其中一个步骤发生错误,引擎内置的错误恢复机制能快速捕捉和修复这个错误,同时会保存出错步骤之前的数据结果,避免重新操作。

    3)多租户感知的查询优化引擎。引擎的作用是帮助关系型数据库自带查询优化器,以便更好地适应多租户的环境。数据库是自带查询优化器的,主要基于数据库表的索引等数值进行计算和比较[4]。这种自带的查询优化器是针对单租户环境而设计的,为了使其适应多租户环境,在自带查询优化器基础之上设计了一个多用户感知的查询优化引擎,其为每个多租户对象维护了与之对应的一整套优化数据,除此之外,这个引擎也维护租户和租户下用户的安全信息,既避免了租户间数据的误处理,又提升了数据安全性和数据处理效率。

    4)运行生成器。根据用户请求动态生成应用,并利用查询优化器提升数据处理效率。

  5)全文检索引擎。在数据库进行数据更新的同时,引擎异步更新这个数据的相关索引。做为Web的一项基本功能,被应用至PaaS。Force.com内置的全文检索引擎基于Lucene技术。当运行在PaaS平台上的应用对数据库中的数据进行更新时,会有检索服务器的后台进程异步更新与数据相关的索引。异步机制的好处在于,将事务处理和用户检索放置在不同时间段,保证了检索工作不影响处理事务的效率,同时也能为用户提供最新搜索结果。在检索过程中采用了一项创新技术——等待检察技术优化了检索流程,系统将修改过的数据复制到一个等待检索表,检索服务器会直接访问这个表,返回给用户最新的搜索结果,检索服务器不用对整个索引进行搜索,从而减少了检索服务器的I/O处理量。在多租户环境中,每个多租户都有一个独立的索引。

    另一POD主要部件共享数据库用于存放数据,采用散列分区技术,将大数据分成数据小块进行管理,使得大型数据库得以适应多租户环境,提升了系统的伸缩性和可用性。共享数据库由以下3部分组成,如图4所示。

   1)元数据表。用于存储互用定制对象及其包含的字段和结构信息,不保存具体数据。元数据表主要有两类:一是对象元数据表,存储对象的信息,其字段包括对象ID(标示数据)、拥有对象的租户ID和对象名称;二是字段元数据表,存储对象附带字段的信息,包括字段的ID、拥有字段租户的ID、字段名称、字段数据类型和是否被索引的布尔字段。

    2)数据表。存储用户所使用对象和对象所包含的字段数据。与元数据表一样,有两类,一类是数据表,表中放置着对象和字段所对应的数据。核心字段有全局ID、租户ID、对象ID和对象名称。核心字段之外,有501个数据列用来存放数据,列用Value来命名。首个字段以Value0设定,后续排列递增。列采用灵活列的方式,使得数据库中的数据总是以可变长度字符数据类型(Varchar)形式承载数据。另一类是大字符表(Clob),专门存放大字符对象,最大长度限制为32000字符。

    3)数据透视表。透视形象表达了数据读取简化的过程,对特殊数据去格式束缚,只关注数据某一特征即可进行读取,这样会加速对特殊数据的处理,使系统通过“短路径”得以对数据进行直接处理。在具体实现上,往往对表中数据某一特征进行处理,例如字段类型。这样做的好处有:可以优化数据库,加快了对常用数据的读取,减少了因结构导致的读取冗余。

    除此之外,Salesforce基于多租户的PaaS平刻台,采用了独创的面向对象语言Apex。Apex整合复杂的商业逻辑和多模块功能,用于在Force.com上创建Web服务。运行有两种方式:一是单独脚本,按用户需求执行;二是触发器形式,通过特定数据处理事件作为条件,触发绑定的Apex代码执行。Apex代码同样是以元数据的形式存储于元数据表内。当Apex代码被调用时,Apex的翻译器会读取元数据缓存中被编译过的Apex代码,以提供给多个租户进行使用。引入Apex这门新语言,着眼于平台的稳定性和安全性[5]。Apex有一组管理工具,能够检测脚本在运行、执行过程中消耗的性能并进行事件统计,有助于判断脚本执行是否正常,是否应终止,避免了对其他租户应用的影响,确保了应用的安全,同时将中断信息反馈给此应用的用户。另外,Apex代码有验证机制,对其内嵌的SOQL(数据库查询语言)和SOSL(数据库检索语言)进行验证,以避免实际运行时出现错误,保证了平台整体运行的稳定性。

4 总结

    上述基于多租户架构的PaaS示例,不仅体现着一种先进的技术理念,更是体现着一种清晰的云计算服务运营思路。在具体搭建过程中,在设计上既要满足业务需求,也要兼顾成本。初期和发展期,PaaS平台优化很重要。目前的架构中包含动态生成机制,按需分配资源,需要对应用进行扫描,导致请求响应时间长,为了加快读取,就必需采用优化技术,简化数据读取冗余。总之,云计算产品平台不会一成不变,随着用户需求的增加,平台演变也是必然的。软件的演进是一个过程,是在不断实现创新的过程中逐步成熟起来的。企业在实际运营中,要面向需求,充分发挥人的创造性,打造优秀团队以支撑企业规模发展。

CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢