爱奇艺分布式服务框架-Solar

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

服务端
Event Handler Pipelines Solar Processor
Solar IDL 编译器
HTTP , HTTP/2

Common Protocol API
• 支持多种语言( Java、 C++、Python )
• 高效的IO传输层,QPS可 超过100W(回声服务)
• 支持纯异步及多协议 – Protobuf、Thrift等
• 示例
SolarFuture<String> future1 = someObj1.foo("hi, Tom..."); SolarFuture<String> future2 = someObj2.foo("hi, Jerry...");
// 并行发起调用,全部调用返回后,parallel返回 SolarFutures.parallel(future1, future2);

Procedure
Container
Server
Service


Protocol Event Handlers
IO Transport
Solar系统架构
监控
动态配置管理
客户端
Solar Stub
Protocol Buffers
IDL Thrift
服务注册/发现
服务路由管理
访问控制
SOA Web method:Args return value
• 自己动手,丰衣足食
Solar核心设计
Solar历史
• 罗马非一日建成
Thriftpool 0.1.X iQIYI Thrift 2.X
Solar 2.4
Solar 3.0
2013年初
2014年6月
2015年3月
• 前期开发基于Thrift, Why?
• 完善的RPC实现(服务端、客户端) • 多语言支持 • 支持IDL,自动代码生成 • 应用广泛
Executors Future Objects
Caller Caller Caller Caller
IO Loop
Server
… …
IO模型
• 相比于原始Thrift
• 调用期间,连接不再被独占 • Actor模型,实现了真正的异步 • 可充分利用机器资源 – 网卡、CPU
CPU:16 core 内存:64GB 网卡:10Gb/s
现有方案
• 国内一些优秀方案
• Dubbo – 阿里巴巴 (开源)
• 仅支持Java
• sofa‐pbrpc – 百度 (开源)
• C++,扩展自Protocol Buffers
• Motan – 新浪 (闭源) • ….
Why Solar?
• 鱼和熊掌不可兼得
• 具有跨语言特性 – C++、Java、Python • 长连接、动态配置 • 安全访问 • 负载均衡策略 • 流量等完善的监控 • 能跟踪链路服务质量 • 具有高可用的方案
// 串行发起调用 SolarFutures.sequence(future1, future2);
服务注册与发现
• 服务注册中心
• 解耦客户端与服务提供方配置
Solar Server Solar Server Solar Server
Service Info Registry
Solar Client
8月,爱奇艺移动端已经成为中国第三大移动APP
爱奇艺 – 连接人与服务
VR
游戏
视频业务
秀场
电影票
电商
AppStore
Why Solar?
RPC示例
• RPC – 远程方法(过程)调用
机器A
机器B
• 分布式系统的基础组件 – 心跳、查询、指令… • 为面向服务架构(SOA)提供便利
RPC基本原理
现有方案
• Finagle
• Twitter开发,面向JVM的可扩展RPC框架 • Scala编写,协议无关,便于扩展 • 三个核心概念 – Futures、Services 、Filters • 纯异步接口 – 支持简单强大的并发编程模型 • 完善的服务监控支持
• Zipkin – 调用链跟踪
• 社区活跃
• 服务端
• 总体QPS、及各服务QPS监控 • 慢调用数目 • 各服务调用错误数
• 客户端
• 响应时间分布 • 连接失效次数
总结 & 未来工作
• 总结
• 可扩展的RPC服务框架、异步、多协议 • 多种负载均衡、服务规避策略 • 统一的服务管控平台 • 实现了基于Docker的弹性伸缩方案
Caller
Remote API
Processor
Codec
Codec
Client
Transport
Transport
• 隔离网络通信的复杂性 • 保持与本地调用语义的一致性
Service Method
Server
• 调用不保证成功,引入了链路上的异常
现有方案
• Apache Thrift
• Facebook开发,2007年开源 • 提供完善的序列化框架 • 跨语言,编译器,IDL • 分层架构,便于扩展 • 提供client和server的实现 • 应用广泛 – Flume、Storm… • 但社区已不活跃
Input / Output
现有方案
• Protocol Buffers (proto2)
• Google的统一数据交换格式 • 跨语言,序列化效率高 • 协议方便进行扩展,考虑了兼容性问题 • 提供了服务接口,但没有提供实现 • 仅仅支持C++、Java、Python • 与proto3不兼容
现有方案
• gRPC
• proto3 ‐ 扩展了Protobuf v2 • 基于HTTP/2的高性能RPC框架 • 适用于移动应用,节省资源 • Request/Response单参数调用模式 • 支持的语言更多 – C/C++、Java、Go、Node.js、
Python、Ruby、Objective‐C、PHP、C#
• 实时通知变更,便于进行动态配置管理 • 订阅服务端/客户端事件,插件化 • 服务提供者系统信息、Solar服务配置、调用端信息
连接池
• 短连接
• 不断建立、断开,增加额外系统开销 • 大量TIME_WAIT
• 连接池
• 预先建立一定数目的连接 • 全局共享,连接冗余,提供连接备份 • 获取连接时,注意避免线程间的锁竞争
客户端连接
Accepted


IO Loop


Connection Context
Connection Context
Read/Write IO Loop
Read/Write IO Loop
Task Executors Actors
IO模型
• 客户端
• 连接信道在调用间共享,提高IO利用率 • 连接池,避免不断连接开销
Docker与微服务
• Docker为打包部署程序提供了便利 • 微服务需要借助于打包部署工具降低服务门槛 • 微服务为Docker提供了典型的实践场景
Application
Solar on QAE
• QAE – iQIYI Application Engine
• 基于Mesos / Marathon搭建 • 资源统一管理调度,提供弹性计算能力
• 如访问授权、流量控制等
事件框架
• 限制连接数示例
Solar关键特性
异步
• 优点
• 函数调用不阻塞,回调处理返回结果 • 相比于同步 ‐ 避免资源独占(线程、网络连接等) • 可并发发起多个调用,便于调用流水线编排
• 实现
• 线程模拟 – 伪异步 • 监听IO事件,Actor模型(Promise)
5月7日 百度宣布以3.7亿美元现金 收购PPS视频业务,并入爱 奇艺
9月2日 爱奇艺移动端流量首次超过 PC端,成为中国视频发展的 标志性事件
11月19日 小米科技以3亿美金入股爱 奇艺,成为爱奇艺第二大 股东
爱奇艺五年闪耀, 持续领跑视频行业体验革命, 力求超越突破、赢在创新!
爱奇艺 – 用户数据
Client
Input Code
Service client
Write()/ Read()
TProtocol
Generated Code
Server
Input Code
Service processor
Write()/ Read()
TProtocol
TTransport
TTransport
Input / Output
> info “application.name”
> scale‐up [options] “application.name” > ….
运营支持
Solar‐Web
• 所有Solar服务的统一监控管理中心 • 服务发布、扩容、删除 • 通过Solar管理端口定时轮询各服务状态 • 相关信息按项目进行分离显示 • 实时配置变更 • 完善的监控体系
QAE
Guardro
Autocaling
QAE API
QAE Web
Docker
Docker
Docker
Docker
Mesos / Marathon
iQiyi Docker Registry
Venus
日志收集分 析
系统 监控
Solar on QAE
Solar Docker Repository
push Solar部署控制器 delete
Solar‐Web
• 配置管理
• 连接数上限 • 服务权重 • QPS上限设置 • 负载均衡策略 • 连接池大小 • 路由规则设置
所有修改均在统一管理平台上完成 实时生效 无需登陆服务器重启服务
监控
• 集成在统一监控数据收集平台(iQIYI Apollo Metrics)
• 通过定制的DropWizard Metrics Sender发送数据
• 统一的管理控制平台
• 支持服务动态配置,灵 活的访问控制策略
• 服务调用链跟踪 (开发源自文库中)
IIOO LLooop
IO Loop
IO Loop
Netty / Boost ASIO
IO Loop
IO模型
• 服务端
• 非阻塞,Proactor模型 • Java基于Netty、C++基于Boost ASIO
QPS可超过110W 网卡饱和
事件框架
• 安插在链路上的每个环节,暴露尽可能多的事件
• 按照等级,定义不同的事件处理流水线
• Server、Service、Procedure
Call
Call
Call
Server Context
Service Context
Procedure Context
• 附属功能均通过增加事件处理器实现
Solar Web
Solar CLI
launch
• Solar CLI
QAE
~:# solar run ‐jars test1.jar ‐name="test‐app" ‐cores=4 ‐worker=6 <CLASS>
~:# solar help
> run [options] “main.class.name”
2015年9月
Solar单实例
• 主要特点
• 高效的IO传输层,QPS可超过100W(回声服务) • 可扩展协议接口 • 事件回调机制
Client
Connection Pool Load Balance
Back off Failover
Protocol IO Transport
Server
Service Procedure
• 每次均从池中获取连接 – 锁粒度小,可能增加调用延迟 • 一个线程固定一个连接 – 不利于负载均衡
负载均衡
• 静态负载均衡 VS 动态负载均衡
• 针对不同的连接共享策略
• 启发式负载均衡 – 不考虑服务端状态
• 随机 • 轮询 • 最近最少访问 • 根据业务进行定制
• 考虑服务端真实负载的策略
爱奇艺分布式服务框架 ‐ Solar
• 孙琦 – 爱奇艺云平台
Agenda
• 爱奇艺 • Why Solar? • Solar核心设计 • Solar关键特性 • 微服务 & 弹性部署 • 运营支持 • 总结 & 未来工作
爱奇艺
爱奇艺 – 公司大事记
4月22日 视频网站“奇艺”正 式上线
7月17日 爱奇艺宣布成立影业公 司,正式进军电影行业, 并提出“爱7.1电影大 计划”
• Solar借鉴了Finagle的使用接口和实现
异步
• Solar异步接口
异步
• 调用DAG编排:parallel, sequence, etc.
Parallel
Future Future Future
Future
Result
Sequence
Future
Future
Future
Result
异步
• 将监控数据纳入决策
微服务 & Solar弹性部署
微服务核心理念
• 微服务
• 小服务构建大应用 • 服务之间通过轻量通信机制交互(RPC、RESTful) • 服务独自部署演化,专注、简单 • 服务位置不可知,需服务协调者提供服务发现
• 优点
• 服务之间松耦合、有利于团队协作
• 缺点
• 运维要求高 • 引入分布式系统的复杂性 – 事务、测试…
相关文档
最新文档