在一套有多个 ABAP Application Server 的生产系统里,浏览器访问一个 Fiori 应用时,第一个 HTTP 请求落到了appserver01。页面加载完成后,浏览器又连续发出 OData、ICF、BSP 或其他 HTTP 请求。此时一个很实际的问题就出现了。
后面的请求还必须回到appserver01吗。
如果应用完全是stateless的,不需要。负载均衡器甚至可以把下一次请求发给appserver02,再下一次发给appserver03。
如果这个 HTTP 应用已经建立了stateful session,情况就完全不同。ABAP Runtime 在appserver01上保存着这个会话的服务器端上下文。此时后续请求如果突然被送到appserver02,后者并没有对应的应用会话上下文,请求链条就可能中断。
SAP 为了解决这个问题,引入的就是通常所说的session affinity,也经常称作session stickiness。
不过这里很容易产生一个误解。
SAP 的session affinity并不是把一个用户永久绑定到某一个 ABAP Work Process,也不是登录之后这个用户产生的所有 HTTP 请求永远只能进入某一台机器。
更准确的理解是,当一组请求属于某个需要服务器端状态的会话时,SAP Web D