热重启

易用性是Envoy的主要设计目标之一。除了强大的统计数据和本地管理界面之外,Envoy还具有“热”或“实时”重启的能力。这意味着Envoy可以完全重新加载自己(代码和配置)而不会丢失任何连接。热重启功能具有以下通用架构:

  • 统计和一些锁保存在共享内存区域。这意味着在重启过程中,资源将在两个进程中保持一致。
  • 两个活动进程使用基本的RPC协议通过unix域套接字相互通信。
  • 新进程完全初始化自己(加载配置,执行初始服务发现和健康检查阶段等),然后再向旧进程请求监听套接字的副本。新流程开始监听,然后告诉旧流程开始退出。
  • 在退出阶段,旧的进程试图正常关闭现有的连接。如何完成取决于配置的过滤器。退出时间可通过 --drain-time-s 选型进行配置,并且随着退出时间的增加,退出更加积极。
  • 退出顺序后,新的Envoy进程告诉旧的Envoy进程关闭自己。这一次可以通过 --parent-shutdown-time-s 选项来配置。
  • Envoy的热重启支持被设计成,即使新的Envoy进程和旧的特使进程在不同的容器内运行,它也能正常工作。进程之间的通信仅使用unix域套接字进行。
  • 源代码发行版中包含以Python编写的示例重启/父进程。这个父进程可用于标准的进程控制工具,如monit/runit/等。

返回