爱奇艺微服务标准技术架构实践
爱奇艺微服务标准技术架构实践
在微服务化的过程中,各业务团队根据自身需要选择了不同的开源框架,如
- 部分基础设施存在重复建设,在资源浪费的同时稳定性也不易保证;
- 由于使用的技术架构和
SDK 不统一,最佳实践难以在团队间快速推广; - 技术架构不统一导致在东西向流量中大量引入了业务自行维护的网关,使得链路加长,影响排障效率和响应延时。
为了解决以上问题,爱奇艺中间件团队充分听取了业务在微服务实践中的需求和问题,推出了爱奇艺的微服务标准架构。在标准架构的建设过程中,我们主要遵循了以下的一些原则:
- 架构统一:同一技术领域往往有多种技术实现,但是过多的技术框架的采用容易造成维护成本过高,缺乏专人支持等问题。在微服务标准架构的选型过程中,我们综合了各开源项目的实际情况和业界的主流技术方案,将各个领域中的技术选型进行了统一,每个领域的技术选型原则上均不超过
1 种。 - 可扩展:微服务标准架构中有不少开发
SDK 的选型,为了满足各个开发团队不同的业务需求,需要保证各个SDK 的可扩展性,如果开源版本无法满足内部需求的,爱奇艺中间件团队都会维护统一化的内部定制版本。 - 高可用:标准架构的建设目的之一是将各个团队维护的基础设施(如注册中心、监控系统等)逐渐收拢至内部的公共平台。对相关平台的技术架构
review 及可用性维护也是我们的重要工作之一,此外我们还建设了服务成熟度体系SMMI ,会定期对核心系统及基础服务进行成熟度评估。 - 技术演进:开源软件均有其生命周期,需要充分考虑各个软件的社区维护情况,比如在熔断技术选型上,我们在标准架构中主推了
Sentinel ,而不是目前已经停止维护的Hystrix 。另外标准架构也并非一个一成不变的体系,对于新技术的采纳,我们也提供了标准化的流程,确保我们的技术体系能持续迭代。 - 内部开源:在标准架构的建设过程中,在爱奇艺内部开展了内部开源的协作模式。除了基础服务部门以外,也鼓励业务团队参与到这些基础服务的维护工作中来,共同打造一个即符合业务需求,又有一定业界领先度的微服务技术体系,这样也进一步促进了相关标准架构的推广和完善。
标准架构

标准架构主要包括如下主要内容:
- 统一的微服务开发
SDK :核心开发框架Dubbo/Spring Cloud ;熔断限流框架Sentinel 等; - 统一的微服务基础设施,包括:
- 注册中心:Nacos/consul;
- 服务网关:基于
kong 进行二次开发的网关平台,提供鉴权、限流等功能; - 配置中心:基于携程
Apollo 进行二次开发的平台 - 指标监控:
prometheus 集群托管服务; - 链路监控:全链路平台(基于
skywalking 进行定制开发) ; - 混沌工程:在
ChaosBlade 基础上进行二次研发,提供各类故障演练功能。
- 统一的微服务平台:QDAS(QIYI Distributed Application Service,爱奇艺分布式应用服务
) ,提供微服务应用生命周期管理、服务治理、服务市场等功能。
注册中心演进
注册中心在微服务应用中是最重要的基础设施之一,原先在爱奇艺内部,注册中心的选型并不统一,之前在线上运行的注册中心有
- 无法横向扩展;
- 作为一个一致性的系统,在网络分区会产生不可用。
在调研了业界的各个方案后,我们选用了
- 高性能,可以横向扩展;
- 既适用于传统为服务架构,也能适用于云原生环境,包括支持与
Istio 控制面对接; - 提供了
Nacos-Sync 组件,可与其他注册中心进行数据同步,也使注册中心的迁移变得简便。
监控体系建设
服务监控是所有业务团队都极为关注的主题。完整的微服务监控体系一般需要有以下
- 指标监控:包括
QPS/ 响应延时/ 错误率等黄金指标、业务的自定义指标、JAVA 应用的JVM 指标,此外还需要采集和基础环境的相关指标,包括CPU/ 内存利用率等; - 日志监控:如错误日志的数量;也可以利用
AI 技术,对日志的模式进行统计分析等; - 链路监控:由于微服务调用关系的复杂性,调用链追踪也是非常必要的,它可以帮助业务人员更好地分析应用间的依赖关系,并能够监控各个调用关系上的核心指标。

指标监控方面,我们内部围绕着
- 首先是指标计算的问题,为了降低侵入性,我们在
skywalking agent 的基础上进行了二次开发,可以自动拦截Spring MVC/Dubbo 等主流框架的调用,统计其调用次数、处理耗时、是否错误等等。 - 其次是指标采集的问题,
Prometheus 是采用拉模式采集指标的,对于微服务场景一般是利用Prometheus 的服务发现机制。Prometheus 默认集成了consul 、k8s 等服务发现方式,不过并未对Nacos 注册中心直接提供支持,我们在开源的Nacos adapter 的基础上进行了改造,使得Prometheus 能够从Nacos 中发现要采集的应用实例信息。 - 指标查看主要采用了基于
skywalking UI 开发界面及grafana ,我们提供了一套通用化的配置模板,业务也可以根据需要自行扩展。
告警方面,我们将告警策略设置在

链路追踪
链路追踪的基本原理也和

链路追踪主要提供了一下功能:
- 调用依赖关系分析:提供了服务间依赖及接口间依赖的多个层次粒度,支持
MySQL/Redis 等各类中间件,为开发人员提供各种上下游依赖的直观展示; - 服务间调用关系指标:提供
QPS/ 响应延时错误率等核心指标监控,且能在一个调用关系上同时提供客户端及服务端两个视角的监控值,便于进行问题定位; - 程序异常分析:在调用链数据中心记录异常类型及堆栈信息并进行分析,支持展示某个应用的程序异常种类及每分钟发生次数等;
- 日志关联:将调用链与业务日志进行关联查询,便于获取程序运行的详细信息。
熔断限流方案
由于微服务架构的特点,上下游依赖和网络通信都比较多,这些因素都会对应用本身产生一定的风险,比如上游系统的突发流量或者热点参数;下游系统服务不可用、延时增大、错误率升高等等。如果缺少对自身系统的保护,有可能产生雪崩的效应。为了应对这些场景,我们主要引入了

为了适应爱奇艺各个业务团队的需求,我们对

API 网关
爱奇艺
结构如下图所示:

QDAS
在完善的微服务体系架构中,微服务治理平台也必不可少。
混沌工程
