解读开源Hango网关的云原生设计与实践,本文先从云原生溯源,解读云原生API网关选型特点;再进一步解读网易数帆开源Hango云原生API网关设计及大规模落地实践。
云原生溯源
什么是云原生
CNCF(云原生计算基金会)对云原生的定义是:云原生是一种架构模式,有利于各组织在公有云、私有云和混合云等动态环境中,构建和运行可弹性扩展的应用。代表技术包括,容器、微服务、不可变基础设施和声明式API。
从云原生的定义可以看出,云原生具备快速集成,拥有良好的扩展性及高可用性。得益于Kubernetes的发展,云原生技术蓬勃发展,已然迈入新时代。
API网关的意义
随着容器技术以及微服务理念的发展,更多的产品组织着重于暴露开放API,用于客户端进行交互。API网关充当API代理的功能,网关接收请求,将请求进行统一路由转发至后端服务。网关作为抽象层,为整个微服务系统或集群提供统一接入层。
除了代理功能外,API网关为微服务集群提供统一的安全、响应转换、熔断、降级和监控等多维度功能,确保流量安全可靠。
随着云原生理念引领微服务进行演进,应用迭代频率以及交付速度会加快,API网关的出现可以使得业务开发更加专注于自身业务逻辑的设计,提升研发敏捷性。在云原生的架构下,API网关也在向云原生演进,Hango网关便是云原生设计下催生的优秀网关产品。
云原生API网关特点
进入云原生时代,行业用户除了关注传统API网关提供的请求代理,流量治理等常规功能外,更多的开始关注云原生兼容性,支撑场景的多样以及更优异的性能。
相较于传统API网关,在云原生模式下笔者认为API网关应该具备的一些思考:
服务发现方式:与传统网关服务发现需要手动指定upstream,云原生网关在服务发现上需要动态感知业务变化。
更高的性能追求:随着Kubernetes以及容器将云原生带入新时代以及微服务理念的发展,API网关的卓越性能可以减少整个链路的RT。
云原生架构兼容/整合:网关的部署架构是否能够和云原生架构进行兼容,能否和容器以及服务网格进行无缝对接。
动态配置能力:传统的反向代理无法实现动态配置加载能力,云原生模式下的代理配置更新变化较频繁,动态配置下发能力显得尤为关键。
部署形态及架构:网关部署架构能否满足弹性扩展,是否支持从业务混部到独立部署的平滑迁移。
监控/链路追踪:云原生架构中,良好的监控和链路追踪能力可以便于运维人员进行服务观测以及问题定位。
Hango API 网关设计
随着集团内业务大规模进行容器化改造,业务对网关的诉求也愈发强烈。我们团队着手于建设新一代高性能API网关Hango(项目地址:https://github.com/hango-io/hango-gateway),目的是替换集团内部较多的采用Java的异步网关、Zull,同时满足业务逐渐上云的南北向流量治理需求。
在选型方面,我们选择Envoy作为云原生网关实践的关键基础组件,具备丰富的特性,包括:
原生功能丰富:相较于Nginx,HAProxy等流量代理所需的基本功能,Envoy本身基于C++实现了相当多的高级治理功能,包括负载均衡、熔断、