产品的拼装化之概述

产品拼装化的思路

对于公司来说,都有一种本能的想法(多家公司都有这么一种想法,所以我就把它认为是“本能”了):

  • 通过界面上的拖拖拽拽,就可以把产品给拼装装出来;

貌似一相简单的想法,做起来是相关复杂的,涉及公司的开发策略、资源调配等。这里主要简单的介绍:以组件拼装的方式构建产品的技术实践。

关于组件化产品拼装,其本质的思路为:

拼装
拼装
拼装
组件1
...
组件n
产品

即:

  • 按业务领域,开发出相应的组件;
  • 产品拼装时,制定各种组件规范,从而形成有机的产品;

为了方便下文的描述,这边需要统一以下概念:

  • 产品:在业务上满足客户的需求,在技术上实现各端的交付,包含手机端、Web站点、以及管理台等;
  • 组件:在业务上,实现某特定领域的业务能力,在技术上实现各端的交付,包含手机端的组件、Web站点的组件、以及管理台的集成等;

这里有几点需要注意:

  1. 用组件一词,但是跟一般意义上的组件有所不同。通常情况下,组件多用于某端范围内的,如Android的组件,可能就是指一个UI的小控件、或者包含一定业务含义的二次开发单元。而本文所说的组件,是业务领域的全实现,有各端的实现有。因此,内部也有人称之为”业务组件“,但为写文章方便,如无特别说明,还是叫组件。
  2. 强调多端的交付,当然,并不是说有多端的交付,就是hyber的开发模式,手机端与Web站,就是一种响应式的变更。这边强调的更多的可以按端进行业务UI展现上的拼装,以满足业务多样性的需求;

产品拼装方案

产品
组件
拼装
拼装
拼装
拼装
拼装
拼装
拼装
拼装
拼装
产品1
产品..
产品n
组件1
组件..
组件n

以组件的方式拼装产品,比较自然的思路,可以拆分为:

  • 组件的开发平台:面向开发者的开发平台,按组件化的规范,将业务能力进行封装;
  • 产品的拼装平台:面向产品配置人员的业务平台,按产品的需求,将组件进行拼装、配置;

针对以上两部分的内容,具体分析如下:

组件的开发平台

组件
组件服务
组件管理
运维管理
运营管理
组件Web端
组件移动端

针对组件的开发,从逻辑上,可以分为:

  • 组件服务:有云平台中提供单一业务领域的软件服务,可以看成是一种SaaS。由于需要支撑产品的拼装,因此也要支持租户化方案;
  • 组件管理:这里主要指组件的管理台,有运维管理、运营管理。一般来说,运维管理偏向组件开发者的,比如技术上是限流、缓存配置等;运营管理偏向产品配置人员,可以是某些的UI变更、或者可选功能的确认;
  • 组件Web端:组件的Web端,提供包含业务的UI级控件库,让产品配置人员通过UI的组装,形成产品的站点;
  • 组件移动端:组件的移动端,提供包含业务的UI级的组件库,简单的是业务的完整界面,复杂点的也可以是包含业务的控件库;

对于组件的开发平台,即负责组件中上述组件内容的开发任务。笔者所在的公司,采用统一的DevOps平台实现组件颗粒(即可独立开发、部署的单元,如JS组件、WEB应用等)的开发、部署、运维流程的控制。这边就不扩展介绍了。本文主要关注组件上述规范的经验说明。

组件服务端-租户化

考虑以下的产品模型:

产品
主业务
组件1
组件2
...
组件n
子业务1_可选
组件1_1
组件2_1
..._1
组件n_1
子业务2_可选
组件1_2
组件2_2
..._2
组件n_2

如上图的产品业务模型,举个例子,笔者所有的公司做教育类产品,在省级的三通两平台类的产品中,往往会有:省级的学习空间类的需求,那么同样会有市、乃至校级的学习空间,那么对该类的需求,采用同学的租户化管理,显然开发起来更自然些。

那么上图的产品业务模型中,就要求在产品中需要考虑产品中多租户的场景。对于多租户的开发:

  • 服务端,需要支持租户隔离方案。
  • 客户端,需要实现租户标识的传递。
租户隔离方案

对于租户隔离的维护,存在以下的思路:

  • 按组件独立隔离,每个组件都可以拥有独立的租户标识。该场景下,为统一管理产品、以及组件租户的关系,可以创建租户管理服务,从而实现对产品的租户的创建、查询;
    -.通过规则管理,按业务规范明确组件租户标识。相对前者该方案的优势在下租户的可控性更强些,另外,考虑到像三通两平台的建设中,存在校级的子业务,规模是10W级别的,此时单产品的租户数据可能超1000W(子业务数*组件数,组件以100个算),因此也能进行数据压缩。

那么,可以采用如下的租户模型:

产品
主业务
子业务1_可选
子业务2_可选
组件1_2
组件2_2
..._2
组件n_2
组件1_1
组件2_1
..._1
组件n_1
组件1
组件2
...
组件n
app-id_main
app-id_biz-name_1
app-id_biz-name_2

如上图所示,通过产品标识(app id)与业务名称(biz name)共同组件租户标识。

客户端的租户识别

对于客户端的租户标识的传递,比较简单,在请求头中增加app id、biz_name即可。

app-id/biz-name
client
server

这边讨论几个在客户端比较优雅的识别出app id、biz name的方法 :

  • 通过域名:特别是WEB站点中, 对于用户来说首先输入的是产品的域名,可以建立域名跟组件租户的映射数据实现站点域名的识别。其要点在于网关层需要支持多域名、多服务的路由关系,笔者所在的公司通过KONG的插件开发实现该路由规则的统一管理;
  • 划分业务层级:在客户端,特别是移动端,产品中进行业务切换时,都会有一个明显的页面变更。根据此特别可以建立上下文,对子业务进行统一的切换;

产品的拼装平台

考虑到组件的基本构建,产品拼装平台的整体架构如下:

产品拼装平台
租户服务
站点服务
移动应用
聚合管理台
组件服务

产品的拼装平台,主要负责的是维护产品的创建流程,依赖租户服务、站点服务、移动应用、聚合管理台,它们依托组件服务进行组件的定义、维护,并负责者组件的服务租户、Web组件库、移动端的组件库、以及管理台组件库。

产品拼装平台中,产品的创建流程如下:

创建产品
选择组织
选择组件
创建站点
创建移动端
  • 创建产品:即设置产品的名称、图标、说明等;
  • 选择组织:组织,即面向的用户,笔者所有的公司组织进行用户的管理,也可以认为是用户的租户服务;
  • 选择组件:即确认产品主业务的组件、并开通相关的服务;
  • 创建站点、及移动端:即配置产品的Web站点、以及移动端;

需要特别指出的是,组织服务(即用户登录、认证)是一个相对特别的组件,当产品创建出来后,组织是不可变更的。原因也比较简单的,所有的业务数据都是基本用户产生的,如果用户变更会导致几乎所有业务数据的清理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值