跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 秒杀的系统设计
未分類
20 5 月 2020

秒杀的系统设计

秒杀的系统设计

資深大佬 : vnex 1

我看,秒杀的一些系统设计,似乎都是根据商品 ID hash 到同一个逻辑节点,然后在逻辑节点里面,排队处理

那么为什么不是分散到其他节点,基于分布式锁来处理呢?一样可以保证一致性

目前在想,是不是因为,如果基于分布式锁的话,那么没有抢到锁,只能返回秒杀失败,这样可能导致,商品依旧有库存,但是因为抢的时候,刚好有其他用户抢锁了,导致秒杀失败

谢谢

大佬有話說 (9)

  • 資深大佬 : kop1989

    因为秒杀的关键不是高性能逻辑,是减轻服务器压力。
    单线程排队,甚至是请求抽奖,都是节省服务器压力为目的。并不是为了高效处理队列。

  • 資深大佬 : kop1989

    举个不恰当的例子,程序员去大厂面试。为何是排队一个一个面,而不是根据来的人数动态匹配面试官?
    因为对于公司而言,占用 10 个人 30 分钟,和占用一个人 300 分钟,产能影响、面试结果准确度等结果是不同的。
    而最终目的却相同(给一个人发 offer )。
    那作为公司而言为什么要做出对自己不利的面试策略?

  • 資深大佬 : luckyrayyy

    性能啊,几十万个请求抢一个锁,画美不看。

  • 資深大佬 : avastms

    就随便收集请求 random 一下算了,别跟自己过不去。

  • 資深大佬 : night98

    基于分布式锁会存在抢占锁的问题,多个线程等待锁释放耗费的性能也是很高昂的代价,所以直接 hash 到单个节点排队处理,超出队列大小的还能直接返回失败,相比分布式锁会要少很多的内网请求。记住,高并发的原理就是尽可能做最少的事情,能走内存访问的不要走网络访问,能走网络的不要走 io,当然这种场景可以参考下无锁队列进行实现。

  • 資深大佬 : jugelizi

    看上去是没趟过分布式锁的坑

  • 主 資深大佬 : vnex

    @jugelizi 介绍指导下 :)

  • 主 資深大佬 : vnex

    @night98 那要如何支持动态扩容呢,如果想加节点,不就要停机维护?

    我看到有介绍说,在连接层,添加一个新的映射关系,老 ID 走老的映射,新 ID 走新的映射

    但是
    像抢红包,红包可以放 24 小时,入会处理峰值时的请求呢?靠单个节点排队吗?

  • 主 資深大佬 : vnex

    @night98 高并发的原理就是尽可能做最少的事情,能走内存访问的不要走网络访问,能走网络的不要走 io,当然这种场景可以参考下无锁队列进行实现。
    感觉这个是指高性能吧

    高并发,应该是 节点无状态+cache+分库分表,读写分离主从

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具