阿里巴巴 朱勇《阿里巴巴微服务技术实践》

朱勇(千臂),阿里巴巴中间件技术部高级技术专家。2009年硕士毕业加入B2B中国网站技术部,曾负责诚信通、企业采购等产品的架构和服务化工作;目前在阿里巴巴从事应用容器和微服务框架的开发、实施以及效率提升相关的工作。
展开查看详情

1.阿里巴巴微服务技术实践 阿里巴巴/中间件技术部 朱勇

2.

3.

4.自我介绍 朱勇(千臂) 2009 ~ 2013 阿里巴巴中间件 阿里巴巴中国网站 高级技术专家 收费产品诚信通服务化 企业采购部架构和服务化 关注点 2013 ~ 分布式架构 中间件技术部 微服务 热部署工具 HotCode2 性能优化 应用容器 Ali-tomcat 字节码及 Java agent 诊断 微服务框架 PandoraBoot Dubbo 开源生态建设

5.目录 Java 隔离容器 Pandora 微服务运维与诊断 2 4 1 3 5 阿里服务化架构演进 微服务框架 Pandora Boot 展望及 Q&A

6.阿里服务化架构演进 Part I

7.单一应用架构 技术栈 • Webx All in one • Spring + Ibatis • Jboss • 整个网站几个应用 • Oracle • 前台 web + 后台 ops + tasks • 业务 web + service/dao 各自开发 • 一起集成发布 存在的问题 • 合并时经常代码冲突 • 发布相互制约效率低下 • 应用代码庞大臃肿维护困难

8.垂直应用架构 按应用拆分 jar Service / DAO / Impl 都以二方库 jar 的形式提供出去 • 代码拆分,独立部署,流程隔离,技术栈没有太大变化 • 应用相互之间直接依赖二方库 • 问题: • 升级困难,要全网推动 • 数据库连接池压力大 商品 会员 交易

9.分布式服务架构 RPC API 与实现分离 • 使用 RPC 进行通信,服务端升级方便 • 各种服务中心出现,会员中心,商品中心,交易 中心等 • 技术栈: • Ali-tomcat • Pandora • Dubbo • HSF • 存在的问题: • 依赖冲突 • 中间件升级困难 • 应用配置服务 • 应用开发效率低下

10.微服务架构 Boot 拥抱微服务,提升开发体验和效率 • 应用更轻量、开发更简单 • 配置 • 编码 • 开发 • 调试 • 部署 • 技术栈: • Pandora Boot • Spring Boot

11.Java 隔离容器 Pandora Part 2

12.为什么需要隔离? 中间件与应用 中间件相互冲突 相互冲突 应用快速升级 中间件统一升级 发布的需求 统一运维的需求

13.Pandora 容器架构 基于 ClassLoader实现 Pandora/Spring Boot Jetty/JBoss • 插件体系 应用容器 • 生命周期 Ali-tomcat Standalone(main) • 事件体系 插件部署 类加载器 服务框架 消息组件 插件 Pandora 容器 生命周期 事件体系 配置组件 数据访问 提供中间件 使用所需 应用生命周期 的服务 的服务 的事件通知 App1 App2 应用

14.Pandora 结构与部署形式 pandora.sar/ ~/${app_name}/ | -- conf/ |-- bin/ | -- lib/ pandora 容器内部依赖 | |-- setenv.sh | | -- pandora.api.jar | |-- appctl.sh | | -- pandora.archive.jar | `--preload.sh | ` -- pandora.container.jar | | -- plugins/ pandora 插件列表 |-- target/ | | -- hsf/ | |-- ${app_name}.tgz | | | -- conf/ | |-- ${app_name}/ | | ` -- lib/ hsf 插件内部依赖 | |-- pandora.tgz | | -- tddl/ | `-- pandora.sar/ | | | -- conf/ ` ` ` -- lib/ • 与应用 tgz 包部署在一起 • 应用可单独升级 pandora.sar • 应用容器识别 –Dpandora.location,便于本地开发

15.现有架构的不足 OPTION 01 pandora 使用方式新人难理解 使用成本高 本地开发麻烦,需要配置 JVM 参数或借助 IDE OPTION 01 mvn 依赖与 pandora 实际运行版本不一 调试困难 致导致调试时行号对不上,或源码找不到 OPTION 01 pandora.sar 全家桶用户无法按需选择, 开发效率低 应用启动慢 新应用创建时多为复制老应用,遗留问题始终 OPTION 01 应用创建难 得不到清理解决,形成恶性循环 OPTION 01 启动脚本、自检、dockerfile 配置、上线流程复杂繁琐 部署运维难 应用状态不透明,容器及中间件状态是黑盒

16.微服务框架 Pandora Boot Part 3

17.开发人员的痛点 应用创建 开发调试 部署发布 应用状态 应用搭建无从下手 本地环境依赖太重 应用上线难 中间件黑盒子 从旧项目中 Copy 各种 IDE 插件 打包、脚本、自检 无法得到中间件的具体状态 基础中间件接入、包冲突严重 中间件问题无法 debug 调试 Docker File 配置繁锁 运行状态不透明 中间件代码不易引入 没有健康检测

18.Pandora Boot 解决方案 Pandora 改造 Pandora Boot 核心 Archive 革新中间件使用方式 Sar 包 Maven 化 Main 函数启动 Middleware-SDK Autoconfig/Junit 支持 Bootstrap Spring Boot 中间件模板工程 中间件 starter 运维脚本、Docker 模板 业务 starter 打通发布运维系统 中间件 Endpotins/health

19.Pandora 核心 Archive 化 Archive 抽象 • dir Plugin • Jar Diamond HSF Archive • Jar In Jar Jar Protocol 扩展 / Jar In Jar / Fat Jar Plugin TDDL ONS jar:file:/pandora.sar!/ Archive jar:file:/pandora.sar!/container.jar!/ jar:file:/pandora.sar!/plugins/hsf-plugin.jar!/ 整个 pandora.sar 是一个 Jar,插件是一个 Jar Pandora Container Archive 面向 URL 编程 pandora.sar Archive 从面向文件目录转为面向 URL 和标准的 URLClassLoader 对齐 从 URL 扫描 Pandora 插件启动

20.Pandora sar 包 maven 化 通过 maven 依赖 pandora.sar 包 积木式组合 / 依赖即所得 TDDL Diamond ONS 应用依赖无污染 PandoraClassloader 才会识别加载 普通 ClassLoader 不会加载

21.Pandora middleware-sdk maven 平板化依赖 middleware-sdk VS 依赖冲突严重 一个 maven 依赖 hsf/tddl/tair/ons,60M,196 jar 使用简单,4M 中间件功能不能保证 ASM字节码生成 Netty/thrift/logger 新增插件 / API 无维护成本 只有导出的 API 大量答疑 解决 Debug 问题 排查问题先要排查依赖 sources.jar / UTF-8 无乱码 难以升级 随 pandora.sar 包升级发布 应用依赖固化 / 升级困难 保证API和sar包对应

22.自动生成 sdk.jar / sources.jar ASM 保留 public/protected 删除 private field/method 函数抛出 RuntimeException SDK生成 hsf-sdk.jar hsf plugin 60+ jar/ 22M 扫描所有的lib jar 只保留导出类 可选的关联导出类 SDK源码 hsf-sdk-sources.jar 通过maven自动生成 UTF-8编码 无乱码

23.Pandora Boot 解决方案 Pandora 改造 Pandora Boot 核心 Archive 革新中间件使用方式 Sar 包 Maven 化 Main 函数启动 Middleware-SDK Autoconfig/Junit 支持 Bootstrap Spring Boot 中间件模板工程 中间件 starter 运维脚本、Docker 模板 业务 starter 打通发布运维系统 中间件 Endpotins/health

24.Pandora Boot 应用开发 % java -jar hsf-server.jar % mvn pandora-boot:run ...... ...... Service(pandora boot) startup in 8484 ms Service(pandora boot) startup in 12043 ms

25.Pandora Boot 解决方案 Pandora 改造 Pandora Boot 核心 Archive 革新中间件使用方式 Sar 包 Maven 化 Main 函数启动 Middleware-SDK Autoconfig/Junit 支持 Bootstrap Spring Boot 中间件模板工程 中间件 starter 运维脚本、Docker 模板 业务 starter 打通发布运维系统 中间件 Endpotins/health

26.与 Spring Boot 集成 Spring Boot starter 生态在 Pandora Boot 上无缝使用 Pandora Boot 与 Spring Boot 无缝集成 Pandora Boot 类隔离 + Spring Boot 快速开发 Spring Boot 的依赖是平板化的,难以解决依赖 冲突的问题。Pandora Boot 提供类隔离技术, 中间件与业务之间不会存在类冲突 Pandora Boot 提供完整的解决方案 Pandora Boot 是一套完整的解决方案,本地开发时 无缝集成 autoconfig,日常、线上部署无缝打通内 部发布、运维等系统

27.在 Spring Boot 中使用 HSF 使用 annotation 简单的发布、消费、测试 HSF 服务 HSF 服务 Spring Boot 自动装配 单元测试 @HSFProvider @HSFConsumer @RunWith @HSFProvider(serviceInterface=HelloW @HSFConsumer 注入服务调用方 @RunWith(PandoraBootRunner.class) 进 orldServlce.class) 标注需要暴露出去的远程 @SpringBootApplication 自动装配 行基于 Pandora 的单元测试 服务

28.中间件 Endpoints / Health Endpoints Health Metrics 运行时信息 运行时状态 黑盒 -> 白盒 环境信息 应用 / 组件状态 查看实时数据 curl 中间件内部信息 中间件状态 与外部对接查看历史数据 用户配置等

29.Pandora Boot starter 列表 中间件 18+ 业务类 10+ ü hsf ü 登录 ü diamond ü 会员 ü Message ü ACL ü Cache ü LOG ü Data ü 地址库 ü Monitor ü 类目 ü Metrics ü …… ü Scheduler ü ……