技术中台在中通的实践
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2. 技术中台在中通的实践
中通科技-基础平台部-肖文科
2021年05月
3. 自我介绍
肖文科
技术中台负责人
2013年加入中通,近几年主要负责技术中台的建设工作,
包含了公司内部的统一框架、统一接入层、中间件平台、应
用性能监控等。
这里放图片
ZMS(中通消息平台)
https://gitee.com/zto_express/zms
ZCAT(中通应用性能监控系统)
https://gitee.com/zto_express/zcat
4. 01
背景介绍
02
CONTENT
目录>>
实践分享
1、整体介绍
2、实践过程
03
存在问题
1、当前问题
2、原因分析
04
未来规划
1、概览
2、技术选型
5. 背景介绍
介绍中通科技技术中台建设的背景以及当前
实践的具体情况
6. 背景介绍
2013
自研业务系统(.NET+Java)
开始全面由外包业务系统转变为自研业务系统
(.NET为主,Java为辅)
2017
新一代业务系统(Java)
2017年全面替代上一代自研业务系统拥抱微服
务(Java)
当下
研发团队规模
技术团队人员规模超过1000人,覆盖快递业务全场景,
同时提供生态圈(快运、国际、云仓、优选、金融)
业务全方位的研发支持
双十一大考
经历了多年的双11大考,在日处理订单量峰值已超
过2亿+的业务场景下,技术中台已覆盖上游数百
套业务产品线2000+应用高效、稳定的运行
7. 实践分享
从整体上介绍技术中台概貌以及在中通的实
践过程
8. 实践分享-整体介绍
技术中台能力介绍
技术中台能力在从统一框架、统一接入层、应用监控诊断、
配置与治理、中间件平台五个部分组成,涵盖了业务应用从
创建到上线的整个过程
统一框架
主要分为服务端框架Titans、前端框架ZUI、移动框架
LEGO。
统一接入层
接入层,避免重复性劳动,解耦业务和非业务的功能,
让业务更加聚焦,提升整体的系统健壮性和可用性。
应用性能监控
应用上线后,监控、链路跟踪是帮助研发识别问题、
快速止血的有效手段,能够帮助应用在线上健康运行
配置与治理
配置与治理服务于应用生命周期内提供配置的热更新,
服务熔断 、降级、蓝绿、灰度,全链路的压测等能力
中间件平台
基于主流中间件在消息、缓存、调度、搜索等领域不
断探索技术深度,在对应领域提供最佳的解决实践方
案,为研发人员赋能,降本增效
9. 实践分享-统一框架
资源浪费
相同的技术栈重复性的经历预
研、使用、踩坑等多个阶段,
造成人员、设备的浪费
01
02
跨团队协作
跨团队之间的协作,如API调
用、消息投递、权限、加密等
标准问题,无法达成一致,造
成团队之间的协作问题
为什么要
统一框架
项目风险
项目交接、人员变更对项目的
影响太大
产品体系化
04
03
1、对外基于框架输出的产品统一
2、对内研发过程统一
10. 实践分享-统一框架(Titans后端框架)
基础框架
基于SpringBoot之上实现通用的容器来管
理组件/插件的生命周期(注册、启用、
停用、更新),使组件/插件具备自由的
可插拔的能力,同时借助统一配置分发
可做到组件/插件配置热更新
通用组件/插件
组件:框架主动提供的核心能力(微服
务、调度、MQ、分库分表)
插件:框架针对部分能力做了扩展
(APM、治理、全链路压测、健康检查)
研发工具
1、脚 手架
2、代码生成
3、规范、扫描、多环境全局配置
11. 实践分享-统一框架(Lego移动框架)
基础框架
基于Android/IOS分别实现了原生、RN、
H5组件的运行容器及统一路由,便于上
层组件的业务功能实现
业务/技术组件
业务组件:通过路由唤起一个完整的业
务功能的组件(扫描、网络电话、打印)
技术组件:框架本身的增强特性(推送、
配置、升级、热修复)
研发工具
1、组件的创建脚手架
2、发布工具
3、日志、监控等
12. 实践分享-统一框架(ZUI前端框架)
UI/SDK库
UI 组 件 库 : 基 于 ZTODesign 定 制 了
ZUI/MZUI的组件样式
SDK组件库:通用的框架功能增强库(监
控、灰度、推送等)
模板
1、工作台模板:基于ZUI的完整后台模
板,可以随意切换多种模式,SSO版/网
关版
2、在线设计器:基于界面拖拉拽生成
json配置即可生成UI界面
研发工具
1、脚手架
2、图标库
3、API代码生成
13. 实践分享-统一接入层(应用场景介绍)
开放平台商户
PC 端用户
手机端用户
提升效率
1、解耦业务与非业务之间差异(协议、
前后端对接流程、多端推送等)
2、统一提供鉴权,限流,熔断等
3、减少定制化开发(聚合、映射)
通知
ZPush
(推送)
Ingress
提升稳定性
推送
针对新版本服务上线可自定义流量放入
比例,也支持自定义groovy脚本定制化
指定标签特性的用户流量流入新版本,
用户
ZGW
(网关)
从而缩小不稳定的风险
ZGW
(网关)
排班
提升安全性
降低业务线产品直接向外网开放的风险,
网点
业务域 A
轨迹
组织
架构
班车
与安全团队协作针对网关安全漏洞针对
性测试,及提供定制化的黑白名单、防
刷等特性
业务域 B
14. 实践分享-统一接入层(ZGW网关)
运管平台
统一管理网关的整个生命周期,包含以
下步骤:环境->namespace->api->鉴
权->治理等
同时也承担了运维工作如网关的在创建、
伸缩、监控等
Proxy进程
1、全异步通讯提高性能
2、两大插件体系
执行过滤器实现参数映射、鉴权、灰度、
限流等特性
协议适配器实现了多种后端服务协议
(dubbo/http/mq)
服务聚合进程
支持两种聚合语法,分别是内嵌了
Groovy和GraphQL两大引擎,借助运营
平台API管理模块的在线编写聚合服务,
可以较快的定制一个服务聚合后的新API
15. 实践分享-统一接入层(ZGW网关)
16. 实践分享-统一接入层(ZGW网关)
17. 实践分享-统一接入层(ZPush推送平台)
客户端/渠道
1、全面覆盖多种类型终端统一推送API
2、对接多个厂家渠道保证送达率
推送平台
1、渠道优先级路由
2、按标签拆分批量推送
3、推送指标分析
运管控制台
管理推送应用的完整声明周期:应用申
请->渠道配置->消息/标签/设备管理
同时也支承担了送达率、及时性的监控
告警职责
18. 实践分享-应用监控(背景)
2019
2017
基于内部Titans框架标准化埋点实现,
将上下游链路打通,标准化定义入口流
量类型及出口流量类型
同时搭建ELK补全Log采集的能力
ELK升级为ZLog系统,支持了在线
Agent安装、采集、解析、分析的能力
从而提升了各类型日志采集效率,日志
量从每天不到10T增长到近百T
开源版本CAT定制需求开发
2020
开源版本CAT升级为ZCAT,重新从数
据采集到底层存储再到UI展示完全重新
开发,支持定制化需求。
2016
开源版本CAT内部部署小范围适用,自
由埋点,追踪问题混乱
2021
研
19. 实践分享-应用性能监控(ZCAT)
多客户端SDK
1、基于用户无感知的自动插桩SDK
2、标准上报协议打通前后端链路
3、兼容开源版CAT的协议(新版本采用
PB)
数据收集计算服务
1、收集计算基于无锁环队列做缓冲,采
用多播模式实现Message存储及各类报
表。
2、Message和报表存储都采用近期内
存存储,超过一定时间或者大小后压缩
写磁盘,在允许少量数据丢失前提下保
证磁盘最大化顺序写入
3、数据查询引入SQL引擎,简化报表查
询复杂度
监控门户
1、以全局逐步放大到局部的视角展现应
用全方位信息,降低排障门槛。
2、通过路由规则实现统一门户应对多个
机房应用监控
20. 实践分享-应用性能监控(ZCAT排障之从全局到局部)
21. 实践分享-应用性能监控(ZCAT)
22. 实践分享-应用性能监控(ZLog)
ZLog控制台
1、以向导模式将agent->采集->解析-
>查询的步骤简化,降低日志分析的难度
2、内嵌Kibana提供日志检索及报表定
制
日志采集Agent
基于七牛Logkit二次开发,支持自定义
日志分隔符及统一控制台下发配置
解析存储
input->kafka多线程poll+本地缓存的机
制提升消费速度
filter->标准日志禁用正则匹配解析来降
低CPU占用
output->ES按分片元信息计算目标节点
写入,提升ES写入吞吐量
23. 实践分享-配置与治理(统一框架的扩展能力集合)
配置中心 微服务平台 移动灰度平台 全链路压测平台
基于开源产品Apollo二次开发,与 微服务平台提供了基于微服务的全 移动灰度平台配置移动框架Lego及 借助Titans框架的插件机制提供直
内部框架深度集成做到配置的动态、 生命周期管理(创建、上线、文档、 H5框架提供了App应用/模块/H5 接在生产环境对应用进行性能压测
各类资源链接动态、各类线上的开 Mock、熔断 、降级、蓝绿、灰度 的管理、热更新、灰度发布、配置 的能力,包含可视化的压测任务管
关、阈值的动态 等)的能力。 下发等能力 理平台、压测数据清洗、数据偏移、
数据隔离、压测指标收集与熔断等
功能。
24. 实践分享-配置与治理(Apollo配置中心之资源授权)
统一管理资源配置
做到资源的配置统一下发、变更,防止
资源配置到处复制带来的资源配置管理
混乱
精准化资源授权
资源授权关联到AppId级别,精准控制
某个资源能被哪些App访问
安全管控
针对资源配置全部加密返回(appId级
别),由框架运行时根据AppId的secret
进行解密,避免资源配置泄露风险
25. 实践分享-配置与治理(ZSM微服务平台)
服务全生命周期管理
从服务的定义->服务的开发->服务的测试
生成API文档
(开发阶段)
->服务的上线->服务的治理的全生命周期
管理,用户都可以在服务平台完成相关
的操作
生成前端代码
(开发阶段)
发布服务网关
(上线阶段)
提升各环节对接效率
统一服务元信息
推行服务开发的最佳实践,标准化服务
服务探测
Maven插件生成
后端API实现类
(开发阶段)
研发流程,统一定义后端服务元数据,
自动对接前端开发及测试,降低人员沟
线上服务治理
(上线阶段)
通成本,提升各环节的开发效率
沉淀服务集市
统一沉淀公司所有服务到服务平台,做
生成测试用例
(测试阶段)
到服务定义明确,随用随取。
26. 实践分享-配置与治理(ZSM服务平台)
27. 实践分享-配置与治理(ZSM服务平台)
28. 实践分享-配置与治理(ZGP灰度平台)
29. 实践分享-配置与治理(ZPT全链路压测)
全链路压测SDK
SDK由内核和基于框架的插件两部分组成:
内核:提供通用的压测过程中对请求染色、
链路传递过程中保证标记不丢失的能力
插件:实现了各类数据存储过程中准确的
写入影子资源的能力
压测端
压测端基于Jmeter做为施压工具,通过
本地agent来管理压测工具的启停、压测
任务的下发等功能。
压测运营平台
负责压测机、压测任务、影子资源的管
理,同时也可以基于平台构建压测数据、
出具压测报告、日常的配置等功能
30. 实践分享-配置与治理(ZPT全链路压测)
31. 实践分享-中间件平台(提供了哪些能力)
ZMS消息平台 ZSS调度平台
ZMS消息平台是屏蔽底层消息中间件类型,通过唯一标识动态 ZSS统一任务调度平台是一款弹性调度中间件,提供分布式
路由消息,为开发运维人员提供主题、消费组申请与审批、实时 调度、弹性伸缩、支持国际通用的Cron时间表达式、丰富的
监控、自动告警、容灾迁移等功能。 生命周期管理机制、DAG有向无环图任务执行工作流。
ZSearch搜索平台 ZDTP数据同步平台
ZSearch是基于ES集群化的运维管理产品,提供统一的搜索 数据同步平台,旨在为中通内部提供任意数据源到任意数据
Proxy,ES集群生命周期管理(创建,扩缩容,启停,插件, 源的实时、离线数据同步功能,满足各种异构数据源之间的
索引,脚本,定时任务),监控告警等。满足了内部多业务 实时、增量、自定义转换的同步,支撑公司业务的快速发展。
线,多版本,多集群的需求
ZCache缓存平台
ZCache统一的缓存平台提供了统一的缓存的Proxy,缓存的
一键部署、伸缩、配置变更、流控、监控、智能告警;
32. 实践分享-中间件平台(ZMS消息平台)
消息运管平台
从环境->集群->主题/消费的申请、安装、
升级/下线等管理功能到日常的监控、告
警、运维在线迁移等综合一体的运管平
台
ZMS SDK
1、屏蔽差异,统一API
2、集群路由热迁移
3、增强消息
ZMS各类组件服务
1、消息组件(RocketMQ/Kafka)
2、指标数据采集及告警组件
3、消息同步组件
33. 实践分享-中间件平台(ZSearch搜索平台)
ZSearch控制台
包括主机池、ES集群、逻辑Index申请、
创建、升级等运维操作以及日常使用的
监控告警等功能
Proxy
Proxy提供了标准的ES rest API转发能力,
根据逻辑Index路由到物理集群的能力,
以及提供SQL查询的能力,同时也在写入
场景做了加速优化.
逻辑Index
逻辑Index是面向用户的最小单元,他是
由1个Index模板、0+个Index、外加index
拆分策略如按月/日/周组成,逻辑Index
可以独占一个ES集群,也可以和其它集
群共享。
34. 实践分享-中间件平台(ZCache缓存平台)
Group
Group是面向用户最小单元,一个Group
由N组Redis Sentinel+其它存储组成,借
助Proxy来做数据分片,其它存储解决大
内部占用需要
Proxy
Proxy是一个兼容了Redis协议的代理进程,
主要屏蔽Group内部多节点、多类型缓存
的复杂性,同时借助Proxy层也可以做到
资源层面的控制,如流量控制、客户端
使用的指令控制
ZCache运管平台
运管平台包含了日常环境的创建/删除,
Group的申请、审核,Group里面Redis节
点的创建、更新,Proxy的路由及扩容等,
也支持多个Group之间的数据同步,监控
数据的采集告警等日常运维操作。
35. 实践分享-中间件平台(ZSS分布式调度平台)
调度器
调度器主要负责执行器的实例管理,状
态收集,任务的派发,批处理分片,
DAG工作流节点触发等功能,所有任务
都由调度器来管理,分配给具体执行器
执行
执行器/SDK
1、任务注册
2、任务执行
3、状态上报
运管平台
包含了多环境的创建、任务元信息的同
步、调度器的伸缩能力等以及任务的编
排、监控、告警等功能
36. 实践分享-中间件平台(ZSS调度平台)
37. 实践分享-中间件平台(ZDTP同步平台)
任意源->任意目标端
基于Flink CDC扩展各类数据源及管理其
Schema , 通 过 简 单 的 SQL 实 现 多 个
Schema之间的数据同步
数据同步需求自助化
通过平台化的方式区分出不同用户的职
责,如运维工程师管理数据源及数据源
对应的数据流向审核权,研发工程师负
责同步任务创建、申请。
38. 实践分享-中间件平台(ZDTP同步平台)
39. 存在问题
描述当前技术中台遇到哪些困难及问题分析
40. 存在的问题
侵入性强、升级成本高
框架SDK侵入业务代码中,边界不够清晰,
同时带来框架升级困难,依赖业务方重
新打包发布
中间件能力碎片化
随着中间件能力的不断迭代,新的特性
必须兼容老的API,造成各种历史包袱,
严重拖慢中间件的演进
安全管控能力弱
针对各类资源操作、服务间调用层面加
上安全策略困难,需要硬编码并升级
SDK/插件。效率低下
41. 未来规划
从整体上来介绍未来的方向及初步的技术选
型
42. 未来规划-ServiceMesh
数据面
不仅仅只是支持微服务层面的数据面,
期望数据面同时承载分库分表能力、搜
索Proxy路由能力、缓存路由能力,并提
供标准的资源原生协议(mysql/redis)
工程化
以产品、应用视角将服务的治理、应用
的配置、所能使用的中间件资源容量、
路由借助控制面统一下发、统一管理,
应用只需与sidercar进行交互,无需关注
中间件资源具体分布及大小
43. 未来规划-技术选型及初步实现
Sidercar扩展
基于MOSN扩展中间件资源代理
1、dubbo协议(自带)
2、redis路由(移植ZCacheProxy)
3、分库分表(移植小米的Gaea)
4、移植ZSearchProxy/ZMS SDK/....
控制面
1、自研Dubbo注册中心兼容ZK注册信息
同时支持MCP协议
2、实现各类配置推送(治理、安全、自
定义配置、中间件资源配置、路由规则)
3、对接应用运管平台及实现各类数据的
上报及采集
44. QA
QA
Q
有什么想知道的?
What would You like to know?
我想知道...
I wank to know...
A
45.