写点什么

一站式入口服务:爱奇艺微服务平台 API 网关实战

  • 2019-12-07
  • 本文字数:2358 字

    阅读完需:约 8 分钟

一站式入口服务:爱奇艺微服务平台 API 网关实战

写在前面

在互联网业务微服务化改造过程中,按照以往的服务治理体系,各服务需要单独实现限流、鉴权、监控、日志等通用功能,构建入口时资源申请、工单批复、多系统配置等一系列流程对精力消耗极大,学习成本较高,开发者也很难通过全局视角对各服务入口统一管理。爱奇艺微服务平台应运而生,通过组件化和服务化,助力业务解耦,不同微服务独立部署、独立扩展,保证各服务模块边界稳固,帮助业务实现微服务化改造。

作为微服务平台最重要的边界组件,爱奇艺 API 网关诞生于 2016 年底,底层基于开源项目 Kong 实现,旨在为开发者提供稳定、便捷、高性能、可扩展的服务入口功能,一站式管理 API 配置和生命周期,对微服务治理具有重要意义。

关于爱奇艺微服务平台 API 网关

架构总览

类似 Nginx, API 网关通过域名、请求方法、路径匹配规则等定义一个 API,API 转发目标为开发者配置的一个唯一服务。Kong 基于 Nginx 实现,成熟稳定且性能可靠,并拥有灵活强大的插件机制,提供了诸如访问控制、限流、监控等功能。在此基础上爱奇艺技术团队结合内部系统开发了私有插件,以适配内部特殊需求。



API 网关采用靠近客户端的分布式部署方案,在各地区部署独立集群并就近解析;单个 API 网关集群通过负载均衡服务暴露。API 配置需要在多个集群内维护,因此爱奇艺技术团队开发了 API 网关控制器,统一负责集群管理、域名创建、DNS 绑定等操作,整体架构如下图所示。


基础功能

在 API 网关控制流架构设计中,微服务平台 API 网关模块通过内部系统集成及服务化实现,为开发者提供全部所需入口配置及管理功能,且无需代码侵入、工单申请等人工干涉,实现 API 创建即可用。API 网关支持认证、限流、访问控制等通用功能,结构如下图所示。


服务解析

请求进入 API 网关时,Kong 通过 DNS 向 Service Registry 查询服务实例列表,作为请求转发的 upstream。由于 DNS 缓存机制,需要在实例变更时及时清理缓存,确保请求访问至有效的实例。尤其是在私有容器平台 QAE(iQIYIAPP Engine)环境中,访问地址随实例变更而变化,为尽可能保证服务解析成功,系统之间需要完成一些联动。以 QAE 缩减应用副本数操作为例,过程大致如下图所示。


定向路由

API 网关以地域(外网服务则为地域+运营商)为依据配置 DNS 就近解析规则,尽可能靠近客户端;但在现实中,部分 API 考虑服务小运营商网络、靠近服务端等客观条件,或在某些时间段希望对部分地区的服务进行网络隔离。针对此类自定义路由的需求,API 网关为业务域名生成了虚拟网关域名(uuid.domain),如果开发者希望根据运营商配置目标集群,在将业务域名改绑至虚拟域名后即可实现定向路由,如下图所示。



此外,开发者可通过微服务平台配置服务路由解析规则,进一步控制流量至服务实例间路由关系,满足诸如蓝绿部署、缓存更新延迟低容忍等场景下,控制请求目标服务实例的需要。

容灾

作为流量入口,API 网关必须具备足够强大的容灾能力以应对可能的网络故障。除每个 Kong 节点自身及相关依赖的高可用配置之外,API 网关还实现了不同地域、运营商、数据中心、集群之间的多级互备,一旦出现网络故障,可以在最短时间内将流量切换到可用入口。此外,API 开发者认为某集群流量处理异常时,也可以利用虚拟网关域名自助切走流量。


另外,API 网关集群采用蓝绿部署策略完成功能升级等常规运维操作,接入流量前充分实现集群预热,同时提供版本回退、故障现场保留能力。将运维操作带给开发者的影响降至最低。

API 性能追踪

PI 网关提供了监控、报警、日志、调用分析等功能,可帮助开发者完成问题排查。通过接入日志系统,方便开发者筛查日志,以下图排查 499 问题为例,通过筛选发现,短时间内该接口被某外网 IP 频繁访问且请求时间较短,鉴于 nginx 499 状态码表示客户端主动断开连接,判断为疑似外网攻击。



此外 API 网关在消息转发阶段进行了埋点并接入了调用分析系统,开发者可通过分析消息调用链,根据慢响应详情进一步分析问题。以下图为例,开发者排查慢请求过程中,通过调用链分析发现耗时较大处标记是网络延迟。在进一步查看客户、服务端区域后发现,该请求为跨机房调用,服务部署在单个机房导致了该请求时延较高,开发者以此为依据对服务部署进行了调整。



与爱奇艺号的故事

爱奇艺号作为爱奇艺开放平台和内容体系里最重要的载体,为自媒体、网络大电影、网剧、儿童、动漫、教育、文学、漫画、直播等多种内容创作者提供服务。


为适应快速变化的应用场景,爱奇艺号在架构设计时选择了微服务化,拆分出多种自媒体、基础信息等微服务。其中很多服务在认证、限流、追踪、防黑产等方便有着一致的需求,如果单独实现,将导致开发及运维成本大幅度的上升。


为帮助爱奇艺号顺利完成微服务化改造,减轻开发和运维负担,API 网关结合爱奇艺号实际需求,利用 Kong 的插件机制开发或改进了帐号认证、限流、黑产拦截、信息追踪等一系列功能。目前,爱奇艺号使用 API 网关管理着数百个 API,并以此为统一入口连接数十个服务。此外利用 API 网关和 QAE 容器平台的容灾特性,通过多数据中心服务互备,提升了服务整体的稳定性。


总结与展望

API 网关为开发者提供了稳定的入口服务,现已维护超过 4000 个 API,持续吸引新旧业务接入。API 网关当前平均单日 API 访问量超过 300 亿、峰值 QPS 近 100 万。通过充分发挥插件扩展能力,为开发者提供监控、日志、调用链分析等高级功能,有效降低了维护及排障成本。


未来 API 网关面向混合云环境,为开发者提供更加灵活、便捷、高效、稳定的入口服务。


本文转载自公众号爱奇艺技术产品团队(ID:iQIYI-TP)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247485845&idx=1&sn=8ca94a01410d1fbf85cb1eaadca29c3e&chksm=e97695b6de011ca02c9f438ec5246faa06ed176526022308269a2e867743254bfab9572263e9&scene=27#wechat_redirect


2019-12-07 08:003917

评论

发布
暂无评论
发现更多内容

时序数据库TDengine 2024 年终总结:与时代共跑的马拉松,我们携手同行

TDengine

数据库 tdengine 时序数据库

【YashanDB知识库】sys登录提示账户被锁,怎么处理?

YashanDB

数据库 yashandb

【YashanDB知识库】YAS-00402 failed to connect socket, errno 111, error message "Connection refused"

YashanDB

数据库 yashandb

甲子光年智库发布《中国 AI 算力行业发展报告》

中昊芯英

gpu 算力 TPU #人工智能

实时告警与性能监控:通过时序数据库 TDengine、taosKeeper 和 TDinsight 实现无缝监控

TDengine

数据库 tdengine

JVM实战—G1垃圾回收器的原理和调优

EquatorCoco

Java JVM

推理模型的“年终考试”,谁是国内目前最好的“o1”?

Alter

AI 大模型 推理模型 大模型应用

基于Redis有序集合实现滑动窗口限流

快乐非自愿限量之名

Java redis

履约系统:应用层、领域层、集成关系设计

不在线第一只蜗牛

Java 大数据 运维

Java面试前如何提升面试能力?

了不起的程序猿

程序员 后端 架构师 java面试 Java八股文

【YashanDB知识库】listagg拼接结果发生溢

YashanDB

数据库 yashandb

自学记录:学习HarmonyOS Location Kit构建智能定位服务

李游Leo

鸿蒙 HarmonyOS

快手动效渲染引擎Crab,解锁“游戏化动效”开发新方式!

快手技术

Java 前端 动效

做TikTok直播为什么需要稳定安全的海外直播网络

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 海外直播网络 tiktok直播网络

这两天在改BUG,下午就被通知在改进优化了...

Summer

Java 程序员 面试 架构师 大厂

Sense 对话语音 AI:自动电话呼叫加快招聘流程;灵初智能发布端到端强化学习具身模型,实现长程任务泛化

声网

揭秘!如何将动效描述自动转化为动效代码

快手技术

Java 前端 动效

亚马逊直播网络不好的影响及改善方法

Ogcloud

海外直播专线 直播专线 亚马逊直播 亚马逊直播网络 亚马逊直播专线

读懂华为开发者空间第一课,让云上开发如此简单

华为云开发者联盟

鸿蒙 软件开发 云主机 昇腾 CodeArts

英特尔2024技术篇章:矢志探索,砥砺前行

E科讯

得物基于AIGC生成测试用例的探索与实践

得物技术

AI 效率提升

智慧酒店产业发展中的新突破——时序数据库TDengine与广东粤万润科技的深度合作

TDengine

数据库 tdengine

springboot~多节点应用里的雪花算法唯一性

快乐非自愿限量之名

Spring Boot

Java面试还有金三银四/金九银十吗?

了不起的程序猿

后端 架构师 java程序员 java面试 Java八股文

为什么企业需要 IT 资产管理软件?

ServiceDesk_Plus

资产管理 IT资产管理

消失的一个多月,我用 AI 做了三个项目,简直不要太爽!

Immerse

【YashanDB知识库】imp导入数据库时,报错YAS-08023

YashanDB

数据库 yashandb

深入浅出Redis,这份阿里Redis进阶笔记真香!

了不起的程序猿

数据库 redis 后端 Java 面试 架构师

【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断

YashanDB

数据库 yashandb

一站式入口服务:爱奇艺微服务平台 API 网关实战_技术管理_弹性计算团队_InfoQ精选文章