跳到主要内容

Tableflip 示例

Github StackBlitz

此示例演示了如何在 Go 应用程序中使用 tableflip 进行平滑升级。

Tableflip 是什么?

Tableflip 是一个库,允许您在不中断现有连接的情况下更新网络服务的运行代码和/或配置。它通过启动一个新进程,将客户端转移到新进程,然后退出旧进程来实现这一点。

Tableflip 的目标

  • 成功升级后不会有旧代码继续运行。
  • 新进程有初始化宽限期。
  • 初始化期间崩溃是可以接受的。
  • 任何时候只有一个升级并行运行。
  • Tableflip 在 Linux 和 macOS 上工作。

步骤

  1. 构建 v0.0.1 演示

    go build -o demo main.go
  2. 运行演示并创建 GET 请求到 127.0.0.1:8080/version

    [PID: 123] v0.0.1
  3. 准备新版本

  • 修改 main.go,将版本更新为 "v0.0.2"。
  • 重建演示
    go build -o demo main.go
  1. 杀死旧进程

    kill -s HUP 123
  2. 再次创建对版本 API 的请求

    [PID: 123] v0.0.2

客户端完全不受服务器升级和重启的影响,并且我们的应用程序能平滑更新!