爱奇艺微服务架构
如果无法正常显示,请先停止浏览器的去广告插件。
1.
2. 爱奇艺微服务架构
周晓军
2021-05-20
3. 目录
• 概览
• 微服务开发体系
• 微服务可观测性体系
• 微服务治理体系
• 未来规划
4. 爱奇艺微服务体系概览
研发体系
• Dubbo / Spring Cloud
• Sentinel
服务治理
•
爱奇艺分布式应用服务(QDAS)
基础设施
• API 网关
• 注册中心:ZooKeeper/Nacos
• 可观测性:全链路监控平台
• 配置管理:配置中心
• 混沌工程/故障演练
5. 目录
• 概览
• 微服务开发体系
• 微服务可观测性体系
• 微服务治理体系
• 未来规划
6. 微服务研发体系
核心开发框架
Spring Cloud
Dubbo
Feign
Dubbo
通信/负载均衡/序列化 HTTP客户端
Dubbo Spring Boot Ribbon
Dubbo-IQIYI Zuul/Spring Cloud
Gateway
负载均衡
内部扩展
服务网关
Sentinel
熔断降级
Nacos/ZooKeeper
服务发现
Config
配置管理
• 通信:Dubbo / Spring Cloud
• 注册中心:Nacos
• 熔断/限流:Sentinel
• 配置管理:配置中心(基于携程Apollo)
7. Dubbo SDK扩展
内部基础设施适配
区域就近路由
非健康实例隔离
流量治理
安全机制
8. Dubbo SDK扩展 – 非健康实例隔离
背景
•
服务中可能存在少数节点故障,导致整体服务质量不稳定
(错误率上升/延时产生抖动)
技术方案
• 客户端统计服务实例调用成功率等指标,判断其是否健康
• 对不健康服务实例隔离一段时间,不再向其发送请求
• 服务实例如果被多次隔离,隔离的时间窗口将延长
健康检查策略
• 连续调用失败 / 有大量未返回请求(需手动设阈值)
• 支持用户基于SPI机制自定义扩展
兜底机制
•
不健康的比例超过一定阈值,则忽略隔离的策略,避免集中
的流量将剩余实例打垮
9. Dubbo SDK扩展 – 就近路由
基本流程 故障场景
• Provider/Consumer启动时获取自身所在的地域信息 • Consumer定期对服务端进行健康检查
• Provider注册时在URL中带上地域信息 • 当本地域健康的Provider实例低于设定比例时,会在所
• Consumer通过扩展的路由规则,优先就近访问
有的Provider实例中进行负载均衡
10. Dubbo SDK扩展 – 流量治理
原理
• 利用注册信息中的元数据将provider/consumer划分子集
• 针对每个consumer子集配置目标流量规则
• 在目标流量规则中针对各个provider子集分配流量比例
应用场景
• 灰度发布过程动态调整新旧版本流量
• 跨机房流量分配和动态调度
11. 基于Sentinel的熔断/限流
微服务架构的特点
• 上下游依赖多
• 网络通信多
几个主要风险
•
•
•
来自上游
• 突发流量
• 热点参数
来自下游
• 依赖不可用
• 响应时间变慢
来自网络
• 网络不通
• 网络延时增大
12. Sentinel SDK增强
•
完善与Dubbo的集成
• 使用方式简化(熔断/限流/黑白名单)
• 支持group/version
• 支持热点参数限流
• 监控持久化
• 内部配置中心对接
热点参数限流
监控数据持久化
13. Sentinel Dashboard改造
查询配置中心应用关联
Sentinel
Dashboard
Sentinel
Dashboard
Sentinel
Dashboard
•
服务治理平台
规则配置
•
发现
获取资源
簇点链路
配置中心
注册
规则动态下发
Sentinel SDK
应用
微服务agent
注册中心
无状态化,实现集群化部署
• 规则对接配置中心
• 去除原有注册和实例管理机制
内部微服务体系整合
• 通过微服务agent实现注册、指标采集
• 服务治理平台集成管理配置中心关联
14. 目录
• 概览
• 微服务开发体系
• 微服务可观测性体系
• 微服务治理体系
• 未来规划
15. 可观测性体系概览
指标监控
• 黄金指标(QPS/延时/错误)
• 业务自定义指标
• JVM指标
• 运行环境基础指标(CPU/内存)
日志分析
• ERROR日志数量
• 异常模式分析
链路追踪
• 拓扑分析
• 调用关系指标
16. 爱奇艺全链路监控平台
容量预估
全面
异常检测
链路监控
核心指标、链路追踪,
日志监控全覆盖
指标监控 日志监控
业务拓扑 出入口流量分析 监控大盘 业务日志汇总
调用检索 程序异常分析 告警策略 用户行为分析
用户反馈关联
无侵入式埋点框架
便捷
数据汇集
Kafka
开箱即用,无基
础设施维护成本
实时计算引擎
指标监控
Flink
存储资源
基础平台
高性能
链路监控
基
础
资
源
日志采集 监控告警 Elasticsearch HBase
Prometheus ETL HiGraph Druid
计算/存储可横向扩展,
日均日志处理量200亿+
日志聚合
17. 链路追踪 – 背景与原理
调用链(Trace):由不同应用产生的一系列调用(Span)
组成的有向无环图(DAG)
TraceID:给每个调用
链分配一个全局唯一
的 ID (称为
TraceID),并在调用
链上的每次调用都带
上这个 ID,从而将所
有子调用关联在一起
SpanID:给每个调用分配一个ID (称
为 SpanID),并且把这个 ID 传递给
子调用, 子调用根据 ParentSpanID
生成自己的 SpanID。从而确定调用
的先后次序和父子关系
18. 链路追踪 – 技术方案
埋点:基于skywalking agent二次开发
• 开源插件改进
• 支持内部自研组件
• 支持head-based采样策略
• 兼容B3传播协议
• 支持将调用链数据存储至日志
数据分析
• Flink
数据存储
• 时序指标:Druid
• 调用链数据:ES + HBase
• 拓扑:HiGraph(图数据库)
19. 链路追踪 – 应对海量数据挑战
问题
• 数据量变大,ES集群难以维护
• 写入/查询效率降低
优化思路
• 异常调用链(存在错误或者耗时
较高的环节)在排障等方面价值
更高,应当进行全量存储,正常
的调用链可以采样存储
优化效果
• ES每日写入量降至1T以内,
HBase存储量降低至原先的15%
以内
• 单个调用链检索延时<1s
20. 指标监控 – 整体方案
• 基于字节码增强技术实现
• 多维度监控
•
•
•
•
•
服务
地区
实例
接口
返回码
• 支持多种框架
•
•
•
•
Dubbo
Spring MVC
Httpclient
…
21. 目录
• 概览
• 微服务开发体系
• 微服务可观测性体系
• 微服务治理体系
• 未来规划
22. 服务治理体系
云资源治理
微服务治理
• 云资源管理 服务注册发现
虚拟机,Mesos,K8S,云存储,数据库,
中间件,消息MQ,负载均衡,网关… Nacos,Consul,Zookeeper
流量管理
• 云资源接入
灰度发布,流量预热,熔断限流,流量染色,
标签路由
SDK,Proxy,Sidecar
CMDB,配置中心…
框架支持
• 运维和成本中心
Dubbo, Spring Cloud, 服务网格(Istio)
自动化,白屏化,操作审计,权限隔离
预算管理,项目成本统计,容量管理
认证授权
RBAC,ABAC..
应用治理
CI 流程
构建发布, 自动部署,代码管理
可观测性
日志服务,全链路追踪,监控报警
混沌工程
故障攻击,攻防演练,评分体系
应用模型
应用关联资源CMDB,标准应用模型
服务治理成熟度评价标准(Service Maturity Model Index--SMMI)
• 维度指标:成本管理,运维效率,安全,高可用,代码管理,开发流程,测试覆盖,上线灰度,环境隔离…
23. 爱奇艺分布式应用服务(QDAS)
应用接入
• 支持源码打包镜像,部署到Mesos/K8S
• 支持导入已有的Mesos/K8S应用
微服务管理
• Dubbo/Sentinel/Spring Cloud传统微服务管理
• Istio服务网格管理
• 实现产品化界面,简化用户学习操作成本
应用治理
• HTTP API接口管理(基于Swagger注解)
• 日志采集,全链路监控集成
• 服务市场
24. 服务治理 – 程序构建与发布
代码仓库
QCD流水线
(基于jekins)
镜像仓库
K8S集群
QAE— QIYI App Engine
(Mesos集群)
构建流水线
镜像部署到K8S
25. 服务治理 – 注册实例管理
26. 服务治理 – 灰度发布
灰度流程
配置灰度流量比例
灰度策略实时生效
实时观察灰度对比
流量监控
27. 可观测性能力集成
指标监控
日志接入
服务拓扑
日志检索
28. 服务市场
接口文档管理
• 技术选型:Swagger + yapi
• 文档展示 / 数据同步
• 接口mock
接口管理
• 一致性校验
• Sentinel黑白名单集成
29. 探索服务网格体系
解决问题
• 提升开发效率
• SDK升级推动困难
• 多语言支持
技术实现
• Istio + Envoy
• 基于Primary+ Remote实现统一控制面
• 基于QDAS屏蔽Istio复杂性
• 灰度发布
• 基于网关的服务暴露
• 负载均衡
• 超时/重试
• 故障实例隔离
• 故障注入
30. 运行规模
10000+
线上实例数
200+
> 200w/s
Dubbo接口数
链路数据分析峰值
40+
社区补丁提交
31. 未来规划
研发体系
Spring Cloud体系支持
服务网格技术进一步完善
服务治理
流量镜像
集群限流
开发者支持
项目脚手架
在线调试
32.