Tableflip 示例
此示例演示了如何在 Go 应用程序中使用 tableflip 进行平滑升级。
Tableflip 是什么?
Tableflip 是一个库,允许您在不中断现有连接的情况下更新网络服务的运行代码和/或配置。它通过启动一个新进程,将客户端转移到新进程,然后退出旧进程来实现这一点。
Tableflip 的目标
- 成功升级后不会有旧代码继续运行。
- 新进程有初始化宽限期。
- 初始化期间崩溃是可以接受的。
- 任何时候只有一个升级并行运行。
- Tableflip 在 Linux 和 macOS 上工作。
步骤
-
构建 v0.0.1 演示
go build -o demo main.go
-
运行演示并创建 GET 请求到
127.0.0.1:8080/version
[PID: 123] v0.0.1
-
准备新版本
- 修改
main.go
,将版本更新为 "v0.0.2"。 - 重建演示
go build -o demo main.go
-
杀死旧进程
kill -s HUP 123
-
再次创建对版本 API 的请求
[PID: 123] v0.0.2
客户端完全不受服务器升级和重启的影响,并且我们的应用程序能平滑更新!