您的浏览器Javascript被禁用,需开启后体验完整功能, 请单击此处查询如何开启
网页 资讯 视频 图片 知道 贴吧 采购 地图 文库 |

协程在天猫交易中的实践_哲学/历史_人文社科_专业资料

3582人阅读|258次下载

标签:
  • 天猫|
  • 交易|

协程在天猫交易中的实践_哲学/历史_人文社科_专业资料。协程在天猫交易中的实践 ? 田麦 协程在天猫交易中的实践 ?? 背景 ? ?? 出现的问题 ? ?? 解决思路 ? ?? 实现方案 ? ?? 遇到的挑战 ? ?? 效果和反思


协程在天猫交易中的实践 ? 田麦 协程在天猫交易中的实践 ?? 背景 ? ?? 出现的问题 ? ?? 解决思路 ? ?? 实现方案 ? ?? 遇到的挑战 ? ?? 效果和反思 ? 背景 ?— ?服务器处理请求模型 RPC ? Server IO线程 HTTP请求 RPC ? Client RPC ? Server RPC ? Server RPC请求 RPC ? 服务 ? 提供者 IO线程 RPC ? Server RPC ? Server 服务提供者 容器 业务代码 二方包 RPC ? Client 背景 ?— ?天猫交易系统特点 ?? ?? ?? ?? 大量外部系统接入 ? IO密集,大量RPC调用 ? IO调用毫秒级rt ? 业务逻辑复杂,但自身计算量不大 ? 出现的问题 ?? 随着外部系统不断接入,系统rt呈线性增长, 用户体验变差 ? ?? 随着用户的业务数据量的增大,系统rt快速 增长 –? 购物车中商品量 ? ?? 上下文切换多,CPU有效利用率低(无法量 化) ? –? Perf、dstat测量上下文切换次数 ? –? Lmbench3测量上下文切换时间 ? 解决思路 ?— ?减小RT ?? 并行处理请求 ? –? 划分出可并行执行的业务单元 ? –? 并行执行没有相互依赖的业务单元 ? ?? 并行的粒度 ? –? RPC调用级 ? –? 业务单元级 ? 解决思路 ?— ?减小RT ?? 并行处理请求 ? –? 划分出可并行执行的业务单元 ? –? 并行执行没有相互依赖的业务单元 ? ?? 并行的粒度 ? –? RPC调用级 ? –? 业务单元级 ? 解决思路 ?— ?减少CS ?? 大量协程,少量工作线程,请求和线程解耦 ? –? Callback/协程框架(akka、node.js)/协程语言 (scala、erlang、golang) ?— ?源码级 ? –? 保存和恢复上下文 ?— ?字节码级别(kilim) ? ?? 异步IO ? –? 阻塞、非阻塞、同步、异步 ? –? RPC框架的异步支持 ? 解决思路 ?— ?减少CS 执行 CS 等待IO响 应 CS 执行 CS 等待IO响 应 CS 执行 …… 同步,线程执行序列 等待IO响 应 执行 等待IO响 应 执行 执 行 CS CS 执行 CS CS 执行 …… 执 行 执行 执行 …… 异步,协程/线程执行序列 解决思路 ?— ?整体方案 RPC ? Server 容器工作线程 容器工作线程 HTTP请求 T T T T T T T T T T 业务工作线程 业务工作线程 业务工作线程 业务工作线程 IO线程 远程调用请求 RPC ? 容器工作线程 RPC ? Client Server RPC ? Server 容器工作线程 RPC ?请求 RPC ? 服务 ? RPC ? 工作线程 提供者 T T T T IO线程 远程调用请求 RPC ? Server RPC ? Server 容器 业务代码 二方包 RPC ? Client 服务提供者 实现方案 ?— ?整体架构 ? 任务上下文(Fiber) 消息传递通道(Mailbox) 异步 Web框 架 任务队列 并行引 擎 Runnable ?Task ? Queue WaiDng ?Task ? Queue 工作线程队列 Running ?Thread ? Queue WaiDng ?Thread ? Queue 远程方 法回调 接口 异步化 远程调 用代理 异步+并行化框架 调度器(Scheduler) 运行监控 异步+并行化支撑框架 异步HSF 异步Servlet MINA/NeMy Java ?NIO 异步Tair 并行化 ? DSL 异步识别 代码织入 调用分析 分析验证 ASM 实现方案 ?— ?具体实现一 ?? 应用服务器Tomcat7,异步Servlet支持 ? ?? Web层异步化 ? –? 异步Servlet(容器支持)、异步Filter ? –? Web框架异步支持,渲染、跳转、错误处理 ? ?? RPC框架异步化 ? –? 客户端和服务端是否都要异步化? ? ?? IO调用驱动协程调度 ? 实现方案 — ?具体实现二 ?? 协程管理(Kilim支持) ? –? 任务上下文的备份、恢复(线程栈帧) ? –? 任务调度、线程调度 ? ?? ?? ?? ?? Kilim框架与应用的整合 ? RPC接口的自动识别和调用链条的织入 ? DSL,业务单元并行化编排 ? 并行引擎,管理并行任务 ? 遇到的挑战 ?? 泛滥的ThreadLocal,数据是请求级还是线程 级?应用层还是框架层? ? ?? 线程和锁之间纠缠不清的关系 ? ?? 数据依赖识别,并行执行单元划分 ? ?? 并行执行情况下,数据并发访问问题 ? ?? 开发环境、测试环境、线上环境的一致性 ? 效果和反思 ?? 效果跟应用特点有关 ? ?? 异步化后CPU占用稍微有所增加 ? ?? 并行化后RT根据应用特点缩减幅度不同, CPU随RT减少而增长 ? ?? 多线程并行 vs 协程并行 ? –? 系统特点 ? –? 两种方案改造成本 ?

您的评论

发布评论

用户评价

  • 协程在天猫交易中的实践,如何下载 2018-06-20 19:18:41
+申请认证

文档贡献者

孙鹤飞

百度技术经理

48 138990 4.3
文档数 浏览总量 总评分

喜欢此文档的还喜欢