V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  mingyuewandao  ›  全部回复第 1 页 / 共 2 页
回复总数  22
1  2  
126 天前
回复了 dampler 创建的主题 Go 编程语言 如何让长连接负责均衡呢?
讲真,我之前也探索过类似的问题,但没有得到很好的答案。对于长链接,如果是 grpc 这种,通常要通过客户端负载均衡来做。如果加了 lb 后,客户端无法感知服务端服务器变化,因此客户端负载均衡肯定行不通。此时应该由 lb 来提供对应能力。如果通过连接经过 lb 已经建立,lb 如何重新调整是个问题,我也没有想到应该如何做。因此问了下 GPT ,以下可做参考:



在这种情况下,服务器故障后重启,由于 HTTP 连接的 keep-alive 特性,现有的连接可能不会立即重新分布到所有服务器上,这可能导致剩余的服务器负载过高。以下是一些可能的解决方案:

1. **重置连接**:在服务器重启后,可以配置负载均衡器( CLB )发送一个重置信号给客户端,通知它们现有的连接已经无效,需要重新建立连接。这可以通过 HTTP 响应状态码如`408 Request Timeout`或`503 Service Unavailable`来实现。

2. **调整 keep-alive 超时**:如果可能,可以在服务器重启前调整 HTTP 连接的 keep-alive 超时时间,使其更短,这样在服务器重启后,客户端会更快地重新建立连接。

3. **使用更智能的负载均衡策略**:一些负载均衡器支持基于服务器当前负载的动态调整流量分配的策略。如果 CLB 支持这种策略,可以在服务器重启后动态调整流量分配。

4. **客户端重连机制**:客户端可以在检测到服务器故障或响应超时时,自动尝试重新连接到其他健康的服务器。

5. **使用会话持久性**:如果 CLB 支持会话持久性( session persistence ),可以配置它在服务器重启后将流量重新分配给所有可用的服务器,而不是只连接到一台服务器。

6. **心跳机制调整**:可以调整客户端的心跳上报机制,使其在检测到服务器故障时,立即断开连接并重新连接到其他服务器。

7. **使用更高级的负载均衡技术**:例如使用基于 IP 的负载均衡,这样即使 TCP 连接保持打开状态,新的请求也可以被分配到不同的服务器。

8. **监控和自动化**:实现监控系统来检测服务器状态和负载情况,一旦检测到故障或负载不均衡,自动化脚本可以介入,进行流量重新分配或触发重连机制。

9. **使用 WebSocket**:如果适用,可以考虑使用 WebSocket 代替 HTTP 长连接,因为 WebSocket 提供了一个全双工通信渠道,可以在服务器端更容易地管理连接状态。

10. **服务发现**:使用服务发现机制,让客户端能够动态地发现可用的服务实例,并在必要时重新连接。

选择哪种解决方案取决于具体的应用场景、现有的技术栈以及可接受的复杂度。在实际应用中,可能需要结合多种策略来确保系统的高可用性和负载均衡。
261 天前
回复了 guoyi6987 创建的主题 程序员 公司要求发一篇专利,没啥好思路呀
@dog82 买一篇多少钱。我去年写了 6 篇
261 天前
回复了 gulao 创建的主题 程序员 软考高级-架构师(备考)
@Wien 同去年考,下午场系统分析差 3 分
币安要认证、上传身份证,好麻烦
@cloudzhou 大佬大佬
@gostair 感谢大佬 ,豁然开朗!
319 天前
回复了 yanzx 创建的主题 macOS mac 谷歌首页输入中文会导致 chrome 浏览器卡死
另外还有个问题,tarbar 间歇性失灵。导致 vim 无法 esc ,不得不用键盘
319 天前
回复了 yanzx 创建的主题 macOS mac 谷歌首页输入中文会导致 chrome 浏览器卡死
我都怀疑是我的电脑问题了,正在看最新 mac m3 ,活动价 12000 多。看到这个帖子,是不是我的电脑又能再坚持坚持。
2022-10-18 09:42:32 +08:00
回复了 Hider5 创建的主题 职场话题 想裸辞求锤醒
健康是 1 ,其余是后面的 0 。没了健康,什么爱情、工作、家庭都是扯蛋。健康第一位,任何东西都不要影响健康。
2022-07-22 14:42:38 +08:00
回复了 blackdd 创建的主题 问与答 人活着的意义到底是啥,
人生本质上三件事:吃饭 生孩子 交朋友 ,这三件事最快乐
2022-07-22 14:42:10 +08:00
回复了 blackdd 创建的主题 问与答 人活着的意义到底是啥,
人生本质上三件事:吃饭 生孩子 交朋友
2022-04-15 13:51:22 +08:00
回复了 yodhcn 创建的主题 程序员 大家看了今天的 Github Trending 了吗?
今天才知道“润” == run
2022-04-15 10:27:27 +08:00
回复了 RedBeanIce 创建的主题 git [git]如何查看远程分支的来源自哪个分支
git branch -vv
2022-03-23 07:39:00 +08:00
回复了 boblin 创建的主题 程序员 下班之后的时间大家都在干嘛?会学习提升自己么
基本是油管上随便看。推荐的东西很对味口。
之前一直看的一些东西,突然觉得索然。然后不知道看啥了。之后发现好像所有的东西都无味了。但是还是习惯在上面瞎逛,偶尔还是会有惊喜。
世事无他,三事而。一读书,读好书、好读书、书读好;二刷力扣,刷刷才知道自己菜;三社交,人情练达即文章。
2022-03-09 12:28:12 +08:00
回复了 dwlovelife 创建的主题 程序员 最近一年大家基金、股票盈利情况
4 万亏 7 千
2022-03-01 12:23:25 +08:00
回复了 VirSnorlax 创建的主题 程序员 CLion 的 Deployment 功能能否只对单个项目设置?
Clion 破解太费劲了,你用的付费版?只要你用过其他 jetbrains IDE ,这个试用基本也用不了。
2022-02-21 10:24:32 +08:00
回复了 isno 创建的主题 程序员 大龄程序员还刷 leetcode 么?
经常打开看下题目,简单的写下,中度左右,基本上就 gg 了,看看官方解题思路,然后自己想想。刷题自信心很受打击。
你这个协议还是被识别了 http 而非 grpc-web 吧,看文档:

* 在默认情况下,这些协议是禁用的,目的是避免无意启用 Experimental Feature 。 如需启用它们,需配置相应的 Pilot 环境变量。
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1346 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 17:59 · PVG 01:59 · LAX 09:59 · JFK 12:59
Developed with CodeLauncher
♥ Do have faith in what you're doing.