问题标签 [sticky-session]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1821 浏览

java - 在 spring boot 2.0.0 中设置 jvmRoute

对于粘性会话,我需要设置嵌入式 tomcat 的 jvmRoute。

其实只有一个

是必需的,但我想通过 application.properties 设置可配置属性。我不知道如何以及何时使用 @Value 注释属性设置它。

使用这里描述的@PostConstruct ,它不起作用(至少在 spring boot 2.0.0.RELEASE 中不起作用)

到目前为止我发现的唯一方法是

它有效,但看起来并不优雅......

任何建议都非常感谢。

0 投票
1 回答
835 浏览

spring-boot - 存储在 websession 中的 Spring webflux csrf 令牌

由于 spring webflux 中的 csrf 令牌存储在 WebSession 中,这是否需要在负载平衡配置中打开粘性会话?

0 投票
1 回答
2785 浏览

load-balancing - 如何使用忽略客户端 IP 的 Haproxy 粘性会话?

我使用 haproxy 作为 3 个应用程序服务器的负载均衡器,在客户端流量到达此负载均衡器之前,它将首先命中一个 WAF,该 WAF 具有多个随机分布式 IP。因此,当连接更新时,由于会话 cookie 的更改,原始会话可能会跳转到另一台服务器,我不希望这种情况发生。

WAF 供应商建议我在制作会话 cookie 时将负载均衡器的会话标识符设置为使用 X-Real-IP。或者从标识中删除 IP 组合以制作我不知道该怎么做的会话 cookie。可以给我建议吗?

下面是我的 haproxy 设置。

0 投票
1 回答
1655 浏览

load-balancing - 使用 URL 中的 ID 与 HAProxy 进行负载平衡

我知道可以根据 url 参数使连接保持粘性: https ://serverfault.com/questions/495049/using-url-parameters-for-load-balancing-with-haproxy?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

是否也可以根据 url 路径中的 ID 来实现?

如果我的网址是:/objects/:objectId

我可以以某种方式使用 :objectId 使连接保持粘性吗?

编辑

我能够使用以下配置进行负载平衡,使请求在 url 路径上保持粘性:

现在的问题是,如果其中一台服务器出现故障,则棒表不会更新。我怎样才能做到这一点,如果其中一台服务器无法访问,则指向该服务器的粘贴表中的条目将被删除?

最终答案

好的,我能够弄清楚。下面的配置使请求停留在 url 路径上,HAProxy 将每 250 毫秒向 /health 发送一个 HTTP GET,如果它不返回 200,它将认为服务器已关闭,这将从棒中删除所有条目-桌子。

0 投票
1 回答
1785 浏览

kubernetes - Kubernetes 中的自定义负载均衡

我正在尝试在 kubernetes 中部署具有负载平衡的应用程序

下面是我的预期部署图

在此处输入图像描述

理想情况下,应用程序由一组使用 k8s 部署的 pod 部署,类型为“后端”

通常,用户实例存储在存档中。并根据请求动态恢复到其中一个 pod,在那里停留 TTL 时间(比如 30 分钟),然后删除并备份到存档中。

理想情况下,负载平衡由一组使用 k8s 部署的 pod 部署,类型为“前端”。

理想情况下,前端配置为带有“sticky = host”的第 7 层会话粘性。主机等于后端 pod 的 UID

用户通过 SOAP 消息请求服务,该消息在其正文中包含参数“host”和“user”。

当 SOAP 消息到达前端时,会从消息正文中提取“主机”值。

如果“host”值有效,则 SOAP 消息被转发到相应的后端 pod(其 UID 等于主机值)。否则,分配一个随机的后端 pod。

(此处的处理是特定于应用程序的)在后端 pod 中,应用程序通过“user”的值检查用户实例的可用性。

如果已经存在,就使用它;否则,尝试从存档中恢复;如果恢复失败(新用户),则创建一个新用户实例。

我四处搜寻,并没有找到任何类似的例子。尤其是layer7会话粘性配置,以及自定义获取传入消息体粘性值的实现。

0 投票
3 回答
4523 浏览

node.js - 带有粘性会话的 Nodejs 集群

我查阅了有关 nodejs clustering and sticky-session 的文档以及关于此的另一个堆栈溢出答案

如果上面的代码片段在没有分叉的情况下运行,它可以正常工作,但如上面的集群示例所示,它永远不会工作,其中线程已启动但服务器从未初始化。

我读到有粘性集群的替代方案,有人可以就这个主题给出一个适当的权威答案,这对寻找相同的人很有用,另一个主要问题是 app.locals 对象,它用于存储变量一个应用程序实例和多个服务器实例的出现导致此中断,因为不同实例的值会有所不同,因此这种方法会导致一个大问题并且应用程序会中断。回答时请不要复制粘贴一些代码,请提供详细的答案,详细说明接近它的好处和缺点。

我不是在寻找仅限于使用sticky-sessions nodejs模块的答案,我欢迎使用处理器的所有内核并确保会话连续性的所有其他方法。

如果它涉及 RedisStore 或 MongoDb 存储就可以了,我想知道的是关于具有会话连续性的集群的 nodejs 应用程序的标准方法

https://github.com/indutny/sticky-session

https://nodejs.org/api/cluster.html

https://stackoverflow.com/a/37769107/3127499

0 投票
1 回答
3870 浏览

azure - 带有粘性会话的 Azure 负载平衡

我有 Web API 服务,我计划在 Azure 环境中托管,可能在 VM 中。我的应用程序正在使用粘性会话,我必须在 Azure 中启用负载均衡器。

您能否建议对应用程序进行负载平衡的最佳方法,或者我可以将 Azure Loadbalancer 与应用程序网关以外的粘性会话一起使用。

问候
阿卜杜勒

0 投票
0 回答
965 浏览

amazon-web-services - AWS ELB 粘性导致 NGINX 具有无缓存行为

我们一直使用 NGINX 作为缓存层,最近在对其进行负载测试时,我们偶然发现了一个不寻常的问题:负载测试只会对所有内容进行缓存未命中。

流量是这样的: Client > NLB > NGINX > ELB (stickiness) > Application Layer

经过一些分析和故障排除后,我得出的结论是,这种行为的原因是负载注入器发送的请求中缺少“AWSELB”粘性 cookie。如果未设置 cookie,AWS ELB 将发送带有 AWSELB 值的“set-cookie”,并且还将包含一个缓存控制:no-cache="set-cookie"

由于它有一个“no-cache”指令,NGINX 最终不会创建预期的缓存条目,除非该 cookie 被发送(此后的请求将具有缓存 HIT 行为)。浏览了很多链接/问题和文档,但到目前为止我一直无法找到解决方案。有没有人经历过这个,你是如何处理的?

样品要求:

示例响应片段:

我见过的最接近我的问题签名的帖子/文章,但适用于 CloudFront,并且没有关于如何处理它的任何详细信息: https ://forums.aws.amazon.com/thread.jspa?messageID=362272

0 投票
1 回答
371 浏览

node.js - 带有 Node.js、集群和 Socket.IO 的 HTML5 画布

我正在为 HTML5 画布上的协作绘图创建一个 Node.js 应用程序。我正在使用 Socket.IO 进行通信,并且我已经实现了集群,因此我能够扩展我的应用程序。我的讲师告诉我,使用集群是一个好主意,但让 cpu 中的每个核心都做同样的事情并不明智,即违背了目的。因此,在我的情况下,让 8 个核心在完全相同的绘画上工作并不明智,而是可能有 8 种不同的绘画,每个核心一张绘画。我也知道 Socket.IO 只通过一个核心进行通信。现在我对从哪里开始以及如何开始有点困惑。我知道有这个“粘性”socket.io 模块,但这只会共享通信,但不会为每个核心制作不同的绘画?

这是我制作的服务器:

0 投票
1 回答
279 浏览

node.js - Heroku 上的粘性会话

我们有一个使用 SocketIO 运行的 NodeJS 应用程序,并在 heroku 上进行集群。为了让 SocketIO 工作,我们使用这里讨论的 redis-adapter:https ://socket.io/docs/using-multiple-nodes/ 。

然后我们实现了粘性会话,如粘性会话文档所示:https ://github.com/elad/node-cluster-socket.io 。

事实证明,当我们部署到 Heroku 时,connection.remoteAddress 位于:

实际上是一些heroku路由服务器的IP地址,而不是客户端IP。我已经看到请求标头“x-forwarded-for”可以用于获取客户端IP,但是当我们以这种方式暂停连接时,我们甚至没有标头吗?