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状态一段时间,然后再释放这条连接。

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

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

从以上的描述中,我们已经可以了解到,客户端和服务器端处理连接的建立和释放这个过程是非常耗时间和资源的。目前很多APP的业务还都是使用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网关带来福利。

时间: 2024-09-17 03:41:20

API网关帮后端服务做连接管理的相关文章

基于API网关构建高可用、高安全性API

        今天我们来聊聊如何借助API网关构建高可用.高安全性的云API,充分利用API网关给我们带来的便利. 认证         从API定义上我们可以定义多种认证类型的API,除特殊API外建议定义APP认证方式或其有安全认证类型的API,这样一旦发生攻击或者大量非法调用时我们可以知道谁在调用,便于我们通过黑名单等措施及时进行限制 HTTPS 建议对数据传输安全性要求较高的API仅开放HTTPS调用方式,另外在证书选择上,强烈建议大家选购Verisign的安全证书,因为Verisig

微服务架构中API网关的角色

[编者的话]本文主要讲述了Mashape的首席技术执行官Palladino对API网关的详细介绍,以及API网关在微服务中所起的作用,同时介绍了Mashape的一款开源API网关Kong. 本文讲的是微服务架构中API网关的角色API网关提供商Mashape的首席技术执行官Marco Palladino预测,尽管它们在命名方面存在差异,但新出现的服务网格并不完全不同于API网关,两者之间的相似性会随着时间的推移而不断增长. Palladino指出,实际上这两种技术提供的功能很相似.API网关,比

使用API网关建立多场景测试环境

        在软件/应用系统开发过程中,系统的好坏不仅取决于架构设计.可行性分析及功能实现,还需要一套完善的测试机制来保证质量,这往往需要变换场景进行多轮测试,以保证每个隐蔽的BUG都能够被发现.那就迫使在实际的开发中有多套测试环境,比如:一套稳定的测试环境,供系统内部系统调用:多套项目环境,并行开发:还需要有一个能模拟线上的测试环境,来模拟测试.         API网关作为系统内外的分水岭,当然也不会忽视对测试环境的支持.可以通过API网关的环境管理功能来实现测试环境的管理.目前每个A

使用API网关流控防攻击

API使软件之间的通讯更加便捷,使得基于软件支撑的商业模式得以落地,如移动支付,从而促进API经济的繁荣.现在开放API服务已经成为软件服务的主要趋势,对于API提供者而言,API服务的安全性则是需要重点考虑的.但互联网上的攻击,或者某次促销导致流量暴增,超出服务承受能力的情况无可避免,在这种情况下,怎么保护后端服务不受影响,服务不被中断? API网关在设计之初,就重点考虑了安全性的问题,流控作为API网关的主要功能,能从API分组.API.用户.APP四个维度进行流量控制,当流量超过设置阈值时

API网关快速接入手册

API网关(API Gateway),是阿里云提供API托管服务,涵盖API发布.管理.运维.售卖的全生命周期管理的产品,辅助用户简单.快速.低成本.低风险的实现微服务聚合.前后端分离.系统集成,向合作伙伴.开发者开放功能和数据.下面将介绍API网关的快速接入流程,帮助您快速开放API. 创建分组 API分组指管理API的单元,一般将一套完整功能集合的API归为一个分组. 在特定Region(Region最好和后端服务在同一个Region)下,在API网关控制台菜单中选择"分组管理->创建

API网关遇上容器服务

在API经济和微服务的背景下,如何对服务的API进行管理是大家都很感兴趣的话题.本文通过利用阿里云的容器服务和API网关,构建一个完整的基于Docker的具有API管理功能的服务. API管理 假定我们需要这么一个经典的后端服务,访问如下API接口的时候返回Hello World: $ curl http://apisvc.hostxx/api <p>Hello World</p> 这个服务推出后广受欢迎,但是烦恼总是伴随幸福不期而至: 对API进行计费怎么做? 外界访问API的流

实践篇:搭建无服务器应用--函数计算+API网关+云市场(提供手机号归属地查询服务)

6月5日,阿里云的API网关上线了一个新功能,用户定义API后端服务时可以选择使用Function Compute,这样API网关的用户直接使用函数计算的技术能力,这也使得API网关具备可扩展的后端应用,与此同时函数计算也享受到API网关带来的诸多的好处,例如API的请求流量管控.安全鉴权.访问监控.统计等等. 下面我做一个简单的例子,把函数计算+API网关+云市场三者结合起来,提供一个能查询手机号归属地的服务,在这个框架里不需要配置WEB容器.不需要搭建运行环境.不需要购买负载均衡,通过配置和

为什么微服务需要API网关?

本文讲的是为什么微服务需要API网关?[编者的话]James Higginbotham.API架构师,现供职于LaunchAny.这是一家API咨询公司,帮助其合作伙伴完善API设计与管理. 随着以API产品化和以其为中心的IT计划的兴起,API网关和管理层变得很通用.我们应该为微服务考虑API网关吗?如果是这样,它们能提供什么收益吗? API网关是什么? API网关可以提供一个单独且统一的API入口用于访问内部一个或多个API.它们典型的会提供访问频率限制层和安全层.但诸如Tyk.io这样的A

帮你捋顺 API 网关的 API、SDK和错误排查

API 网关的特殊之处   用户使用 API 网关开放 API 服务,或者调用其他人开放的 API 服务.而且 API 网关自身也开放了管理接口 API.所以用户使用时需要弄清楚两套 API.两套 SDK.两套错误码.这里把这些资源整理一下,方便大家正确使用和问题排查. 开发资源List   APIs   用户在 API 网关开放的 API 服务,如天气查询 API等   API 网关开放的管理接口,用于使用产品,如创建 API等   SDKs   API 网关为天气查询等用户开放的 API 服