初代SAAS平台应用层架构设计

近期参与SAAS项目第一代应用设计,为满足整体灵活性,复用性和可定制化,得出如下应用层模型,希望能给大家相互参考学习,设计上有什么缺漏请多指教

核心思想

  1. 模块为最小化购买单位 例如商城模块 分销模块等
  2. 多个模块组合成为一个版本  例如基础版本 旗舰版等
  3. 每个模块都关联了对应的接口/页面路由  将对应的关系上报给配置中心
  4. 根据租户购买情况 得出用户有哪些模块的权限 进而每个用户显示不同的功能及权限 由租户网关统一校验
  5. 以此达成多租户共享同一套应用程序但各自使用不同的模块

应用层架构图

初代SAAS平台应用层架构设计_第1张图片

模块

  1. 模块是SAAS购买/赠送的最小单位 例如商城模块,活动模块等 每个模块都有对应的定价
  2. 一个模块可以配置这个模块包含了哪些页面和接口
  3. 每个模块启动时自动向配置中心提交自己归属的页面和接口 用于网关校验
  4. 模块是被定制化的最小单位,可标记这个模块在某个租户上是否被定制化,若是已定制化的标记,则路由到定制化后的服务上去,具体的接口和页面的配置也已定制化后的为准

版本

  1. 多个模块组合打包即成为一个版本
  2. 用户可以版本为单位进行购买 批量获得各个模块的权限

前台与后台

  1. 以微商城SAAS举例  给到消费者用的页面等为前台
  2. 商户管理店铺的端口为后台

配置中心

  1. 每个模块将其对应包含的接口和页面启动时上报到配置中心

统一租户网关

  1. 实现SSO登录及其校验
  2. 租户及租户的客户每次访问页面或调用接口时  读取配置中心配置  校验其是否有这个页面/接口的权限 决定是否放行
  3. 对租户的租约到期时间进行校验 若已到期或快要到期的 则跳转引导续费
  4. 判断该租户的模块是否被定制化 若已定制化 则转发到对应的定制化模块上
  5. 提供接口给租户查询自己拥有多少个模块及其页面和接口

功能页面

  1. 具体功能对应的页面则为功能页面 例如商城页面等
  2. 每个页面可能包含多个模块的功能 页面前端组件根据该租户已购的模块动态显示/隐藏对应的组件 实现租户页面动态显示

非功能页面

  1. 续费 充值 支付等页面为非功能页面
  2. 这类页面不用经过网关校验 属于路由白名单

通用模块

  1. 即无需购买都有的模块 例如账号密码管理 子账号管理等
  2. 对应的接口和页面都为非功能页面/接口

租户购买/续费

  1. 即记录该租户和具体的哪些模块的关联关系及其租约到期时间
  2. 视为该租户已经购入了这个模块

小节

整体租户使用时调用路径如下:

访问页面:

  1. 根据路由规则或读取得出该页面关联有多少哪些个模块
  2. 网关校验该租户是否有这个页面的权限  即该用户有无购入该页面关联的模块  有则放行
  3. 当前是否处在即将到期或已到期状态下  不是则放行
  4. 根据该租户购有的模块 动态显示页面上的组件  即页面上本可有但用户没有购买的组件则隐藏不显示

调用接口:

  1. 根据路由规则得出该接口关联在哪个模块
  2. 网关校验该租户是否有这个接口的权限 即该用户有无购入这个接口对应的模块 有则放行
  3. 当前是否处在即将到期或已到期状态下  不是则放行

以此应用架构下,新增功能时可以水平扩充多个模块并保持灵活的权限控制,并且支持小部分客户的定制化,做到定制化且不影响原有的非定制化的功能,缺点是租约网关负荷相对较大,需要使用缓存等减轻租约网关压力。

你可能感兴趣的:(架构,后端,java,开发语言,后端)