SaaS的架构设计之-多租户应用的可配置性

来源:互联网 发布:第七封印影评知乎 编辑:程序博客网 时间:2024/05/17 07:26

SaaS的架构设计之-多租户应用的可配置性


http://hi.baidu.com/huareal/item/6c344a60b6671007a0cf0fec

目标:在实现了从项目到产品的飞跃,又实现了多租户,支持多租户后提升性能,实现高性能,接下来针对多租户的特征,充分提升软件的服务质量,而在这里,应用的可配置性就是提升用户软件质量的硬指标。

 

回顾过去几年的工作中实际的可配置,包括如下几种

1:用户业务数据模型可配置,用户可以增加任意多的数据项,类型是灵活的可选择的

文本框、文本域、数字、日期、下来框、弹出选择框、附件等。

该部分的实现包括几种方式:

a:业务数据字典通过系统数据模型来保持,可以随时随地增加业务数据字段、包括类型

b:通过预保留扩展字段来完成,可用性不高

c:通过元数据模型来支持,如果需要扩展数据类型,通过二次开发,追加元数据,发布模型,在运行时支持新的数据

 

2:用户界面可配置,界面可以随用户的选择任意调整,或者一个业务数据模型,对应有多个界面

即模型和视图的分离,可以根据需要随时驱动具体展示那个界面

类似的实现方式也存在多种

a:将界面的模型,布局、表单元素、位置、样式、事件、数据源等同配置在对应的系统界面中,通过配置工具可以任意调整,运行时根据配置数据动态显示[配置灵活性高,但是运行效率不高]

b:将界面模型也通过元数据来抽象,通过二次扩展调整界面模型,支持运行时调整页面

 

3:用户流程可配置,工作流引擎的流程可配置性应该是一个基本必须项

 

4:用户功能可配置,一般通过用户权限菜单来控制

包括几种方式

a:简单的将系统的权限、模块权限、功能权限,设计在对应的菜单上,如果没有对应的权限,就不显示该菜单

b:进一步抽象系统模块、功能,实现不同角色具体不同的功能模块,根据功能模块权限来控制用户功能可配置

 

上述的这些可配置性,主要集中在企业应用领域,接下来针对SaaS领域的多租户应用,应该具有哪些可配置型呢?

整理一下

1:数据可配置

2:功能可配置

3:界面可配置

4:流程可配置

 

但是相对跟产品配置来说,两者还是有区别的

SaaS的配置主要跟租户相关,产品的配置跟产品相关

SaaS的可配置性主要在系统运行过程中配置,而产品一般在配置后,要求重启服务

SaaS的可配置性要求一个用户一份,但是对产品的来说,一般系统只有一份,不区分用户

SaaS的使用人员为由租户管理员来修改和配置,而产品的使用人员为维护和实施人员

SaaS的配置型一般针对租户有效,而产品的配置对系统有效

SaaS的可配置性的转载时机多集中在使用时动态装载【需要一些底层JVM的特殊特性支持】,产品的一般作为系统初始化时装载

 

 一:数据可配置性

a:定制字段 [简单,但是对数据模型破坏性大,不建议采用]

b:预分配字段【可能需要针对不同租户重用同一字段,但是含义类型有不同,比较可行的方法通过元数据类配置】

如果预分配字段较多,则数据模型膨胀,而且效率不高,存在不同租户的数据利用率不高

c:名称值对

将系统数据跟扩展数据分离,建立扩展表,从横向扩展转换为纵向扩展,业务表包含扩展关联表ID,关联表ID指向关联表,该表定义关联字段名称、类型、属性等,对应的值可以有另外一个扩展表来保存

【扩展性强,但是效率不高】

 

二:功能可配置

参考如下步骤来完成

a:原子功能划分

将功能分解 抽象Function模型

功能定义及依赖 将Function -----------DependFunctionList 通过模型来建立关系

 

b:功能包设计

功能包设计将原子功能以及依赖功能打包一起,原则为高内聚,低耦合

销售包设计

针对市场或者用户,将功能包进一步包装,一般分为基础包、最小包、标准包、行业包、企业包等

功能包定义,从模型角度分析

FunctionPackage------------IncludeFunctionPackage

||

||

||

IncudeFunction------------Function============DependFunction

 

c:功能使用的校验

也就是如何保证用户配置的功能可用,方式可以如下

c1:通过权限项来控制对应的菜单【对业务模块加入太多的权限校验功能】

c2:通过AOP来完成原子操作的校验,或者业务功能的校验【实现技术难度大,对系统入侵性几乎为零】

 

三:界面可可配置

包括:系统菜单可配置、业务内容可配置

a:系统菜单配置

一个租户一套菜单

一个菜单关联一个原子功能

组织成树形结构,构成上下级菜单结构

同级菜单显示顺序可配置

可以通过模型来定义:

Tenant--------------------------SystemMenu

                                                 ||

Function------------------------------

 

b:内容可配置

最灵活的做法,将所有的界面元素抽象为元数据保持,有配置工具来完成设计,运行时动态展示,但是效率不高

或者通过标签定义语言来描述界面,类似的原理实现

 

四:流程可配置

唯一需要关注的就是:保证多租户之间的流程数据隔离、以及对应的备份方式灵活。