轻量级高并发架构

轻量级高并发架构

今天吃饭的时候,听到隔壁聊起抢红包,联想起在北京工作的时候,正好之前在北京工作同事有一个流量红包的项目,结合北京移动抢红包场景,整理一下架构思路

场景case分析

简单抽象用户会做三种场景

  • 发红包(这里都是指发群红包,一对多用户,一对一可以认为是一对多特例)
  • 抢红包
  • 查询抢红包记录
    在这里插入图片描述
发红包
  1. 发红包之前前置条件为扣款相关操作,然后才产生一个红包
  2. 通过nginx+keepalived做虚拟ip集群,防止入口宕机
  3. 通过nginx + tomcat做负载均衡,方便后端app扩容,理论上app无上限
  4. 将通过app红包校验的数据,拼接统一报文,发送mq消息队列
  5. 将数据做水平拆分,减少宕机影响范围,同时预留公共节点,做备节点
  6. 将数据持久化,同时做数据库主备模式,做到读写分离,读库后期作为二级缓存查询,同时将数据写入redis,做一级缓存
  7. 通知用户抢红包
    在这里插入图片描述
抢红包
  1. 用户N倍流量发起抢红包,携带红包订单号与用户编号
  2. 先将用户请求导向redis
    2.1 redis内部嵌LUA脚本,执行红包数量扣减逻辑,不访问数据库
    2.2 当redis中红包数据为0,启动一个异步线程,持久化抢红包红包记录。
    2.3 红包redis缓存失效时间为十分钟,当红包数据为0以后,其他请求直接返回,
    2.4 当缓存失效以后,访问数据库的主从同步库
  3. 执行【黑线逻辑】,某一个红包数量为0,发送数据持久化消息
  4. 将请红包消息持久化到数据库
  5. 数据库做主备同步

异步进程需要处理的逻辑

  • 有的红包不是那么活跃,可能某段时间抢不完,那么这部分按照之前的设计将不能持久化到数据库,则由后台进程触发, 具体参考【执行红线逻辑】
  • 用户抢到的大量红包需要对账,对接第三方即可。

在这里插入图片描述

查询红包
  1. 查询redis缓存
  2. 查询mysql读表
    在这里插入图片描述
详细图

完整架构图:流量红包架构图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值