一.Session的工作流程

二.会话保持

  会话保持是负载均衡最常见的问题之一,会话保持是指在负载均衡器上实现的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求会保持分配到一台服务器上。负载均衡希望将来自客户端的连接、请求均衡的转发至后端的多台服务器,以避免单台服务器负载过高;而会话保持机制却要求将某些请求转发至同一台服务器进行处理。因此,在实际的部署环境中,我们要根据应用环境的特点,选择适当的会话保持机制。

1.四层会话保持

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

  四层会话保持中一个很重要的参数就是连接超时值,负载均衡器会为每一个处于保持状态中的会话设定一个时间值。若一个会话从上一次完成到下次再来之间的间隔时间小于超时值时,负载均衡器将会将新的连接进行会话保持;但如果这个间隔大于该超时值,负载均衡器会将新来的连接认为是新的会话然后进行负载平衡。四层会话保持实现简单,只需要根据数据包三、四层的信息就可以实现,效率比较高。

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

2.Session的存储

  多台后端服务器共享session主要有以下几种形式:

  1.数据库

  2.文件系统(NFS / SMB)

  3.Memcached

  前两种方式,实现简单,但效率低,不容易扩展,适合数据库压力不大或并发量小的场景。而session数据不需要持久化,可以容忍丢失,所以Memcached是较好选择。

3.七层会话保持(基于Cookie)

  在基于cookie模式下负载均衡器负责插入cookie,后端服务器无需作出任何修改,和F5 Big-IP的Cookie插入模式是一样的。

  当客户端进行第一次请求时,客户端的HTTP request(不带cookie)进入负载均衡器, LB根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器;后端服务器的HTTP response(不带cookie)被发回给负载均衡器。接下来负载均衡器将向该后端服务器插入cookie并将HTTP response返回到客户端。

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

  在F5中,还支持Cookie 重写模式和Cookie Hash模式模式。

网络:Session原理及存储的更多相关文章

  1. 理解HTTP session原理及应用

    转自:http://www.2cto.com/kf/201206/135471.html 一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣 ...

  2. Atitit smb网络邻居原理与实现查询列表

    Atitit smb网络邻居原理与实现查询列表 1.1. SAMBA的起源1 1.2. Smb是否依赖unpn SSDP  ,还是使用扫描遍历0-255发现原理1 2. SMB共享不成功原因分享(WI ...

  3. [转]PHP Session原理分析及使用

    之前在一个叫魔法实验室的博客中看过一篇<php session原理彻底分析>的文章,作者从session的使用角度很好阐述了在代码运行过程中,每个环节的变化以及相关参数的设置及作用.本来想 ...

  4. 从session原理出发解决微信小程序的登陆问题

    声明:本文为作者原创文章,转载请注明出处 https://www.cnblogs.com/MaMaNongNong/p/9127416.html  原理知识准备  对于已经熟悉了session原理的同 ...

  5. .net的session详解 存储模式 存到数据库中 使用范围与大小限制 生命周期

    Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息.举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个 ...

  6. 分布式集群Session原理及实现共享

    1.什么是Session/Cookie? 用户使用网站的服务,基本上需要浏览器与Web服务器的多次交互.HTTP协议本身是无状态的,当用户的第一次访问请求结束后,后端服务器就无法知道下一次来访问的还是 ...

  7. session学习总结【session原理、应用、与cookie区别】

    session原理 session也是一种记录浏览器状态的机制,但与cookie不同的是,session是保存在服务器中. 由于http是无状态协议,当服务器存储了多个用户的session数据时,如何 ...

  8. Session原理、生命周期及购物车功能的实现

    在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据(保存该浏览器(会话)的相关信息)时 ...

  9. Docker容器间网络互联原理,讲不明白算我输....

    @ 目录 一.今天我们要搞明白的实验 二.前置网络知识 2.1.docker默认为我们创建的网络 2.2.怎么理解docker0网桥 2.3.什么是veth-pair技术? 三.同一个局域网中不同主机 ...

随机推荐

  1. tcpdump抓包具体分析

    Tcpdump抓包分析过程   一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x ...

  2. msyql备份还原

    MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | cmd |利用“cd \Prog ...

  3. <20180923>中秋节日期间的维护日志

    (一) 陌生环境下断网是有风险的,提前做好准备. 1.1 某企业的机柜自2017年5月开始就没有作硬件更新和维护了: 趁着这次节日空挡可做一个机柜的重新整理维护: 首先看了下是老款某知名品牌的型号为6 ...

  4. QT数据类型

    typedef signed char        int8_t;typedef short              int16_t;typedef int                int3 ...

  5. vue 如何在循环中绑定v-model

    vue 如何在循环中绑定v-model 我现在有这么一个需求,页面上有多项输入框,但是具体有多少项,我也不知道,它是通过"新增一项"按钮点击事件,点击一下,就新增一项:如下图这个样 ...

  6. PAT A1138 Postorder Traversal (25 分)——大树的遍历

    Suppose that all the keys in a binary tree are distinct positive integers. Given the preorder and in ...

  7. Bellman_ford模板

    参考博客: https://blog.csdn.net/u011893609/article/details/81232124 https://blog.csdn.net/bestsort/artic ...

  8. ubuntu 下使用 jsoncpp库

    做项目的时候需要用c++解析json文件, 之前使用的是libjson 库, 但当g++ 开启 -std=c++11 选项时, 该库的很多功能不能用, 而且还有一些其他的问题, 不推荐使用. 后来采用 ...

  9. linux调度器源码分析 - 运行(四)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 之前的文章已经将调度器的数据结构.初始化.加入进程都进行了分析,这篇文章将主要说明调度器是如何在程序稳定运 ...

  10. 如何屏蔽在Skyline的TerraExplorer中加载Shape或者KML等数据时的缓冲提示信息

    在使用TerraExplorer软件或者二次开发自定义打开FLY工程时,以及在已有的FLY工程中导入其他矢量数据,如SHP.WFS图层.KML图层时,总会看到类似下图的提示信息: 有些用户问,如何能屏 ...