一、网络拓扑与流量走向
1.网络拓扑架构
下面是一个比较通用的南北流量网关部署架构,各个层次如下:
- 终端服务层:公司提供的各种设备、APP等
- 四层负载均衡集群:SLB/LVS等
- 七层负载均衡集群:Nginx等,在这一层可以植入安全插件WAF等
- 网关层:负责终端与内部服务通信协议转换、通知推送等
- 后端服务:业务微服务应用
2.流量走向
从北向南
- 终端通过HTTP/TPC/WebSocket等协议发送请求,网关接受请求解析数据包
- 解析数据包通常会使用秘钥或者秘钥池
- 解密后组装数据格式抽取映射标识(指令码或者action)
- 根据业务配置的映射关系通过标识查询对应的后端服务接口与协议
- 向后端微服务发起调用
从南到北
- 业务处理完逻辑后向网关发起回调
- 网关先查找该请求的长连接在哪台网关机器上
- 找到与终端的长连接将回调的内容完成推送
二、功能点归纳
下面罗列下网关常见功能点:
1.协议转换
- 终端HTTP1.1、HTTP/2与后端服务HTTP、RPC、MQ等协议转换
- 终端WebSocket与后端服务HTTP、RPC、MQ等协议转换
- 终端TCP与后端服务HTTP、RPC、MQ等协议转换
- 终端MQTT与后端服务HTTP、RPC、MQ等协议转换
2.访问控制
- 用户身份认证
- 风控风险验证
- 签名合法验证
- 黑白名单管理
3.流量控制
- 全局流控对网关访问的总量控制
- 单机流控根据APP访问API的权重控制
- 多种流控维度API地域、API商户等
- 断路器熔断慢调用服务
4.监控告警
- 流量监控
- 日志采集
- 实时告警
5.网关管理
- 服务接口配置
- 负载均衡策略
- 秘钥生成策略
6.性能相关
- 缓存的使用 将频繁请求的数据进行缓存提高响应时间
- 性能分析日志
7.流量路由
- 灰度&蓝绿发布
- A/B测试&测试场
链路标记路由 头部打标透传以及节点选择
三、设计点归纳
秘钥设计
- 静态密钥 固定密钥串
- 动态密钥 设置过期时间,过期后重新获取密钥
- 密钥池化 将众多密钥组成密钥池,对终端的数据包进行解密
插件设计
- 热插拔
- 易扩展
推送映射
后端服务通过网关向终端推送消息时,需要知道终端与网关哪台机器建立的长连接,通常两种方向:
- 网关负责映射
后端服务不需要关心具体哪台网关节点IP,由网关建立终端标识与网关长连接IP映射,比如 userId=1.2.3.4存储在Redis等
后端服务推送请求时,网关根据标识(例如:userId)找到终端与网关节点建立的长连接完成推送
后端服务负责
网关调用后端服务时将本节点IP透传给后端服务
后端服务向网关发起请求时只将请求发送到该网关节点IP
1 例子:可以通过RocketMQ Tag的功能实现,后端服务发送消息将网关IP设置为主题的tag,网关使用集群消费模式,每个网关节点使用不同的消费组订阅该tag(自身IP为tag)
2 例子:通过RPC通信框架节点选择回调时选择透传的网关节点IP