GSLB、TGW、STGW笔记
一、开始
本文是一篇学习笔记。
一道前端经典面试题 从输入URL到页面加载发生了什么?
总体来说分为以下几个过程:
-
DNS解析
-
TCP连接
-
发送HTTP请求
-
服务器处理请求并返回HTTP报文
-
浏览器解析渲染页面
-
连接结束
二、DNS解析
DNS解析其核心功能是根据域名解析出对应的IP地址(接入),除此之外DNS还能用于负载均衡和容灾调度。
1. 域名解析
用户在浏览器输入要浏览的网址(t.qq.com)后,浏览器首先要通过DNS域名解析获取服务器IP。
域名解析其具体流程如下:
- 浏览器首先想当地ISP的DNS(Local DNS)发起一个域名解析请求;
- Local DNS首先向根域授权的DNS获取到(.com)授权的DNS svr地址
- Local DNS 再向(.com)授权的DNS svr获取qq.com授权的DNS svr地址(这里即GSLB)
- Local DNS 再向qq.com授权的DNS(GSLB)获取t.qq.com的服务器IP
- Local DNS 最后将t.qq.com的服务器IP返回给client
2. 调度、负载均衡、容灾
DNS系统还可以通过解析域名,将不同的请求调度到不同的server IP地址去,从而实现精准的用户导向及智能流量调度。可以根据用户的地域将用户请求调度到就近的IDCserver,实现就近接入;通过将请求分摊到多台server实现负载均衡;通过修改DNS服务器配置去掉一台挂掉的server实现容灾。
然而,由于client和DNS系统的缓存策略(一个请求在解析一次域名后,在往后的一个域名解析TTL内,所有的请求都是发往同一台server),很容易导致server之间的负载不均衡,一台server挂掉后,也需要一段时间才能生效。这就是为什么除了DNS要有负载均衡能力外,还需要引入lvs or tgw的原因之一。
3. GSLB
GSLB即我们公司的qq.com授权的DNS。其在提供域名解析最基本功能的同时,提供了:
- 用户的就近接入。GSLB通过在域名解析时,针对不同地区、运营商的用户返回不同IDC的服务器IP,来实现用户就近接入的。比如将广东电信用户引导至深圳电信IDC服务器,北京网通用户引导北京网通IDC服务器;
- 实现全局的流量负载均衡及调度。将用户流量均分到各个服务器上,并且一旦出现服务器故障或者流量过高则将用户迁移。
三、LVS/TGW
如果业务都是域名直接指向web server。在接入成千上百台web server的情况下,web server 挂是经常有的事。
从上节我们了解到,即使故障得到了及时的处理(修改GSLB配置),用户还是要等一段时间(一个域名解析TTL内)才能获得服务。而这就是引入lvs初衷。那么什么是lvs?什么是TGW?
1. LVS
LVS(Linux Virtual Server) 是构建于一组由真实服务器(real server,简称RS)构成的服务器集群上的高可靠,高可用性server。对端用户来说,其架构是透明的,就好像是和一台高性能的虚拟服务器相连。
- Load Balancer 负载均衡器:是整个集群最前端的服务,它将client的请求均衡的分发到真实的服务器RS上。因此端用户认为所有服务都是有单个IP提供。
- Real Server 真实服务器:是提个服务的真实服务器,提供业务接入层的应用逻辑处理,与中间层(app)、数据层通讯。
这里最重要的是如何实现负载均衡,一般可以从应用层(application-level)和IP层(ip-level)两个层次来实现。
比如我们常用的nginx反向代理就是应用层的负责均衡,他们通过将http 请求分派到web server服务器集群中不同的web server,并获取响应然后返回给客户端来进行实现。
由于在应用层处理并响应http请求的开销比较高,且请求包和响应包都要经过LB,所以应用层的LB能并发的server节点不大,一般在5个左右LB自身便成为新的瓶颈。
IP层的LB由于其开销小,能并发的server节点一般能达25甚至100,因此LVS采用的是这种方法。具体的,IP层LB又有三种方法:NAT,IP tunneling, direct routing,具体技术原理请参考:http://www.linuxvirtualserver.org/how.html.
2. TGW
公司的TGW借鉴了LVS技术,其具体功能有:负载均衡,多通接入,IP收敛等功能特点,其接入方式又分为七层接入和四层接入。TGW其架构如下图
(1) 负载均衡
TGW负载均衡的基本原理如下。
在用户新建连接时,TGW根据server的权重选择一个server,并建立用户端到server的会话信息;对于已经建立连接的用户数据,根据会话信息,请求会转发到对应的server上,这样就达到了负载均衡的目的。TGW还可以根据用户IP来保存会话信息,用于满足某些较复杂的应用,例如使用http cookie的业务。
由于TGW保存了连接的会话信息,server可以很方便的进行扩容,已经存在的用户连接不会受到影响。
TGW周期性的探测server的状态,在1分钟内自动把故障server从可服务列表中踢除;当TGW检测到server恢复正常后,自动把它加回可服务列表中。
(2) 多通接入
中国的网络复杂,跨运营商访问延时非常大,互联而不互通。业务为了同时保证电信,联通用户的访问质量,传统的做法是分别部署电信,联通服务器,分而治之。
如上图所示,可以通过TGW多通接入来解决跨运营商访问延时大的问题。多通接入基本原理是:TGW把外网不同运营商的请求,通过内网隧道转发给server,server返回数据时,再把数据通过内网隧道返回给TGW,再由TGW发送给不同的运营商。与传统的反向代理服务器最大的不同是,由于TGW使用了隧道技术,服务器看到的是用户的真实IP地址,而不是TGW的地址。
TGW多通功能实现了不同网络用户之间的互联互通,帮助业务提高了产品竞争力;业务只需要部署一套环境,就覆盖了所有运营商,这也节省了资源,降低了维护成本。
(3) IP收敛
业务部门只需要申请内网服务器,就可以接入TGW,对外提供服务。多个业务可以同时接入一个VIP(注:virtual ip,即业务提供服务的外网IP地址,由TGW分配),TGW根据报文信息来识别业务,把属于各自业务的请求转发给各自业务的server上。不同业务的访问路径是完全独立的,业务不会相互影响。通过这种方式,TGW可以为公司和业务部门节省大量公网IP地址。
IP收敛的方式可以分为七层收敛和四层收敛:七层收敛根据域名识别业务,主要应用于web类业务,例如http服务器,网页游戏等;四层收敛根据同一VIP不同的端口识别业务,主要应用于非web类业务,例如C/S游戏,IM等业务。
(4) 接入方式
TGW目前提供两种接入方式:四层接入和七层接入。
四层接入比较适合那些使用私有协议的业务接入TGW,因为TGW是根据网络层和传输层(VIP+VPORT+PROTOCOL)来区分不同的业务,因此这里称之为四层接入。
七层接入目前只支持http协议,适合于那些采用http协议的业务的接入TGW。除此之外, TGW还支持flash业务和windows业务的接入。
四、STGW
stgw全称secure tencent gateway,腾讯安全网关,由TEG云架构平台部应用网关团队打造和维护。和TGW四层接入不同的是,STGW是一个七层应用层流量接入平台,平台的主要目标是稳定、高效、安全地接入公司各大业务的应用流量。
STGW承担了公司内大部分平台和业务的流量接入,同时也作为腾讯云CLB负载均衡器的底层引擎对外提供服务。
1. 接入架构及流程
以一个HTTPS请求为例,简单描述下接入转发流程:
- 用户发起HTTPS请求,首先到达TGW。
- TGW将该请求转发给STGW。由于TGW只是四层的转发,所以无法识别HTTPS请求内容。
- STGW会对HTTPS请求进行卸载,也就是完成SSL握手及应用层内容的解密,将HTTPS转换成HTTP协议,再按照分流配置转发给业务侧RS。
- 业务侧收到HTTP请求后,生产响应内容并回复给STGW。
- STGW将业务的响应内容进行加密,回复给TGW。
- TGW再返回给用户
2. 主要功能
- 负载均衡
- STGW支持业界常用的WRR(加权轮询),IP哈希,Cookie会话保持,最小连接数等常用算法。
- 流量转发
- STGW能够根据HTTP协议的任意字段实现请求的转发,常见的包括:
- URL转发。即根据不同的URL指定不同的后端业务集群。
- Header转发。 即根据HTTP协议不同的Header字段指定不同的业务业务集群。比如Host, Cookie等。
- SSL加速
- STGW针对HTTPS协议进行了深度优化,通过对Openssl协议栈及Nginx事件框架的改造,STGW的HTTPS卸载能力相比常规的CPU方案提升了3.5倍。
- 多协议接入及适配
- HTTP1.0/1.1
- HTTPS
- SPDY3.1
- HTTP2
- Websocket
- Quic
-
支持多协议的好处是能够极大减轻业务适配不同协议的负担,提升协议对业务的透明度。不管客户端使用何种协议接入,STGW都能够将该协议卸载成HTTP1.1/1.0协议转发给业务端。同时也能将业务端返回的HTTP1.1/1.0协议内容还原成客户端发起的协议返回给客户端。
-
安全防攻击。主要包括如下功能:
- IP黑名单,白名单。
- 限制指定业务的速率。
- 限制高频率IP攻击。
- 防CC攻击。
- WAF,防御0-day漏洞,SQL注入,XSS漏洞等。
- 流量质量分析
- STGW能够展示业务返回的4XX、5XX状态码,不同业务的响应时间及丢弃的连接数。同时根据业务的配置设置监控阈值,发送报警信息。
个人理解,GSLB的调度是DNS层的,TGW的调度是IP层的,最终解决了单个服务器性能、稳定性不足的问题。