# shoulder-api-gateway 接入层网关:安全、限流、日志、监控、缓存(业务无关) API 服务网关:超时、缓存、熔断、重试、查询聚合、数据校验(时间、方法、版本、AppKey、签名) 【贴近业务】 实际应用中,也可以根据自己的设计,将代理网关的能力赋予 API gateway 中。 - 安全 - 租户识别 - 调用者识别 - 外部调用网关时请求验签、解密 - 内部返回给外部、内部调用外部时加签、加密 (字段排序) - 参数校验 - 字段控制 - 排序 - 黑白名单 - 额外字段填充/抹除 - Oauth 验权 - 认证 - 字段脱敏 - 调用源信息解析 - 源ip - 源地址 - OAuthClient - WEB 攻击抵御 - redirect - xss - ssrf - 文件上传 - referer - 默认 error 页面 - 日志 - 日志字段配置(解析方式/位置)、提取、记录 - 摘要日志 - 审计日志 - 协议转换 - 通信协议转换 - HTTP - GRPC - HTTP - DUBBO - ... - 格式转换 - 标准错误码与 HTTP 响应码映射 - 错误码转换 - 错误消息处理 - 特殊格式 - 数据转换 - 上下文 - Trace 追踪 - 流量控制 - 流量切换 - 流量分组(基于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