精华内容
下载资源
问答
  • 阿里云实验录屏:高并发访问时流量分发和会话保持的实现
  • ngnix会话保持

    2014-08-04 14:07:06
    nginx反向代理负载均衡和session会话保持详细配置,附带必须软件包,nginx-sticky-module-1.1,nginx_upstream1.1,pcre-8.35, nginx-1.6.0, nginx_upstream_check_module-master
  • 基于tomcat7版本的memcached会话保持,内置tomcat需要的jar包。
  • 主要介绍了Python实现模拟浏览器请求及会话保持操作,结合实例形式分析了Python基于urllib与urllib2模块模拟浏览器请求及cookie保存会话相关操作技巧,需要的朋友可以参考下
  • F5会话保持

    2015-05-20 21:10:15
    介绍F5会话保持机制,以及会话保持的几种方法
  • F5会话保持的理解

    2020-12-21 16:55:59
    《F5会话保持的理解》由会员分享,可在线阅读,更多相关《F5会话保持的理解(12页珍藏版)》请在人人文库网上搜索。1、1什么是会话保持?在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与...

    《F5会话保持的理解》由会员分享,可在线阅读,更多相关《F5会话保持的理解(12页珍藏版)》请在人人文库网上搜索。

    1、1什么是会话保持?在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,服务器进行下一步操作时就要求所有这些相关的交互过程都由一台服务器完成,而不能被负载均衡器分散到不同的服务器上。而这一系列的相关的交互过程可能是由客户到服务器的一个连接的多次会话完成,也可能是在客户与服务器之间的多个不同连接里的多次会话完成。不同连接的多次会话,最典型的例子就是基于http的访问,一个。

    2、客户完成一笔交易可能需多次点击,而一个新的点击产生的请求,可能会重用上一次点击建立起来的连接,也可能是一个新建的连接。会话保持就是指在负载均衡器上有这么一种机制,可以识别做客户与服务器之间交互过程的关连性,在作负载均衡的同时,还保证一系列相关连的访问请求会保持分配到一台服务器上。2F5支持什么样的会话保持方法?F5 Big-IP支持多种的会话保持方法,其中包括:简单会话保持(源地址会话保持)、HTTP Header的会话保持,基于SSL Session ID的会话保持,i-Rules会话保持以及基于HTTP Cookie的会话保持,此外还有基于SIP ID以及Cache设备的会话保持等,但常用。

    3、的是简单会话保持,HTTP Header的会话保持以及 HTTP Cookie会话保持以及基于i-Rules的会话保持。2.1 简单会话保持简单会话保持也被称为基于源地址的会话保持,是指负载均衡器在作负载均衡时是根据访问请求的源地址作为判断关连会话的依据。对来自同一IP地址的所有访问 请求在作负载均时都会被保持到一台服务器上去。在BIG-IP设备上可以为“同一IP地址”通过网络掩码进行区分,比如可以通过对IP地址 192.168.1.1进行255.255.255.0的网络掩码,这样只要是来自于192.168.1.0/24这个网段的流量BIGIP都可以认为他们是来自于同一个用户,这样就将把来自于。

    4、192.168.1.0/24网段的流量会话保持到特定的一台服务器上。简单会话保持里另外一个很重要的参数就是连接超时值,BIGIP会为每一个进行会话保持的会话设定一个时间值,当一个会话上一次完成到这个会话下次再来之前的间隔如果小于这个超时值,BIGIP将会将新的连接进行会话保持,但如果这个间隔大于该超时值,BIGIP将会将新来的连接认为是新的会话然后进行负载平衡。基于原地址的会话保持实现起来简单,只需要根据数据包三、四层的信息就可以实现,效率也比较高。存在的问题就在于当多个客户是通过代理或地址转换的方式来访问服务器时,由于都分配到同一台服务器上,会导致服务器之间的负载严重失衡。另外一种情况上客户。

    5、机数量很少,但每个客户机都会产生多个并发访问,对这些并发访问也要求通过负载均衡器分配到多个服器上,这时基于客户端源地址的会话保持方法也会导致负载均衡失效。精品.2.2 基于Cookie的会话保持2.2.1 Cookie插入模式:在Cookie插入模式下,Big-IP将负责插入cookie,后端服务器无需作出任何修改当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIG-IP, BIG-IP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复(不带cookie)被发回BIGIP,然后 BIG-IP插入cookie,将HTTP回复返回到客户端。。

    6、当客户请求再次发生时,客户HTTP请求(带有上次BIGIP插入的cookie)进入 BIGIP,然后BIGIP读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,由于服务器并不写入cookie,HTTP回复将不带有cookie,恢复流量再次经过进入BIG-IP时,BIG-IP再次写入更新后的会话保持 cookie。2.2.2 Cookie 重写模式当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载均衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回。

    7、复一个空白的cookie并发回BIGIP,然后BIGIP重新在cookie里写入会话保持数值,将HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次BIGIP重写的 cookie)进入BIGIP,然后BIGIP读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,HTTP回复里又将带有空的cookie,恢复流量再次经过进入BIGIP时,BIGIP再次写入更新后会话保持数值到该 cookie。2.2.3 Passive Cookie 模式,服务器使用特定信息来设置cookie。当客户进行第一次请求时,客。

    8、户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个cookie并发回BIGIP,然后 BIGIP将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入 BIGIP,然后BIGIP根据cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请 求回复,HTTP回复里又将带有更新的会话保持cookie,恢复流量再次经过进入BIGIP时,BIGIP将带有该coo。

    9、kie的请求回复给客户端。2.2.4 Cookie Hash模式:当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载均衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个cookie并发回BIGIP,然后 BIGIP将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入 BIGIP,然后BIGIP根据cookie里的一定的某个字节的字节数来决定后台服务器接受请求,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务。

    10、器进行请求回复,HTTP回复里又将带有更新后的cookie,恢复流量再次经过进入BIGIP时,BIGIP将带有该 cookie的请求回复给客户端。精品.2.3 SSL Session ID会话保持在用户的SSL访问系统的环境里,当SSL对话首次建立时,用户与服务器进行首次信息交换以:1交换安全证书,2)商议加密和压缩方法,3)为每条对话 建立Session ID。由于该Session ID在系统中是一个唯一数值,由此,BIGIP可以应用该数值来进行会话保持。当用户想与该服务器再次建立连接时,BIGIP可以通过会话中的 SSL Session ID识别该用户并进行会话保持。基于SSL Sessi。

    11、on ID的会话保持就需要客户浏览器在进行会话的过程中始终保持其SSL Session ID不变,但实际上,微软Internet Explorer被发现在经过特定一段时间后将主动改变SSL Session ID,(IE标准缓存SSL ID 5分钟,BIGIPLTM默认缓存SSL ID 1小时)这就使基于SSL Session ID的会话保持实际应用范围大大缩小。2.4 基于HTTP Header的会话保持BIGIP可以根据用户HTTP访问里http包头信息信息进行会话保持,HTTP包头里包含以下信息,BIGIP可以将用户访问里这些信息通过表达式来获得相应的数值从而进行会话保持。Accept:浏。

    12、览器可接受的MIME类型。Accept-Charset:浏览器可接受的字符集。Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。 Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。 Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求。

    13、使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。 Content-Length:表示请求消息正文的长度。 Cookie:这是最重要的请求头信息之一,参见后面Cookie处理一章中的讨论。 From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 Host:初。

    14、始URL中的主机和端口。 If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。 精品.Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。 Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。2.5 基于I-Rules的会话保持BIGIP交换机内置有强大的搜索引擎,可以高效的探测到网络流量中的IP包内容的部分,并可以读出。

    15、该IP包内容部分的进行会话保持,这些内容部分包括如下部分:下面是一个BIGIP根据IRULES进行会话保持的范例:if (http_uri ends_with “.gif”) use pool image_serverselse if (http_uri starts_with “/foo”) use pool foo_serverselse if (http_cookie(“XYZ-Type”) = “direct”) use pool cookie_servers精品.else if (findstr(http_uri, “?type=”, 6, “&”) = “cgi”) use poo。

    16、l cgi_serverselse use pool web_servers在此I-Rules里,可以看到,如果用户的uri部分以.gif字段结尾,也就是说如果用户访问的是图片服务器,则将用户的访问会话保持在图片服务器上;而如果用户的uri部分以/foo开始,则将会话保持到相应的服务器上。同样,根据用户访问中的cookie字段以及uri里面的某个特定便宜字段里是否与规定的类型相符,从而进行相应的会话保持。服务器实际地址与端口提供服务的真实服务器IP地址与提供服务的端口。对外服务地址与端口F5设备向外提供服务的IP地址与端口,此选项可向网络处申请。负载均衡算法F5设备向服务器下发请求的分发方式。。

    17、F5设备默认的是轮询,(例如:有两个提供服务的真实服务器,F5会把两个请求分别分配给服务器1和服务器2)会话保持类型会话保持可以将一个客户的持续请求落在一台服务器上。常用的会话保持类型有cookie与源地址方式。F5设备默认无会话保持。会话保持时间可以自定义需要保持的会话在多长时间内有效,或者只基于浏览器创建的一个会话。长连接保持一个连接的有效性。客户向提供服务的真实服务器先建立起通讯的连接,连接建立后并不断开(是否断开由长连接的时间决定),然后再进行报文的传输。长连接时间 F5默认5分钟精品.允许一个连接空闲的时间有多长,F5设备默认的是5分钟,也就是在5分钟内F5设备不会中断此连接。互访关。

    18、系提供服务的服务器与服务器之间是否存在互访关系。透传源地址业务层面是否需要对客户的真实地址做了解,如果需要,F5设备将配置透传客户的源地址信息给后端提供服务的服务器。探测类型要求F5设备使用哪种类型做提供服务的服务器健康检查(健康检查就是F5设备检查提供服务的真实服务器是否可用的代名词)。在行内常用到的有HTTP与TELNET,(例如,F5配置了Telnet的类型后,F5设备就会定期对提供服务的真实服务器发送telnet的探测包,如果在定义的时间内没有返回信息给F5,F5便会停止此真实服务器对外提供服务。但F5会一直按照规定发送Telnet探测包至服务器,直到服务器给予正确的回应后,F5便恢复。

    19、此服务器。)检查条件根据在检查类型中定义的类型,来填写检查条件,(例如“检查类型”填写的是ICMP,“检查条件”应填写192.168.1.1)成功返回值如果检查类型填写的是HTTP或者其他自定义的类型,那么在成功返回值中应该填写真实服务器正确返回给F5的是什么信息,F5即认为服务器是可用的。探测包发送间隔第一次探测与第二次探测的间隔时间。F5设备默认的间隔时间是5秒钟。即F5设备会每隔5秒钟对真实服务器发送一次探测包,来探测真实服务器是否正常。探测包重传次数连续探测多少次服务器。F5设备默认的次数是3次。即F5设备会每隔5秒钟对真实服务器做状态探测,如果连续3次没有返回给F5正确的信息后,F5。

    20、便会将此真实服务器从提供服务的服务组里面摘除,直到其变为可用服务器后在放回提供服务的服务组里面。服务器最大响应时间提供服务的真实服务器在停止多长时间没有给F5正确的探测回应,F5便可以把此服务器从提供服务的服务组里面摘除。F5设备默认的是:间隔时间重传次数+1=最大响应时间。(例如:F5设备默认的发送间隔是5秒钟,重传次数是3次,那么最大响应时间应该是5精品.3+1=16秒)一、负载均衡算法随机 (Random) 随机分发轮询(Round Robin) 将请求依次顺序循环地分发给服务器,从1到N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的。

    21、情况。权重(Weighted Round Robin) 根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。动态比率(Dynamic Round Robin)类似于权重,不过权重值是随着对服务器持续的监控而变化的。这是一个动态的负载均衡算法,基于对服务器性能的实时分析,如连接数或响应时间。最快模式(Fastest)传递连接给那些响应速度最快的服务器。这种算法可能对于服务器处于不同的逻辑网络中的情况特别有用。均衡器记录着每个服务器的响应时间并选择最快的那一个。这非常直接了当,但是可能。

    22、会导致拥塞,因为当前的响应时间并不一定真的还是1s或是2s了。最小连接数(Least Connections)最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。此种均衡算法适合长时处理的请求服务,如FTP。观察模式(Observed) 以连接数和响应时间这两项的最佳平衡为依据来为新的请求选择服务器。预测模式(Predictive)预测模式使用和观察模式一样的评选方法,只不过BIGIP会利用收集到的服务器当前的性能指标(连接数和响应时间),进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器来响应用户的请求。预测模式试图修复在观察模式中的一个问题,如果服务器的响应时间已经开始下滑,那么它是不太可能接受下一个请求的。如有侵权请联系告知删除,感谢你们的配合!精品。

    展开全文
  • F5几种会话保持机制

    2020-12-30 20:04:57
    1.什么是会话保持?在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器...

    1.什么是会话保持?

    在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,服务器进行下一步操作时就要求所有这些相关的交互过程都由一台服务器完成,而不能被负载均衡器分散到不同的服务器上。

    而这一系列的相关的交互过程可能是由客户到服务器的一个连接的多次会话完成,也可能是在客户与服务器之间的多个不同连接里的多次会话完成。不同连接的多次会话,最典型的例子就是基于http的访问,一个客户完成一笔交易可能需多次点击,而一个新的点击产生的请求,可能会重用上一次点击建立起来的连接,也可能是一个新建的连接。

    会话保持就是指在负载均衡器上有这么一种机制,可以识别做客户与服务器之间交互过程的关连性,在作负载均衡的同时,还保证一系列相关连的访问请求会保持分配到一台服务器上。

    2.F5支持什么样的会话保持方法?

    F5 Big-IP支持多种的会话保持方法,其中包括:简单会话保持(源地址会话保持)、HTTP Header的会话保持,基于SSL Session ID的会话保持,i-Rules会话保持以及基于HTTP Cookie的会话保持,此外还有基于SIP ID以及Cache设备的会话保持等,但常用的是简单会话保持,HTTP Header的会话保持以及 HTTP Cookie会话保持以及基于i-Rules的会话保持。

    2.1 简单会话保持

    简单会话保持也被称为基于源地址的会话保持,是指负载均衡器在作负载均衡时是根据访问请求的源地址作为判断关连会话的依据。对来自同一IP地址的所有访问 请求在作负载均时都会被保持到一台服务器上去。在BIG-IP设备上可以为“同一IP地址”通过网络掩码进行区分,比如可以通过对IP地址 192.168.1.1进行255.255.255.0的网络掩码,这样只要是来自于192.168.1.0/24这个网段的流量BIGIP都可以认为他们是来自于同一个用户,这样就将把来自于192.168.1.0/24网段的流量会话保持到特定的一台服务器上。

    简单会话保持里另外一个很重要的参数就是连接超时值,BIGIP会为每一个进行会话保持的会话设定一个时间值,当一个会话上一次完成到这个会话下次再来之前的间隔如果小于这个超时值,BIGIP将会将新的连接进行会话保持,但如果这个间隔大于该超时值,BIGIP将会将新来的连接认为是新的会话然后进行负载平衡。

    基于原地址的会话保持实现起来简单,只需要根据数据包三、四层的信息就可以实现,效率也比较高。存在的问题就在于当多个客户是通过代理或地址转换的方式来访问服务器时,由于都分配到同一台服务器上,会导致服务器之间的负载严重失衡。另外一种情况上客户机数量很少,但每个客户机都会产生多个并发访问,对这些并发访问也要求通过负载均衡器分配到多个服器上,这时基于客户端源地址的会话保持方法也会导致负载均衡失效。

    2.2 基于Cookie的会话保持

    2.2.1 Cookie插入模式:在Cookie插入模式下,Big-IP将负责插入cookie,后端服务器无需作出任何修改

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIG-IP, BIG-IP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复(不带cookie)被发回BIGIP,然后 BIG-IP插入cookie,将HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次BIGIP插入的cookie)进入 BIGIP,然后BIGIP读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,由于服务器并不写入cookie,HTTP回复将不带有cookie,恢复流量再次经过进入BIG-IP时,BIG-IP再次写入更新后的会话保持  cookie。

    2.2.2 Cookie 重写模式

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载均衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个空白的cookie并发回BIGIP,然后BIGIP重新在cookie里写入会话保持数值,将HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次BIGIP重写的 cookie)进入BIGIP,然后BIGIP读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,HTTP回复里又将带有空的cookie,恢复流量再次经过进入BIGIP时,BIGIP再次写入更新后会话保持数值到该  cookie。

    2.2.3 Passive Cookie 模式,服务器使用特定信息来设置cookie。

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个cookie并发回BIGIP,然后 BIGIP将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入 BIGIP,然后BIGIP根据cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请 求回复,HTTP回复里又将带有更新的会话保持cookie,恢复流量再次经过进入BIGIP时,BIGIP将带有该cookie的请求回复给客户端。

    2.2.4 Cookie Hash模式:

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载均衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个cookie并发回BIGIP,然后 BIGIP将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入 BIGIP,然后BIGIP根据cookie里的一定的某个字节的字节数来决定后台服务器接受请求,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,HTTP回复里又将带有更新后的cookie,恢复流量再次经过进入BIGIP时,BIGIP将带有该  cookie的请求回复给客户端。

    2.3 SSL Session ID会话保持

    在用户的SSL访问系统的环境里,当SSL对话首次建立时,用户与服务器进行首次信息交换以:1}交换安全证书,2)商议加密和压缩方法,3)为每条对话 建立Session ID。由于该Session ID在系统中是一个唯一数值,由此,BIGIP可以应用该数值来进行会话保持。当用户想与该服务器再次建立连接时,BIGIP可以通过会话中的 SSL Session ID识别该用户并进行会话保持。

    基于SSL Session ID的会话保持就需要客户浏览器在进行会话的过程中始终保持其SSL Session ID不变,但实际上,微软Internet Explorer被发现在经过特定一段时间后将主动改变SSL Session ID,这就使基于SSL Session ID的会话保持实际应用范围大大缩小。

    展开全文
  • 当您连接到Demandware沙盒BM时,此扩展可防止您的会话过期。 默认情况下扩展名... 当您连接到Demandware沙盒BM时,此扩展可防止您的会话过期。 默认情况下,扩展功能处于启用状态,并且只能在沙箱中工作,而且由于...
  • 会话保持原理

    千次阅读 2018-03-18 00:54:45
    1. 什么是会话保持会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。会话保持有时候又叫做粘滞会话(Sticky Sessions)。会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互...

    1. 什么是会话保持?

    会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。会话保持有时候又叫做粘滞会话(Sticky Sessions)。会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求会分配到一台服务器上


    2. 什么是Session

    在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

    2.1 Connection与Session的区别

    在讨论这个问题前,我们必须先花点时间弄清楚一些概念:什么是连接(Connection)、什么是会话(Session),以及这二者之间的区别。需要特别强调的是,如果我们仅仅是谈论负载均衡,会话和连接往往具有相同的含义。

    从简单的角度来看,如果用户需要登录,那么就可以简单的理解为会话;如果不需要登录,那么就是连接。


    2.2 Cookie与Session的区别

    • Cookie是把用户的数据写给用户的浏览器。
    • Session保存在服务端。

    2.3 Session的原理

    2.3.1 基于Cookie实现

    服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。可以用如下的代码证明:

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class SessionDemo1 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            response.setCharacterEncoding("UTF=8");
            response.setContentType("text/html;charset=UTF-8");
            //使用request对象的getSession()获取session,如果session不存在则创建一个
            HttpSession session = request.getSession();
            //将数据存储到session中
            session.setAttribute("data", "孤傲苍狼");
            //获取session的Id
            String sessionId = session.getId();
            //判断session是不是新创建的
            if (session.isNew()) {
                response.getWriter().print("session创建成功,session的id是:"+sessionId);
            }else {
                response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    }

    第一次访问时,服务器会创建一个新的sesion,并且把session的Id以cookie的形式发送给客户端浏览器,如下图所示:

    这里写图片描述

    点击刷新按钮,再次请求服务器,此时就可以看到浏览器再请求服务器时,会把存储到cookie中的session的Id一起传递到服务器端了,如下图所示:

    这里写图片描述


    2.3.2 基于URL重写实现

    所谓URL重写,顾名思义就是重写URL。试想,在返回用户请求的页面之前,将页面内所有的URL后面全部以get参数的方式加上session标识符(或者加在path info部分等等),这样用户在收到响应之后,无论点击哪个链接或提交表单,都会在再带上session的标识符,从而就实现了会话的保持。读者可能会觉得这种做法比较麻烦,确实是这样,但是,如果客户端禁用了cookie的话,URL重写将会是首选:

    • response.encodeRedirectURL(java.lang.String url) 用于对sendRedirect方法后的url地址进行重写
    • response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写

    先禁用浏览器的cookie功能,再查看返回页面html代码可以看到,每一个超链接后面都带上了session的Id,如下所示:

    本网站有如下书:<br/>javaweb开发   <a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=1'>购买</a><br/>
    spring开发   <a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=2'>购买</a><br/>
    hibernate开发   <a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=3'>购买</a><br/>
    struts开发   <a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=4'>购买</a><br/>
    ajax开发   <a href='/JavaWeb_Session_Study_20140720/servlet/BuyServlet;jsessionid=96BDFB9D87A08D5AB1EAA2537CDE2DB2?id=5'>购买</a><br/>

    所以,当浏览器禁用了cookie后,就可以用URL重写这种解决方案解决Session数据共享问题。而且response. encodeRedirectURL(java.lang.String url)response. encodeURL(java.lang.String url)两个非常智能的方法,当检测到浏览器没有禁用cookie时,那么就不进行URL重写了


    3. 什么时候需要会话保持?

    比如在某些要求登录状态的情境下,要求客户端和服务器之间保持一个会话(session)以记录客户端的各种信息。比如在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时往往需要了解上一次或上几次的交互过程处理结果,这就要求所有这些相关的交互过程都由一台服务器完成,而不能被负载均衡器分散到不同的服务器上。否则可能出现异常情景:

    • 客户端输入了正确的用户名和口令,但却反复跳到登录页面;
    • 用户输入了正确的验证码,但是总提示验证码错误;
    • 客户端放入购物车的物品丢失

    因此会话保持机制的意义就在于,确保在合适的情境下,将来自相同客户端的请求转发至后端相同的服务器进行处理。换句话说,就是将客户端与服务器之间建立的多个连接,都发送到相同的服务器进行处理。如果在客户端和服务器之间部署了负载均衡设备,很有可能这多个连接会被转发至不同的服务器进行处理。如果服务器之间没有会话信息的同步机制,会导致其他服务器无法识别用户身份,造成用户在和应用系统发生交互时出现异常。


    4. 会话保持的分类

    4.1 基于源地址的会话保持

    基于源地址的会话保持/基于IP的会话保持 是指负载均衡器在作负载均衡时根据访问请求的源地址作为判断关连会话的依据。对来自同一IP地址的所有访问请求在作负载均时都会被保持到一台服务器上去。

    简单会话保持中一个很重要的参数就是连接超时值,负载均衡器会为每一个处于保持状态中的会话设定一个时间值。若一个会话从上一次完成到下次再来之间的间隔时间小于超时值时,负载均衡器将会将新的连接进行会话保持;但如果这个间隔大于该超时值,负载均衡器会将新来的连接认为是新的会话然后进行负载平衡。

    这里写图片描述

    简单会话保持实现简单,只需要根据数据包三、四层的信息就可以实现,效率比较高。

    缺点:

    • 但此种方式存在的问题就在于,当多个客户端通过代理地址转换的方式访问服务器时,由于来源地址一样,请求都被分配到同一台服务器上,会导致服务器之间的负载严重失衡。
    • 另外一种情况是,同一个客户端产生大量并发,要求分配到多个服务器上处理的同时进行会话保持。这时基于客户端源地址的会话保持方法也会导致负载均衡失效。

    以上情况出现时,就必须要考虑使用其他的会话保持方式。


    4.2 共享session的会话保持

    此种方式通过多个后端服务器共享session的方式,实现与负载均衡同时的会话保持。主要有以下几种形式:

    (1)数据库存放

    Session信息存储到数据库表以实现不同应用服务器间Session信息的共享。此种方式适合数据库访问量不大的网站。

    • 优点:实现简单
    • 缺点:由于数据库服务器相对于应用服务器更难扩展且资源更为宝贵,在高并发的Web应用中,最大的性能瓶颈通常出现在数据库服务器。因此如果将 Session存储到数据库表,频繁的数据库操作会影响业务。

    (2) 文件系统存放

    通过文件系统(比如NFS)来实现各台服务器间的Session共享。此种方式适合并发量不大的网站。

    • 优点:各台服务器只需要mount存储Session的磁盘即可,实现较为简单。
    • 缺点:NFS对高并发读写的性能并不高,在硬盘I/O性能和网络带宽上存在较大瓶颈,尤其是对于Session这样的小文件的频繁读写操作。

    (3) Memcached/Redis存放

    利用Memcached来保存Session数据,直接通过内存的方式读取。

    • 优点:效率高,在读写速度上会比存放在文件系统时快很多,而且多个服务器共用Session也更加方便,将这些服务器都配置成使用同一组memcached服务器就可以,减少了额外的工作量。
    • 缺点:一旦宕机内存中的数据将会丢失,但对Session数据来说并不是严重的问题。如果网站访问量太大、Session太多的时候memcached会将不常用的部分删除,但是如果用户隔离了一段时间之后继续使用,将会发生读取失败的问题。

    4.3 基于cookie的会话保持

    在基于cookie模式下负载均衡器负责插入cookie,后端服务器无需作出任何修改。当客户端进行第一次请求时,客户端的HTTP request(不带cookie)进入负载均衡器, LB根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器;后端服务器的HTTP response(不带cookie)被发回给负载均衡器。接下来负载均衡器将向Response插入Cookie,并将HTTP response返回到客户端。

    当客户请求再次发生时,客户HTTP request(带有上次负载均衡器插入的cookie)进入LB,然后LB读出cookie里的会话保持数值,将HTTP request(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复;由于服务器并不写入cookie,HTTP response将不带cookie,该HTTP response再次经过进入LB时,LB将写入更新后的会话保持cookie。

    这里写图片描述

    展开全文
  • Nginx实现会话保持

    千次阅读 2020-09-12 17:30:46
    目录前言一、基于ip_hash的会话保持二、基于cookie的会话保持总结 前言 在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一台服务器上,这时就需要会话保持,我们常用的...

    前言

    在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一台服务器上,这时就需要会话保持,我们常用的方法有基于ip_hash的会话保持、基于cookie的会话保持。

    一、基于ip_hash的会话保持

    在做Nginx的负载均衡时,可以在upstream里设置ip_hash,每个请求按访问ip的hash结果分配,映射到固定某一台的服务器,当后端服务器宕机后,session会丢失,再次发起请求时,会重新固定访问另一台正常的服务器并实现会话保持。缺点就是由于同一个IP客户端都固定访问一个后端服务器,这就可能会导致负载不均衡。下面是ip_hash的会话保持格式。

    • 这里假设后端服务器都正常运行

      在Nginx代理服务器(负载均衡服务器)中配置:
      ===========================================
      upstream test { 
      	  ip_hash;
            server 10.20.151.112:80;
            server 10.20.151.113:80;
      }
      

      在这里插入图片描述

      至于这里为什么会返回这个结果,在我的Nginx实现负载均衡那篇博客有具体配置操作,感兴趣的可以去看看。因此不难看出,当我使用ip_hash时,实现了session保持,即客户端会固定访问112这台后端服务器(除非这台服务器宕机了),就算再次刷新页面也不会返回其他后端服务器的内容(注意:实际生产中后端服务器返回给请求客户端的内容是一样的,这里仅仅是为了做测试效果)。

    • 假设固定访问的那台服务器宕机了

      在这里插入图片描述

    二、基于cookie的会话保持

    这种方式就是将 用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用户的session,如果没有就先把cookie里面的sessoin存入该服务器,实现session会话保持。缺点是存入cookie有安全隐患,比如黑客可能会获取你的cookie从而获取你相关信息。使用这种方式实现会话保持保持,需要添加sticky_cookie_insert模块,与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。

    • 添加sticky模块(我用yum方式安装的Nginx)

      yum install -y pcre* openssl* gcc gcc-c++ make   --安装编译环境
      wget  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip   --下载sticky模块
      nginx -v  --查看Nginx版本,因为要下载和yum安装nginx对应版本的源码包
      wget  http://nginx.org/download/nginx-1.18.0.tar.gz
      yum install -y unzip   --安装解压工具
      unzip 08a395c66e42.zip --解压模块包
      mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng/  --改名
      tar xzvf nginx-1.18.0.tar.gz -C /usr/local/  --解压nginx的源码包
      cd /usr/local/nginx-1.18.0/
      nginx -V   --查看yum安装nginx所有模块
      ======================================================================================
      ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-sticky-module-ng
      ======================================================================================
      make && make install
      Nginx -V  --再次查看Nginx模块,添加成功
      

      在这里插入图片描述

    • 在代理服务器(负载均衡服务器)配置

      vim upstream.conf   --在子配置文件conf.d中创建upstream.conf
      =====================================================================================
      upstream qfedu {
              server 192.168.198.143;
              server 192.168.198.145;
              sticky;
      }
      
      vim proxy.conf     ----在子配置文件conf.d中创建proxy.conf
      =====================================================================================
      server {
          listen       80;
          server_name  localhost;
          
          location / {
              proxy_pass http://testweb;
          }
      }
      
      nginx -t    --检查配置文件语法是否有错
      nginx -s reload   --重新加载配置文件
      

      访问http://10.20.151.240/

      在这里插入图片描述

    总结

    Nginx会话保持一般有基于ip_hash和基于cookie两种方式,尽管Nginx的会话保持可以使某个ip客户端访问固定的后端服务器,但这可能会导致负载的不均衡。采用cookie的方式进行会话保持时,需要引入第三方模块(sticky模块)才能实现。 使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器,这种方法可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。 使用后端服务器自身通过相关机制保持session同步,如:使用数据库、redis、memcached 等做session复制。

    展开全文
  • Nginx会话保持

    万次阅读 2018-10-21 13:05:35
     F5 Big-IP支持多种的会话保持方法,其中包括:简单会话保持(源地址会话保持)、HTTP Header的会话保持,基于SSL Session ID的会话保持,i-Rules会话保持以及基于HTTP Cookie的会话保持,此外还有基于SIP ID以及...
  • 负载均衡之session会话保持

    千次阅读 2019-08-23 20:44:45
    session会话保持原理 1. 什么是会话保持会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。会话保持有时候又叫做粘滞会话(Sticky Sessions)。会话保持是指在负载均衡器上的一种机制,可以识别...
  • F5负载均衡会话保持

    2013-03-14 17:46:12
    详细讲述了F5是如何保持会话保持会话的各种方法的讲解。
  • 会话保持: 方式: 1、session机制保持会话 缺点: 1.1当前服务器处于高并发的时候,对于服务器是一个压力,占用大量的服务器资源。 1.2如果一个业务系统是分布式部署在多个服务器的情况下,session不能相互间...
  • 一、概述这是我的第一篇博客,一直想写,但是不知道写些什么,主要是好多都可以百度到。最近遇到个比较麻烦的问题,...本文主要介绍的有三点,Android端会话保持的实现,webview的会话保持,多个后端session的会话保持
  • Nginx与F5会话保持介绍

    千次阅读 2019-12-24 16:12:50
     F5 Big-IP支持多种的会话保持方法,其中包括:简单会话保持(源地址会话保持)、HTTP Header的会话保持,基于SSL Session ID的会话保持,i-Rules会话保持以及基于HTTP Cookie的会话保持,此外还有基于SIP ID以及...
  • session会话保持原理

    2019-03-05 16:47:27
    1. 什么是会话保持会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题。会话保持有时候又叫做粘滞会话(Sticky Sessions)。会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互...
  • 实现会话保持6.Ingress TLS 配置 1.Ingress介绍 官网参考:https://kubernetes.github.io/ingress-nginx/ Ingress是一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务...
  • Apache会话保持

    2019-10-15 21:13:23
    Apache的会话保持从发送协议上不同而有不同的配置,主要为http会话和ajp会话。 Apache与tomcat的结合非常好,默认情况下,采用最基本的配置即可做到ajp的会话保持,而http的会话保持就需要一些基础配置。 http的...
  • 一、session和cookie的状态保持及弊端 当用户第一次通过浏览器使用用户名和密码访问服务器时,服务器会验证用户数据,验证成功后在服务器端写入session数据,向客户端浏览器返回sessionid,浏览器将sessio
  • 本文基于负载均衡讲会话保持和TCP长短链接。如果你的负载均衡关闭了会话保持,还是有负载不均衡的情况,本文章正适合你来看。 图片来源:王朝阳 简单来说 会话保持是指连接断开,在规定时间内再次连接的时候,...
  • 会话保持是负载均衡器设备的一种机制,用于识别客户端与服务器之间交互过程的关连性,在进行负载均衡的同时还保证一系列相关连的访问请求会保持分配到同一台服务器上。针对不同的业务场景需要不同的会话保持配置,...
  • session共享那个问题时,有人说:其实从负载均衡的层面来...这里面说到的session状态保持应该就是会话保持了 http://www.bitic.com.cn/news/onewszyzx.asp?id=240 (以下只列出要点,详细参考原文) 什么是会话保持...
  • 基于Cookie的会话保持 2.2.1 Cookie插入模式: 在Cookie插入模式下,Big-IP将负责插入cookie,后端服务器无需作出任何修改。 当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIG-IP,BIG-IP根据负载平衡...
  • 实现会话保持 设置访问www1.westos.org时进行轮询,访问www2.westos.org时保持会话 kubectl apply -f deploy.yaml ##将之前删除ingress-nginx的service重新加载进来 vim deploy.yaml ##设置访问www1.westos.org时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 185,056
精华内容 74,022
关键字:

会话保持