基于PaaS平台多租户实践

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoyw/article/details/50721255

本实践的系统平台是以业务流程为核心的办公流程能力平台,服务于全省,为全省业务流程重组提供信息化解决方案和管理支撑服务。

系统用户范围为全省,以省公司本部及13地市分公司为公司组织单元。多数流程业务在公司内部运行,部分流程业务是在全省垂直管理范围内运行。

本实践是基于OpenText Cordys BOP 4.3产品实现的。

1. 平台业务概述

1.1. 组织机构

在此PaaS平台上,提供统一的组织结构服务,注册用户及其租户划分,是通过平台LDap来管理,也就是说,租户划分在平台层面解决。

组织机构服务,主要是自行开发来实现,并与租户对应。功能比较简单,而麻烦体现在业务实施上,例如:哈尔滨市分公司有两个,一个是以省公司本部部门方式参与垂直管理;另一个是哈尔滨市分公司租户,是以公司方式存在的。

这里写图片描述

在组织机构信息中:

  • 地市分公司与省公司平级,在系统中对应的各自租户;
  • 展开省公司组织机构,发现在省公司内还有与部门并列的地市分公司,此部分地市分公司只是参与省公司垂直管理的部分人员。

1.2. 用户管理及其角色管理

在人员信息中,跨租户情况如下:
这里写图片描述

上图举例中,此系统用户(李**)身跨两个租户,分别在默认租户“哈尔滨市分公司”,以及参与垂直管理的省公司租户中。

  • 租户账号列表为省公司和哈尔滨市分公司;
  • 在每个租户中,都拥有各自的角色,例如在省公司租户中,为部门成员和流程审批_接口人角色。

2. 多租户模型

参考Gartner所提出的7种多租户模型,现系统已经支持第六种模型称为“Shared Everything”,即全共享,以及第七种模型称为“Custom Multitenancy”,即定制化的多租户。

2.1. 多租户业务模型

按分公司的维度,部署多租户模型。

这里写图片描述

在系统平台上,多租户是以“Organization”来体现。除了系统的system租户外,又建了16个租户,包括省公司本部、13个地市、维护中心和集成公司。

这里写图片描述

2.2. 软件服务部署

2.2.1. Service Groups,Service Containers部署

Service Groups,Service Containers部署在System租户下,方便其他租户共享使用。

这里写图片描述

2.2.2. Web界面部署

http://IP地址/home/HLJ/******/home/index.html

其中,“/home”是系统默认主目录,“/HLJ”是黑龙江租户,“/******”是自定义公司名称简写,“/home/index.html”是系统主页地址。
这里写图片描述

2.2.3. 流程服务部署

按独立提供流程服务模式设计,所有流程服务都部署到system租户下,将来,将适当考虑部分流程部署到其自身应用租户下。

流程服务可以单独提供工作流服务,其所对应的数据库是独立的MySQL数据库,与业务数据库无关。

2.3. 数据库部署

2.3.1. 租户隔离

参考Gartner所提出的7种多租户模型,现系统已经支持第六种模型称为“Shared Everything”,即全共享,以及第七种模型称为“Custom Multitenancy”,即定制化的多租户。

在数据库设计中,租户隔离是通过系统平台实现逻辑隔离,具体技术体现为在数据库表的字段中,有租户DN标识字段:

  • 省公司DN,例如:o=HLJ,cn=cordys,cn=defaultInst,o=hlcuc.com
  • 地市分公司DN,例如:o=HRB,cn=cordys,cn=defaultInst,o=hlcuc.com

这里写图片描述

2.3.2. 数据库隔离部署

系统平台,包括流程服务,使用MySQL数据库;
业务系统使用Oracle及MongoDB数据库。

3. 多租户在系统业务应用中体现

3.1. 跨租户用户

跨租户人员登录处理
登录时,首先使用默认租户,这里一般是指其所属地市公司。
这里写图片描述

            /**
             * 返回当前的组织对象
             * @returns {{}}
             */
            getCurrentOrganization: function () {
                var currentOrganization = {};
                $.each($.cordys.utils.formatCustomObject(userDetail['organizaitons']['company']), function (orgIndex, org) {
                    if (org['company_dn'] == currentOrganizationDn)
                        currentOrganization = org;
                });
                return currentOrganization;
            },

3.2. 跨租户流程衔接

跨租户流程衔接是通过跨租户接口人,也就是参与垂直管理地市接口人接到待办任务后,按业务规则转到本人默认租户下,再启动流程。这里涉及到两个技术点:

  • 用户跨租户
  • 用户切换租户

这里写图片描述

上图是地市接口人打开待转地市的传阅任务单,而下面的代码片段是要处理并识别出须要转地市的待阅任务。其中:

  • “LCSP”是指流程审批业务,此业务有转发布到地市功能;
  • “ZHDB”是指接口角色综合代表,综合代表是发布传阅任务的接口接收人。
function DO_TransformToProcess2() {
    //通过业务编码区分,省公司还是地市的流程
    var biz_rsvn_numer = window.bizInfoInstance['BIZ_RVSN_NUMBER'];
    // 获取用户角色信息
    if (biz_rsvn_numer === 'LCSP') {
        //获取用户的角色 判断网省公司发布 还是 地市分公司 发布
        if(vv_V_TEST){
            $.cordys.utils.sendCordysAjax({
                method: "GetFormByNameAndOrgDn",
                namespace: "http://unicom.com/workflow",
                parameters: {
                    formName: '省公司流程审批发布流程_省公司传阅',
                    orgDn: window.localStorage.currentUserTenantdn
                }
            }).done(function (response) {
                response = $.cordys.utils.formatCordysAjaxQueryEntity(response);
                var roleCode;
                if (response.length) {
                    roleCode = 'ZHDB';
                    window.open('workflow_wrapper.htm?formID=' + response[0]['FORMUID'] + '&roleCode=' + roleCode + '&bizRvsnNumber=' + window.bizInfoInstance['BIZ_RVSN_NUMBER'] + '&mongoBoId=' + window.bizInfoInstance['MONGO_BO_ID']);
                } else {
                    alert('没有查询到指定的流程!')
                }
            });

        }else{
            $.cordys.utils.sendCordysAjax({
                method: "GetFormByNameAndOrgDn",
                namespace: "http://unicom.com/workflow",
                parameters: {
                    formName: '省公司流程审批发布流程_地市传阅',
                    orgDn: window.localStorage.currentUserTenantdn
                }
            }).done(function (response) {
                response = $.cordys.utils.formatCordysAjaxQueryEntity(response);
                var roleCode;
                if (response.length) {
                    if (/rjdb/i.test(window.localStorage.currentUserTenantdn.split(',')[0].split('o=')[1])) {
                        roleCode = 'ZHDB';
                    } else {
                        roleCode = window.localStorage.currentUserTenantdn.split(',')[0].split('o=')[1].toLocaleUpperCase() + '_DSZHDB';
                    }

                    window.open('workflow_wrapper.htm?formID=' + response[0]['FORMUID'] + '&roleCode=' + roleCode + '&bizRvsnNumber=' + window.bizInfoInstance['BIZ_RVSN_NUMBER'] + '&mongoBoId=' + window.bizInfoInstance['MONGO_BO_ID']);
                } else {
                    alert('没有查询到指定的流程!')
                }
            });
        }

3.3. 跨租户人员待办任务处理

获取待办任务与租户DN无关,按用户帐号获取。

3.4. 业务流程开发

在此平台生态环境上,为每个租户建立开发租户、测试租户。其中,流程建模、表单快速开发都是按租户进行管理。

3.5. 业务流程部署

租户管理员部署自己租户流程。

参考

  1. 《基于PaaS平台租户部署及人员跨部门设计方案》 肖永威 2014.12
  2. 《在IT系统中使用多租户技术提供人员跨部门及虚拟团队的解决方案(草稿)》 肖永威 2014.10
  3. 《面向集团客户云计算运营平台的运营开通技术方案及应用架构——之云计算运营平台方案(三)》 肖永威 2013.12
展开阅读全文

没有更多推荐了,返回首页