网关拓扑结构与功能设计归纳,你学会了吗?

网络 通信技术
后端服务不需要关心具体哪台网关节点IP,由网关建立终端标识与网关长连接IP映射,比如 userId=1.2.3.4存储在Redis等,后端服务推送请求时,网关根据标识(例如:userId)找到终端与网关节点建立的长连接完成推送。

 [[442063]]

引言

本文就网关拓扑结构和常见功能与设计点归纳整理。

一、网络拓扑与流量走向

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测试&测试场

链路标记路由 头部打标透传以及节点选择

三、设计点归纳

秘钥设计

  • 静态密钥 固定密钥串
  • 动态密钥 设置过期时间,过期后重新获取密钥
  • 密钥池化 将众多密钥组成密钥池,对终端的数据包进行解密

插件设计

  • 热插拔
  • 易扩展

推送映射

后端服务通过网关向终端推送消息时,需要知道终端与网关哪台机器建立的长连接,通常两种方向:

  • 网关负责映射

1.后端服务不需要关心具体哪台网关节点IP,由网关建立终端标识与网关长连接IP映射,比如 userId=1.2.3.4存储在Redis等

2.后端服务推送请求时,网关根据标识(例如:userId)找到终端与网关节点建立的长连接完成推送

后端服务负责

1.网关调用后端服务时将本节点IP透传给后端服务

2.后端服务向网关发起请求时只将请求发送到该网关节点IP

2.1 例子:可以通过RocketMQ Tag的功能实现,后端服务发送消息将网关IP设置为主题的tag,网关使用集群消费模式,每个网关节点使用不同的消费组订阅该tag(自身IP为tag)

2.2 例子:通过RPC通信框架节点选择回调时选择透传的网关节点IP

 

责任编辑:武晓燕 来源: 瓜农老梁
相关推荐

2024-03-06 08:28:16

设计模式Java

2024-01-01 08:15:00

应用设计模型产品

2022-01-17 21:48:35

流量录制设计点

2024-01-02 12:05:26

Java并发编程

2023-08-01 12:51:18

WebGPT机器学习模型

2024-03-05 10:09:16

restfulHTTPAPI

2023-05-18 09:01:11

MBRGPT分区

2022-09-26 08:49:11

Java架构CPU

2023-08-28 07:02:10

2022-06-16 07:50:35

数据结构链表

2023-01-31 08:02:18

2022-12-06 07:53:33

MySQL索引B+树

2023-08-26 21:34:28

Spring源码自定义

2023-05-05 06:54:07

MySQL数据查询

2023-03-26 22:31:29

2022-07-13 08:16:49

RocketMQRPC日志

2023-10-06 14:49:21

SentinelHystrixtimeout

2023-06-26 13:08:52

GraphQL服务数据

2024-02-02 11:03:11

React数据Ref

2023-07-30 22:29:51

BDDMockitoAssert测试
点赞
收藏

51CTO技术栈公众号