一说起CLB的负载均衡策略, 可能很多人都耳熟能详:轮询、加权轮询、源地址hash、目标地址hash,但知道这些就够了吗?
这几天在一个客户在试用CLB,简要架构:CLB后面挂了12台Nginx,Nginx上面有lua程序做限流措施,Nginx后面是API server;QPS:经过CLB的并发在2.5W。问题是:他们担心CLB分发流量不均,导致Nginx负载不均,没办法设置限流策略。
想了解CLB是按客户端新建连接做均衡还是按总QPS做均衡,因为现在客户端大都支持长连接,如果按新建连接做均衡,每个client发起的HTTP请求不一样,大概率会导致负载不均。虽然CLB产研做了理论解释,但客户想验证证明。如何回答这个问题呢?
HTTP是基于TCP的,而TCP建连需要三次握手、断连需要四次挥手,所以连接建立和释放都是有时间开销的。
在HTTP中,长连接即在一个TCP连接中,发送多个HTTP请求;短连接即每发送一个HTTP请求,都要经过经过一次TCP建连和断连的过程,多个请求并发时,时间消耗相当可观。
HTTP不同版本、如何支持长短连接等具体的理论,大家自行查询,不在赘述,这里只列出关键的。
HTTP1.1中,可以通过Connection这个header,值为keep-alive表示本端接受长连接,值为close表示不开长连接。下面通过浏览器抓包
长连接第一次请求,会有建连时间,如下图:
第二次请求,则没有建连时间,如下图,Initial connection时间已经消失了
本次主要是验证请求经过CLB后,是如何分发到RS上。所以简化一下架构:
一台CLB下面挂两个Nginx,CLB和Nginx间禁用短连接,两台Nginx静态页,一台返回0,一台返回1,通过并发访问Nginx静态页来模拟业务场景。看看会不会有不均的情况
由于CLB与后端RS的长连接和短连接是不同场景,本文先测试短连接场景
配置略
在浏览器,直接访问CLB的IP地址,看看返回情况:
浏览器与CLB是长连接,没刷新一次,浏览器的结果都在0和1间轮番出现。
通过腾讯云的PTS压测工具,模拟客户的真实流量,通过nginx-export观测nginx连接数
5.2.2 Nginx exporter监控
从上面测试可以得出结论,在CLB与RS间是短连接时,CLB不会考虑client与CLB是长连接还是短连接,直接按照总的HTTP请求的数量,并根据配置的负载均衡算法处理。本文用的负载均衡算法时RR,所以看到两台设备的请求几乎一样。
在实际场景下,客户端相当分散,在按HTTP请求均衡下,可以预期Nginx的负载是均衡的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。