求一款比较成熟的 golang 服务端热更方案

247 天前
 htxy1985
如题,主要用于在有状态的 golang 服务端进行在线修复 bug ,找了几个方案感觉都不是很靠谱。
AI 提到的 air 和 hotswap 简单看了一下,都不怎么维护了。
特此来请教大佬们,有没有已经填过坑的较为成熟的框架或方案呢。
感谢感谢/抱拳
4395 次点击
所在节点    程序员
47 条回复
wujianhua22
246 天前
go 没有服务端热更的方案,你说的都是开发阶段热更的方案。
DefoliationM
246 天前
无,要么 wasm ,建议结合 k8s 使用,可以滚动更新,业务不中断。
fffq
246 天前
golang+lua
MoYi123
246 天前
有状态服务更新用 erlang 热更新都挺麻烦的, go 基本不可能了.
guanzhangzhang
246 天前
mosn 的那个可以借鉴下,包括监控 metrics 都可以不听,Prometheus 监控都不会告警
htxy1985
246 天前
@guanzhangzhang @DefoliationM 老哥能不能稍微展开说下,感谢
flyqie
246 天前
golang 因为语言特性的原因,热更不好做。

你要不试试楼上说的 lua 做 logic ,go 做 framework ?
guanzhangzhang
246 天前
@htxy1985 你谷歌搜下 Mosn 热更新,有 ppt 的,之前 gopher 大会听过蚂蚁金服他们讲的,用到的技术可以看下和语言无关的
guanzhangzhang
246 天前
dogfood
246 天前
go+quickjs
htxy1985
246 天前
@guanzhangzhang 感谢,大致看了一下,我理解的这个东西类似网关层的东西,抛开核心技术思路,他的解决方式是老的服务向新的服务进行无损迁移,而不是在线热修代码。这个东西可能有一定学习和落地的成本,我这边再看看。
@flyqie 可以是可以,但这里面有个改造成本问题,一时间不好弄成这样
crackidz
246 天前
K8s 或者 Kamal 都有类似的解决方案啊...
southwolf
246 天前
正常人的做法不都是滚动更新发布新版本服务? 打断几个请求不是太大问题吧, 啥业务啊这么重要还需要在线修 bug...
htxy1985
246 天前
@Southwolf 有长链接和大量状态数据的游戏服务
adoal
246 天前
可以换个思路,不热更,被中断的用户如果投诉了赔些游戏豆
standchan
246 天前
额,k8s 的滚动更新好像就可以了吧
james122333
246 天前
做成 cgi 或者全反射写法
Sendya
246 天前
如果是 tcp 服务,可以用 cloudflare tableflip 做热更新,新二进制替换老二进制之后,发送 USR2 信号,双进程都会服务 tcp 监听,直到老进程的 tcp 连接全部都服务完断开,由新进程完全接管。

我这边项目用了很久这相关的功能了。
就跟 nginx 的 USR2 信号行为差不多
aladdinding
246 天前
没有什么是不能在加一层就解决的
dzdh
246 天前
另外一个方案是 systemd 接管 socket tcp 数据会经过内核绕一下子。

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

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

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

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

© 2021 V2EX