微服务方案中 Socket 和 WebSocket 如果实现多实例负载呢?

2022-04-28 08:40:32 +08:00
 coala

其他模块依赖 Redis 共享缓存和资源, 可以比较方便的实现多实例同时跑。

定时任务只好跑个单实例, 尽量让它简单化不出故障.

Socket 这块怎么办比较好呢, 我需要维护几百个长链接.

想做到升级服务不中断

现在的想法式尽量抽取 Socket 服务端, 后期尽量不修改...

4384 次点击
所在节点    Java
29 条回复
meeop
2022-04-28 15:17:46 +08:00
反之如果不能中断,那用户网随便抖一下客户端就崩了这不合适吧
meeop
2022-04-28 15:19:42 +08:00
@coala 断了重连的耗时应该是毫秒级别的,根本不会有感知.能断 2 分钟大概是你没做滚动升级吧.保证任何时刻都有可用服务器供连接就行
coala
2022-04-28 15:31:45 +08:00
@meeop 客户端有重连机制, 就是现在不会很快重连, (太快重连怕服务器顶不住哇)
Socket 实现的比较简陋, 就是单机, 然后走网关连过来, 多机不知道咋整太菜这不是来问了
coala
2022-04-28 15:35:24 +08:00
@meeop 可以看看附言
meeop
2022-04-28 16:34:25 +08:00
@coala ab 升级简陋的办法是先不停止 a,先启动好 b,b 起好后把流量打到 b,然后关闭 a
就算手动操作,这个切流量也就是 ng 刷下配置的事,很快的
xylophone21
2022-04-28 16:47:11 +08:00
@sciel 这个机制看起来确实很 cool ,想问一下有使用的案例或者数据吗?我们之前对 MQTT 服务做集群也考虑过类似的方案,但 MQTT 可能跨节点订阅,导致所有的流量实际还是要打到所有的节点上。但似乎没有哪个 MQTT 集群用了这种方式来做集群。
xylophone21
2022-04-28 16:53:12 +08:00
另外,如果你只有几百个长链接的话,可以试试 MQTT ,单机绰绰有余。这个服务本身因为抽象的很好,也不需要修改和升级,业务逻辑订阅主体后丢队列里,重启切换一些消费者就好。
mouyong
2022-04-28 19:33:59 +08:00
workerman gatewayworker
aSmallNewbie
2022-04-29 22:04:13 +08:00
之前使用消息队列解决的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX