阿里巴巴集团千亿级别店铺系统架构平台化技术实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 阿里巴巴集团千亿级别店铺
系统架构平台化技术实践
许洋波/伏魔
2.
3.
4.
5.
6. 个人介绍
许洋波,花名伏魔,2010年加入阿里巴巴,历经国际交易技术部、
业务平台事业部,在支撑各种业务快速发展的实战中,对于平台化、架
构、稳定性、开放、生态,均积累了一些实战经验。
目前为集团店铺装修建站平台TL。
致力于解决分布式、高并发、大数据量、移动、双十一、平台化等带
来的各种技术难题及挑战,构建和持续优化公司基础架构、基础服务,
保证高可靠、高性能、高可扩展性、低成本的快速支撑业务。
7. 大纲
店铺介绍
纵向架构分层
水平横向扩展
模块化容器化及开放
性能&稳定性
8. 店铺介绍
9. 纵向架构分层
随着业务和历史累积,越来越难维护
超过十年历史、业务越来越庞大、复杂
50个应用、200万行代码
划清边界、纵向架构分层、分别治理
业务层
深度抽象、处变不惊的是领域层
一般抽象、沉淀公共底层能力的是逻辑层 配置层
沉淀公共业务变更的是配置层 逻辑层
自由尺度大、持续在变的是业务层 领域层
10. 纵向架构分层
业务
应用层
配置层
逻辑层
领域层
PC店铺前台
店铺装修后台
无线店铺前台
装修编辑器配置、安全规则配置、装修规则配置、
数据源配置、依赖配置、中间件配置
页面开放、模块开放、站点开放
装修服务
渲染服务
页面路由 页面渲染 页面预览
页面降级 模块渲染 ……
页面初始化
备份还原
装修建站领域服务
模板应用
模块操作
页面操作
……
11. 水平横向扩展
同类业务越来越多,A业务与B业务之间相互受到影响
代码逻辑相互影响
故障和线上问题也相互影响
底层架构保持一致、横向扩展隔离影响
架构上支持水平横向扩展
业务上垂直切分分组
部署上物理隔离
12. 垂直切分横向扩展 浏览前台
装修后台
Web Server
业务层
国内店铺
Web Server
浏览前台 装修后台
Web Server Web Server
浏览前台 装修后台
Web Server Web Server
通用站点
国际店铺
…
配置层
服务层
业务身份
配置层
安全规则
装修规则
站点配置
页面开放
模块开放
…
(领域层+逻辑层+配置层)
Server
依赖层
其他配置
Server
Server
…
Database
国内店铺
Database
国际店铺
Database
通用建站
13. 模块化容器化及开放
同一个垂直业务内部逻辑越来越多越来越复杂,难开发、难维护
跟业务强相关 开发模块排查模块问题都要熟悉各BU业务的情况,且
业务模块数量一直在快速增加
模块难开发和管理 模块采用groovy脚本方式开发和管理
开发上存在依赖 原有的groovy脚本模块开发严重依赖应用环境
开发频率高 店铺页面成为大促常态化后,模块开发越来越高频
开发资源瓶颈 店铺属于核心业务环节,外部20多个BU的业务都依赖
店铺,开发资源成为瓶颈
14. 什么是模块?
15. 什么是模块?- 页面更细粒度的原子划分
16. 什么是模块?- 页面组装及个性化的原料
17. 模块化容器化分层
前台
协议
前端
前台
展示
PC
协议
PC
前端
pc浏览器展示
数据和前台模板结合成的html
无线
协议
Html模块
pc模块渲染JS
数据和模板结合成的字符串
weex模块
H5模块
无线
前端
前端组件
手淘/猫客weex引擎
weex组件
模块输出数据
模块输出数据
模块
容器
业务
模块1
模块
模块2
客户端展示
手机浏览器展示
模块3
模块引擎
模块4
模块5
模块6
…
模块SDK(依赖、数据源)
监控
调试
统计
18. 模块开放步骤
19. 模块开放流程
模块引擎编译服务
模板代码编译成字节码
开发并提交代码
创建后端工程
发布上线
实例化成类并且常
驻内存
模块运行的应用
容器
模块正式DB
模块非正式DB
创建模块
协议
约定
1. 定义表单
2. 定义表单数据格式
3. 定义前台数据格式
将模块的前端资源
名称及版本号写入DB
开发并提交代码
创建前端工程
发布上线
前端代码仓库
前端资源发布到
CDN
20. 模块开放特性
几个关键点:
定义模块标准、流程切分成前后端分离两部分独立开发
模块各自有自己的前、后端代码,模块之间独立、隔离、互不影响
*后端半自动化生成工程代码、前端脚手架生成基本框架
*后端沉淀数据源及依赖集成sdk jar包
前后端各自能够独立运行和本地单元测试
*模块引擎上实现模块报表、调试、监控可扩展可插拔
前后端能根据数据协议对接联调预览
无需发布应用,后端用java写代码提交给容器编译成字节码后运行
21. 模块开放特性-代码半自动生成
模块代码半自动化生成:
自动生成模块java类和execute方法
自动生成方法的入参和出参
自动引入容器所需依赖二方、三方包
自动依赖模块sdk,里面集成所有数据源
自动注入所需的数据源spring bean
自动生成单元测试骨干代码本地测试
目的&效果:
开发者无需了解环境、依赖,出参入参都已定义好了,只剩下一个
业务逻辑转换TODO
22. 模块开放特性-SDK
模块SDK:
整合了容器所有能依赖依赖二方、三方包
集成了模块能用的所有数据源
生成模块工程时自动依赖模块sdk jar
目的&效果:
模块所有能用的类和数据源都能受掌控,与容器保持一致
脱离容器在线下依赖SDK即可开发和运行
23. 模块开放特性-模块执行引擎
性能:
编译java源码耗时1~2秒,但是推送模块时已经经过了预编译成字节码
模块推送到容器后会编译成字节码,实例化成类实例耗时5毫秒左右
执行引擎会对类实例进行版本更替和管理,并且进行缓存,平均耗时
0毫秒左右
执行引擎自身耗时可以等价于0,性能上耗时可忽略
扩展:
执行引擎支持模块的问题监控、性能监控、业务监控
并且插件化、支持插件扩展和自定义实现,对引擎无侵入
24. 店铺的性能&稳定性
性能挑战:
每秒20万次web请求
对后端的请求量约为400万次每秒
典型的高并发浏览型系统
25. 性能&稳定性
高并发架构设计:
三级缓存前置 挡掉大部分流量冲击
读写拆分部署 拆分成读应用、写应用、读服务、写服务;分开部
署、互不干扰
对等设计、无状态 应用能水平横向扩展,加机器一定能解决性能问题
DB分库分表,读写分离 写主库,读主从库,可横向水平扩展从库
26. 性能&稳定性
性能、稳定性、体验之间的平衡:
多单元多机房异地部署 应对机房断电、断网、自然灾害,切换流量
限流 流量超出承受能力时挡掉超载容量,牺牲部分用
户,保全大局
降级 在某些情况下下线部分功能或体验,避免问题或
影响扩大化
27. 未来挑战
阿里巴巴集团电商前台80%的导购
流量;每年挑战新的极限、并且通过
中台去构建电商的未来,同时也在国
际化进程中铺向全球。
欢迎一起交流,渴求需要成长空间
的同学。
yangbo.xuyb@alibaba-inc.com
28.