作者:小傅哥 博客:https://bugstack.cn
❝沉淀、分享、成长,让自己和他人都能有所收获!😜 ❞
大家好,我是技术UP主小傅哥。
Higress
、SpringCloud Gateway
,再到今天这套 Apisix
小傅哥就把市面上非常常用的3套 API 网关服务就全部都展示给大家了。其实所有的 API 网关都有一个共同的目的,就是做统一的 API 管理,包括;协议转换、负载均衡、动态路由、灰度发布、服务熔断、统一认证等。
像是这些组件化的 API 网关,使用起来其实都挺容易的,就有点像是使用了一个可视化的 Nginx 一样。但这些 API 看着简单,但有时候没有一个不错的资料对照搭建、配置和使用,也是挺难下手的。所以小傅哥把这些内容,成体系的展示给你,让你可以对照学习使用。
这款老6API,是阿帕奇下的开源项目。最初由 api7.ai 创建,于 2019 年开源并捐献给 Apache 软件基金会,使服务全球一半 API 请求的愿景成为可能。自那时起,API7.ai一直投入最优秀的人才和资源来支持 Apache APISIX 及其社区,该社区由来自世界各地的数千名贡献者和用户加入。
Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。
为什么选择 Apache APISIX?
官网中提供了 docker 的安装脚本,但不能直接使用,需要如图做下复制操作。小傅哥已经把这部分复制的内容,到脚本
工程里了。
admin/admin
地址:http://127.0.0.1:9093/
地址:http://192.168.1.105:9080/api
- 刷新网关接口,不停的刷新,会看到接口访问值的变化。
有了这个大厂网关的体验,大家就了解了一套网关是如何使用的,作用是什么啦。接下来,如果感兴趣技术的积累,想扩展下自己,也可以学习一套网关代码的实现。
除了业务开发,小傅哥自己也是非常感兴趣于这样的网关技术组件的实现,所以在日常的工作中也积累了很多网关的设计。后来在22年做了一套轻量的网关系统,把核心的内核逻辑实现出来让大家学习。帮助了很多伙伴学习项目后找到了不错的工作。
图片
整个API网关设计核心内容分为这么五块;
第一块
:是关于通信的协议处理,也是网关最本质的处理内容。这里需要借助 NIO 框架 Netty 处理 HTTP 请求,并进行协议转换泛化调用到 RPC 服务返回数据信息。第二块
:是关于注册中心,这里需要把网关通信系统当做一个算力,每部署一个网关服务,都需要向注册中心注册一个算力。而注册中心还需要接收 RPC 接口的注册,这部分可以是基于 SDK 自动扫描注册也可以是人工介入管理。当 RPC 注册完成后,会被注册中心经过AHP权重计算分配到一组网关算力上进行使用。第三块
:是关于路由服务,每一个注册上来的Netty通信服务,都会与他对应提供的分组网关相关联,例如:wg/(a/b/c)/user/... a/b/c 需要匹配到 Nginx 路由配置上,以确保不同的接口调用请求到对应的 Netty 服务上。PS:如果对应错误或者为启动,可能会发生类似B站事故。第四块
:责任链下插件模块的调用,鉴权、授信、熔断、降级、限流、切量等,这些服务虽然不算是网关的定义下的内容,但作为共性通用的服务,它们通常也是被放到网关层统一设计实现和使用的。第五块
:管理后台,作为一个网关项目少不了一个与之对应的管理后台,用户接口的注册维护、mock测试、日志查询、流量整形、网关管理等服务。API网关除了基础的功能模块以外,还需要重点考虑负载均衡的设计,只有这样才能被横向扩展支撑高并发的吞吐量。所在负载设计这块,小傅哥也是花了不少的时间来构建,让负载可以被动态的管理。
图片
这是一整套API网关的核心通信模型结构图,以API网关算力的多套服务注册到网关中心开始,拉取RPC应用接口并完成映射HTTP调用操作。最终允许用户通过 Nginx 访问和路径重写的负载均衡管理,调用到具体的网关算力中执行协议解析和RPC接口的泛化调用并最终返回结果数据。—— 就这套架构设计学习完,就够你晋升到P7岗了!