设计理念
V8 PaaS平台基于云原生技术,采用前后端分离、微服务架构设计思想,满足协同办公平台对高性能、高并发、高可用以及多租户、多云适配等方面的要求。
总体定位
V8 PaaS平台提供基于SpringBoot框架扩展开发的统一微服务基础框架支撑体系,包括微服务框架、持久化及数据源、对象存储、缓存、消息、事件、日志、线程池、分布式锁、脚本引擎等。
整体架构
总框架图
技术栈
COP平台总体采用前后端分离的架构实现,后端基于Java、前端基于React可实现。针对数据存储、消息缓存、统一配置、服务注册发现、限流熔断、分布式锁、研发效能、数据分析以及前端应用采用了当前主流的相关技术栈实现。
基于当前微服务主流的技术体系构建封装了一系列组件,解决微服务开发实现中面临的通用问题。
关键能力
Web容器
采用Spring ControllerAdvice统一切面实现Web请求的统一处理。对Web的统一封装,实现参数、异常的统一处理,通过配置注入的方式实现tomcat的优化参数的灵活调整。
注册配置
基于Nacos作为平台的统一的配置及服务注册发现中心,实现应用、组件的统一配置,同时作为Rest服务的统一的注册中心,也支持平台后端Dubbo服务的注册发现。
限流熔断
限流熔断组件提供框架基础级别限流降级、熔断的统一处理,同时基于Sentinel实现限流降级熔断及关键链路保护的支持及动态配置。
Swagger
提供统一的注解模型,采用swagger实现基于注解方式统一生成api接口文档描述。实现前端后服务接口契约的统一描述。
分布式缓存
分布式换窜组件提供采用SpringCache注解方式使用分布式缓存的能力,支持对租户及环境的隔离。提供统一的RedisTemplate实现对Redis缓存的读写支持以及对缓存的数据序列化能力。
分布式消息
基于RocketMQ和Kafka原生Client实现读分布式消息发布、订阅功能的封装实现。提供统一的注解、API实现对消息的发送和订阅消费,支持针对消息队列长度、消费线程以及MQ组件开启关闭的配置支持。
数据持久化
基于Mybatis实现数据持久层访问的封装,提供mybatis的规范使用和能力封装,整合Mapper扩展Dao支持对关系型数据库的CRUD自动处理,同时支持应用数据的多条件分页查询自动处理等能力。
RPC调用
基于Dubbo实现Consumer、Provider的配置能力。提供针对Dubbo的注册中心、监听接口、Mock接口、指定服务消费、日志以及线程队列等参数的配置能力。
分布式事务
分布式事务组件提供了基于注解方式实现SAGA或者TCC分布式事务的支持。借助于该组件及分布式事务协调服务,应用可实现跨服务调用的分布式事务的一致性保障,满足在特性业务场景的分布式事务支持。
分布式文件
分布式文件访问组件支持公有云对象存储服务(OBS、OSS服务)以及私有化部署MinIO文件存储服务的支持。组件提供上传文件签名、下载签名、缩略图以及后端的上传、下载、缩略图等分布式文件访问接口。同时提供规范统一的SPI接口能力,可实现对私有化对象存储服务的适配支持。
线程池
基于ExecutorService实现统一的多线程异步处理能力、线程池的统一配置能力,包括核心线程数,线程上限,任务队列等。组件标准提供对多租户隔离的支持。
数据初始化
数据初始化组件提供对标准应用、动态加载Jar、租户数据调用、MQ推送、跨环境迁移五个场景的数据初始化能力支持。组件提供对数据接口的版本更新并实现了对租户数据初始化的支持。
Prometheus
Prometheus组件为应用提供自动接入Prometheus基础监控的能力。组件提供了统一的注解、API,应用可灵活采用合适的方式实现对业务应用在计数、统计、采样等多方面的监控数据采集。
EventBus
EventBus组件提供统一的事件发布订阅处理,用于在应用内部进行事件的订阅、分发,支持事件的同步、异步监听处理。
Sharding-JDBC
Sharding-JDBC提供基于关系型数据库读写分离和分库分表的支持,可通过配置化方式实现对业务表的分库分表策略调整,满足海量数据的快速读写。
技术特性
统一的编程模型
平台提供了统一的编程模型,包括Controller、AppService、实体、Dao以及统一的注解模型。 基于这些统一的编程模式可实现应用的规范化开发,实现统一的异常处理、统一参数校验、统一脱敏、统一的元数据管理以及统一的API管理等。
微服务
平台采用微服务架构实现,针对协同运营中台能力对协同服务进行合理的微服务划分,包括:元数据中心、消息中心、用户中心、WebApi接入网关、组织模型、门户、流程服务、UDC、数据中台、待办中心、基础应用、M5、Office转换服务、连接器、开放平台管理服务、开放平台网关、能力接入服务、运维管理平台等。微服务总体架构如下图所示:
基于运营中台服务的能力支撑,可通过UDC的业务定制能力实现上层应用的快速灵活搭建,也可以基于统一的开放规范进行上层应用的开发实现。
一级分类 | 二级分类 | 微服务 | 微服务能力 |
---|---|---|---|
平台 | 基础平台 | ctp-webapi-gateway | webApi网关 |
ctp-user | 用户中心(含应用中心) | ||
ctp-message | 消息中心 | ||
ctp-affair | 待办中心 | ||
app-common | 基础应用 | ||
中台能力 & 应用 | 组织 | organization | 组织模型 |
门户 | portal | 只包含公共栏目和动态栏目的创建能力、栏目管理能力,基本上不依赖main | |
BPM | bpm | BPM引擎 | |
UDC | udc | 低代码平台 | |
数据BI | cdp-data | 数据工厂与指标管理,全文检索,报表中心 | |
数据分析 | cdp-schedule | 数据分析作业服务 | |
集成连接 | cip-openapi-gateway | 开放平台网关 | |
cip-connector | 连接器 | ||
cip-capability | 能力接入中心 | ||
cip-manager | 集成插件管理,能力接入管理,开放平台管理,连接器管理 | ||
cip-convert | HTML转换服务 | ||
移动 | m5 | 移动平台 | |
应用 | app-approval | 审批应用 |
容器化
平台微服务基于JWT Token实现用户的统一认证和授权。服务采用无状态化设计,满足基于K8S集群进行服务的容器化部署,可实现服务自动扩缩容的线性扩展。
多云适配
平台基于容器化部署,提供对公有云、私有云、混合云的适配支持。平台提供统一的适配层,可实现对数据库、缓存、消息、运维监控、日志、对象存储等中间件服务的配置或接口实现的适配运行。适配参考清单如下:
分类 | 资源 | 说明 | 方式 |
---|---|---|---|
基础设施 | K8S集群 | 版本要求不能低于1.17.3 提供管理控制的认证信息 | 适配 |
Kafka | 需要创建相关的Topic | 适配 | |
Redis | Redis 5.0及以上集群版本 | 适配 | |
TiDB/Mysql | 5.7及以上版本 | 适配 | |
Nginx(SLB等) | 增加基于子域名的路由配置 | 适配 | |
Nacos | 3节点集群部署 | 自建或适配 | |
对象存储 | 提供统一的API进行适配开发 | 适配 | |
数据中台 | ClickHouse | 21.9.4.35 | 适配 |
ElasticSearch | 7.13.4 | 适配 | |
服务治理 | 限流熔断降级 | 提供非侵入式的接入规范 | 自建或适配 |
运维监控 | 分布式日志 | 支持非侵入探针接入 | 适配 |
调用链监控 | 支持非侵入探针接入 | 自建或适配 | |
监控告警 | 支持非侵入探针接入 | 自建或适配 |
标准化适配阿里云、华为云等公有云
针对阿里云、华为云、腾讯云等公有云实现了标准适配支持。其中后端服务基于Yaml编排部署到云端的K8S集群节点中,通过中间件服务访问组件封装实现对象存储、Redis缓存、消息中间件以及数仓服务的适配。基于阿里云、华为云等提供的运维监控、日志及调用链服务实现对服务的基础指标监控以及日志和调用链的采集监控。
公有云适配清单
分类 | 资源 | 方式 |
---|---|---|
基础设施 | 容器服务ACK | 标准适配 |
消息队列Kafka版 | 标准适配 | |
云数据库Redis版 | 标准适配 | |
云数据库RDS版 | 标准适配 | |
负载均衡SLB | 配置适配 | |
微服务引擎MSE | 标准适配 | |
对象存储OSS | 标准适配 | |
数据中台 | 云数据库Hbase版 | 标准适配 |
云计算Flink版 | 配置适配 | |
云数据库ClickHouse | 标准适配 | |
ElasticSearch | 标准适配 | |
运维监控 | 分布式日志 | 配置适配 |
调用链路 | 标准适配 | |
云监控 | 配置适配 |
可扩展适配私有云
平台提供针对中间件访问组件的SPI扩展机制。基于SPI接口的扩展可实现对私有云非标准协议服务的适配扩展支持。通过SPI扩展模式可实现对私有化对象存储、日志、监控、缓存、数据库、消息中间件等服务的适配运行。
多租户
按照一套系统按照不同企业实体进行数据隔离。一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。
基于中间件适配层组件实现了对多租户的隔离。在数据库持久化操作、Dubbo RPC调用、分布式缓存读写、分布式消息发送、Event订阅以及多线程处理中对租户ID进行了透明化传输并实现了跨服务处理的租户自动隔离。租户隔离的处理方案如下图所示:
DevOps体系支持
统一的DevOps体系实现基于代码自动扫描构建、服务打包及推送部署。支持对前端应用、后端服务、移动App的自动化部署。基于K8S命名空间实现多环境的隔离部署,支持服务滚动升级部署。
部署图
服务采用容器化和对象存储结合的部署方式,后端基于K8S容器化部署,前端资源部署在对象存储服务中。通过统一的负载均衡以及CDN加速实现前端资源的定位转发。基于WebApi网关实现前端到后端服务请求的统一转发,同时提供OpenApi网关实现对第三方接入的统一认证路由处理。
信创支持
平台在开源组件的选型使用上优先采用优秀的国产开源产品,同时提供组件对信创体系的软硬件进行适配支持。在遵循标准方便,采用统一的Linux及数据库SQL92标准进行开发,实现对信创操作系统以及数据库层面的标准支持。
多环境支持
支持部署多套环境,包括:开发环境、测试环境、正式环境,可以在测试环境中配置表单、流程,测试通过后,一键发布到正式环境,正式环境无需做任何业务配置。
统一日志管理
日志管理功能完整记录了用户操作、登录、退出日志,授权以及越权日志,可以用于审计、跟踪IP、登录用户操作,防止和跟踪其他非法入侵。日志包括登录登出日志、操作日志、权限变更日志等,功能包括日志查询、日志审计等。
系统具有完善的日志链路监控管理机制,可详细记录系统自身运行日志和用户登录的应用日志,支持通过日志管理功能查询文档被访问、被操作的历史记载,同时用于查看系统配置库中有关用户权限变动的内容。如:更改部门信息、创建个人、更新个人信息、删除个人、创建部门、更新部门信息、删除部门、创建群组、更新群组信息、删除群组、修改密码等操作。
弹性部署
V8统一提供多种服务组合和部署模式,满足 小型、中型、大型企业在不同Iaas基础能力、不同IT运维能力、不同业务需求情况下的诉求。
服务组合弹性部署主流程:
大型:Iass、微服务、扩缩容、统一日志监控、统一运维、部署[K8S]
中型:无Iaas、微服务、高可用、部署[虚机|物理机|容器]
小型:无Iaas、单体 All-In-One、部署[容器]