大数跨境
0
0

百万级流量网关层设计,需要哪些条件

百万级流量网关层设计,需要哪些条件 二进制跳动
2023-10-22
2
导读:百万级流量网关层设计,需要哪些条件

我们平时用到的微博、QQ、12306是典型的高并发的场景。其中QQ、微博不仅仅是高并发,他们还是大数据量。


1 .我们怎么来设计高并发请求的秒杀系统?

  •  降读:可以通过缓存

  •  降写:将请求拦截在服务请求的上层


2.类似于12306我们的业务场景是怎么样的?

  • 车次  读数据量比较大

  • 余票  读数据量比较大

  • 下单支付   写的压力比较大 


3.上下游的分层架构

我们一般的架构设计基本是:浏览器层->站点层->服务层->数据层

插一句:站点层和服务层为了有利于扩容,尽量是无状态化


4.设计思路

1.下单和支付分离 

 通过异步的处理方式,这样会降低用户的体验,但是可以降低系统的风险。

2.不同的地域不同时间开始售票

比如上海开始卖票时间是9点,北京的卖票时间是9点30分

3.按钮只能点一次

一个用户点击。立马将按钮置灰★

4.库存显示的粒度

只显示有票/无票,这样的话可以降低缓存的淘汰率。因为如果实际显示具               体的票数,票数的改变会带来缓存的淘汰,会增加db的压力

     

5.案例

1.秒杀服务器部署与主站分离,防止整体宕机。

2.秒杀商品提前存入RedisList,size为秒杀数量。








3.在Nginx层 Web 层分别做限流,活动开始后,将用户购买请求放入                    RabbitMQ中排队,消费者依次生成订单,同时减少Redis List中商品数                  量,并将生成的订单插入Redis和MySQL中供用户查询购买结果。









4.当商品数量为0时,剩余消息处理为抢购失败。


通过模拟测试,上述架构可支撑10w人抢购2000件商品的情景,并在60秒内            处理完全部订单,配置如下:在 aws 上,共启用6台 ec2 实例 ( Nginx +              Workerx 4 + RabbitMQ + Redis cluster)


百万级网关层设计我们需要知道哪些

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

一般网关层的作用是:

  1. 请求的鉴权

    比如发布商品,登录鉴权

  2. 数据完整性的检查

    数据包定长header+body的变化

  3. 协议的转换

    JOSN----->HashMap(String,Object)

  4. 路由的转发

    根据URI转发到不同的业务逻辑层

  5. 服务治理

    限流、降级、熔断等


网关层的架构以及定位基本都是按如下的架构图设计:

那如果我们需要打造高性能的分布式网关,实现HTTP请求转RPC服务,接口权限教验,反作弊拦截等相关功能,需要击破哪些技术壁垒呢?

关键字                                                                  对应方案

高性能                                                                  无状态设计

鉴权功能                                                               过滤器责任链

路由功能                                                               反作弊设计

简单的反作弊                                                        路由方案设计


整体架构

1.基于springboot

2.不做业务逻辑处理,维持高性能

3.缓存设计

4.异步线程设计


自研网关各个击破


跨域


• 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 对 服务的映射



• 协议约定 

• 网关和前端协议Json 

• 网关层RPC调用入参统一Map<String, String> 

• 数据返回统一Result对象{code, data, msg}

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