手把手教你一分钟设计一个微服务网关层(微服务网关集群怎么实现)

小编:小丢 更新时间:2022-04-29

一:网关的设计需求:

高性能,分布式,实现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通过反射实现远程 调用,然后返回给前端最终获取到数据。

后话:关于路由映射的问题,这里有很多需要讨论的地方,实现机制有很多,最终看各自公司的实际需求。