限量秒杀等高并发活动的正确性如何保证?

问题描述

近几年,各大电商甚至各个运营商,都经常搞一些秒杀活动、抢红包等。比如某月的11号10点,某品牌手机“1元秒杀”,限量100部。此时,必然在10点前后,网站的并发量会相当大。为了应对网站的高并发,我们可以使用应用服务器集群,负载均衡器会将请求分发到各个应用服务器,这样各个应用服务器的流量就会小很多。但由于集群时同一个应用部署在多个应用服务器上,此时,对于这个100部的限量,该如何保证不会卖多呢?单节点的时候,我们可以在应用内部使用锁和计数器来保证,可以使用类似于JDK内部的CountDownLatch这些并发组件,我们可以在应用内部使用锁和计数器来保证,但在集群环境下,这个应用内的计数器就没有意义了。应用被分发到各个服务器,此时为了保证这个数据的正常,一般常用的手段有哪些呢?比如我们可以让所有的Server访问同一个数据库,这样来限制,但此时数据库就会成为瓶颈。为了解决瓶颈问题而采用数据库集群的话,各个数据库之间如何保证数据的同步的呢?另外,如果使用Redis等分布式缓存,这样的话,为了解决单点问题也必然会有多个分布式缓存存在。此时多个缓存节点间的数据如何保证?没有从事过互联网应用的开发,不知道这类需求该怎么实现,请论坛内有相关经验的朋友指点。谢谢。 问题补充:@kidding87 和@greemranqq 回答的都很赞。由于我个人没有这方面的经验,有些你们提到的解决方案,像请求缓存,请求排队之类的,还是有些茫然。当然,这是和个人经验有关系。如果在指出实现方案上能再具体一点就更好了。

解决方案

1.秒杀活动,一般做得简单点,大家访问的都是同样的界面,页面全部进行缓存,秒杀按钮一般等到时间到了,才点亮,才生成URL,防止提前通过URL 访问。2.秒杀一般请求数特别多,在秒杀开始之前,URL 不开放,页面有缓存,无论用户怎么刷新,也不会给服务器造成压力。3.秒杀一旦开始,会有很多请求出现,但是一般我们只允许比如前100个有效请求,这个100个请求进行订单处理,其他请求都进入缓存好的,秒杀结束页面。4.实际上我们仅仅对有效请求进行处理,这里的处理办法可以对请求加入队列,当数目达到100,就不在添加,然后可以依次从队列里面提取信息,处理我们需要的结果,不会出现超标的情况。5.对于数据库的设计,一般情况下,如果量比较少,可以用专门的服务器来处理有效订单,其实请求就不会太多,压力不会太大了。6.在你分布式集群里面,假设你有N台服务器,那么你可以规定每台服务器仅仅处理100/N g个订单,同时你也可以做一个全局计数器,利用分布式缓存框架。7.因此你说的数据库压力,以及分布式数据同步的问题,可以得到很好的解决。关于分布式集群之间的通讯这些,可以靠消息中间件,或者延缓等等各种手段处理。 8.上面仅仅是个人想法, 提供一些参考,有问题请指出~。~
解决方案二:
不错。。。学习了。
解决方案三:
Memcachedredis在分步式计数效果很不错我们在秒杀之类的,基本都不让请求怎么过数据库1、设置请求本地缓存2、使用squid之类的请求缓存3、web的服务器做本地缓存+分布式的缓存4、MQ异步处理数据持久化

时间: 2024-08-31 05:35:47

限量秒杀等高并发活动的正确性如何保证?的相关文章

⑤云上场景:珠江人寿,2分钟秒杀3.8亿理财背后的高并发架构

支付宝"元宵理财"产品秒杀活动中,珠江人寿销售峰值为每秒承保600笔,创造了2分钟秒杀3.8亿的保险理财销售奇迹.而其直接竞争对手因为系统访问压力过大而采取了人为限流措施,用时2多小时才完成了2亿产品的销售. 保险公司最为重要的就是快速和低成本的电商IT平台.珠江人寿之所以在处理用户访问优势巨大,其技术支撑系统功不可没.其采用阿里云云计算做技术保障,可支持超大并发访问量,并可根据业务需要快速弹性扩容或者减少资源量. 珠江人寿部署架构图   珠江人寿的保险理财开始互联网化之后,面临最大的

HTAP数据库 PostgreSQL 场景与性能测试之 30 - (OLTP) 秒杀 - 高并发单点更新

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

对于一个偶尔高并发的活动页面(涉及db操作,db为mysql,集群部署),你怎么做

问题描述 对于一个偶尔高并发的活动页面(涉及db操作,db为mysql,集群部署),你怎么做 对于一个偶尔高并发的活动页面(涉及db操作,db为mysql,集群部署),你怎么做 解决方案 高并发的话,可以通过据库集群.库表散列.缓存等技术: 偶尔的话,建议选择mongoDB非关系数据库.你是开发的话我想应该懂mongoDB吧. 对了景安新推出快云mongoDB,你可以去免费公测试试. 解决方案二: 高并发,一般使用负载均衡解决前端访问问题,用进程管理器解决业务逻辑调度问题,db如果是你的业务瓶颈

互联网高并发秒杀系统核心技术架构解析

互联网高并发秒杀系统核心技术架构解析http://www.365yg.com/item/6430569659715551746/

基于Spring+SpringMVC+MyBatis实现高并发秒杀APIM

基于Spring+SpringMVC+MyBatis实现高并发秒杀API 项目地址:https://github.com/DaleyChao/SecondKill 项目下载链接:https://github.com/DaleyChao/SecondKill/archive/master.zip 一.项目概述 一.为什么使用SSM框架 1.互联网公司常用框架 2.框架易于使用和轻量级 3.低代码倾入性 4.成熟的社区和用户群 二.相关技术 MySQL:1.表设计2.SQL技巧3.事务和行级锁 My

【转】聊聊高并发系统之降级特技

在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.之前已经有一些文章介绍过缓存和限流了.本文将详细聊聊降级.当访问量剧增.服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务.系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级.本文将介绍一些笔者在实际工作中遇到的或见到过的一些降级方案供大家参考.   降级的最终目的是保证核心服务可用,即使是有损的.而且有些服务是无法降级的(如加入购物车.结算).   降级预案

电商那些年,我摸爬打滚出的高并发架构实战精髓

一.关于高并发   高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11.双12,就会产生高并发.又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击,再屌丝点的说法就像玩LOL被ADC暴击了一样,那伤害你懂的.   1 高并发会来带的后果  服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一样的,比如:出现重复的数据记录,多次添加了用户积分等. 用户角度:尼玛,这么卡,老子来参加活动的,刷新了还是这样,垃圾网站,再也不来了! 我的

缓存+HASH=高并发?你把高并发架构想得太简单!

[51CTO.com原创稿件]在互联网时代,高并发与高可用一样,已经变成系统的标配了,如果系统每秒查询率(QPS)没有上万,都不好意思跟人打招呼(虽然实际每天调用量不超过100).尤其在双十一期间,电商们凭借着藐视全球的流量,热心地分享自己的技术架构,几乎千篇一律地用缓存+哈希(HASH),仿佛这就是高并发的核心技术了.当然,如果你信了,那就离坑不远了. 缓存+哈希=高并发? 所谓知己知彼百战不殆,先来看看我们经常看到的高并发技术是什么. 资源静态化  活动秒杀页面是标准的高并发场景,活动期间单

如何解决高并发的抢购问题

问题描述 如何解决高并发的抢购问题 前几天去南京付融宝面试,提了这样一个问题:在某天的上午10点有这样一个抢购活动,抢购的商品数量1000,初步估计那个时间点抢购的人数在100万左右,如何处理这样的一个问题. 解决方案 首先,你要有足够的服务器,保持前端页面能够正常调用.你可以用内容分发网络(cdn)使得前端应用层可以工作.然后,你可以产生一个随机数,以大约0.01的概率从前端服务器将订购请求发送到你的业务层,其余直接返回售罄.此时你的业务层已经只有1万的并发了,用事务队列保证抢购和存货的匹配.