2018年,“双11”达到顶峰,现象级的商业再次创造了新的奇迹。 11月12日零点,“双11”杀青。 显示淘宝“双11”成交额的大屏最终定格在2135万元,相比今年的1682亿元下降了近27%。
这次被阿里视为商业奥运会的“双11”淘宝秒杀软件原理,每一个数字节点都见证了这场商业峰会。 11月11日晚开始,100万元、362万元、571万元、912万元、1000万元、1111万元、1207万元、1500万元、1682万元、2000万元直至2135万元元11交易量节点将2018年“双11”连成一条线。
“因为相信,所以看到”的口号在直播中随处可见,如今已成为“双11”交易量的旁证语言。 正如阿里巴巴首席执行官张勇所说,电子商务将改变整个商业,商业将被重新定义,消费者的生活将被重新定义。
与此同时,“双11”带动了物流行业发生翻天覆地的变化,单日10亿件快递量在“双11”第六个年头已成为现实。 11月11日23小时18分09秒,淘宝2018年“双11”物流订单突破10亿。 一日十亿包裹,成为淘宝六年来“双11”最具代表性的里程碑之一。
实时滚动数据的大屏幕背后,不再是纯粹的电商商业竞争。 “双11”以电商为核心,席卷科技、制造、零售、金融、物流等领域。 此前只是线上狂欢的“双11”,如今已深入线下,延伸至供给侧,动员数千万品牌商、超市、百货、购物中心、物流、金融企业共同合作。
2018年淘宝双十一全球狂欢节,根据现场实时数据显示,双十一2分05秒突破100亿,26分03秒突破500亿,1小时47秒突破1000亿。分 26 秒。
公开数据显示,2017年双十一购物狂欢节,前28秒成交额突破10亿,3分01秒成交额突破100亿,9小时04秒成交额突破1000亿。 交易峰值32.5万笔/秒,支付峰值25.6万笔/秒,刷新全球纪录。 同时,还有每秒4200万次操作的数据库处理峰值。
几乎没有悬念。 去年的淘宝双十一今年将创下1682亿的新销售记录,科技的各项峰值数据将再次打破全球记录。
但在这样的业务场景下,背后有什么样的技术来支撑如此巨大的秒杀场景呢?
双十一刚过不久,一些童鞋的快件可能还没有收到。 明天我们上去讲解一下秒杀背后的技术实现。
秒杀系统架构设计
秒杀系统是典型的短期大规模突发访问问题。 针对此类问题,可以通过三种方式来优化性能:
利用这三个技巧,无论秒杀时的负载有多大淘宝秒杀软件原理,你都可以轻松应对。 更好的是,Redis 可以满足以上三点。 因此,秒杀系统可以通过Redis轻松实现。
按照我的计划,无论是电商平台特卖还是12306高铁售票都没关系。
下面我来介绍一下为什么上述三种性能优化思路能够解决秒杀系统的性能问题:
写入视频内存而不是硬盘
传统硬盘的读写性能相当差。 SSD硬盘比传统硬盘快100倍。 显存比SSD硬盘快10倍以上。 因此,写入显存而不是写入硬盘可以使系统的容量增加千倍。 也就是说,你的秒杀系统可能需要1000台服务器来支撑,但现在1台服务器就能搞定。
你可能会有这样的疑问:写入显存而不是持久化,那么如果这时候电脑死机了,写入的数据不就全部丢失了吗? 如果你这么倒霉,遇到服务器宕机,那么转眼间就到了,有什么大不了的?
最后,当我们真正处理闪购订单时,我们会将信息持久化到硬盘上。 因此,不会丢失任何关键数据。
Redis 是一个缓存系统。 数据写入显存后,返回给客户端。 也可以支持这个功能。
异步处理代替同步处理
像 Spike 这样的短期高并发系统,性能负载会出现显着的峰值和常年的低谷。 为了在较短的时间内处理大并发,规划大量的服务器来处理在经济上是相当不经济的。
为此,对于秒杀类的需求,应该把同步变成异步。 用户请求写入显存后立即返回。 后台启动多个线程,异步从内存池读取数据进行处理。 如果用户请求在一秒内输入,系统可能需要30分钟才能完成实际处理。 这样的服务器在异步条件下的处理能力比同步条件下小1800倍以上!
异步处理一般采用MQ(消息队列)来实现。 Redis可以看作是一个高性能的MQ。 因为它的数据读写全部发生在显存中。
分布式处理
好的。 事实上,你的客户很多,即使秒杀系统使用前两招,仍然捉襟见肘。 没关系,我们还有一个大招:分布式处理。 如果一台服务器无法支持秒杀系统,那就多使用几台服务器。 如果 10 个单位不够,我们将使用 100 个单位。 分布式处理就是将大量用户的请求分发到多台服务器上。 通常使用哈希来实现均匀分布。
这种系统在大数据云计算时代的今天要好得多。 无非就是用Paxos算法和HashRing来实现的。
RedisCluster就是这样一个分布式产品。
使用Redis实现描述系统
Redis和RedisCluster(分布式版本),是一个分布式缓存系统。 它支持多种数据结构,还支持MQ。 Redis在性能方面做了很多优化。 因此,使用Redis或者RedisCluster可以轻松实现强大的秒杀系统。
基本上,你可以使用Redis的那些命令。
RPUSH键值
插入秒杀请求
当插入的秒杀请求数量达到上限时,停止所有后续的插入。
在后台启动多个工作线程,使用
LPOP密钥
读取秒杀获胜者的用户id,用于后续处理。
或者使用LRANGEkeystartend命令读取成功flashkiller的用户id进行后续处理。
每次处理秒杀记录时都会执行INCRkey_num。 一旦处理完所有库存,该产品的闪购就会结束,工作线程将被关闭,并且不再接受闪购请求。
如果我还是坚持不住怎么办?
事实上,你会说我们有很多客户。 虽然部署了RedisCluster,但是已经坚持不住了。 那么我们应该做什么呢?
记得一位伟人曾经说过:解决办法总是比困难多!
接下来我们详细分析一下还有哪些因素会拖累我们基于Redis(集群)搭建的秒杀系统。
脚本攻击
比如现在抢高铁票的软件有很多。 他们手动发起http请求。 一个客户端会在1秒内发起多个请求。 如果很多用户使用这样的软件,可能会直接把我们的交换机压死。
这个问题显然属于网络问题的范畴,和我们的秒杀系统不是一个级别的。 所以这不应该由我们来解决。 很多交换机都有防止某个源IP发出过多请求的功能。 还有很多开源软件可以实现这一点。 比如linux上的TC就可以控制。 流行的 Web 服务器 Nginx(也可以视为第 7 层软交换机)也可以配置为执行此操作。 一个IP,我就让你一秒访问我两次,你就直接丢掉其他软件包了。 你能拖我下来吗?
开关已经受不了了
可能我们的客户并发访问太多,交换机支持不了。
有一种方法。 我们可以使用多个开关来服务我们的秒杀系统。
原理是DNS可以为一个域名返回多个IP,对于不同的源IP,同一个域名返回不同的IP。 如果网通用户访问,会返回电信机房的IP; 如果联通用户访问,会返回一个联通机房的IP。 那就是使用CDN!
我们可以部署多台交换机来服务不同的用户。 用户通过该交换机访问原数据中心的RedisCluster,进行秒杀作业。
概括
借助RedisCluster,SoEasy成为一个支持大量用户的秒杀系统!
阿里背后真正支持双十一的技术一览:
1. 云估算
借助云计算弹性,支持混合云弹性架构,交易峰值每秒32.5万笔,支付峰值每秒25.6万笔。
2.分布式消息引擎
双十二当天实现万亿级新闻发行量。
3.Docker技术
交易核心应用容器化支撑双十一交易峰值,以及解放资源的超大规模Docker化技术。
4、线上交易数据的实时和离线预估能力
支持全球最大线上交易的实时和离线数据估算能力,包括承载阿里巴巴集团核心大数据的离线估算平台,以及每秒处理数十亿条日志的双十二保证。
5、阿里人工智能
搜索、推荐、客服场景的创新应用,包括人工智能对数千家品牌门店的个性化运营和粉丝精准营销。
6、VR技术
虚拟购物环境背后的VR技术。
7. 后端技术
天猫首屏直播秒级上线,应对后端极限挑战,并采用世界级开源跨平台联通开发工具Weex,实现双十一会场几乎全覆盖,实现第一-全网画面渲染,完美提升“秒开”体验。
8. 监控技术
千万级监控项、PB级监控数据、亿级上报通知背后的技术。
9. 货运技术
新手利用包裹预测、供应链仓储、订单下沉、订单路由和调度、电子化面对面和智能订单分配以及终端庞大人员,打响涉及数十亿包裹的双十一之战。
事实上,双十一将涉及:基础设施、存储、中间件、云计算、业务架构、大数据、认知计算和人工智能、交互技术等技术领域。
由于篇幅有限,我无法完全展开。 我就以大家最关心的双11闪购场景为例来贯穿一下这部分技术的应用和设计思路。