京东大型API网关实践之路

概述

1、背景

京东作为电商平台,近几年用户、业务持续增长,访问量持续上升,随着这些业务的发展,API网关应运而生。

API网关,就是为了解放客户端与服务端而存在的。对于客户端,使开放给客户端的接口标准统一,以降低客户端的接入成本;对于服务端,使服务端无需关注接口暴露在公网面临的问题而着眼于业务的实现,来提升开发效率。

在刚刚过去的全民狂欢购物节,API网关如何做才能高效的处理近千万的并发请求是本文的重点。

2、API网关介绍

API网关,作为客户端与服务端的纽带,核心任务是将客户端请求转发到后端服务。但是,作为所有流量请求的入口 , 面临的很重要的一个问题就是高并发,因为高并发的需要,要求网关处理请求必须高效;其次是安全防护,安全主要是指对网关对后端服务的一个保护;再者就是完善的数据统计及监控报警机制;当然,为了方便我们内部用户接入,多协议适配的支持、灰度发布上线也是必备功能。

图片

API网关特征:

1)高性能:在高吞吐量下保证低延迟。

2)安全稳定:身份认证、精细化流量控制、大数据实时分析等多种手段保障服务质量。

3)平台化:进行各项数据监控,提供数据分析、监控告警、故障定位等服务。

4)灰度:灰度发布,支持按设备、PIN、自定义比例方式在不影响正常用户的情况下,保障后端服务平稳过渡。

5)方便快捷:支持http、jsf服务快捷接入,mock功能加快协同开发。

技术实践

API网关服务于原生客户端、Web、小程序,不限于具体的业务。其主要架构图如下所示:

图片

主要分3层:

  • 第1是VIP层,主要是接收客户端http、https请求,并将请求转发到网关;

  • 第2是网关层,对请求进行合法性校验并转发;

  • 第3层就是后端业务API,这些业务方,就是我们服务的主要对象。

1、高并发实现

网关高并发实践主要利用异步化处理技术,将请求由同步变为异步,利用NIO多路复用,达到请求接收最大化。

首先看下图同步处理过程:

图片

采用同步处理,线程的释放就受限于后端服务响应的快慢。当响应过慢时,线程池就容易出现耗尽现象,并且资源利用率上不去,吞吐量很低,或者说此时的大量请求都会被服务器拒绝。

由此可以看出,同步处理使资源利用率得不到充分的利用,大量请求被拒绝同时又影响了用户体验。如果想提高并发只能通过横向加机器,这样造成机器资源大量浪费的现象。如果是网关这么处理,那么这种现象体现的将更明显。

为了解决同步引起的问题,采用异步,如下图所示:

图片

通过实现异步化处理,线程可以在开启异步后直接释放,当前请求的响应会被延后,当后端服务有响应后,再将响应写回给客户端。这样就算是有后端服务响应很慢,因为线程已被释放了,可以继续接收新的请求,达到服务资源使用的最大化。

2、安全防护

精细化流控:

作为所有业务方的第一道防线,网关承载着海量流量的访问,以及随时可能爆发的恶意流量攻击的压力。

很典型的,每年双十一或是618都会有刷子恶意刷后端服务接口,如果网关不做处理直接将流量透传到后端服务,后端服务很大可能会被瞬时流量冲垮,至少会增大后端服务响应延时及浪费公司大量资源来处理攻击。

那么,进行流量控制就是必不可少的。网关提供秒级的流量控制,可以对单个接口按地域、风控等级等维度进行流控配置。这样流量只到了网关层面,就不会透传到后端服务了。

流控主要是采用令牌桶算法实现,策略主要有排队或熔断,具体的策略根据不同的端,选择合适的流控动作。

      

授权及签名认证:

API暴露在公网,肯定会存在被刷的风险,网关要做的就是尽可能降低这种风险。就像通过制定法律来尽可能减少犯罪一样,通过访问权限控制、签名认证、跨域校验等来尽可能的降低API接口被刷的风险。

授权:只有通过API负责人授权的接口,客户端才有权限访问 。如果未授权,在网关处拦截,响应给客户端没有访问权限;

签名认证:按规则将请求参数通过HMAC-SHA256算法运算生成签名值,对客户端计算的签名值与网关计算的签名值进行匹配,匹配的请求继续向下流转,否则直接被拦截。

跨域效验:

对于WEB端应用,调用网关属于跨域请求。这类请求,如果不进行校验,会产生跨域攻击。所以需要获取到客户端请求来源,对客户端请求来源进行认证,只有合法的请求来源才被允许访问后端服务。对于小程序应用,也会校验小程序真实性。

3、灰度发布

设想这样一个场景:有一个核心业务,做了比较大的改动,又或者是项目重构,开发完成,同时测试完成,要上线了。但是,问题也来了:因为改动很大,业务很重要,测试所拿机型设备有限,担心直接全部上线会影响测试未覆盖的线上用户。那么,能不能先有10%的流量请求到新服务,看下用户使用情况,再决定是否全部上线呢。

为了满足这种需求,网关提供按设备号、用户标识的定点灰度测试,同时支持按比例进行的灰度上线。

图片

用户请求到网关,如果开启灰度模式,就获取到灰度地址,将请求转发到特定的服务。

自动化运营

在高举可持续发展旗帜的时代下,如果一个产品仅仅做到功能齐全是远远不够的。只有做到可持续发展,实现自动化运营的产品才真正是个好产品。API网关平台化意味着N条产品线,一个网关,通过实现自动化运营,解放生产力,打造统一化平台,提供可持续化产品,拥抱API经济,实现API变现。

图片

API网关控制台首页

1、独立部署与快速扩展

  API网关统一管理着发布方对外暴露的API服务,各个服务可以独立开发部署。针对后端服务的发布与下线,发布方可通过API网关提供界面化管理控制平台,实现流程化管理,线上审批通过后,实时生效,无需手动控制,实现自动化运营。

同时对于后端服务的各项配置,如API权限管理、流量控制等,API网关进行自动化管理,动态配置,动态加载,保证在无需重启服务的情况下即可进行配置更改操作。

要实现自动化运营,除了对API服务管理做到独立部署、快速扩展外,对于API的调用方也实现自助API开通,授权访问API服务。

2、数据分析与监控告警

由于API网关处在一个内部系统与外部环境的分界点处,所有外部请求都经过API网关进行调度和过滤,每时每刻都有大量请求通过API网关进入内部服务。因此可以在API网关层进行请求接入监控,监控各个接口的访问请求并进行收集,以便相应指标的统计分析。

在API网关界面化管理控制平台中,对收集统计到的监控数据,如API接口调用量、响应时间等信息,提供了可视化的API实时智能数据分析与监控告警功能,订阅API异常报警信息,以便实时监控后端服务运行情况。

图片

后端接口监控数据图

3、线上环境故障定位

当发生线上故障时,API网关提供一系列的故障现场还原措施进行故障的定位与排查,通过日志实时分析、异常流量实时探测、监控告警等技术,快速拿到故障快照、还原故障现场以及迅速定位问题原因。

图片

后端接口调试界面图

总结

作为系统的唯一入口,API网关的地位是至关重要的。API网关位于技术中台的核心要塞,符合技术中台战略发展方向,做到了产品组件化、需求结构化、数据配置化、业务可视化:

  • 产品组件化:具有足够的灵活性和扩展性,支持提供特定场景特定需求。

  • 需求结构化:根据业务能力、业务规则完成需求结构化分解,降低沟通成本。

  • 数据配置化:在线配置业务,快速发布上线。

  • 业务可视化:细粒度划分业务规则,多维度展示业务监控数据。

对于基于微服务架构实现的后端服务而言,接入一个性能高效、安全稳定的API网关,享受其带来的身份认证、路由请求、协议转换等便利,更加专注于自身业务逻辑的开发,是有必要的。利用API网关对各个服务API进行统一的管理和监控,解决客户端与后端服务交互不便的问题,具有十分重要的意义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/120791.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stable diffusion模型评价框架

GhostReview:全球第一套AI绘画ckpt评测框架代码 - 知乎大家好,我是_GhostInShell_,是全球AI绘画模型网站Civitai的All Time Highest Rated (全球历史最高评价) 第二名的GhostMix的作者。在上一篇文章,我主要探讨自己关于ckpt的发展方向的观点…

ESP8266使用记录(四)

放上最终效果 ESP8266&Unity游戏 整合放进了坏玩具车遥控器里 最终只使用了mpu6050的yaw数据,因为roll值漂移…… 使用了https://github.com/ElectronicCats/mpu6050 整个流程 ESP8266取MPU6050数据,处理后通过udp发送给Unity显示出来 MPU6050_Z…

ElementUI之首页导航与左侧菜单

目录 一、Mock 1.1 什么是Mock.js 1.2 安装与配置 1.2.1 安装mock.js 1.2.2 引入mock.js 1.3 mock.js使用 1.3.1 定义测试数据文件 1.3.2 mock拦截Ajax请求 1.3.3 界面代码优化 二、总线 2.1 定义 2.2 类型分类 2.3 前期准备 2.4 配置组件与路由关系 2.4.1 配置…

基于PHP+MySQL的养老院管理系统

摘要 随着21世纪互联网时代的兴起,我们见证了人们生活方式的巨大改变。这个时代不仅深刻影响了我们的生活,还改变了我们对信息科学的看法。社会的各个领域都在不断发展,人们的思维也在不断进步,与此同时,信息的需求也与…

紫光同创FPGA图像视频采集系统,基于OV7725实现,提供工程源码和技术支持

目录 1、前言免责声明 2、设计思路框架视频源选择OV7725摄像头配置及采集动态彩条HDMA图像缓存输入输出视频HDMA缓冲FIFOHDMA控制模块HDMI输出 3、PDS工程详解4、上板调试验证并演示准备工作静态演示动态演示 5、福利:工程源码获取 紫光同创FPGA图像视频采集系统&am…

分布式文件存储系统minio、大文件分片传输

上传大文件 1、Promise对象 Promise 对象代表一个异步操作,有三种状态: pending: 初始状态,不是成功或失败状态。fulfilled: 意味着操作成功完成。rejected: 意味着操作失败。 只有异步操作的结果,可以决定当前是哪一种状态&a…

Windows/Linux下进程信息获取

Windows/Linux下进程信息获取 前言一、windows部分二、Linux部分三、完整代码四、结果 前言 Windows/Linux下进程信息获取,目前可获取进程名称、进程ID、进程状态 理论分析: Windows版本获取进程列表的API: CreateToolhelp32Snapshot() 创建进程快照,…

CTF 入门指南:从零开始学习网络安全竞赛

文章目录 写在前面CTF 简介和背景CTF 赛题类型介绍CTF 技能和工具准备好书推荐 写作末尾 写在前面 CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几…

ip的标准分类---分类的Ip

分类的 IP 即将 IP 地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成。 其中第一个字段是网络号(net-id),它标志主机或路由器所连接的网络。一个网络号在整个因特网内必须是唯一的。 第二个字段是主机号&#xf…

jupyter notebook可以打开,但无法打开.ipynb文件,报错500 : Internal Server Error

1、错误信息 2、解决办法 打开Anaconda Promt界面,进入自己的虚拟环境。在命令行输入以下指令: pip install --upgrade nbconvert

【Linux服务器】多人聊天群的实现----附代码

UDP构建服务器 预备知识 认识UDP协议 此处我们也是对UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识; 后面再详细讨论. 传输层协议无连接不可靠传输面向数据报 网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多…