envoy的热重启
1. 热重启的概念(热重启是什么?)
热重启是一种服务部署方式,服务的另一种部署方式为滚动升级。
其升级部署形式如下:
通过在同一台机器上,将一个服务切换到新服务,而不会造成任何流量损失。
2. envoy采用热重启的背景
热重启是简单的和容易实现的,目前仍然是被很多组织采用。
envoy基于热重启又增加了些许设计目标:
a. 整个进程(不仅仅包含配置文件)能够在不损失任何流量的情况下被加载
b. 在重启期间envoy的统计信息应该保持一致
c. 基于容器的不可变的部署仍然可以采用热重启部署envoy
d. 旧的envoy服务的排水率和死亡速率应该是可控的
3. envoy热重启的原理以及工作方式
3.1 envoy热重启架构
envoy的热重启架构如下图所示:
热重启架构主要由四部分组成:主进程,共享内存,unix域套接字(UDS), 以及子进程(需要部署升级的服务)
共享内存:包含版本信息,原始统计信息存储,以及共享锁,其在envoy中的实现如下:
struct SharedMemory {
uint64_t size_;
uint64_t version_;
pthread_mutex_t log_lock_;
pthread_mutex_t access_log_lock_;
std::atomic<uint64_t> flags_;
};
主进程:
这是你的旧envoy服务,当该进程排水结束后子进程便变成主进程,主进程在envoy中定义为:
class HotRestartingParent
子进程:
这个是你需要部署的新的envoy进程,最终这个会变成主进程,子进程在envoy中定义为
class HotRestartingChild
unix域套接字:
主进程和子进程间通过一个简单的rpc通信,该通信通过unix域套接字实现。
3.2 热重启工作过程
工作过程如下:
两个进程交流的方式是通过共享内存和unix套接字
参考:
https://blog.envoyproxy.io/envoy-hot-restart-1d16b14555b5
https://www.servicemesher.com/envoy/intro/arch_overview/hot_restart.html
上一篇: boost的单件工具类
下一篇: Podman 使用指南