京东大型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进行统一的管理和监控,解决客户端与后端服务交互不便的问题,具有十分重要的意义。
相关文章:
 
京东大型API网关实践之路
概述 1、背景 京东作为电商平台,近几年用户、业务持续增长,访问量持续上升,随着这些业务的发展,API网关应运而生。 API网关,就是为了解放客户端与服务端而存在的。对于客户端,使开放给客户端的接口标准统…...
 
图像处理: 马赛克艺术
马赛克 第一章 马赛克的历史渊源 1.1 马赛克 艺术中的一种表面装饰,由紧密排列的、通常颜色各异的小块材料(如石头、矿物、玻璃、瓷砖或贝壳)组成。与镶嵌不同的是,镶嵌是将要应用的部件放置在已挖空以容纳设计的表面中࿰…...
 
postgresql-管理数据表
postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中,使用 CREATE TABLE 语句创建一个新表: CREATE TABLE …...
 
Llama2-Chinese项目:3.1-全量参数微调
提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示: "<s>Human: "问题"\n</s><s>Assistant: "答案举个例子,如下所…...
蓝桥等考Python组别十级001
第一部分:选择题 1、Python L10 (15分) 已知s = Hello!,下列说法正确的是( )。 s[1]对应的字符是Hs[2]对应的字符是ls[-1]对应的字符是os[3]对应的字符是o正确答案:B 2、Python L10 (15分) 运行下面程序,输入字符串“Banana”,输出的结果是&#x...
记录 Git 操作时遇到的问题及解决方案
目录 问题:git pull 时报错报错内容: ! [rejected] v1.0.3 -> v1.0.3 (would clobber existing tag)原因:本地 Git 仓库中已经存在名为 v1.0.3 和 v1.0.6 的标签了,而尝试从远程仓库(GitHub)拉取这些标签…...
 
第一届“龙信杯”电子数据取证竞赛Writeup
目录 移动终端取证 请分析涉案手机的设备标识是_______。(标准格式:12345678) 请确认嫌疑人首次安装目标APP的安装时间是______。(标准格式:2023-09-13.11:32:23) 此检材共连接过______个WiFi。&#x…...
Vue与React//双绑问题
Vue和React是两个目前最流行的前端框架,它们有一些区别主要区别如下: 响应式原理:Vue使用基于模板的方式进行双向绑定,其中使用了Vue自己实现的响应式系统。Vue能够通过追踪数据的依赖关系,自动更新DOM元素。而React采…...
 
信息安全第四周
社会工程学 社会工程学主要研究如何操纵人的心理和情感来获取机密信息或其他目标。它主要不是通过技术手段攻击计算机系统,而是通过心理学和人际交往技巧来欺骗人,使他们泄露密码、安全代码或其他敏感信息。社会工程学主要是一种安全风险,主要…...
机器学习基础概念与常见算法入门【机器学习、常见模型】
机器学习基础概念与算法 机器学习是计算机科学领域的一个分支,它致力于让计算机系统具备从数据中学习和改进的能力,而不需要显式地进行编程。与传统编程相比,机器学习有着根本性的不同之处。 机器学习与传统编程的不同 传统编程࿱…...
移动端 [Android iOS] 压缩 ECDSA PublicKey
移动端 [Android & iOS] 压缩 ECDSA PublicKey AndroidiOS 使用 Android KeyStore 和 iOS 的 Secure Enclave 提供的安全能力使用 P-256 来对 API 请求进行签名,服务器端再进行验证。 但是发现不论是 iOS 还是安卓都没有提供一个便捷的方式从 iOS 的SecKeyCopyE…...
Spring的配置Bean的方式
在Spring框架中,配置Bean有三种主要方式:自动装配、基于Java的显式配置和基于XML的显式配置。 1、自动装配: 自动装配是Spring容器根据Bean之间的依赖关系,自动将需要的Bean注入到目标Bean中。这是一种非常简便和快捷的配置方式&…...
 
安防监控/视频汇聚平台EasyCVR云端录像不展示是什么原因?该如何解决?
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...
 
毛玻璃态登录表单
效果展示 页面结构组成 通过上述的效果展示可以看出如下几个效果 底部背景有三个色块并且效果是毛玻璃效果登录表单是毛玻璃效果登录表单的周围的小方块也是有毛玻璃效果并且与登录表单有层次效果 CSS3 知识点 filter 属性backdrop-filter 属性绝对定位属性动画属性 底部背…...
Java:使用 Graphics2D 类来绘制图像
目录 过程介绍创建一个 BufferedImage 对象创建一个 Graphics2D 对象绘制字符和干扰线将生成的图像保存到文件 示例代码 过程介绍 创建一个 BufferedImage 对象 首先创建一个 BufferedImage 对象来表示图像 创建一个 Graphics2D 对象 然后使用 createGraphics() 方法创建一…...
 
VUE2项目:尚品汇VUE-CLI脚手架初始化项目以及路由组件分析(一)
标题 环境VUE2目录publicassetscomponentsmain.jsbabel.config.jspackage.jsonvue.config.js 项目路由分析Header与Footer非路由组件完成Header示例 路由组件的搭建声明式导航编程式导航 Footer组件的显示与隐藏路由传递参数重写push和replace三级联动组件拆分附件 环境 前提要…...
输入网址input,提取标题和正文
https://m.51cmm.com/wz/WZnKubw1.html?share_token715beaff-33ef-466b-8b6c-092880b9a716&tt_fromcopy_link&utm_sourcecopy_link&utm_mediumtoutiao_android&utm_campaignclient_share - 【科学决策七步骤 - 希律心理】 - 今日头条 提取标题和正文input输…...
docker--redis容器部署及与SpringBoot整合
1. 容器化部署docker 拉取镜像创建数据目录data 及 配置目录conf创建配置文件redis.conf启动redis容器进入容器,进行Redis操作设置为自启动:docker update redis --restart=alwaysdocker pull redis:5.0.12docker run -d --rm --name my_redis -p 6379:6379 -v D:/docker/red…...
数据库:Hive转Presto(二)
继续上节代码,补充了replace_func函数, import re import os from tkinter import *class Hive2Presto:def __int__(self):self.t_funcs [substr, nvl, substring, unix_timestamp] \[to_date, concat, sum, avg, abs, year, month, ceiling, floor]s…...
 
docker安装apisix全教程包含windows和linux
docker安装apisix 一、Windows安装1、首先需要安装docker和docker compose,如果直接安装docker desktop,会自动安装docker compose。2、重新启动电脑3、访问 Docker 的下载([https://www.docker.com/products/docker-desktop](https://www.do…...
 
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
 
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
 
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
 
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
 
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
 
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
 
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
