会话保持(Session Affinity),有时又称粘滞会话(Sticky Sessions), 是负载均衡领域设计需要着力解决的重要问题之一,也是一个相对比较复杂的问题。
会话保持是指在负载均衡器上的一种机制,在完成负载均衡任务的同时,还负责一系列相关连的访问请求会分配到一台服务器上。
当用户向服务器发起请求,服务器创建一个session,并把session id以cookie的形式写回给客户。
看一个例子:当我访问SAP UI5应用时,
在http请求的头部观察到客户端要求服务器返回以cookie的形式返回session id的请求字段:
在服务器响应的头部字段果然返回了session id:
这些cookie信息能够在Chrome开发者工具的Application标签页里的Cookies区域查看:
如此一来,只要客户的浏览器不关,再去访问服务器时,访问请求会自动附上session id去,服务器端检测到这个session id后,就会使用内存中维持的与这个id对应的session为客户端服务。
再回到我们讨论的会话保持这个话题。什么时候需要会话保持?举个大家每天都会遇到的例子,大家在淘宝或者京东上购物时,从完成用户身份认证到浏览店铺,选择心仪商品加入购物车,一直到最后下单完成支付,需要经过很多次和服务器的交互过程才能完成整个交易。由于这几次交互过程从顺序上和逻辑上是密切相关的,服务器在进行这些交互过程的某一个交互步骤时需要一个上下文(Context),即上一次交互过程的输出,因此要求这些相关的交互过程都由一台服务器完成。
在这种情况下,假设负载均衡器仍然把这些相关交互session分散到不同的服务器实例上,就会带来很糟糕的用户体验,比如客户在浏览器上每点击一次,都会弹出登录页面。或者即使用户输入了正确的验证码,却仍然提示验证码错误。由于服务器处理实例不一样,也有可能造成客户放入购物车的物品丢失。
这就是会话保持机制引入的原因:确保把来自同一客户的一个完整会话的请求转发至后台同一台服务器进行处理。
那么Cloud Foundry的Session Affinity是怎么实现的呢?
官方文档有介绍:
https://docs.cloudfoundry.org/concepts/http-routing.html#sessions
(1) To support sticky sessions, configure your app to return a JSESSIONID cookie in responses. The app generates a JSESSIONID as a long hash in the following format:
您的应用在响应结果里需要加上一个JSESSIONID字段,长度如下:
1A530637289A03B07199A44E8D531427
(2) If an app returns a JSESSIONID cookie to a client request, the CF routing tier generates a unique VCAP_ID for the app instance based on its GUID in the following format:
CF routing tier基于app生成的JSESSIONID生成一个VCAP_ID: 323f211e-fea3-4161-9bd1-615392327913
(3) 接下来客户每次发起请求,必须同时提供JSESSIONID和VCAP_ID。JSESSION_ID交给应用,用于实现session粘连。而VCAP_ID用于标识服务的应用实例,如果应用挂了,gorouter会把请求路由到另一个应用实例上。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
在安全性方面,Spring Security可以与Cloud Foundry的UAA(User Account and Authentication)服务集成,实现统一的身份验证和授权,确保应用程序的安全性。 总的来说,Spring与Cloud Foundry的结合为企业提供了...
### CloudFoundry服务网关的架构 #### 一、CloudFoundry概述 CloudFoundry作为一个开源的PaaS(Platform as a Service)平台,为开发者提供了极大的灵活性,让他们能够在不同的云平台上选择开发框架与应用服务。该...
由于它具备容器编排能力,开发者可以利用Cloud Foundry来轻松实现应用的水平扩展和自我修复。 这本书《Cloud Foundry: The Definitive Guide》由Duncan Winn编写,被视为学习和掌握Cloud Foundry的最佳指南。本书...
海峰可能详细解释了SpringOne China活动中,如何通过Cloud Foundry实现Spring应用的快速部署和生命周期管理,同时分享了相关的最佳实践和案例。 最后,"刘海峰_盛大云PaaS平台.ppt"可能涉及的是盛大云(现为青云...
### Cloud Foundry平台概述 Cloud Foundry是一种领先的开源平台即服务(PaaS)解决方案,旨在为开发者提供一种简便的方式来构建、测试和部署应用程序,同时为运维团队提供了强大的自动化管理和资源调度能力。它由...
### CloudFoundry中MongoDB的应用 #### CloudFoundry简介与特性 CloudFoundry是一个由VMware发起并维护的开源PaaS(Platform as a Service)云计算平台。它为开发者提供了广泛的自由度来选择运行应用程序的云环境...
随着VMware在Cloud Foundry的第一个生日之际公开了BOSH部署工具和CPI(IaaS支持接口)的代码,实现了产品的完全开源,并计划支持Amazon AWS和vCloud,Cloud Foundry的生态系统得到了进一步的增强。 Cloud Foundry的...
【标题】"cloudfoundry-runtime-0.8.4_Java8_cloud_" 指的是一个针对 Cloud Foundry 运行时环境的特定版本,这个版本是为 Java 8 语言定制的。Cloud Foundry 是一个开源的平台即服务(PaaS)系统,允许开发者构建、...
综上所述,基于CloudFoundry的PaaS云平台的设计与实现,不仅需要深入理解和分析CloudFoundry的技术架构和组件,还需要在实际构建过程中,根据自身的需求进行定制开发。CloudFoundry通过其开放性和对多种语言框架的...
Cloud Foundry是一个开源的平台即服务(PaaS)系统,由Pivotal Software维护,用于构建、部署和管理云应用程序。这个技术的核心在于提供了一种高效、可扩展的方式来托管和运行各种应用程序,无论它们是基于微服务...
Get started with Cloud Foundry, the leading Platform as a Service (PaaS) that’s dramatically changing how developers, operations practitioners, and especially DevOps teams deploy applications and ...
Cloudfoundry
CloudFoundry开源云计算平台简介rar,提供“CloudFoundry开源云计算平台简介”免费资料下载,主要包括Cloud Foundry的概述、Cloud Foundry的架构、使用Cloud Foundry部署应用等内容,可供学习使用。
CloudFoundry是一个开源的平台即服务(PaaS)系统,由Pivotal Software开发并维护,主要用于构建、部署和管理应用程序。这个“CF-Help.rar”压缩包显然包含了与CloudFoundry相关的帮助文档,旨在为用户提供简洁而...
NATS (Network Address Translation and Switching) 模块是 Cloud Foundry 架构中的核心组件之一,主要用于实现服务发现和网络地址转换。它通过发布/订阅模型支持高效的消息传递,使得各组件能够动态地发现彼此并在...
CloudFoundry的介绍文档,入门必备
本文主要探讨了基于CloudFoundry的云计算PaaS平台的设计与实现。首先,文章介绍了云计算服务类型的分类,包括基础设施即服务(IaaS)、平台即服务(PaaS)以及软件即服务(SaaS)。IaaS提供了网络、计算和存储服务;PaaS为...
Maven的集成不仅简化了依赖管理,还通过Cloud Foundry Maven插件实现了应用的自动打包和部署。此外,Eclipse的Cloud Foundry Integration插件进一步增强了IDE的功能,使开发者能够在工作区内直接部署、更新、启动和...
CloudFoundry云平台部署手册.pdf
### 从开发者的角度看CloudFoundry #### 一、CloudFoundry概述 CloudFoundry作为一个开源的PaaS(Platform as a Service,平台即服务)云计算平台,为开发者提供了极高的自由度来选择运行的应用程序所需的云环境、...