[quote=引用 16 楼 sp1234 的回复:] 以前国营单位的那些程序员的编程习惯,之所以把秒杀搞垮,首要问题是因为经验和估计不足(任何人都会犯这种错误),其次在技术上是就在类似所谓的 asp.net 或者 jsp 网站软件里边同时处理业务,同时又要负载均衡,同时又共享访问什么 Oracle 数据库,然后把所有的动态业务数据都放到数据库里“增删改查”。你可以想象一下,秒杀数据还要数据库“增删改查”,不死才怪呢。
以前国营单位的那些程序员的编程习惯,之所以把秒杀搞垮,首要问题是因为经验和估计不足(任何人都会犯这种错误),其次在技术上是就在类似所谓的 asp.net 或者 jsp 网站软件里边同时处理业务,同时又要负载均衡,同时又共享访问什么 Oracle 数据库,然后把所有的动态业务数据都放到数据库里“增删改查”。你可以想象一下,秒杀数据还要数据库“增删改查”,不死才怪呢。
首先这个问题的重点不在于你一定要万无一失的取到前10个人,而是要保证大并发量的程序的性能; 所以至于怎么取到这10个人可以用全局缓存redis或者你是单台服务器自定义全局变量都可以做标记,总之99%的人直接从缓存变量就跳出逻辑来提升性能
并没有许多人说的那么复杂。许多人说的复杂,你会发现,就是因为他心目中只有一个服务器(不论什么web网页前后台操作都堆在一起,而且甚至是 php 那种单线程的思路),或者他就是一个多个机器共享独立数据库的思路。因此才会产生复杂的想法。 你有一个数组(商品单品编码),现在就是要从数组上挨个删除排在一端商品,仅此一个纯粹内存操作用一台服务器来单独处理,每秒钟至少可以处理50万笔。用不着考虑它的程序中用什么“缓存”,因为它就是一个内存数组的简单操作而已。它耗时的操作顶多是需要异步地把日志(时间+客户id+商品单品id)保存一下。 对于网页接入所用的web服务器,比如说有5台,任何一台访问这个秒杀服务器,获得一个分配结果,然后就可以自己去“慢慢地”继续处理网页,而并不阻塞秒杀速度。假设网页处理失败了,秒杀服务器还有日志可以用来找出失败的网页对应的商品。 因此,用不着提前给后边的人假消息,实际上不管有多少并发量,即使秒杀上万商品而并发量超过商品数量,立刻(1秒钟内)就秒杀完了,后边的人立刻就得到“秒杀结束”的结果了,用得着考虑什么因为秒杀延迟而作假策略么?
楼主工作多久了 问这个问题
秒杀的请求大部分都是无效的请求,譬如说10W的请求秒10个,其实99%的请求都是无效,只要把这写无效流量拦掉就OK了 1、秒杀服务与正常的服务进行隔离,最好部署单独的服务器 2、流控还是流控,99%的无效请求都拒接掉,剩下100个请求难道还处理不了?什么队列这些几乎用不上 3、并发采用乐观锁方式
62,243
社区成员
668,998
社区内容
加载中
.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。
希望和大家一起共同营造一个活跃、友好的社区氛围。
试试用AI创作助手写篇文章吧