第一部分:解决什么问题。
什么是微服务API网关?
API网关是上承前端用户,下接后端服务的咽喉之地,是所有客户端请求响应出入流量的必经之路。
微服务API网关有什么用?
它除了可以做最基础的反向代理之外,还可以处理通用的公共服务逻辑,如负载均衡、灰度发布、限流熔断、统一认证授权、可观测性、动态路由、协议转换、服务编排、流量镜像、健康检查、监控报警、安全防御等等等等。
说得这么抽象,有没有具体的场景呢?
对应到具体场景,举几个常见的例子。
场景一:负载均衡。
当服务器负载上升时,需要立即对系统资源进行容量评估,适当增加扩容服务器资源,让每台服务器可以平均承载分担请求压力,此时应该采用何种负载策略:轮询、随机还是哈希?如果你有API网关,在后台配置好,即可自动实现。
场景二:灰度发布。
上了一个新功能,需要每天自动放 5% 的流量,10天后再一次性全部放开给所有用户。在此期间,可以对新功能加以验证,并对性能和稳定性加以观测优化,提前发现问题、解决问题?如果你有API网关,在后台配置好,即可自动实现。
场景三:限流熔断。
双 11 即将来临,可能会出现流量大增,如果没有一定的过载保护策略机制,服务也将面临重大考验。希望实现系统状态不健康或超过阈值时,自动保护上游后端服务,触发限流限频或熔断机制,并即时报警,避免整个服务链条发生雪崩,此需求如何实现?如果你有API网关,在后台配置好,即可自动实现。
场景四:统一认证授权。
不少公司用户权限鉴权逻辑散落在各站点服务中,是否可以将目前基于角色的认证逻辑和对外开放平台所使用的 OAuth 授权认证完全抽离出来,统一前置至网关中?如果你有API网关,即可统一实现。
场景五:可观测性。
这么多站点,想知道每个站点的流量分布情况;这么多接口,想知道每个接口的处理时间;无数的报错,想知道异常的分布情况;无数的告警短信与邮件,想统一收口告警规则与策略...更重要的是,如何呈现统一的看板,实现相关指标的可视化呢?如果你有API网关,在后台配置配置即可。
既然API网关这么重要,有没有靠谱的,工业级的API网关可以“拿来主义”呢?
推荐一下,Apache APISIX,Apache基金会最快毕业项目、最活跃的开源API网关项目,个人觉得,它是今年最值得学习的开源项目。
第二部分:架构设计。
Apache APISIX使用了怎样的架构设计方案呢?
一句话概括,它使用了数据平面(data plane)与控制平面(control plane)分离的架构方案。
什么是数据平面与控制平面?
数据平面和控制平面,不是Apache APISIX第一次提出,它是计算机网络,报文路由转发里很成熟的概念:
数据平面(data plane):一般用来做快速转发。
控制平面(control plane):为快速转发提供必要的信息。
它的设计原则是:
(1)在一个路由网关里,转发是最重要的工作,它具备最高的优先级,数据平面(data plane)的设计核心就是高效转发,如何在最短的时间里处理最多的包,往往使用高效内存管理、队列管理、超时管理等技术实现;
(2)控制平面(control plane)则不然,它更偏向于控制与应用;
Apache APISIX的核心架构借鉴了类似的思路。
数据平面:以插件的方式,实现流控,认证,安全,日志等等众多的微服务网关核心功能。
控制平面:以服务与后台的方式,实现数据收集,命令下发,可视化工作台等功能。
画外音:插件的方式,使得用户可以快速配置需要的功能,并能够定制化自己期望的功能。
第三部分:性能。
通过插件实现了这么多功能,它对请求转发性能有多大影响呢?
可以看到:
(1)单核QPS能跑到1.8W+;
(2)延时在0.2ms左右,几乎可以忽略不计;
(3)除了传统的HTTP,还支持Dubbo,MQTT,gRPC等诸多协议;
(4)…
画外音:非常适合做微服务网关。
官网地址:https://apisix.apache.org/
第四部分:demo。
这是我觉得这个开源项目最帅气的地方,项目提供了非常完善的中文手册,能够帮助我们快速上手,快速体验:
(1)如何用几个命令快速安装APISIX;
(2)如何快速配置APISIX;
(3)如何测试并验证APISIX;
(4)OK,可以在后台查看并控制你的网关了;
体验之后,再阅读源码,更有感觉哟。
Git地址:https://github.com/apache/apisix
文档地址:
https://apisix.apache.org/zh/docs/apisix/getting-started
这个项目靠谱吗?有哪些公司在使用?
绝非KPI式开源项目,Apache APISIX已经在NASA、腾讯、华为、微博、网易、贝壳、360等公司有着广泛的使用,已然成为世界上最活跃的开源网关项目。
画外音:你没看错,就是美国航空航天局的那个NASA。