秒杀系统的架构设计

上传人:公**** 文档编号:564587578 上传时间:2023-03-29 格式:DOCX 页数:4 大小:11.37KB
返回 下载 相关 举报
秒杀系统的架构设计_第1页
第1页 / 共4页
秒杀系统的架构设计_第2页
第2页 / 共4页
秒杀系统的架构设计_第3页
第3页 / 共4页
秒杀系统的架构设计_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《秒杀系统的架构设计》由会员分享,可在线阅读,更多相关《秒杀系统的架构设计(4页珍藏版)》请在金锄头文库上搜索。

1、秒杀系统的架构设计秒杀系统,是典型的短时大量突发访问类问题。对这类问题,有 三种优化性能的思路:1 写入内存而不是写入硬盘2 异步处理而不是同步处理3 分布式处理写入内存而不是写入硬盘传统硬盘的读写性能是相当差的。SSD硬盘比传统硬盘快100倍。 而内存又比SSD硬盘快10倍以上。因此,写入内存而不是写入硬盘, 就能使系统的能力提升上千倍。也就是说,原来你的秒杀系统可能需 要1000台服务器支撑,现在1 台服务器就可以扛住了。你可能会有这样的疑问:写入内存而不是持久化,那么如果此时 计算机宕机了,那么写入的数据不就全部丢失了吗?如果你就这么倒 霉碰到服务器宕机,那你就没秒到了,有什么大不了?最

2、后,后面真正处理秒杀订单时,我们会把信息持久化到硬盘中。 因此不会丢失关键数据。Redis是一个缓存系统,数据写入内存后就返回给客户端了,能够 支持这个特性。异步处理而不是同步处理像秒杀这样短时大并发的系统,在性能负载上有一个明显的波峰 和长期的波谷。为了应对相当短时间的大并发而准备大量服务器来应 对,在经济上是相当不合算的。因此,对付秒杀类需求,就应该化同步为异步。用户请求写入内 存后立刻返回。后台启动多个线程从内存池中异步读取数据,进行处 理。如用户请求可能是 1 秒钟内进入的,系统实际处理完成可能花 30 分钟。那么一台服务器在异步情况下其处理能力大于同步情况下 1800 多倍!异步处理

3、,通常用MQ(消息队列)来实现。Redis可以看作是一个 高性能的MQ。因为它的数据读写都发生在内存中。分布式处理好吧。也许你的客户很多,秒杀系统即使用了上面两招,还是捉 襟见肘。没关系,我们还有大招:分布式处理。如果一台服务器撑不 住秒杀系统,那么就多用几台服务器。 10台不行,就上100台。分布 式处理,就是把海量用户的请求分散到多个服务器上。一般使用 hash 实现均匀分布。这类系统在大数据云计算时代的今天已经有很多了。无非是用Paxos算法和Hash Ring实现的。Redis Cluster正是这样一个分布式的产品。使用Redis实现描述系统Redis和Redis Cluster(分

4、布式版本),是一个分布式缓存系统。 其支持多种数据结构,也支持MQ。Redis在性能上做了大量优化。因 此使用 Redis 或者 Redis Cluster 就可以轻松实现一个强大的秒杀系 统。基本上,你用Redis的这些命令就可以了。RPUSH key value插入秒杀请求当插入的秒杀请求数达到上限时,停止所有后续插入。后台启动多个工作线程,使用LPOP key读取秒杀成功者的用户id,进行后续处理。或者使用LRANGE key start end命令读取秒杀成功者的用户id, 进行后续处理。每完成一条秒杀记录的处理,就执行INCR key_num。一旦所有 库存处理完毕,就结束该商品的本

5、次秒杀,关闭工作线程,也不再接 收秒杀请求。要是还撑不住,该怎么办也许你会说,我们的客户很多。即使部署了 Redis Cluster,仍然 撑不住。那该怎么办呢?记得某个伟人曾经说过:办法总比困难多!下面,我们具体分析下,还有哪些情况会压垮我们架构在 Redis (Cluster)上的秒杀系统。脚本攻击如现在有很多抢火车票的软件。它们会自动发起http请求。一个 客户端一秒会发起很多次请求。如果有很多用户使用了这样的软件, 就可能会直接把我们的交换机给压垮了。这个问题其实属于网络问题的范畴,和我们的秒杀系统不在一个 层面上。因此不应该由我们来解决。很多交换机都有防止一个源IP发 起过多请求的功

6、能。开源软件也有不少能实现这点。如 linux 上的 TC 可以控制。流行的Web服务器Nginx (它也可以看做是一个七层软交 换机)也可以通过配置做到这一点。一个IP,一秒钟我就允许你访问 我 2 次,其他软件包直接给你丢了,你还能压垮我吗?交换机撑不住了可能你们的客户并发访问量实在太大了,交换机都撑不住了。 这也有办法。我们可以用多个交换机为我们的秒杀系统服务。原理就是DNS可以对一个域名返回多个IP,并且对不同的源IP , 同一个域名返回不同的IP。如网通用户访问,就返回一个网通机房的 IP ;电信用户访问,就返回一个电信机房的IP。也就是用CDN 了!我们可以部署多台交换机为不同的用户服务。 用户通过这些交换 机访问后面数据中心的Redis Cluster进行秒杀作业。总结有了 Redis Cluste啲帮助,做个支持海量用户的秒杀系统其实So Easy!这里介绍的方案虽然是针对秒杀系统的,但其背后的原理对其他 高并发系统一样有效。最后,我们再重温一下高性能系统的优化原则: 写入内存而不是写入硬盘异步处理而不是同步处理分布式处理

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号