2019独角兽企业重金招聘Python工程师标准>>>

http协议是无状态的,即你连续访问某个网站100次和访问1次对服务器来说是没有区别的,因为它记不住你。那么在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱后,接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密码,为了解决这个问题,session的方案就被提了出来,事实上它并不是什么新技术,而且不能脱离http协议以及任何现有的web技术

session的常见实现形式是绘画cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JESSIONID的输出cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid时,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的session。这里需要注意的是session始终是由服务端创建的,并非浏览器自己生成的。但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。

session共享

首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器上,但是如果你使用负载均衡吧请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器上,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session的情况,那么如何实现session的共享就成了一个问题

  • session一致性解决方案

    • IP绑定

      • nginx的ip_hash实现,同一个ip的调度
    • session黏性
      • Tengine支持,同一个session的调度
    • session复制集群
      • Tomcat 本身带有复制session的功能(实现比较复杂,有兴趣自己查阅相关资料,使用比较少)
    • 共享session
      • 需要转么管理session的软件,msm(memcached-session-manager)

        • memcached缓存服务,可以和tomcat整合,帮助tomcat共享管理session
  • nginx IP绑定配置

upstream backend {server 192.168.214.202:8080;server 192.168.214.203:8080;ip_hash;check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD/HTTP/1.0\r\n\r\n";check_http_expert_alive http_2xx http_3xx;
}
  • 会话保持(session黏性)

    • ngx_http_upstream_session_sticky_module
    • 该模块属于负载均衡模块,通过cookie实现客户端与后端服务器的会话保持,在一定条件下可以保证同一个客户端访问的都是同一个后端服务器。
    • mode 设置cookie的模式
      • insert:在回复本模块通过set-Cookie头直接插入相应名称的cookie。
      • prefix:不会生成新的cookie,但会在响应的coolie值前面加上特定的前缀,当浏览器带着这个有特定标识的cookie再次请求时,模块传给后端服务前先删除加入的前缀,后端服务拿到的还是原来的cookie值,这些动作对后端透明。如:“Coolie:Name=SRV~VALUE”。
      • rewrite:使用服务端标识覆盖后端设置的用于session sticky的cookie。如果后端服务在响应头中没有设置该cookie,则认为该请求不需要进行session sticky,使用这种模式。后端服务可以控制哪些请求西药session sticky,哪些请求不需要
      • tengine 具有session sticky功能
upstream backend {server 192.168.214.202:8080;server 192.168.214.203:8080;session_sticky;check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD/HTTP/1.0\r\n\r\n";check_http_expert_alive http_2xx http_3xx;
}
#### insert + indirect模式
#### option
### - indirect:不会将session sticky的cookie传送给后端服务
### - direct:与indirect相反
upstream backend {server 192.168.214.202:8080;server 192.168.214.203:8080;session_sticky cookie=mysid fallbak=on path=/ mode=insert option=indirect;check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD/HTTP/1.0\r\n\r\n";check_http_expert_alive http_2xx http_3xx;
}
server {location / {session_sticky_hide_cookie upstream=backend;proxy_pass http://backend;}
}

转载于:https://my.oschina.net/rosetta/blog/745210

Nginx与Serssion一致性问题相关推荐

  1. 负载均衡一致性哈希算法实现 | nginx 负载均衡一致性哈希源码分析 | ngx_http_upstream_consistent_hash_module 源码分析

    这是本学期分布式计算/系统课程负载均衡节的课后作业,理解七层反向代理的负载均衡 Nginx 中使用的的一致性哈希算法.开头只是讲一些没用的东西,后面主要是分析 Nginx 的 O(1) 时间复杂度的一 ...

  2. Nginx配置一致性Hash

    安装: 1)下载Nginx一致性hash模块 https://github.com/replay/ngx_http_consistent_hash 进入GitHub下载 2)上传模块到Linux 上传 ...

  3. Upsync:微博开源基于Nginx容器动态流量管理方案

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由姚四芳在高可用架构群分享.转载请注明来自高可用架构公众号「 ArchNotes 」. 姚四芳,新浪微博高级技术专家,微博平台架构组技术负 ...

  4. 一致性Hash在负载均衡中的应用

    简介 一致性Hash是一种特殊的Hash算法,由于其均衡性.持久性的映射特点,被广泛的应用于负载均衡领域,如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案.本文将介绍一致 ...

  5. Nginx系列之负载均衡算法策略

    负载均衡实际上是一种网络技术,主要是基于现有的网络结构,增加吞吐量.加强网络数据处理能力.提高应用系统的灵活和可用性.利用Nginx可实现负载均衡,Nginx支持加权Round-Robin负载均衡算法 ...

  6. 京东商品详情页技术实现

    http://www.csdn.net/article/2015-12-28/2826570 大家来京东打开商品页一般会看到如通用版.闪购.全球购等不同的页面风格,这里面会牵扯到各种各样垂直化的模板页 ...

  7. 长文】多家大厂春招实习经历汇总,我的春招回忆流水账+面经

    我的春招, 方向是C /Python/后台 ,从2月末开始,到今天,已经基本结束,结果确定收到了依图.字节跳动.腾讯的offer,另有米哈游.网易互娱.招行信用卡中心进行中且有希望,但没有继续的打算了 ...

  8. 推荐:Nginx 会话黏着一致性解决

    关于session共享有四种方案 1), tomcat广播, 对系统资源占用较大, 占用io流, 不推荐使用 2), 使用memcache 3), 使用redis, 安装第三方库, 4), 使用ten ...

  9. 2016 -Nginx的负载均衡 - 一致性哈希 (Consistent Hash)

    Nginx版本:1.9.1 算法介绍 当后端是缓存服务器时,经常使用一致性哈希算法来进行负载均衡. 使用一致性哈希的好处在于,增减集群的缓存服务器时,只有少量的缓存会失效,回源量较小. 在nginx+ ...

最新文章

  1. python基础一 -------如何在列表字典集合中根据条件筛选数据
  2. 算法设计与分析-实验2
  3. python neo4j嵌入_Neo4j推出基于Python的嵌入式图数据存储
  4. SQL Server 日志传送
  5. MyBatis-DynamicSQL IF判断
  6. 15.Object Manager
  7. 所有选手信息标准展示时,选手照片没有显示,什么原因?
  8. pythonturtle是标准库_Python常用标准库1-Turtle,Random,Time和Datetime
  9. 玻璃质感_现代质感的顶层公寓,玻璃扶手让楼梯整个变透明!
  10. 半导体行业半双工(HDX)低频工业RFID读写器|读卡器CK-S640-AP60E之MODBUS TCP 协议说明
  11. 英文java简历模板下载_JAVA技术人员英文简历模板
  12. 邮件在线编辑器-零基础制作精美图文并茂的HTML邮件不费力
  13. ckplayer超酷flv网页播放器
  14. 华为Mate系列主要参数
  15. 各站VIP***教程
  16. 如何合理利用微信分组做好微信好友的管理
  17. HDU - 5514 Frogs
  18. 牛顿迭代法求解根的问题
  19. Android百度地图使用
  20. 没有公网IP,怎样远程查看视频监控?

热门文章

  1. VTK:可视化之MultipleViewports
  2. VTK:可视化之MoveActor
  3. VTK:相互作用之RubberBand2DObserver
  4. OpenCV 击中或没打中 Hit-or-Miss/Hit-and-Miss
  5. Qt Creator构建Web应用程序
  6. Qt Creator连接iOS设备
  7. Qt Creator代码重构
  8. c++Binary search二分法检索(折半检索)的实现算法(附完整源码)
  9. ++i 和 i++的实现
  10. C语言一级指针(char *)易错模型分析