我们的产品中有两个Module,分别部署在独立的Linux机器上,Module 1需要向Module 2发起Http请求来获得服务。由于Module 2有多台,因此我们会在Module 2前部署一台负载均衡器(ELB,Elastic Load Balancer)。我们部署在AWS里,因此使用的是AWS ELB。

  

  AWS ELB同时提供另一个很好的功能,叫做Sticky Session,它的作用是帮你把请求定向到其中一台机器,而非随机按ELB算法分散到其他机器。这样功能的好处是,如果我后一个请求依赖前一个请求的处理,那么在这一时间段内,这一系列的请求都会被送到同一台机器处理。

  AWS ELB实现这个功能,需要依赖Cookie,在配置时,需要你提供一个Cookie的名字。按道理来讲,ELB会根据请求中此Cookie的值,将相同值的请求送到同一台机器。

  但是我们测试,发现,情况并不是这样。Sticky Session没有起作用。

  

  经过排查,最终我们发现,根本原因是:当我们的Http请求送到Module2,得到Response返回时,我们的程序会在Response Header中加入一个cookie,通过SetCookie,这个cookie是我们在ELB配置的用于Sticky Session的Cookie。但是同时ELB还会再我们的Response Header中加入另外一个cookie,名字叫AWSELB,这个cookie我们没有处理。

  但其实在下次请求时,我们的Module 1除了要带有自己的cookie,还应该带有AWS ELB的cookie,这样ELB的stricky session功能才起作用。请求才会被定向到某一台特定的Module 2机器。

  

  为什么我们之前没有发现呢?

  1. 首先我们没有在Response Header中SetCookie,因此ELB也不会帮我们再Set AWSELB Cookie。

  2. ELB更多用于Browser和Server的通信负载均衡。

    AWSELB的cookie,path=/,也就是所有后续请求都应该带这个cookie。Browser自然懂得其中道理,能够正确处理。但是对于我们的使用场景,两个Module,用的是网络库,进行http通信,不存在browser这样的client来处理cookie。所以就需要我们自己处理了。

  由此也能看出,AWS ELB的使用场景,更多是为浏览器和Server间通信准备

  

  终于找到了这个问题的原因,希望对你有帮助。

  还是应该多思考。

  参考文档:

  1. http://docs.amazonaws.cn/en_us/ElasticLoadBalancing/latest/DeveloperGuide/US_StickySessions.html

  2. http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html#enable-sticky-sessions-application

  

  Kevin Song

  2015年6月18日

转载于:https://www.cnblogs.com/KevinSong/p/4585193.html

AWS ELB Sticky Session有问题?别忘了AWSELB cookie相关推荐

  1. .NET LINQ分析AWS ELB日志避免996

    前言 小明是个单纯的 .NET开发,一天大哥叫住他,安排了一项任务: "小明,分析一下我们 超牛逼网站上个月的所有 AWS ELB流量日志,这些日志保存在 AWS S3上,你分析下,看哪个 ...

  2. AWS ELB技术要点

    AWS ELB技术要点 一.ELB优点 l  ELB支持自动扩展: l  可对后端的EC2运行状态检查 l  支持TCP协议,支持加密协议SSL/TLS l  配置简单 二.ELB提供的功能 1.运行 ...

  3. Nginx+Memcached+Tomcat集群配置实践(Sticky Session)

    准备工作 创建一个简单的web应用,名为session.其中有两个页面,分别如下所示: 页面login.jsp [html] view plaincopy <%@ page language=& ...

  4. aws 认证_AWS ML专业认证备忘单

    aws 认证 the highly important and carefully crafted piece, * this will only be useful after completing ...

  5. Cloud Foundry Session Affinity(Sticky Session)的实现

    会话保持(Session Affinity),有时又称粘滞会话(Sticky Sessions), 是负载均衡领域设计需要着力解决的重要问题之一,也是一个相对比较复杂的问题. 会话保持是指在负载均衡器 ...

  6. 如何万网域名解析亚马逊服务器,使用aws ELB后关于proxy_pass 的域名解析问题

    最近遇到了一个奇怪的问题,我们的一个需要nginx转发的A接口调用另一个IP服务接口时会报502,但是单独调用IP服务时就OK.并且reload A接口的nginx后,居然就正常了. 看了下A接口的n ...

  7. 用session和mysql实现购物车_Session和Cookie实现购物车

    使用Session和Cookie实现购物车的比较 购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而已.用户可以在购物网站的不同页面之间跳转,以选购自己喜爱的商品,点击购买时,该商品 ...

  8. 经验分享: 成功通过AWS Advanced Networking Specialty认证考试

    薛国锋  xueguofeng2011@gmail.com   本文主要分享了AWS高级网络专项认证考试(Advanced Networking Specialty - ANS)的备战及考试经验,同时 ...

  9. 管理分布式session的四种方式。

    应用服务器的高可用架构设计最为理想的是服务无状态,但实际上业务总会有状态的,以session记录用户信息的例子来讲,未登入时,服务器没有记入用户信息的session访问网站都是以游客方式访问的,账号密 ...

最新文章

  1. 修改tomcat7默认首页,将tomcat7默认目录指向自己的项目目录
  2. tensorflow 集成开发环境 (IDE)
  3. Ubuntu 16.04 LTS下编译GPU版tensorflow
  4. LA3708墓地雕塑
  5. 讲讲我和Spring创始级程序员共同review代码的故事
  6. kerberos认证_初识 Windows域认证体系 Kerberos认证
  7. Java FileReader InputStreamReader类源码解析
  8. Js数组去重的多种方法
  9. AE学习笔记——第二章:AE图层中的图层用法及基本操作
  10. 学习OpenMV(二)I/O教程
  11. 激光破解太空通信难题
  12. 01【托业口语】考试介绍
  13. Php影视解析网站源码-觅鹿
  14. 高股息组合与指数基金谁好?
  15. mssql数据库和Oracle数据库注入
  16. SSD、eMMC、UFS的区别
  17. git stach储藏功能(SourceTree 使用方法,Visual studio 2019 中使用
  18. 2019-6-2 第2套试卷中的生词(02)
  19. android 装苹果系统,安卓机子安装苹果IOS系统?
  20. 专访《王者荣耀》团队 附天美L1工作室照片

热门文章

  1. 报错解决:usr/bin/ld: output.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when maki
  2. ASP .NET Core Web开发之 Tag Helpers
  3. matlab 报错 javax,[求助]安装报错,求大佬帮忙
  4. 码分复用的matlab仿真,基于matlab的多路时分复用仿真.doc
  5. android bundle传递list对象集合,如何从android中的firebase中检索List对象
  6. matlab中的histc,Matlab histc与矢量箱
  7. MySQL 高频面试题,都在这了
  8. 6个快速优化回归测试套件的方法,你都知道吗?
  9. linux安装完redis之后log会在,Linux安装redis logstash
  10. PHP设计模式 外观模式(Facade)