大数跨境
0
0

百万级分布式网关设计,需要击破哪些?

百万级分布式网关设计,需要击破哪些? 二进制跳动
2023-11-09
0
导读:百万级分布式网关设计,需要击破哪些?

我们需要设计一个分布式网关,具体要击破哪些问题?


首先我们要提取几个关键字:高性能分布式、鉴权能力、路由能力、简单的反作弊

对应的方案 :无状态设计、过滤器责任链、反作弊设计、路由方案设计


整体架构:

基于Springboot的webserver

网关属于高并发模块,做到简单逻辑,业务逻辑要剥离到业务层

高性能:缓存设计、异步线程设计


击破一:跨域问题

CORS解决跨域问题


击破二:Session

Session绑定:将uid hash到固定的节点

对节点进行冗余设计,做到高可用。

但这样会把简单的问题复杂化!!!!!


session复制:

每台机器存储了全量的session,做到了高可用。

但集群之间的同步复制比较复杂,数据存储不合理,内存开销比较大。


Session共享:

使用redis,统一存储session。

网关层无状态,缓存服务本身高可用。

但是多一次的服务调用IO


Session客户端缓存:

简单、高性能且接入层无状态

但是问题是依赖客户端Cookie存储。


session算法:

session包含的信息字段,和各个公司的业务有关:deviceId,clientType、uid、ts

AES加密算法:加密过程在服务端。


击破三:反作弊

针对恶意流量,从网关层面进行拦截,防止对后端服务造成高并发压力。

为了防止误伤,对于黑名单数据定期释放能力。


网关层面的反作弊:

包括业务维度层面的爬虫、恶意攻击。

技术解决方案:黑名单 IP、deviceId、uid

特点是读多写少,命中率低。


架构设计:


类目
现状
业务初级阶段 数据量比较小
高可用设计 进程内缓存
黑名单固化 KV存储、失效管理


击破四:路由

首先我们要知道路由需要有哪些需求?

  1. RPC over TCP

  2. 入参传递:HTTP---->Object

  3. 服务发现

  4. 负载均衡

  5. 熔断降级

架构设计原则:
1.约定大于配置

2.功能简单

3.使用够方便

   

  • 协议约定:网关和前端协议JSON,网关层RPC调用入参统一Map<String,String>,数据返回统一Result对象{code,data,msg}

  • 负载均衡和服务发现:RPC框架实现(这边的RPC主要是通过java反射来实现,今天就不发散了!!!)

  • 熔断设计:  Hystrix

这是V1.0的版本,有如下毛病:启动耗时比较大,业务升级需要重启,耦合严重,降低开发效率。


V2.0升级需求:网关层感知接口更新,网关层热加载接口

架构设计更新:
1.引入存储层

2.采用主动扫描的方式

3.在服务端进行代理

4.维护一个公共的jar


当然我们也可以用开源框架,截取网上的图片:

Sprng Cloud:

Spring Cloud Alibaba


【声明】内容源于网络
0
0
二进制跳动
15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
内容 739
粉丝 0
二进制跳动 15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
总阅读224
粉丝0
内容739