我们的产品中有两个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日

AWS ELB Sticky Session有问题?别忘了AWSELB cookie的更多相关文章

  1. sticky session 粘性会话

    New Elastic Load Balancing Feature: Sticky Sessions | AWS News Blog https://amazonaws-china.com/cn/b ...

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

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

  3. Nginx+ 多个Memcached+ 多个Tomcat集群配置来实现 sticky Session

    假如有 大于2 台的Tomcat servers,如何实现sticky session特点的高可靠web 服务? 方案设计: 前端使用nginx(最好是淘宝的 tengine)作为we 流量分发器,向 ...

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

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

  5. kubernetes sticky session 配置

    kubernetes中经常需要配置sticky session,此时需要根据你使用的ingress controller来设置了. 1.Nginx Ingress apiVersion: extens ...

  6. 粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers

    Module ngx_http_upstream_module http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky S ...

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

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

  8. 一步一步配置AWS ELB Https证书

    第一步:生成CSR 要配置证书,我们首先需要创建一个CSR来向证书提供商申请证书.这个过程我们可以通过IIS中的工具来生成. 然后需要填写如下信息: 下一步后选择文件名后我们就可以创建出CSR 文件了 ...

  9. Nginx AWS ELB 域名解析后端502问题

    转载:http://liyangliang.me/posts/2016/04/nginx-aws-elb-name-resolution/

随机推荐

  1. springcloud系列六 整合security

    一 Eureka注册中心认证: Eureka自带了一个管理界面,如果不加密,所有人都可以进行访问这个地址,这样安全问题就来了,所以需要对其进行加密认证: 那么该如何进行整合呢: 1 在注册中心模块添加 ...

  2. Activiti工作流开发准备(一)

    一:开发工作流需要配合所画流程图以及根据流程图所生成的.bpmn文件进行开发,Activiti提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图. 二:eclipse插件安装 1.打开 ...

  3. Qt 学习之路 2(24):Qt 绘制系统简介

    Qt 学习之路 2(24):Qt 绘制系统简介 豆子 2012年10月30日 Qt 学习之路 2 77条评论 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于Q ...

  4. Pre- and Post-order Traversals(先序+后序序列,建立二叉树)

    PAT甲级1119,我先在CSDN上面发布的这篇文章:https://blog.csdn.net/weixin_44385565/article/details/89737224 Suppose th ...

  5. Cocoapds pod install时报错 :The sandbox is not sync with the Podfile.lock

    解决方法简单:仅供其他小伙伴参考 删除项目工程本地文件夹中的xxx.workspace和Podfile.lock文件,然后重新pod install即可

  6. redis常用数据类型与命令

    注意:LPUSH 和LPOP按照栈进行操作,RPUSH和RPOP按照队列进行操作 zremrangebyscore key score开始  score结束//根据score删除 zremrangeb ...

  7. HttpServletResponse 解决中文乱码

    response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setChara ...

  8. linux 安装 配置网络 备份 快照

    安装系统准备: 1.软件准备 vmware workstation14.vm14key.centos系统镜像 secureCRT http://sw.bos.baidu.com/sw-search-s ...

  9. my06_sysbench install for mysql 并初始化表数据

    sysbench安装 ************************************************************** 安装sysbench依赖包 rpm -q autom ...

  10. 转 关于bootstrap--表格(table的各种样式)

    https://www.cnblogs.com/shark1100913/p/5627233.html 关于bootstrap--表格(table的各种样式)   1.table-striped:斑马 ...