简介:Envoy 是由 Lyft 开源的高性能网络代理软件。相比于 Nginx、HAProxy 等经典代理软件,Envoy 具备丰富的可观察性和灵活的可扩展性,并且引入了基于 xDS API 的动态配置方案。目前,Envoy 被广泛应用于新兴微服务网关与服务网格之中作为核心数据面。而本次分享将从网易数帆实践出发,介绍网易数帆是如何基于开源 Envoy 构建高性能、易扩展、可观察的云原生微服务网关 函谷 (Hango)的。
函谷开源地址:
github.com/hango-io/hango-gateway
1 云原生微服务网关
微服务网关是微服务架构中最为核心和关键的组件之一,负责微服务集群中服务 API 统一暴露和出入口流量管理。举一个具体的例子,在微服务集群中可能同时存在上百个微服务,其中有些是内部依赖,有些则需要对外暴露 API,为外部客户端提供服务。如果让各个微服务自身负责 API 的暴露,那一个微服务集群可能会同时有几十个流量出入口,大大提高流量安全和流量管理的成本,同时对客户端也非常不友好。所以引入一个集中组件来统一控制 API 暴露,并负责流量的均衡和分发就是一个自然而然的选择了(事实上,服务暴露还涉及一个网络隔离的问题,不过本文主要介绍的是七层 API 网关,网络问题暂且忽略)。
相比于传统的反向代理,微服务网关有了一个职能的增强。传统的反向代理更加注重基础的路由转发和负载均衡,而 API 网关除此以外,更多的还要关注流量的治理能力和流量的观察能力。
在构建函谷网关之前,集团内部实际上已经有了一些其他的 API 网关方案。比如网易传媒、严选使用的是 Kong,还有一些业务使用基于 Spring Gateway 的技术方案。但是这些 API 网关都有一些局限性,比如它们的容器化支撑能力,再比如它们的性能,又或者它们的治理能力。网易数帆最初的动机就是准备构建一个具备丰富能力、覆盖多种场景需求并兼具高性能的新 API 网关统一和替代网易集团内部的这些技术方案。
2 如何做好微服务网关?
在对微服务网关本身有了基础的了解之后。第二个问题就是,如何才能做好一个微服务网关呢?只有先明确目标,确立一个好的微服务网关需要解决的问题,才能为后续的技术选型、以及具体实践方向提供指导。在梳理了集团内已有的各种网关解决方案以及各个业务方的需求和场景之后,团队总结了一下六条微服务网关需要具备的关键特性(一家之言,仅作参考)。
- 高性能:作为集群流量入口,性能是必须保证的。包括吞吐量和延迟,都是衡量一个高性能网关的关键要素。作为一个通用的解决方案,网易数帆的轻舟微服务网关设计之初,就希望尽可能覆盖未来更多的场景和业务方需求。所以性能自然要求越高越好,要满足对性能要求最苛刻的那一个业务方的需求。但是,如果各位希望自研微服务网关,那所谓高性能,不一定是吞吐量和延迟达到某个固定标准&#x