shoulder-api-gateway
接入层网关:安全、限流、日志、监控、缓存(业务无关)
API 服务网关:超时、缓存、熔断、重试、查询聚合、数据校验(时间、方法、版本、AppKey、签名)
【贴近业务】
实际应用中,也可以根据自己的设计,将代理网关的能力赋予 API gateway 中。
安全
- 租户识别
- 调用者识别
- 外部调用网关时请求验签、解密
- 内部返回给外部、内部调用外部时加签、加密 (字段排序)
- 参数校验
字段控制
Oauth 验权
认证
字段脱敏
调用源信息解析
OAuthClient
WEB 攻击抵御
- redirect
- xss
- ssrf
- 文件上传
- referer
默认 error 页面
日志
- 日志字段配置(解析方式/位置)、提取、记录
- 摘要日志
- 审计日志
协议转换
- 通信协议转换
- HTTP - GRPC
- HTTP - DUBBO
- ...
- 格式转换
- 标准错误码与 HTTP 响应码映射
- 错误码转换
- 错误消息处理
- 特殊格式
- 数据转换
上下文
流量控制
- 流量切换
- 流量分组(基于ip/cookie)
- 机房转发
- 流量复制
- 链路分组
- 灰度引流
- 单元分隔(全局存储G/可副本读C/逻辑分区R)
流量限制
- 滑动窗口
- 直接用 redis incr (key为当前的秒时间),计算一秒内的请求次数,当value大于 xxx 时,其余的请求丢弃。
- 简单、但粒度较粗,可能在极端情况出现双倍流量、容易出现流量尖刺,使得整体响应时间变长体验较差
- 漏桶
- 遇到压力时流量仍然可控,但即使没有负载,也需要等待漏出,不能容忍突发峰值
- 令牌桶【默认】
- 比漏桶多了允许一定的突发流量,使用较广泛,最大峰值=桶大小,最大高压值=令牌产出速率
流量回放
负载均衡
超时熔断
数据缓存
服务降级
API 管理
- 上线
- 下线
- 分组
- 自定域名
- 发布
- 导入导出
- 订阅
- 版本管理
- OpenAPI
- 扩展能力
- API 文档
- SDK 下载
- 页面调试
- API 市场
- 官网管理
监控告警
- 请求数
- 流量
- 响应时间
- 错误率
- 异常告警(返回值/波动)
- 日志监控
- 日志分析
- 调用统计
- 故障注入
- API 巡检
- 故障分析(埋点)
特点
- 高性能
- 数据压缩/协议转换,充分利用网络,保证传输效率与质量
- 强安全
- 高可靠
- 高可用
- 99.99%+,通过流量限制、引流转发、流量隔离、负载均衡、故障转移、降级、平滑升级等措施全方位避免服务宕机,极端情况仍可通过集群与灾备能力保证可用性。
- API 管控
- 易用性强
其他可选依赖
- 用户中心
- 开放中心(授权服务器、认证服务器)
- (硬件加解密服务器)
- (沙箱)
缓存
脚本语言选型
- Groovy,JIT后最快
- Aviator 被编译成字节码,不JIT最快,JIT 次之 √
- IKExpression 超轻量级
- Drools 较重,功能完善,企业级
上线流程 DEV、SIT/TEST、PRE、GRAY、PROD