一:网关的设计需求:
高性能,分布式,实现http请求转发rpc服务、接口权限校验,反作弊拦截等相关功能
包含关键字:高性能分布式模块、鉴权功能、路由能力、反作弊能力
对应的方案:无状态设计、过滤器责任链设计、路由方案设计、反作弊设计
二:网关的具体作用
功能一:请求鉴权
常用的登陆鉴权或者接口鉴权
功能二:数据完整性检查
数据包定长header+变长body
功能三:协议转换
JSON->HashMap(String,Object)
功能四:路由转发
根据CMD转发到不同的业务逻辑层
功能五:服务治理
限流、降级、熔断
三:网关的整体功能架构图
功能架构图
四:网关的时序图
时序图
五:需求实现方案
1:无状态化设计:
1>:单机下不存在Session共享,存储内存即可;但是无法使用分布式下的高可用的需求;
2>:分布式方案:Session绑定、Session复制、Session共享、Session客户端存储;
Session的绑定:将UID hash到固定的节点,具体的实现方案如下图所示
绑定实现图
Session的复制:每一台机器都存储全量的Session;
Session的共享:使用缓存服务Redis,统一存储Session;
Session客户端的缓存:存储于客户端;
2:Session的生成算法:暂时不写,一般都是个人信息+DDL+参数进行AES加密
3:反作弊需求
一:针对恶意流量,从网关层面进行拦截,防止对后端服务造成高并发的压力
表现:爬虫、恶意攻击
方案:黑名单(IP、deviceid、UID)
数据来源如图:
黑名单数据处理来源图
思考问题:数据量太大怎么办?实时性怎么保证?
二:为了防止误伤,需要对于黑名单数据有进行定期释放的能力;
4:网关路由请求:对http请求转换为后端服务的rpc请求
1:协议约定
1:网关和前端(如APP)传输协议JSON
2:网关层RPC调用参数入参统一HashMap
3:数据返回统一Result对象{code,data,msg}
2:负载均衡额服务发现:rpc框架实现
3:熔断设计:
组件级:Hystrix,链接:https://github.com/Netflix/Hystrix
4:路由解析图
路由解析图
通过上图分析,核心其实就是实现uri对服务的映射;RPC通过反射实现远程 调用,然后返回给前端最终获取到数据。
后话:关于路由映射的问题,这里有很多需要讨论的地方,实现机制有很多,最终看各自公司的实际需求。
关键词:手把手教你一分钟设计一个微服务网关层(微服务网关集群如何完成)