API网关帮后端服务做连接管理

本文涉及的产品
云原生 API 网关,700元额度,多规格可选
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 使用API网关来管理你的API的时候,由API网关来负责管理所有客户端的连接,后端服务器可以专心处理业务请求,节省了大量连接管理的开销。

当一个互联网产品业务量越来越大,她接入的客户端也会越来越多,不管客户端使用的是长连接还是短连接,对用户的连接管理必将成为一件耗资源且复杂的事情。特别对于使用HTTP短连接进行数据交互的业务,在HTTP连接维护上面,需要花费比较大的开销。

让我们来看看使用HTTP短连接来完成一次数据交互的全过程。

众所周知,HTTP是基于TCP的协议,而使用TCP进行通信前,首先需要通信双方建立TCP连接。我们来看看客户端是如何和服务器端建立连接的:

  1. 请求新的TCP连接时,客户端需要向服务器发送一个小的TCP报文(通常是40-60字节), 这个报文设置了一个特殊的SYN标记。说明这是一个连接请求;
  2. 如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个TCP报文,这个报文的SYN和ACK标记都被置位。ACK标记被置位是告诉客户端,服务器端已经收到你的连接请求了,SYN标记被置位是服务器告诉客户端,服务器端的连接已经建立;
  3. 最后, 客户端收到刚才的SYN和ACK报文后,向服务器会送一条TCP报文,这个报文的ACK标记都被置位。这个报文是通知服务器端,客户端知道服务器的连接建立好了。

三步完成后,此连接已成功建立, 客户端和服务器端都可以在此连接上发送数据了,这三步就是江湖上经常说道的TCP三次握手的过程,下面我们用一张图来更清晰地描述下这个过程:

三次握手建立连接

连接建立后,客户端在这条连接上发送请求数据,服务器端收到请求后,将请求交给业务线程处理,业务线程在处理完成业务后,将应答数据写入连接。客户端接收到应答数据,将应答数据处理后显示给客户端使用者。此时客户端由于客户端使用的是短连接通信策略,并且数据交互过程已经完成,客户端会主动去关闭这条连接,这个关闭的过程也比较复杂,比建立连接的三步还多一步:

  1. 客户端需要向服务器发送一个标记为FIN的报文,告诉服务器我要关闭这条连接了;
  2. 服务器收到客户端发送的标记为FIN的报文后,给客户端发送一个标记为ACK的报文,告诉客户端我知道你想关闭这条连接了;此时服务器如果还有未发送完的应答数据,也会继续在这条连接上将数据传输完毕;
  3. 服务器端发现自己也没有数据发送给客户端了,这时服务器会给客户端发送一条标记为FIN的报文,告诉客户端,我也准备好关闭这条连接了;
  4. 客户端收到服务器端发送过来的FIN报文后,立即给服务器端发送一个针对这条FIN报文的ACK报文,告诉服务器端,我收到了,你安心释放这条连接的资源吧。服务器收到最后的ACK报文后,将这条连接的资源释放掉。此时客户端在发送完ACK报文后会处于TIME_WAIT状态一段时间,然后再释放这条连接。

让我们用一张简要的图来描述下这个过程:

关闭TCP连接

有时候服务器端会主动发起FIN报文,流程和客户端发起的一样,这块就不继续描述了。

从以上的描述中,我们已经可以了解到,客户端和服务器端处理连接的建立和释放这个过程是非常耗时间和资源的。目前很多APP的业务还都是使用HTTP短连接来完成数据通讯的,这样每完成一次业务通信,就需要完成一次建立连接和关闭连接的过程。使用HTTP短连接做数据通讯,每一次连接的建立和关闭具体会消耗服务器多少时间呢,我们可以通过抓包来量化这个过程。

下面是我抓的一个典型的短连接数据的网络包,客户端向服务器发起请求一个HTTP请求获取一个静态页面,服务器端读取本地页面文件后给客户端返回。

短连接HTTP请求抓包

从这个图中我们可以看到,前三个包是TCP三次握手建立连接的过程,一共花费了服务器22毫秒的样子,中间三个报文是接收HTTP请求和返回应答的报文,一共花费了服务器180毫秒,最后四个报文是关闭连接的报文,花费了服务器60毫秒左右。也就是说服务器在连接的建立与关闭,一共花费了82毫秒的CPU时间,而真实的业务处理花费了180毫秒,连接管理的开销达到了业务开销的45%。这个业务请求是有磁盘IO的,如果业务的操作在内存可以完成,那么连接管理的开销可能达到业务开销的100%。

如果你的业务服务器部署在阿里云API网关的后面,由阿里云API网关负责管理所有客户端的连接,阿里云API网与后端业务服务器之间使用长连接进行通信。由于长连接通信不需要频繁的建立、释放TCP连接,那么后端的业务服务器完全不用在连接管理上面有额外开销,所有的CPU资源都可以花销在业务处理上。我们来看一下这块的架构图:

架构图

结论:

使用API网关来管理你的API的时候,由API网关来负责管理所有客户端的连接,后端服务器可以专心处理业务请求,节省了大量连接管理的开销。

需要注意的一点是,后端服务器的HTTP容器必须配置成支持HTTP长连接才能享受到使用API网关带来福利。

目录
相关文章
|
24天前
|
人工智能 监控 负载均衡
一文详述:AI 网关与 API 网关到底有什么区别?
近年来,AI发展迅猛,大模型成为推动业务创新的关键力量。企业面临如何安全管理和部署AI应用的挑战,需设计既能满足当前需求又可适应未来发展的基础架构。AI网关应运而生,在集成、管理和优化AI应用中扮演重要角色。本文探讨AI网关与API网关的区别,分析AI系统为何需要专门网关,并提供选择合适AI网关的建议。AI网关不仅支持多种模型,还具备高级安全性和性能优化功能,有助于企业在复杂环境中灵活应用AI技术。
64 1
|
5天前
|
SQL API 数据安全/隐私保护
打造现代化后端服务:从零到一实现RESTful API
【10月更文挑战第20天】在数字化时代的浪潮中,构建一个高效、可靠的后端服务是每个软件工程师的必备技能。本文将引导你理解RESTful API的设计哲学,并通过实际的代码示例,展示如何从无到有地实现一个现代化的后端服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和启发。
|
22天前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
77 9
|
27天前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
45 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
2月前
|
人工智能 Serverless API
一键服务化:从魔搭开源模型到OpenAI API服务
在多样化大模型的背后,OpenAI得益于在领域的先发优势,其API接口今天也成为了业界的一个事实标准。
一键服务化:从魔搭开源模型到OpenAI API服务
|
2月前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
3月前
|
API Java Python
API的神秘面纱:从零开始构建你的RESTful服务
【8月更文挑战第31天】在现代网络应用开发中,RESTful API已成为数据交互的标准。本文通过比较流行的技术栈(如Node.js、Python的Django和Flask、Java的Spring Boot)及其框架,帮助你理解构建RESTful API的关键差异,涵盖性能、可扩展性、开发效率、社区支持、安全性和维护性等方面,并提供示例代码和最佳实践,指导你选择最适合项目需求的工具,构建高效、安全且易维护的API服务。
46 0
|
3月前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
69 0
|
3月前
|
JSON API 数据库
探索FastAPI:不仅仅是一个Python Web框架,更是助力开发者高效构建现代化RESTful API服务的神器——从环境搭建到CRUD应用实战全面解析
【8月更文挑战第31天】FastAPI 是一个基于 Python 3.6+ 类型提示标准的现代 Web 框架,以其高性能、易用性和现代化设计而备受青睐。本文通过示例介绍了 FastAPI 的优势及其在构建高效 Web 应用中的强大功能。首先,通过安装 FastAPI 和 Uvicorn 并创建简单的“Hello, World!”应用入门;接着展示了如何处理路径参数和查询参数,并利用类型提示进行数据验证和转换。
79 0
|
3月前
|
XML JSON API
打造高效后端服务:RESTful API 设计实践
【8月更文挑战第31天】在数字化浪潮中,后端服务是支撑起整个互联网生态的骨架。本文将带你深入理解RESTful API的设计哲学,通过具体案例学习如何构建清晰、灵活且高效的后端服务接口。我们将一起探索资源定位、接口约束以及状态传输的关键要素,并通过代码示例揭示最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的洞见和实用的技巧。