大并发量,秒杀处理

程序员-阿勇 2016-01-27 10:45:51
加精
今天面试有个问题不知道怎么回答,大伙有空的话,能讲解下吗? 就是淘宝秒杀,以及12306抢票这种大并发量的抢购行为技术是怎么实现的,我有个思路,就例如秒杀商品只有10个,我可以考虑将请求者的前100人丢到一个池子里面,然后后面的都提示没有商品了,那前100我后台异步随机取10或者添加进去的时候按照时间排序,取前十,问题是,我想象的这个池子,能用什么保存?session?还是什么? 或者说 你有没有更好的方案? 技术交流下 学习学习
...全文
23519 54 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
dmlsa 2018-02-05
  • 打赏
  • 举报
回复
引用 34 楼 sinat_27650399 的回复:
[quote=引用 16 楼 sp1234 的回复:] 以前国营单位的那些程序员的编程习惯,之所以把秒杀搞垮,首要问题是因为经验和估计不足(任何人都会犯这种错误),其次在技术上是就在类似所谓的 asp.net 或者 jsp 网站软件里边同时处理业务,同时又要负载均衡,同时又共享访问什么 Oracle 数据库,然后把所有的动态业务数据都放到数据库里“增删改查”。你可以想象一下,秒杀数据还要数据库“增删改查”,不死才怪呢。
又见SB,废话半天听不懂,你到底有没有设计秒杀服务的经验? @楼主,秒杀没有你想象的那么复杂 秒杀的请求大部分都是无效的请求,譬如说10W的请求秒10个,其实99%的请求都是无效,只要把这写无效流量拦掉就OK了 1、秒杀服务与正常的服务进行隔离,最好部署单独的服务器 2、流控还是流控,99%的无效请求都拒接掉,剩下100个请求难道还处理不了?什么队列这些几乎用不上 3、并发采用乐观锁方式[/quote] 精辟
菜鸟呜哈哈 2018-01-25
  • 打赏
  • 举报
回复
学习了,并发一直是个大问题
lihaha_930418 2017-07-12
  • 打赏
  • 举报
回复
各个都是大神,我只想知道是靠吹的还是靠做的
Self_Impro_Xiang 2017-03-03
  • 打赏
  • 举报
回复
顶一个,
丰锅神操作 2016-11-09
  • 打赏
  • 举报
回复
自己结贴自己,哈哈
pympymingv5 2016-08-30
  • 打赏
  • 举报
回复
个人觉得没有大家想的那么复杂 上代码: public class SecKillGood { // 商品数量 private int num = 10; // 秒杀入口 public boolean secKill() { if (num <= 0) { return false; } synchronized (this) { if (num > 0) { num--; return true; } return false; } } } 秒杀成功的用户支付逻辑异步处理。 支持sp1234。
qq_33995631 2016-02-17
  • 打赏
  • 举报
回复
学习一下学习一下
changjiangzhibin 2016-02-17
  • 打赏
  • 举报
回复
服务器,分流,容错,缓存,更新
haojuntu 2016-02-17
  • 打赏
  • 举报
回复
引用 16 楼 sp1234 的回复:
以前国营单位的那些程序员的编程习惯,之所以把秒杀搞垮,首要问题是因为经验和估计不足(任何人都会犯这种错误),其次在技术上是就在类似所谓的 asp.net 或者 jsp 网站软件里边同时处理业务,同时又要负载均衡,同时又共享访问什么 Oracle 数据库,然后把所有的动态业务数据都放到数据库里“增删改查”。你可以想象一下,秒杀数据还要数据库“增删改查”,不死才怪呢。
感谢大神分享,总是那么积极
程序员-阿勇 2016-02-17
  • 打赏
  • 举报
回复
引用 17 楼 jxh234429300 的回复:
首先这个问题的重点不在于你一定要万无一失的取到前10个人,而是要保证大并发量的程序的性能; 所以至于怎么取到这10个人可以用全局缓存redis或者你是单台服务器自定义全局变量都可以做标记,总之99%的人直接从缓存变量就跳出逻辑来提升性能
对的,肯定不可能所有人都去对比的,放队列中,超过的,直接跳过逻辑判断,这种思路肯定没错
程序员-阿勇 2016-02-17
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
并没有许多人说的那么复杂。许多人说的复杂,你会发现,就是因为他心目中只有一个服务器(不论什么web网页前后台操作都堆在一起,而且甚至是 php 那种单线程的思路),或者他就是一个多个机器共享独立数据库的思路。因此才会产生复杂的想法。 你有一个数组(商品单品编码),现在就是要从数组上挨个删除排在一端商品,仅此一个纯粹内存操作用一台服务器来单独处理,每秒钟至少可以处理50万笔。用不着考虑它的程序中用什么“缓存”,因为它就是一个内存数组的简单操作而已。它耗时的操作顶多是需要异步地把日志(时间+客户id+商品单品id)保存一下。 对于网页接入所用的web服务器,比如说有5台,任何一台访问这个秒杀服务器,获得一个分配结果,然后就可以自己去“慢慢地”继续处理网页,而并不阻塞秒杀速度。假设网页处理失败了,秒杀服务器还有日志可以用来找出失败的网页对应的商品。 因此,用不着提前给后边的人假消息,实际上不管有多少并发量,即使秒杀上万商品而并发量超过商品数量,立刻(1秒钟内)就秒杀完了,后边的人立刻就得到“秒杀结束”的结果了,用得着考虑什么因为秒杀延迟而作假策略么?
和我的回答差不多,我的回答是所有抢商品的人丢到一个队列,先进先出的原理,不过你这个思路感觉更好,将商品放队列中,没有了就没了,比我之前的思路更好,学习了
程序员-阿勇 2016-02-17
  • 打赏
  • 举报
回复
引用 19 楼 jaylongli 的回复:
楼主工作多久了 问这个问题
3年,自己对这方面比较有兴趣,面上了22K
JAVA ?? 2016-02-16
  • 打赏
  • 举报
回复
我是来看评论学习的,你们不用理我
游北亮 2016-02-15
  • 打赏
  • 举报
回复
引用 49 楼 qq_24396633 的回复:
秒杀的请求大部分都是无效的请求,譬如说10W的请求秒10个,其实99%的请求都是无效,只要把这写无效流量拦掉就OK了 1、秒杀服务与正常的服务进行隔离,最好部署单独的服务器 2、流控还是流控,99%的无效请求都拒接掉,剩下100个请求难道还处理不了?什么队列这些几乎用不上 3、并发采用乐观锁方式
百分之1的有效请求怎么实现?[/quote] 最简单就是缓存+1,结果大于10就直接返回,小于10就进行下一步逻辑。 也可以用redis的incr方法实现
qq_24396633 2016-02-15
  • 打赏
  • 举报
回复
秒杀的请求大部分都是无效的请求,譬如说10W的请求秒10个,其实99%的请求都是无效,只要把这写无效流量拦掉就OK了 1、秒杀服务与正常的服务进行隔离,最好部署单独的服务器 2、流控还是流控,99%的无效请求都拒接掉,剩下100个请求难道还处理不了?什么队列这些几乎用不上 3、并发采用乐观锁方式[/quote] 百分之1的有效请求怎么实现?
a365951868 2016-02-15
  • 打赏
  • 举报
回复
0或者添加进去的时候按照时间排序,取前十,问题是,我想象的这个池子,能用什么保存?session?还是什么? 或者说 你有没有更好的方案
BitCoffee 2016-02-14
  • 打赏
  • 举报
回复
有些客户的秒杀需求,就一个弹出框,"对不起,..."
编程有钱人了 2016-02-02
  • 打赏
  • 举报
回复
mark
足球中国 2016-01-30
  • 打赏
  • 举报
回复
12306,淘宝这样的,别考虑.net了。不开源的IIS就只是小孩玩玩。
  • 打赏
  • 举报
回复
顶一下,学习一下
加载更多回复(34)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧