做外贸找工厂货源网站,广告设计与制作免费,南京市高淳区城乡建设局网站,外贸营销模式秒杀业务的核心是库存处理#xff0c;用户购买成功后会进行减库存操作#xff0c;并记录购买明细。当秒杀开始时#xff0c;大量用户同时发起请求#xff0c;这是一个并行操作#xff0c;多条更新库存数量的SQL语句会同时竞争秒杀商品所处数据库表里的那行数据#xff0c… 秒杀业务的核心是库存处理用户购买成功后会进行减库存操作并记录购买明细。当秒杀开始时大量用户同时发起请求这是一个并行操作多条更新库存数量的SQL语句会同时竞争秒杀商品所处数据库表里的那行数据导致库存的减少数量与购买明细的增加数量不一致因此我们使用RabbitMQ进行削峰限流并且将请求数据串行处理。 秒杀系统场景特点
秒杀时大量用户会在同一时间同时进行抢购网站瞬时访问流量激增。秒杀一般是访问请求数量远远大于库存数量只有少部分用户能够秒杀成功。秒杀业务流程比较简单一般就是下订单减库存。
秒杀架构设计理念
限流 鉴于只有少部分用户能够秒杀成功所以要限制大部分流量只允许少部分流量进入服务后端。
削峰对于秒杀系统瞬时会有大量用户涌入所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。
异步处理秒杀系统是一个高并发系统采用异步处理模式可以极大地提高系统并发量其实异步处理就是削峰的一种实现方式。
内存缓存秒杀系统最大的瓶颈一般都是数据库读写由于数据库读写属于磁盘IO性能很低如果能够把部分数据或业务逻辑转移到内存缓存效率会有极大地提升。
可拓展当然如果我们想支持更多用户更大的并发最好就将系统设计成弹性可拓展的如果流量来了拓展机器就好了。像淘宝、京东等双十一活动时会增加大量机器应对交易高峰。 解耦串行任务的并行化 异步批量数据的异步处理 削峰高负载任务的负载均衡 设计思路 将请求拦截在系统上游降低下游压力秒杀系统特点是并发量极大但实际秒杀成功的请求数量却很少所以如果不在前端拦截很可能造成数据库读写锁冲突甚至导致死锁最终请求超时。 充分利用缓存利用缓存可极大提高系统读写速度。 消息队列消息队列可以削峰将拦截大量并发请求这也是一个异步处理过程后台业务根据自己的处理能力从消息队列中主动的拉取请求消息进行业务处理。 前端方案
浏览器端(js)
页面静态化将活动页面上的所有可以静态的元素全部静态化并尽量减少动态元素。通过CDN来抗峰值。 禁止重复提交用户提交之后按钮置灰禁止重复提交 用户限流在某一时间段内只允许用户提交一次请求比如可以采取IP限流 后端方案 服务端控制器层(网关层) 限制uidUserID访问频率我们上面拦截了浏览器访问的请求但针对某些恶意攻击或其它插件在服务端控制层需要针对同一个访问uid限制访问频率。
服务层 上面只拦截了一部分访问请求当秒杀的用户量很大时即使每个用户只有一个请求到服务层的请求数量还是很大。比如我们有100W用户同时抢100台手机服务层并发请求压力至少为100W。
采用消息队列缓存请求既然服务层知道库存只有100台手机那完全没有必要把100W个请求都传递到数据库啊那么可以先把这些请求都写到消息队列缓存一下数据库层订阅消息减库存减库存成功的请求返回秒杀成功失败的返回秒杀结束。
利用缓存应对读请求对类似于12306等购票业务是典型的读多写少业务大部分请求是查询请求所以可以利用缓存分担数据库压力。
利用缓存应对写请求缓存也是可以应对写请求的比如我们就可以把数据库中的库存数据转移到Redis缓存中所有减库存操作都在Redis中进行然后再通过后台进程把Redis中的用户秒杀请求同步到数据库中。 数据库层
数据库层是最脆弱的一层一般在应用设计时在上游就需要把请求拦截掉数据库层只承担“能力范围内”的访问请求。所以上面通过在服务层引入队列和缓存让最底层的数据库高枕无忧。 案例利用消息中间件和缓存实现简单的秒杀系统 Redis是一个分布式缓存系统支持多种数据结构我们可以利用Redis轻松实现一个强大的秒杀系统。
我们可以采用Redis 最简单的key-value数据结构用一个原子类型的变量值(AtomicInteger)作为key把用户id作为value库存数量便是原子变量的最大值。对于每个用户的秒杀我们使用 RPUSH key value插入秒杀请求 当插入的秒杀请求数达到上限时停止所有后续插入。
然后我们可以在台启动多个工作线程使用 LPOP key 读取秒杀成功者的用户id然后再操作数据库做最终的下订单减库存操作。
当然上面Redis也可以替换成消息中间件如ActiveMQ、RabbitMQ等也可以将缓存和消息中间件 组合起来缓存系统负责接收记录用户请求消息中间件负责将缓存中的请求同步到数据库。 参考https://blog.csdn.net/suifeng3051/article/details/52607544