阿里巴巴微服务技术实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 阿里巴巴微服务技术实践 阿里巴巴/中间件技术部 朱勇
2.
3.
4. 自我介绍 朱勇(千臂) 阿里巴巴中间件 高级技术专家 关注点 分布式架构 微服务 性能优化 字节码及 Java agent 诊断 2009 ~ 2013 阿里巴巴中国网站 收费产品诚信通服务化 企业采购部架构和服务化 2013 ~ 中间件技术部 热部署工具 HotCode2 应用容器 Ali-tomcat 微服务框架 PandoraBoot Dubbo 开源生态建设
5. 目录 Java 隔离容器 Pandora 微服务运维与诊断 2 4 1 3 5 阿里服务化架构演进 微服务框架 Pandora Boot 展望及 Q&A
6. 阿里服务化架构演进 Part I
7. 单一应用架构 技术栈 All in one • • • • 整个网站几个应用 前台 web + 后台 ops + tasks 业务 web + service/dao 各自开发 一起集成发布 • • • • Webx Spring + Ibatis Jboss Oracle 存在的问题 • • • 合并时经常代码冲突 发布相互制约效率低下 应用代码庞大臃肿维护困难
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/ | -- conf/ | -- lib/ pandora 容器内部依赖 | | -- pandora.api.jar | | -- pandora.archive.jar | ` -- pandora.container.jar | -- plugins/ pandora 插件列表 | | -- hsf/ | | | -- conf/ | | ` -- lib/ hsf 插件内部依赖 | | -- tddl/ | | | -- conf/ ` ` ` -- lib/ • • • ~/${app_name}/ |-- bin/ | |-- setenv.sh | |-- appctl.sh | `--preload.sh | |-- target/ | |-- ${app_name}.tgz | |-- ${app_name}/ | |-- pandora.tgz | `-- pandora.sar/ 与应用 tgz 包部署在一起 应用可单独升级 pandora.sar 应用容器识别 –Dpandora.location,便于本地开发
15. 现有架构的不足 OPTION 01 使用成本高 pandora 使用方式新人难理解 本地开发麻烦,需要配置 JVM 参数或借助 IDE 调试困难 mvn 依赖与 pandora 实际运行版本不一 致导致调试时行号对不上,或源码找不到 开发效率低 pandora.sar 全家桶用户无法按需选择, 应用启动慢 OPTION 01 OPTION 01 OPTION 01 应用创建难 OPTION 01 部署运维难 新应用创建时多为复制老应用,遗留问题始终 得不到清理解决,形成恶性循环 启动脚本、自检、dockerfile 配置、上线流程复杂繁琐 应用状态不透明,容器及中间件状态是黑盒
16. 微服务框架 Pandora Boot Part 3
17. 开发人员的痛点 应用创建 应用搭建无从下手 从旧项目中 Copy 基础中间件接入、包冲突严重 中间件代码不易引入 开发调试 本地环境依赖太重 各种 IDE 插件 中间件问题无法 debug 调试 部署发布 应用上线难 打包、脚本、自检 Docker File 配置繁锁 应用状态 中间件黑盒子 无法得到中间件的具体状态 运行状态不透明 没有健康检测
18. Pandora Boot 解决方案 Pandora 改造 核心 Archive Sar 包 Maven 化 Middleware-SDK Bootstrap 中间件模板工程 运维脚本、Docker 模板 打通发布运维系统 Pandora Boot 革新中间件使用方式 Main 函数启动 Autoconfig/Junit 支持 Spring Boot 中间件 starter 业务 starter 中间件 Endpotins/health
19. Pandora 核心 Archive 化 Archive 抽象 • dir • Jar • Jar In Jar Jar Protocol 扩展 / Jar In Jar / Fat Jar jar:file:/pandora.sar!/ jar:file:/pandora.sar!/container.jar!/ jar:file:/pandora.sar!/plugins/hsf-plugin.jar!/ 整个 pandora.sar 是一个 Jar,插件是一个 Jar 面向 URL 编程 从面向文件目录转为面向 URL 和标准的 URLClassLoader 对齐 从 URL 扫描 Pandora 插件启动 Plugin Diamond HSF Archive Plugin TDDL ONS Archive Pandora Container Archive pandora.sar Archive
20. Pandora sar 包 maven 化 通过 maven 依赖 pandora.sar 包 积木式组合 / 依赖即所得 TDDL Diamond 应用依赖无污染 PandoraClassloader 才会识别加载 普通 ClassLoader 不会加载 ONS
21. Pandora middleware-sdk middleware-sdk maven 平板化依赖 依赖冲突严重 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 plugin 60+ jar/ 22M hsf-sdk.jar 扫描所有的lib jar 只保留导出类 可选的关联导出类 hsf-sdk-sources.jar SDK源码 通过maven自动生成 UTF-8编码 无乱码
23. Pandora Boot 解决方案 Pandora 改造 核心 Archive Sar 包 Maven 化 Middleware-SDK Bootstrap 中间件模板工程 运维脚本、Docker 模板 打通发布运维系统 Pandora Boot 革新中间件使用方式 Main 函数启动 Autoconfig/Junit 支持 Spring Boot 中间件 starter 业务 starter 中间件 Endpotins/health
24. Pandora Boot 应用开发 % java -jar hsf-server.jar ...... Service(pandora boot) startup in 8484 ms % mvn pandora-boot:run ...... Service(pandora boot) startup in 12043 ms
25. Pandora Boot 解决方案 Pandora 改造 核心 Archive Sar 包 Maven 化 Middleware-SDK Bootstrap 中间件模板工程 运维脚本、Docker 模板 打通发布运维系统 Pandora Boot 革新中间件使用方式 Main 函数启动 Autoconfig/Junit 支持 Spring Boot 中间件 starter 业务 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 Metrics Health 运行时信息 运行时状态 黑盒 -> 白盒 环境信息 应用 / 组件状态 查看实时数据 curl 中间件内部信息 中间件状态 与外部对接查看历史数据 用户配置等
29. Pandora Boot starter 列表 中间件 18+ ü ü ü ü ü ü ü ü ü hsf diamond Message Cache Data Monitor Metrics Scheduler …… 业务类 10+ ü ü ü ü ü ü ü 登录 会员 ACL LOG 地址库 类目 ……
30. Pandora Boot 解决方案 Pandora 改造 核心 Archive Sar 包 Maven 化 Middleware-SDK Bootstrap 中间件模板工程 运维脚本、Docker 模板 打通发布运维系统 Pandora Boot 革新中间件使用方式 Main 函数启动 Autoconfig/Junit 支持 Spring Boot 中间件 starter 业务 starter 中间件 Endpotins/health
31. Pandora Boot 模板工程 Bootstrap 标准模板 避免复制旧代码,依赖干净 创建工程数 3W+ 中间件示例 按需勾选,代码质量保证 最正确用法,持续更新 Release 相关 打包发布规范 脚本、健康检查等 可以直接发布,30分钟上线
32. 32 Pandora Boot 应用增长数 Pandora Boot 应用增长趋势 5000 30% 全网占比 集团微服务开发框架标准 主打开发体验,成为业务架构升级的⾸首选 年年应⽤用增⻓长 10 倍 4500 4355 4000 3504 3500 3000 3626 3818 2853 2500 2381 2000 1884 2594 2092 1551 1500 1255 1000 500 0 901 330 189 247 69 110 455 574 8 18 35 52 Jun Jul Aug Sep Oct Nov Dec 2017 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2018 Feb Mar Apr
33. 微服务运维及诊断 Part 4
34. 微服务中心 平台能力 基础能力 应用资源 应用管控 应用诊断 健康状态 能力透出 应用健康 资源状态 中间件管控 日志分析 环境配置 资源申请 容器管控 在线诊断 Metrics Health Config JMX Arthas
35. 实时大盘
36. 线程堆栈
37. 在线诊断
38. 未来发展方向 Part 5
39. 未来发展 Spring Boot 2.0 JDK9 Jigsaw Serverless/RxJava
40. THANKS --------- Q&A Section -------- /感谢聆听
41.
42.
43.
44.

ホーム - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-26 01:54
浙ICP备14020137号-1 $お客様$