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套接字

  • 部署进程首先向主进程的admin端口发送shutdown端口请求,以使主进程关闭admin端口。然后,部署进程接管所有主进程的职责,包括统计信息刷新。这样从操作的角度来看,逻辑上只有一个envoy进程。
  • 部署进程开始加载其配置并绑定到侦听套接字。在这个阶段,部署进程通过UDS获得主进程的套接字。 注意:由于历史原因目前envoy未使用SO_REUSEPORT套接字选项。不过可以在配置文件中增加reuse_port: true开启这个选项。
  • 部署进程初始化完成后,它会通知主进程停止侦听新链接,主进程开始排水过程。排水时间的长度是可配置的,默认为15分钟。在这15分钟内,或者配置的时间内,主进程将正常关闭链接。排水的时间越长,关闭链接的速度就越快。这样可以平滑关闭旧连接,然后在已经侦听新连接的部署进程上重新建立连接。
  • 在主进程排水阶段,部署进程是正在冲洗统计信息。大多数统计信息存储在共享内存中,无需通过RPC获取。但是一些特殊的统计信息需要通知排水中的主进程。例如,主进程仍然打开的链接数和其相应的内存。这些状态由部署进程写进共享内存中,以致排水率能被更好的观察。
  • 最后,在主进程排水结束后,部署进程向主进程发送shutdown请求。主进程打开的其余的连接都将被关闭,此时,部署进程变成主进程,部署基本完成。

4. 热重启使用

可以通过手动或者包装器进行热重启。

主要可参考:Envoy 热重启实践 - 掘金

手动部署可以用:

--restart-epoch 

包装器热重启需要用到

restart/hot_restart.py工具

5. 总结:

这算是对自己学习envoy热重启的相关知识点的总结,其中大部分是翻译大佬的博客,加深自己的印象,同时也整体规划了下envoy热重启相关的内容。方便后期自己复习。

参考:

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

热重启 · Envoy proxy中文文档

Envoy 热重启实践 - 掘金

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qls315

感觉好可打赏几毛钱增强更新动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值