服务架构的网关层好比护城墙的性质,主要的作用就是阻拦和过滤掉一些本不能直接进入的请求或者攻击。

一般网关层的作用是:
请求的鉴权
.比如发布商品,登录鉴权
数据完整性的检查
.数据包定长header+body的变化
协议的转换
.JOSN----->HashMap(String,Object)
路由的转发
.根据URI转发到不同的业务逻辑层
服务治理
.限流、降级、熔断等
网关层的架构以及定位基本都是按如下的架构图设计:

那如果我们需要打造高性能的分布式网关,实现HTTP请求转RPC服务,接口权限教验,反作弊拦截等相关功能,需要击破哪些技术壁垒呢?
关键字 对应方案
高性能 无状态设计
鉴权功能 过滤器责任链
路由功能 反作弊设计
简单的反作弊 路由方案设计
整体架构
.基于springboot
.不做业务逻辑处理,维持高性能
.缓存设计
.异步线程设计

自研网关各个击破--跨域
• CORS(Cross-Origin Resources Sharing)解决跨域问题
• 对HTTP 请求头进行豁免的一个策略
• 建立豁免清单
• Access-Control-Allow-Origin
• Access-Control-Allow-Credentials
• 是否允许cookie跨域
• Access-Control-Allow-Methods
• 允许提交请求的方法
自研网关各个击破--Session
• Session 绑定
• 将 uid hash到固定的节点
• Session 复制
• 优点:
• 每台机器存储全量的Session
• 做到了高可用
• 缺点:
• 集群同步复杂
• 适应于小规模网关
• 数据存储不合理,内存开销大
• Session 共享
• 使用缓存服务Redis,统一存储Session
• 优点:
• 网关层无状态
• 缓存服务本身高可用
• 缺点:
• 多一次服务调用IO
• Session客户端缓存
• 优点:
• 简单高性能
• 接入层无状态
• 缺点:
• 依赖客户端Cookie存储
sessiion生成算法
• Session包含的信息字段,和各个公司业务强相关
• deviceId、clientType、uid、ts
• AES 加密方案
• 加解密过程都在服务端
• 网关高性能
• 本地算法 + 远程校验
自研网关各个击破--反作弊
• 业务维度
• 爬虫
• 恶意攻击
• 技术解决 -- 黑名单
• IP
• deviceId
• uid
• 特点
• 读多写少
• 命中率低
自研网关各个击破--路由

1.核心实现URL 对 服务的映射
2. RPC 通过反射实现远程调用
• 协议约定
• 网关和前端协议Json
• 网关层RPC调用入参统一Map<String, String>
• 数据返回统一Result对象{code, data, msg}

