欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~
作者:李想

腾讯人做产品一直是很贴近用户的需求的,腾讯云也不例外。负载均衡器作为公有云上的最基础的网络服务,几乎每家云厂商都会提供,虽然负载均衡的应用场景和基本功能都大同小异,但在具体的技术实现和特性方面也会有一些差异。今天就聊一聊腾讯云的负载均衡提供给客户的那些独有的特性,大家也可以了解下腾讯云负载均衡器的优势所在。

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一致。

访问量前10的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监听。

一键Http/Https跳转

3.跨地域绑定负载均衡

公网应用型LB支持跨地域绑定云主机的能力,允许客户选取后端服务器的地域类型,跨VPC、跨地域绑定后端实例。该功能通过跨域对等连接来实现,可以实现只在一地部署服务器而在不同地域部署LB来提升不同区域用户的体验,实现全球通服的场景。

比如下面的场景,我们将LB建立在华南,可以通过修改后端云主机的的地域为华东而选择华东区的服务器。注意该功能目前需要通过工单提前申请才能正常使用。

LB实例详情

4.支持QUIC协议

QUIC是由Google提出的基于UDP构建的安全多路并发的传输层协议,代表了快速UDP Internet连接。QUIC通过改进TCP的握手及拥塞算法,重构TLS协议,以及吸收HTTP2的大部分特性能够将弱网络时的速度提升 20% 以上,非常适合一些游戏或者流媒体对速度要求比较高的场景。

腾讯云的解决方案并不需要服务本身支持QUIC协议,CLB会负责处理QUIC协议并转换成HTTP1.1协议发送给后端应用服务器,服务器对用户到CLB的QUIC协议并无感知。其具体的实现方式如下图所示:

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的那些“独门利器”的更多相关文章

  1. 强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构

    1 前言 腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返 ...

  2. 腾讯云负载均衡CLB

    负载均衡 使用场景: ①购买一个负载均衡LB实例 ②一级.二级域名都解析到VIP上 ③创建HTTP/HTTPS监听器 ④绑定云主机 在nginx中只需要配置好伪静态和相关设置就ok了

  3. 腾讯云--腾讯云sdk-实现脚本修改腾讯云负载均衡权重

    一.请确认你的当前python环境为python 2.x 获取 python 版本的方法 (linux shell) # python -v python 2.7.11 二.CLB SDK下载与配置 ...

  4. 使用阿里云负载均衡遭遇的http重定向https的问题

    昨天解决了在阿里云负载均衡上部署https证书的问题(详见一个空行引起的阿里云负载均衡上部署https证书的问题),并完成了部署,负载均衡的监听配置是这样的: 用户与负载均衡之间走https协议,负载 ...

  5. 一个空行引起的阿里云负载均衡上部署https证书的问题

    今天在阿里云上购买了WoSign的https证书,在证书签发后,在控制台下载证书文件,一共有2个文件,一个是.key文件(私钥文件),一个是.pem文件(证书文件). 然后在阿里云负载均衡“证书管理” ...

  6. 阿里云负载均衡SSL证书配置

    阿里云负载均衡SSL证书 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工作赶工.业务考察 ...

  7. 阿里云负载均衡SSL证书配置(更新)

    阿里云负载均衡及应用防火墙SSL证书配置 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工 ...

  8. 阿里云 负载均衡 HTTP转HTTPS

    一.相关文档 1.证书服务 2.简单路由-HTTP 协议变为 HTTPS 协议 二.阿里云操作界面 1.云盾证书服务管理控制台(查询CA证书服务) 2.负载均衡管理控制台 三.相关文档 1.Syman ...

  9. 某云负载均衡获取客户端真实IP的问题

    某云负载均衡真实IP的问题,我们这边已经遇到过两次了.而且每次和售后沟通的时候都大费周折,主要是要给售后说明白目前文档的获取真实IP是有问题的,他们觉得文档上说明的肯定没问题,售后要是不明白,他们不会 ...

随机推荐

  1. MySQL · 引擎特性 · InnoDB 事务系统

    前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍InnoDB事务子系统,主要包括,事务的启动,事务的提交,事 ...

  2. RobotFramework自动化测试框架-移动手机自动化测试Element Attribute Should Match关键字的使用

    Element Attribute Should Match 关键字用来判断元素的属性值是否和预期值匹配,该关键字接收四个参数[ locator | attr_name | match_pattern ...

  3. 论文笔记:Chaotic Invariants of Lagrangian Particle Trajectories for Anomaly Detection in Crowded Scenes

    [原创]Liu_LongPo 转载请注明出处 [CSDN]http://blog.csdn.net/llp1992 近期在关注 crowd scene方面的东西.由于某些原因须要在crowd scen ...

  4. 浅析Spring事务传播行为和隔离级别

    7个传播行为.4个隔离级别. Spring事务的传播行为和隔离级别[transaction behaviorand isolatedlevel] Spring中事务的定义: Propagation(k ...

  5. 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )

    参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript>  —— KYLE SIMPSON   在JS的面向 ...

  6. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  7. IntelliJ IDEA 2017 注册方法

    本文使用破解方式注册. JetbrainsCrack-2.6.2.jar适用于ideaIU-2017.2.之前版本,若下载的版本较新破解文件可能无法使用,破解时一闪而退. 其中JetbrainsCra ...

  8. eclipse中JPA插件的安装与使用

    说明 上周实验室学习了数据库设计相关的内容,其中涉及到将数据库实体化的问题,JPA是一个很好的实现工具,便开始着手于JPA的学习.因为JPA涉及到的知识还是挺多的,需要学习许多新的知识,所以对于JPA ...

  9. 合并查询结果集UNION(去重), UNION ALL(不去重),INTERSECT(交集),MINUS(差集,第一个结果集减去第二个结果集,第一个结果集中不在第二个结果集中的记录行),[NOT] EXIST

    MINUS配合[NOT] EXIST使用可以查询出包含符合某个条件的多记录的其他记录, 举例: 顾客A买了商品2.4.6 顾客B买了商品1.2.4 顾客C买了商品4.6 顾客D买了商品1.2.4.6 ...

  10. C#备份一个文件到指定的文件夹里面

    一开始我的想法是这样的: //在控制台里面操作 static void Main(string[] args) { //backup( @"D:\gg\config.xml", @ ...