开发一个 API Gateway
https://github.com/wuxins/api-gateway
概览
高性能可扩展弹性部署的 HTTP 网关
背景
可视化 & 可配置化解决如下问题:
接口级安全控制
API 监控治理
系统有多少 API?
每个业务流程涉及哪些 API?
每个 API 的错误比率和请求时间 (均值、最大值) 情况?
灰度策略南北流量管控
API 通用功能处理
限流、熔断、降级、超时、参数过滤
API 接口文档动态更新
架构
中间件依赖
强:中间件不可用时,网关无法启动
弱:出现故障时,不影响网关对外提供服务
Redis 不可用时,分布式流控会降级为本地流控
MySQL 不可用时,API 数据实时性可能会有影响
中间件不可用时,有监控数据上报
中间件恢复可用时,网关相关功能会自恢复
部署环境
Go 版本
go 1.16+
操作系统
linux、macos、windows
特性列表
接口级安全控制
API 渐进式发布
Restful API 转发支持
限流
熔断
降级
超时控制
OAuth2.0 客户端鉴权
参数过滤
API 分组
灰度
监控
API 文档生成
核心概念
环境
API 分组
上游应用
租户
API 接口
快速启动
启动依赖中间件
启动 MySql,运行 gateway.sql
启动 Redis
生成镜像
docker 运行 Makefile
启动网关
支持两种启动方式:
(1) 本地配置文件(config.toml)
默认启动方式,启动命令:./api-gateway
(2) 远程配置文件
目前仅支持: nacos
启动命令: ./api-gateway -CONFIG_MODE=nacos -NACOS_ADDRESS=127.0.0.1:8888 -NACOS_NAMESPACE=dev -NACOS_DATAID=api-gateway-NACOS_GROUP=DEFAULT_GROUP
最佳实践
API 上线流程:
上报->开发自测->测试验证->生产上线
服务列表:
上报 API 信息有两种方式:
1、开发 maven 插件 jar(api-gateway-reporter),deploy 到 maven 仓库
原理:集成运维平台 maven 编译阶段扫描 springboot-demo 项目 api 信息,并自动上报到 api-gateway-admin
备注:实现基于开源工具,感谢smart-doc-maven-plugin,smart-doc是一款同时支持 JAVA REST API 和 Apache Dubbo RPC 接口文档生成的工具
2、登录后管界面人工录入
第一种方式相对于第二种方案的优点:
(1) 节省了人工录入成本
(2) API 文档实现了自动更新,节省了 API 文档维护成本
管控平台操作示例图:
API 信息查询
API 信息同步
API 租户信息管理
API 文档预览
性能
压测工具 : Apache bench httpd-tools ab test
后端接口: /upstream-service-test/outer/resources/{{resourceId}}
网关转发接口: /upstream-service-test/resources/{{resourceId}}
请求方法: GET
响应内容:
后话
mail:270504819@qq.com
后续会对每个特性做详细的讲解,有兴趣的兄弟请 star 给个支持,也欢迎随时沟通。
评论