负载均衡的会话保持和长短连接简介

本文基于负载均衡讲会话保持和TCP长短链接。如果你的负载均衡关闭了会话保持,还是有负载不均衡的情况,本文章正适合你来看。

负载均衡的会话保持和长短连接简介_第1张图片

图片来源:王朝阳

简单来说

会话保持是指连接断开,在规定时间内再次连接的时候,保证路由到同一服务器。而长连接在keep-alive状态下,也是会路由到同一服务的。会话不保持的话,连接断开,再次连接的时候,会重新进行服务器路由。

会话保持

会话保持机制的意义就在于,确保将来自相同客户端的请求,转发至后端相同的服务器进行处理。换句话说,就是将客户端与服务器之间建立的多个连接,都发送到相同的服务器进行处理。如果在客户端和服务器之间部署了负载均衡设备,很有可能,这多个连接会被转发至不同的服务器进行处理。如果服务器之间没有会话信息的同步机制,会导致其他服务器无法识别用户身份,造成用户在和应用系统发生交互时出现异常。
在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,服务器进行下一步操作时需要这就要求所有这些相关的交互过程都由一台服务器完成,而不能被负载均衡器分散到不同的服务器上。
而这一系列的相关的交互过程可能是由客户到服务器的一个连接的多次会话完成,也可能是在客户与服务器之间的多个不同连接里的多次会话完成。不同连接的多次会话,最典型的例子就是基于http的访问,一个客户完成一笔交易可能需多次点击,而一个新的点击产生的请求,可能会重用上一次点击建立起来的连接,也可能是一个新建的连接。
会话保持就是指在负载均衡器上有这么一种机制,可以识别做客户与服务器之间交互过程的关连性,在作负载均衡的同时,还保证一系列相关连的访问请求会保持分配到一台服务器上。

TCP长链接和短连接

我们会发现,当客户端用长链接连接负载均衡时,那么后续多次发送的请求(该长链接未断开的情况下)都会路由到同一服务。这个仅仅是因为TCP链路并没有关闭,客户端---->负载均衡---->服务器的链路始终是存在的,所以会分发到同一服务器。如果长链接超时断开了,如果关闭会话保持,下次请求就会进行负载均衡重新分配服务,如果开启会话保持,在规定时间内下次请求会路由到同一服务器。

若我们使用短连接进行访问,那么一次请求后,这个链路就断掉了,如果关闭会话保持,下次请求就会进行负载均衡重新分配服务,如果开启会话保持,在规定时间内下次请求会路由到同一服务器。

如何保持客户端--SLB长链,SLB--服务端短连

实际业务中,有这种需求情景,服务A发送请求给SLB,SLB需要将请求转发给挂载的服务B1,服务B2,服务B3等等。。。而我们希望服务A---SLB用的是连接池长链接减少性能损耗,SLB到挂载服务B1B2B3...用的是短连接,保持请求均匀发送到处理端。根据上面的分析,会话保持是多次连接根据cookie路由到同一台挂载服务的,所以并不能实现这点。但是长短连接的保持是通过客户端的请求头,服务端的响应头来决定连接销毁和创建的,那么如何实现需求场景呢?

SLB在创建实例的时候,有多种协议,如果你选择了TCP模式,那么该SLB只是在4层传输层进行负载均衡,其对于HTTP协议这种7层应用层是无法感知和控制的。如果将SLB的模式选择为HTTP模式,那么该SLB就可以对HTTP层面的信息进行干预。

如果我们开了HTTP模式,并将连接默认为长链接(设置timeout),客户端请求的时候,也用长链接,服务端返回的时候关闭长链接。在这种情况下,由于SLB可以在7层HTTP层面有解析权和控制权的,也就是说他是一个HTTP服务,会解析和处理响应头,并设置和发送请求头,它要求自己是长链接,这种情况下,客户端和SLB之间的就是长链接,SLB和服务端之间就是短连接。

如果我们开了TCP模式,那么SLB就知道自己只是一个4层传输层的负载均衡,因此它不自主干预HTTP层面的解析和操作,它只是HTTP文本的搬运工,客户端和服务端的请求头和响应头就穿透了。

总结

负载均衡开启会话保持,是保证同一客户端多次连接路(断开之后的多次连接)由到同一服务的。负载均衡关闭会话保持,长链接在keep-alive的状态下,也会路由到同一服务,连接断开重连的情况下会负载均衡分布。

 

 

你可能感兴趣的:(其他)