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

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

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

我这边项目用了很久这相关的功能了。
就跟 nginx 的 USR2 信号行为差不多
aladdinding
4 天前
没有什么是不能在加一层就解决的
dzdh
4 天前
另外一个方案是 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