解决方案:如何让ADC产品将HTTP请求负载的更加均衡

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

最近的一次POC测试,获得了一些有意思的经验,分享给大家。客户目前的需求和问题大致是这样的:

1、首先,应用服务器端需要保持TCP长连接,客户端关闭TCP连接后,服务器端连接不能关闭;

2、其次,登陆应用系统需要做源IP地址鉴权,就是要除了验证登陆用户名和密码以外,还需要验证登陆请求来源的IP地址;

3、目前的问题是客户端向系统发送请求的差异很大!客户端与服务器建立TCP长连接后,有一部分客户端会在一个TCP连接里发送大量的HTTP请求,这些是合法的正常请求,因此,会造成与部分应用服务器访问压力比较大,甚至会造成服务器Web进程瘫痪的现象;

了解了客户的需求和问题以后,按照以往的经验和做法,看到服务器端需要保持TCP长连接,首先想到的就是利用TCP连接复用,刚好可以满足客户的第一个需求,ADC(应用交付控制器)和服务器保持TCP长连接,当客户端完成请求并获得应答后,ADC正常关闭客户端的TCP连接,OK第一个需求可以满足。

让我们再看看第二个需求,按照这个需求,应用系统需要获得客户端的源IP地址。很不幸,按照TCP连接复用的工作机制,ADC设备需要改变客户端的源IP地址,或者复用部分客户的源地址(类似F5的One-Connect做法)。这样的话,应用系统就无法完成源IP地址的鉴权。分析到这里,矛盾出来了,客户第一个和第二个需求似乎是相互排斥的!怎么办呢?一个折中的办法,由于应用系统是基于HTTP协议做的,是不是可以在ADC设备上启用客户端IP地址的插入功能,将客户端地址插入到HTTP Header中,发送到应用服务器。很不幸,由于对应用系统改动比较大,所以客户不能接受这个折中的解决办法,那怎么办?让我们暂时搁置这个问题,再看看目前客户的第三个问题。

按照第三个问题的描述,可以看到基于连接的负载分担算法是无法真正解决目前的问题,如果能够按照请求进行负载分担可能会解决这个问题。ADC在七层工作模式下,如果能把来自同一个客户端TCP连接的不同HTTP请求,按照预定的负载分担算法分配到不同的应用服务器上就可以解决请求分发的问题。让我们再进一步预想一下,如果ADC产品为每个客户端请求,与应用服务器都建立一个TCP短连接,是不是会造成服务器频繁的开启/关闭连接,无形中反而增加了服务器的压力?那么如果ADC产品能够与服务器端保持TCP长连接,只要客户端有请求过来,就利用原有的服务器长连接去转发客户端请求,那不是刚好也可以解决第一个和第二个需求!如果是这样的工作机制,那么就太理想了!一举三得的事情!

那么应该启用什么功能可以实现呢?让我们在HTTP应用相关的功能模板里寻找一下,不难发现有一个小的feature从字面理解看,也许就是我们要找的解决问题的Key,是什么呢?Strict Transaction Switching:严格事务交换,那何为Transaction呢?不就是一个request请求嘛,在手册中这个功能的描述是这样的,缺省情况下,AX设备会为客户端会话的第一个request选择一个服务器,来建立服务器端的连接,之后在这个会话里所有的客户端requests,AX都会自动的把这些reuqests发送到同一台服务器上。当开启了STS(Strict Transaction Switching)功能,AX设备就会改变缺省的机制,对每个会话中的所有requests都会按照负载算法选择一个最佳的服务器。到这里我们已经可以基本确认STS就是我们要的解决办法。那会不会出现AX设备为每个request去和服务器建立一个短连接呢?这个手册中没有提及,OK让我们搭建一个环境试一试,或者直接在客户测试环境中尝试一下,并在AX设备上开启debug,验证一下从客户端~AX~服务器端完整的TCP连接建立过程,以及连接关闭过程,就可以确认我们的解决办法是可行的!

经过验证,没有问题!客户端同一个会话中不同的requests会负载到不同的服务器上,服务器应答后,AX也不会关闭与服务器的连接。即使客户端关闭了连接,用新的TCP连接发送后续的requests,AX设备依然可以利用原有的服务器连接传递这些requests。至此,客户那边的需求和问题都可以解决了!另外,在测试过程中,负载均衡算法,经过不同算法的验证,在AX上采用“严格轮询”算法,服务器负载非常均衡,相对比较不推荐使用“最少连接”或者“最少请求”的算法,这些算法会造成处理请求快的服务器负载稍高些。

同样的如果我们遇到了个别类似CC攻击情况,一个会话中发送大量HTTP请求,除了制定一些速率限制和安全限制策略(PBSLB)外,也可以尝试开启STS功能,将这些请求分散到不同的服务器上去。


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/780765

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
10天前
|
Web App开发 缓存 JavaScript
使用TypeScript创建高效HTTP代理请求
使用TypeScript创建高效HTTP代理请求
|
13天前
|
DataWorks 数据挖掘 调度
DataWorks产品使用合集之如何查看HTTP触发器调用的域名
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
4天前
|
Java 应用服务中间件 API
Tomcat处理一个HTTP请求的执行流程的详细解析
Tomcat处理一个HTTP请求的执行流程的详细解析
13 4
|
8天前
|
JSON 数据格式 Python
Python 的 requests 库是一个强大的 HTTP 客户端库,用于发送各种类型的 HTTP 请求
【6月更文挑战第15天】Python的requests库简化了HTTP请求。安装后,使用`requests.get()`发送GET请求,检查`status_code`为200表示成功。类似地,`requests.post()`用于POST请求,需提供JSON数据和`Content-Type`头。
34 6
|
10天前
|
Python
python做http请求
python做http请求
12 1
|
12天前
|
运维 Java Serverless
Serverless 应用引擎产品使用合集之是否提供工具来给OSS配置HTTPS证书
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
15天前
|
JSON API 数据格式
Requests库:轻松实现Python中的HTTP请求
Requests是Python的第三方HTTP库,简化了HTTP请求的发送,支持GET、POST等方法。要安装,使用`pip install requests`。Requests以其简洁API和强大功能成为网络编程首选工具,为开发者提供高效稳定的网络交互体验。
26 5
|
10天前
|
Web App开发 存储 网络安全
Charles抓包神器的使用,完美解决抓取HTTPS请求unknown问题
本文介绍了在 Mac 上使用的 HTTP 和 HTTPS 抓包工具 Charles 的配置方法。首先,强调了安装证书对于抓取 HTTPS 请求的重要性,涉及 PC 和手机端。在 PC 端,需通过 Charles 软件安装证书,然后在钥匙串访问中设置为始终信任。对于 iOS 设备,需设置 HTTP 代理,通过电脑上的 IP 和端口访问特定网址下载并安装证书,同时在设置中信任该证书。配置 Charles 包括设置代理端口和启用 SSL 代理。完成这些步骤后,即可开始抓包。文章还提及 Android 7.0 以上版本可能存在不信任用户添加 CA 证书的问题,但未提供解决办法。
38 0
Charles抓包神器的使用,完美解决抓取HTTPS请求unknown问题
|
12天前
|
存储 运维 Serverless
Serverless 应用引擎产品使用合集之使用http异步任务,怎么能很快的根据任务数进行扩缩容
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3天前
|
安全 搜索推荐
基础入门 HTTP数据包&Postman构造&请求方法&请求头修改&状态码判断
基础入门 HTTP数据包&Postman构造&请求方法&请求头修改&状态码判断