100W并发秒杀系统架构

一 百万并发秒杀概述

1.1 可能遇到问题

  1. 在一瞬间服务出现大量请求,服务可能会崩溃。
  2. 在秒杀商品时候,可能出现超卖。

1.2 秒杀的业务流程

  1. 秒杀的商品有热点商品和非热点商品,热点商品可能流量占整个的90%.
  2. 后台商品管理可以将商品加入到秒杀商品,根据商品访问量分位热点商品和非热点商品。
  3. 用户抢到商品支付,发货商品。超时不付款,订单取消。

二 秒杀架构

在这里插入图片描述
我们Java项目时用tomcat部署的。nginx的并发量能达到五万,tomcat最优能支持1千。所以首要问题就是让tomcat直接处理请求,减少tomcat处理请求。
由于商品的详情页除了数量其他基本不改变。因此可以采用详情页放到nginx缓存中。还有就是考虑热点商品的抢购能直接经过nginx处理不到服务端,
这样就完美解决了问题了。

Lua脚本对JWT校验
用户请求到达nginx,用lua脚本进行jwt校验,减少非法请求对服务器的访问。从而减少服务器压力。

2.1 静态页面处理

因为秒杀商品的浏览量很高,而且商品的描述,价格,图片,标题基本上是不变的。因此考虑用freemarker做商品静态化。
所以先考虑静态页面的生成,商品数量发生改变静态页面从新生成。

1. 后台将设置商品成为秒杀商品流程:

比如京东的秒杀都是一个时间点到另外一个时间点。当秒杀的时间点到了,需要从索引库中删除对应索引和删除对应的静态页面。我们可以在商品添加秒杀时候,
设置定时任务。然后定时任务到达后执行对应操作。在添加秒杀时候,更改数据库中商品是处于秒杀,然后生成静态页面。

2. 商品数量修改,静态页面的同步(canal数据同步):

使用canal对数据库的表进行监控时候,当新增,删除,编辑表中是数据时候,canal都能监控到。从而触发canal书写的Java服务,然后根据业务进行静态页面的修改。

3. 静态页面的生成和删除:

当商品变成秒杀商品,生成静态页面。当商品卖完或者变为普通商品,删除静态页面。

2.3 将秒杀热点数据隔离

我们可以根据商品的浏览量判定当前商品是否位热点数据。所以需要商品浏览记录收集,和收集浏览记录的分析。

2.3.1 日志收集

用户访问商品详情,首先请求经过nginx,然后使用nginx和lua脚本对请求商品详情路径进行拦截,让后将请求商品数据发送到kafka。数据库接受到kafka数据,完成商品浏览数据收集。

2.3.2 数据分析

Apache Druid订阅Kafka从而获取商品的访问日志,druid能实时获取商品访问记录。druid支持sql,对数据进行分析。找出热点数据。

# lua脚本发送给kafka日志格式
{
   "actime": "2020‐4‐10 9:50:30",  
   "uri": "http://192.168.211.137/items/S1235433012716498944.html",  
   "ip": "119.123.33.231",   
   "token": "Bearer ITHEIMAOOPJAVAITCAST" 
}

2.3.3 热点数据隔离

可以采用定时任务(elastic-job)实时查询Druid,把近期访问量最多的商品放入redis缓存中。缓存中数据如下:商品库存,价格,名称等。

备注:
用户进行下单时候,在redis中就是热点商品,走热点下单。不在redis中不是热点商品,走服务直接下单。

在将热点商品放到redis中,需要根据商品的锁定字段,将商品锁定。然后再将商品信息放到redis中。用户抢购商品和热点商品放到redis中同时进行,导致库存混乱。

2.4 热点商品和非热点商品抢购流程

需要判断当前用户对当前商品24小时内是否抢过。判断抢购商品是冷商品还是热门商品。判断库存是否充足。

1. 非热点商品秒杀:

a 判定为非热点数据,进入服务中进行下单系统。
b 对库存进行判断,如果库存充足,进行下单。如果库存不充足,事务回滚。
c 如果库存充足,但是商品变为热点商品。应将下单操作发送到kafka,然后变成热点商品下单操作(防止商品库存混乱)。
d 记录该用户抢的该商品,用于提示该用户24小时不能抢该商品。

2. 热点商品秒杀:

a lua脚本进行JWT校验,判断用户是否登录。
b 从redis查询看该用户是否抢了该商品(在抢购商品成功后,会将商品和用户信息存储到redis中)。
c 从redis热点商品中查询,商品是否为热点商品。如果是热点商品且库存>0,热点商品抢购流程。
d 判断该用户该商品是否处于排队(用redis的incr自增来判断当前用户该商品是否重复排队)。是,提示用户正在排队。否,直接排队。
e 订单系统通过队列订阅读取用户下单信息,并进行下单。

三 流量监控

在秒杀项目中需要集成Sentinel进行限流操作。在秒杀过程中冷门商品变为热门商品时候,访问服务流量瞬间激增,需要采用Sentinel进行限流,保护服务的稳定性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容