面试秒杀问题求解

2019-04-13 09:23:53 +08:00
 melonzzz
用尽可能少的机器来做一次秒杀活动?主要是问需要怎么设计
只说了限流,削峰,CDN 缓存,还有什么需要考虑的嘛
5415 次点击
所在节点    职场话题
28 条回复
melonzzz
2019-04-13 09:26:11 +08:00
top
binux
2019-04-13 09:38:06 +08:00
把名额分配给自己,前段直接 setTimout ("已售销")
whileFalse
2019-04-13 09:45:11 +08:00
让大部分用户的请求到不了数据层。

一是学小米,在页面 js 做手脚,开始秒杀后让大部分人直接结束,不需要发送请求到后端。
二是请求到了后端 web 层之后,在进入 app 层排队之前就随机丢弃一部分,剩下的再要不是进队列啊要不直接走 DB 都行了。
如果做得精细点,还可以使用在线统计的方式,秒杀开始前一分钟拿到在线数量,计算出页面和 web 层丢弃的比例,传给页面或 web 层。确保 web 层和 app 层不被压垮。
whileFalse
2019-04-13 09:49:40 +08:00
如果说页面连个请求都不发就直接结束太 tm 假了,那好办,web 端按某种方式随机到 100 个后端 api 地址上;其中只有 10 个是真的 api,另外的 90 个都返回静态的“秒杀未开始或已经售罄”即可🐶
dongisking
2019-04-13 09:58:37 +08:00
超卖超买,锁这些吧
Dounx
2019-04-13 09:59:42 +08:00
redis 缓存?
supuwoerc
2019-04-13 10:00:31 +08:00
"需要很大一部分的前端屠宰" =。=
uyhyygyug1234
2019-04-13 10:03:20 +08:00
那感觉不是秒杀,是在抽奖啊
guyujiezi
2019-04-13 10:12:42 +08:00
把 90%的请求拦截在前端
luozic
2019-04-13 10:21:38 +08:00
層層削峰。隔離部署,容量規劃和熔斷要搞好。 --- 高可用
防止黃牛 刷票的要搞好,其他的都是細節。--- 安全
pathbox
2019-04-13 11:01:16 +08:00
用尽可能少的机器来做 本身就是错误的方向
cxtrinityy
2019-04-13 11:07:02 +08:00
前端屠杀这个过分了,这特么感情不是比手速网速,是比幸运值么
carlclone
2019-04-13 11:09:41 +08:00
缓存,队列,分布式...数据库分片...超买超卖优化方案..
melonzzz
2019-04-13 11:12:13 +08:00
@whileFalse 要考虑的地方着实很多 上次看到过一篇秒杀设计写的很透彻,忘了收藏
murmur
2019-04-13 11:12:50 +08:00
直接前端随机返回失败,或者后端恒定 error,我相信个大互联网公司的举报系统都是这么设计的
melonzzz
2019-04-13 11:13:04 +08:00
@pathbox 也就是最优资源配置,不浪费资源
lhx2008
2019-04-13 11:13:25 +08:00
如果要公平,用中间件硬抗也可以的,前端先发请求申请一个指标,最快的拿到指标,其他放掉。

但是还是抽奖比较简单
melonzzz
2019-04-13 11:13:29 +08:00
@binux 这个挺不错[狗头]
lhx2008
2019-04-13 11:16:33 +08:00
像小米的话,放指标用的别的队列,几分钟后推回来,这样用户体验比较差,不过成本比较低,也可以兼顾到后面支付和减库存的压力。
lhx2008
2019-04-13 11:17:25 +08:00
淘宝的就比较狠,因为时时刻刻都在秒杀,所以根本没什么策略,也可能是我还没到那个水平

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/554702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX