13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

秒杀架构设计的七个必杀技

今天我从 7 个不同的维度,讲讲秒杀系统的架构设计,主要知识点如下:

1. 秒杀业务的特点

2. 总体思路

2.1 削峰限流

安全保护

页面优化,动静分离

异步处理

热点分离

尽量的避免秒杀功能给正常功能带来的影响,比如秒杀把服务器某个功能拖垮了。

分离可以提升系统的容灾性,但是完全的隔离的改造成本太高了,尽量借助中间件的配置,来实现冷热分离。

2.2 Nginx的设计细节

server {
listen 8088;
location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {
root C:/Users/502764158/Desktop/test;
}

location ~ \.(jsp|do)$ {
proxy_pass http://localhost:8082;
}
}
}
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 3;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png;

配置集群负载和容灾,设置失效重连的时间,失效后,定期不会再重试挂掉的节点,参数:

upstream  netitcast.com {  #服务器集群名字   
server 127.0.0.1:8080;
server 127.0.0.1:38083;
server 127.0.0.1:8083;
}

server {
listen 88;
server_name localhost;
location / {
proxy_pass http://netitcast.com;
proxy_connect_timeout 1;
fail_timeout 5;
}
}
  1. 集成Varnish做静态资源的缓存
  2. 集成tengine做过载的保护

2.3 页面优化细节

降低交互的压力

安全控制

2.4 Redis集群的应用

  1. 分布式锁(悲观锁)
  2. 缓存热点数据(库存):如果QPS太高的话,另一种方案是通过localcache,分布式状态一致性通过数据库来控制

分布式悲观锁(参考redis悲观锁的代码)

异步处理订单

2.5 消息队列限流

消息队列削峰限流(RocketMQ自带的Consumer自带线程池和限流措施),集群。一般都是微服务,订单中心、库存中心、积分中心、用户的商品中心

2.6 数据库设计

要执行的操作:扣减库存、生成新订单、生成待支付订单、扣减优惠券、积分变动

库存表是数据库并发的瓶颈所在,需要在事务控制上做权衡:可以把扣减库存设置成一个独立的事务,其它操作成一个大的事务(订单、优惠券、积分操作),提高并发度,但是要做好额外的check

update 库存表 set 库存=库存-1 where id=** and 库存>1

2.7 答题验证码的设计

验证码的设计可以分为2种:

答题的验证:除了验证答案的正确性意外,还要统计反应时间,例如12306的难题,正常人类的答题速度最快是1.5s,那么,小于1s的验证可以判定为机器验证

3. 注意事项

为了提升并发,需要在事务上做妥协:


网站题目:秒杀架构设计的七个必杀技
分享链接:http://cdbrznjsb.com/article/dhcosph.html

其他资讯

让你的专属顾问为你服务