欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

envoy的热重启

程序员文章站 2024-03-14 11:19:04
...

1. 热重启的概念(热重启是什么?)

热重启是一种服务部署方式,服务的另一种部署方式为滚动升级。

其升级部署形式如下:

envoy的热重启

通过在同一台机器上,将一个服务切换到新服务,而不会造成任何流量损失。

 

2. envoy采用热重启的背景

热重启是简单的和容易实现的,目前仍然是被很多组织采用。

envoy基于热重启又增加了些许设计目标:

a. 整个进程(不仅仅包含配置文件)能够在不损失任何流量的情况下被加载

b. 在重启期间envoy的统计信息应该保持一致

c. 基于容器的不可变的部署仍然可以采用热重启部署envoy

d. 旧的envoy服务的排水率和死亡速率应该是可控的

3. envoy热重启的原理以及工作方式

3.1 envoy热重启架构

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 热重启工作过程

工作过程如下:

envoy的热重启

两个进程交流的方式是通过共享内存和unix套接字

 

参考:

https://blog.envoyproxy.io/envoy-hot-restart-1d16b14555b5

https://www.servicemesher.com/envoy/intro/arch_overview/hot_restart.html

https://juejin.im/post/5c500d17e51d455221614977