其中,默认使用HEAD方法请求的话,服务器返回的只是响应标题,可以有效降低后端开销,提高请求效率。但在某些业务场景下依然需要选取GET方式请求,例如在较为苛刻的健康检查时,需要通过判断body中某些字段来获取版本号等,此时HEAD请求返回的数据不足,需要通过GET来实现。
CLB 默认HTTP1.1
HTTP1.0:浏览器接收到头部信息后,接受完Content-Length中定义的长度字节后开始解析页面,但如果服务端有部分数据延迟发送吗,则会出现浏览器白屏,造成比较糟糕的用户体验。HTTP/1.1中引入了Chunked transfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。该功能,主流的浏览器,以及apache、nginx等web服务器是默认支持的,无需配置。
session同步
实现web集群后,肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,一个登录用户,一会是登录状态,一会又不是登录状态。腾讯云目前实现了集群内session连接定期同步。这样在别的服务器接管故障机器的包时,能够正确找到session,保证提供正常服务。不同集群之间进行session同步,目前腾讯云尚不支持。
利用cookie同步session :session是文件的形势存放在服务器端的,cookie是文件的形势存在客户端的,怎么实现同步呢?方法很简单,就是把用户访问页面产生的session放到cookie里面,就是以cookie为中转站。你访问web服务器A,产生了session把它放到cookie里面了,你访问被分配到web服务器B,这个时候,web服务器B先判断服务器有没有这个session,如果没有,在去看看客户端的cookie里面有没有这个session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的sessoin同步到web服务器B,这样就可以实现session的同步了。
集群容灾
集群容灾,简单来说就是一个集群中一台服务器倒掉不会影响整个集群的服务能力。CLB采用ospf动态路由协议来实现集群的容灾,若一台机器倒掉,ospf协议可以保证在10s以内把机器从集群中剔除。CLB一个集群放在两个接入交换机下,并且保证跨机架的容灾,这样保证在即便有单边的交换机出故障或者单边机架掉电时,本集群的服务不受影响。
抗DDoS攻击
腾讯云有非常厉害的大禹系统来保护业务,但是大禹系统的宙斯盾的检测时长是10s,那么在大禹系统生效之前,可能客户的RS已经被压垮。为了解决这10s内的问题,我们开发了synproxy的功能。目前腾讯云这边的具体实现是:CLB在接收到客户端的三步握手请求时,代理三步握手,在数据包到来之前,不会打扰到RS,一旦第一个包到来,CLB将其缓存,此时再和RS进行三步握手,握手成功之后,将缓存的数据包发送给RS,之后的流程就透传数据包了。这样保证DDos攻击不会到达RS,而是由CLB来承担压力。CLB本身承载能力比较强,又是集群模式,同时又具备资源隔离的能力,所以一般情况下,很难在10s以内把CLB机器压垮。
结束语本文主要讲述了腾讯云CLB的基本概念,业务架构以及公网LB技术实现。