• 使用Envoy GateWay实现网关配置的热更新
  • 发布于 2个月前
  • 225 热度
    0 评论
一. 引言
最近发生一个服务不可用的情况,引起其他部门吐槽。具体是这样的,之前调用设备服务是通过公网访问的,现在转成内网域名调用。由于网段的问题,在机器中使用nginx配置了转发。但在使用的过程中,在某一刻导致流量无法转发过去,之后排查到Nginx服务崩溃,手动重启nginx服务器解决了该问题。

经排查,可能出现了两种问题导致了Nginx崩溃问题:
第一种,如果服务器上的内存不足,Nginx 可能会因为无法分配足够的内存而崩溃;

第二种,资源耗尽,如果 Nginx 服务器上的 CPU 或磁盘等资源耗尽,它可能会崩溃或无法处理请求。


二. Nginx网关
首先nginx什么时候会导致CPU资源升高。

Nginx 的配置变更 reload ,会导致 downstream 和 upstream 连接都断开触发重连,在高并发场景下,downstream 并发重连将导致 Nginx 的 CPU 飙升,最严重的还是 upstream 的并发重连,很可能打垮后端业务程序的线程池,造成雪崩。

因此,是否可以做到热更新呢?

接下来介绍一下 Envoy API Gateway

3. Envoy GateWay
Envoy API Gateway 是基于 Envoy 构建的开源软件,为云原生应用提供高级负载均衡能力。使用Envoy依托于精确的配置变更管理,就可以实现网关配置的热更新。

如下图所示,在 Envoy 中 downstream 对应 listener 配置,交由 LDS 实现配置发现;upstream 对应 cluster 配置,交由 CDS 实现配置发现。listener 配置更新重建,只会导致 downstream 连接断开,不会影响 upstream 的连接;downstream 和 upstream 的配置可以独立变更,互不影响。再进一步,listener 下的证书 (cert),过滤器插件 (filter),路由 (router) 均可以实现配置独立变更,这样不论是证书 / 插件 / 路由配置变更都不再会引起 downstream 连接断开。

3. 小结
Nginx更多推崇的是使用本地的指令配置来做配置变更,虽然作为代理程序来说很便捷高效,但用作网关则不尽然。另外,Nginx 原生不支持配置热更新,常见的做法是使用 Lua 脚本来支持,但这会带来非常大的性能衰减,如果配置热更新、可观测性等全部使用 Lua 实现,整体性能损失相比原生 Nginx 最高可能达到 70-80%。

随着网关的发展,下一代云原生网关这个方向目前还没有形成一个事实上的标准,除了 Envoy,业内还有很多企业在探索这个方向。
用户评论