腾讯云负载均衡CLB的那些“独门利器”
作者:李想
腾讯人做产品一直是很贴近用户的需求的,腾讯云也不例外。负载均衡器作为公有云上的最基础的网络服务,几乎每家云厂商都会提供,虽然负载均衡的应用场景和基本功能都大同小异,但在具体的技术实现和特性方面也会有一些差异。今天就聊一聊腾讯云的负载均衡提供给客户的那些独有的特性,大家也可以了解下腾讯云负载均衡器的优势所在。
1.四七层LB自带客户端源IP获取功能
四层负载均衡获取客户端源IP几乎各大云厂商都支持,对于四层LB来讲,网络包是一个转发的过程,所以尽管会有隧道封装基本上这个信息不会丢,技术层面实现不难。
七层负载均衡通用的做法是做反向代理,类似于Nginx的proxy_pass实现方式,后端服务器收到的网络包的三层源地址会变成LB的内网地址,然后通过插入X-Forwarded-For HTTP header来传递客户端源IP,微软Azure包括国内的某些云厂商都是这种实现方式。
腾讯云的七层负载均衡器不仅支持X-Forwarded-For获取客户端源IP,同时支持三层直接获取客户端源IP,也就是说后端服务器上看到的网络包的源地址就是客户的真实访问地址。
下面的截图显示的是从后端服务器的抓包,可以看到X-Forwarded-For记录的地址是我客户端的地址180.xxx.219.15,同时数据包的三层源地址也是180.xxx.219.15。
腾讯云这样做的好处可以极大方便客户来统计客户端的来源,Nginx或者Apache不用做任何特殊配置,直接通过Access log就能统计出客户端来源。
以Nginx为例,跑一下"awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10" 就能很容易拿到访问量前10的IP。下图中的前两名的源地址是内部健康检查用的,所以访问量较大,可以忽略。第三名是我们真实的客户端访问,跟上面提到的我这边测试的客户端IP一致。
鉴于腾讯云的实现方式,详细细节可以参考社区文章
https://cloud.tencent.com/developer/article/1004723
架构图如下,简单说一下,其本质就是L7 Nginx群集出来的包经过L7.ko内核模块封装为GRE包的时候修改内层源地址仍然为客户端的源IP。
2.Http/https一键强制跳转
随着大家对网络安全的重视,https的网站已经成为主流,http到https的强制跳转也成为许多客户的基本需求,腾讯云考虑到这个这个现状也是提供了一键强制转换的功能。
实现http到https的跳转本身并不难,最常见的就是利用Nginx的rewrite功能,如果为了防止LB的HTTPS卸载导致的rewrite循环(后端服务器本身只接受http请求),也可以配合检查X-Forwarded-Proto或者X-Client-Proto来判断源是否为https来决定是否需要跳转。
但是这些毕竟还是需要在后端服务器进行配置,腾讯云提供了一键强制转换的功能,只需在portal进行简单配置添加一条自动重定向配置即可,前提是已经配置好了https和http监听。
3.跨地域绑定负载均衡
公网应用型LB支持跨地域绑定云主机的能力,允许客户选取后端服务器的地域类型,跨VPC、跨地域绑定后端实例。该功能通过跨域对等连接来实现,可以实现只在一地部署服务器而在不同地域部署LB来提升不同区域用户的体验,实现全球通服的场景。
比如下面的场景,我们将LB建立在华南,可以通过修改后端云主机的的地域为华东而选择华东区的服务器。注意该功能目前需要通过工单提前申请才能正常使用。
4.支持QUIC协议
QUIC是由Google提出的基于UDP构建的安全多路并发的传输层协议,代表了快速UDP Internet连接。QUIC通过改进TCP的握手及拥塞算法,重构TLS协议,以及吸收HTTP2的大部分特性能够将弱网络时的速度提升 20% 以上,非常适合一些游戏或者流媒体对速度要求比较高的场景。
腾讯云的解决方案并不需要服务本身支持QUIC协议,CLB会负责处理QUIC协议并转换成HTTP1.1协议发送给后端应用服务器,服务器对用户到CLB的QUIC协议并无感知。其具体的实现方式如下图所示:
附QUIC测试方法:
1. 我们采用goquic的方案进行测试,所以要提前安装好GO环境(Centos为例),这边不再赘述,开源项目地址如下
https://github.com/devsisters/goquic
2.获取项目文件到本地,并安装GCC,G++
yum -y install gcc
yum -y install gcc-g++
go get -u -d github.com/devsisters/goquic
3.如果没有配置Ninja,修改build_libs.sh文件
修改前:
cd libquic/$BUILD_DIR
cmake -GNinja $OPT ../..
cd -
ninja -Clibquic/$BUILD_DIR
修改后:
cd libquic/$BUILD_DIR
cmake $OPT ../..
make -j4
4.编译静态库文件
GOQUIC_BUILD=Release ./build_libs.sh
5.编写testquic.go文件放入goquic项目目录下
package main import (
"flag"
"fmt"
"io/ioutil"
"net/http" "github.com/devsisters/goquic"
"time"
) var url string
var logLevel int
var quic bool func init() {
flag.StringVar(&url, "url", "http://127.0.0.1:8080/", "host to connect")
flag.IntVar(&logLevel, "loglevel", -, "Log level")
flag.BoolVar(&quic, "QUIC", true, "use QUIC protocol")
} func main() {
flag.Parse()
goquic.SetLogLevel(logLevel) client := &http.Client{
Transport: goquic.NewRoundTripper(false),
} var resp *http.Response
var err error t1 := time.Now()
if quic == true {
resp, err = client.Get(url)
} else {
resp, err = http.Get(url)
} if err != nil {
panic(err)
} b, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
} fmt.Println("Duration:",time.Now().Sub(t1).Seconds())
fmt.Println("Body Length:", len(string(b)))
}
6.编译程序并运行
go build testquic.go
./testquic -url https://www.google.com/ -QUIC=true
相关阅读
腾讯云负载均衡CLB的那些“独门利器”的更多相关文章
- 强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构
1 前言 腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返 ...
- 腾讯云负载均衡CLB
负载均衡 使用场景: ①购买一个负载均衡LB实例 ②一级.二级域名都解析到VIP上 ③创建HTTP/HTTPS监听器 ④绑定云主机 在nginx中只需要配置好伪静态和相关设置就ok了
- 腾讯云--腾讯云sdk-实现脚本修改腾讯云负载均衡权重
一.请确认你的当前python环境为python 2.x 获取 python 版本的方法 (linux shell) # python -v python 2.7.11 二.CLB SDK下载与配置 ...
- 使用阿里云负载均衡遭遇的http重定向https的问题
昨天解决了在阿里云负载均衡上部署https证书的问题(详见一个空行引起的阿里云负载均衡上部署https证书的问题),并完成了部署,负载均衡的监听配置是这样的: 用户与负载均衡之间走https协议,负载 ...
- 一个空行引起的阿里云负载均衡上部署https证书的问题
今天在阿里云上购买了WoSign的https证书,在证书签发后,在控制台下载证书文件,一共有2个文件,一个是.key文件(私钥文件),一个是.pem文件(证书文件). 然后在阿里云负载均衡“证书管理” ...
- 阿里云负载均衡SSL证书配置
阿里云负载均衡SSL证书 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工作赶工.业务考察 ...
- 阿里云负载均衡SSL证书配置(更新)
阿里云负载均衡及应用防火墙SSL证书配置 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工 ...
- 阿里云 负载均衡 HTTP转HTTPS
一.相关文档 1.证书服务 2.简单路由-HTTP 协议变为 HTTPS 协议 二.阿里云操作界面 1.云盾证书服务管理控制台(查询CA证书服务) 2.负载均衡管理控制台 三.相关文档 1.Syman ...
- 某云负载均衡获取客户端真实IP的问题
某云负载均衡真实IP的问题,我们这边已经遇到过两次了.而且每次和售后沟通的时候都大费周折,主要是要给售后说明白目前文档的获取真实IP是有问题的,他们觉得文档上说明的肯定没问题,售后要是不明白,他们不会 ...
随机推荐
- 牛腩新闻公布系统--学习Web的小技巧汇总
2014年11月10日,是个难忘的日子.这一天.小编的BS学习開始了.BS的开头,从牛腩新闻公布系统開始.之前学习的内容都是CS方面的知识,软考过后.開始学习BS,接触BS有几天的时间了,跟着牛腩老师 ...
- x86 处理器开机顺序
无论是千万行的linux ,还是百万行的uefi ,或者百十行的app, 它都有一个主线.应用程序是main() 函数里面全部函数运行完,程序结束.这里main() 做为程序的起点,uefi 能够觉得 ...
- HDU 1715 大菲波数
/* 中文题意: 中文翻译: 题目大意:求1000以内的菲波数. 解题思路:用大数来计算.用二维数组来存数. 难点具体解释:用二维数组存数,開始的一维存的是1000个Pi,后面那一维是用来存数字的. ...
- leetcode第一刷_Populating Next Right Pointers in Each Node II
很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路.做法依旧是每次找到一层的起点,然后一层一层的走. 假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之 ...
- tcpdump抓包和scp导出以及wireshark查看
[命令和工具] tcpdump scp wireshark (1)tcpdump sudo tcpdump -i eth0 -w /home/tcpdump/1.pcap host 10.214.1 ...
- (转)rabbitMQ基础知识及命令语句
摘要: 整理rabbitmq的用户管理相关知识,备忘 安装最新版本的rabbitmq(3.3.1),并启用management plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败. ...
- spring mvc获取绝对路径的几种方法
1.首先如果是在一个controller方法中,则很简单,直接用下面语句. @RequestMapping("categoryHome") public ModelAndView ...
- VMware 虚拟机 Ubuntu 登录后蓝屏问题
问题起因 在一次下班收工时关闭虚拟机 Ubuntu,出现异常:关机好久没有完成,进而导致 VMware 软件卡死.后来强行杀死 VMware.第二天上班,启动 VMware 后开启 Ubuntu,输入 ...
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ HTTP请求
POST/GET请求--常见请求方式处理
- ASP.NET Core使用SkiaSharp实现验证码
前言 本文并没有实现一个完成的验证码样例,只是提供了在当前.NET Core 2.0下使用Drawing API的另一种思路,并以简单Demo的形式展示出来. Skia Skia是一个开源的二维图形库 ...