你们好,我是崔皓。 很高兴有这样一个机会和你们认识。我在IT行业从事软件开发工做十余年了,足迹涵盖企业服务,互联网,企业数字化转型等。工做之余热爱阅读和学习,但愿能经过这个专栏和你们成为朋友。
本次专栏要给你们分享的是“如何设计秒杀系统”,专栏共包括15章,本章是第一章。
今天会给你们介绍如下内容:前端
秒杀一般是电商网站按期举办的活动,这个活动有明确的开始和结束时间,并且参与互动的商品是事先定义好的,商品的个数也是有限制的。同时会提供一个秒杀的入口,让用户经过这个入口进行抢购。算法
总结一下秒杀场景的特色:数据库
秒杀场景的特征就决定了,秒杀系统与平常系统的不同。秒杀系统是大流量请求在短期内集中处理,而平常系统的请求处理更加平滑和平均。秒杀场景不会常常发生,它有实效性,有具体的开始和结束时间。再者秒杀系统是针对具体的商品或者商品分类进行的,资源的范围相对于平常系统来讲也比较小。鉴于这些不一样点,秒杀系统须要和平常系统须要分开考虑,这就是下面要提到的隔离的设计思路。缓存
因为秒杀活动是有计划的,而且在短期内会爆发大量的请求。为了避免影响平常业务系统的正常运行,咱们须要把它和现有的系统作隔离。这样即使秒杀系统出现了问题,也不会影响平常系统的正常工做。要不就“偷鸡不成反失一把米了”,所以在设计秒杀系统的时候能够从如下几个方面来思考隔离的问题。服务器
业务隔离
既然秒杀是一场活动,那它必定和常规的业务不一样,咱们能够把它当成一个单独的项目来看。在活动开始以前,最好设计一个“热场”。“热场”的形式多种多样,例如:分享活动领优惠卷,领秒杀名额等等。“热场”的形式不重要,重要的是经过它获取一些准备信息。例如:有可能参与的用户数,他们的地域分布,他们感兴趣的商品。为后面的技术架构提供数据支持。别小看这些数据,经过这些数据能够预估出秒杀当天的流量,并发数等信息。并且能够做为压力测试数据来源的一部分,协助测试系统的可用性。网络
应用隔离
如今应用的部署多采用分布式或者微服务的架构,经过容器和服务编排的方式部署方式比较常见。建议分配给秒杀系统专门的系统资源,来应对高并发。咱们能够将原来平常系统中的服务在秒杀系统中复用,也能够为秒杀系统设计专门的服务。众所周知一个系统中包含服务数量,少则几十个,多则上百个。若是为了秒杀系统复制一套,恐怕成本过高。这里须要区分,核心功能、支撑功能和通用功能。对于须要并发读写的功能就是秒杀系统的核心功能,例如:商品详情,下单等。这些功能的服务能够专门提供一套,作水平扩展。针对一些支撑功能和通用功能的服务,例如配置信息,用户评论。建议不作扩展,只须要作好熔断和降级的准备,使之不影响核心功能就好。多线程
流量隔离
前面的特征分析中提到了,秒杀系统会在短期内迎来巨大流量。若是秒杀系统和平常系统共用一个接入层,那么对应的负载均衡器也会接受海量的请求。不管是硬件负载均衡仍是软件负载均衡,其可以承受的流量都是有限制的。超过了这个流量,系统会进行限流操做,将多余的流量置之门外。若是此时由于秒杀系统的流量增长,致使平常系统的流量瓶颈是得不偿失的。因此这里须要对流量进行隔离,若是共用负载均衡须要设置秒杀系统使用的流量上限。根据秒杀系统特有的请求头判断流入的请求是来自秒杀请求仍是平常系统请求。同时也能够根据用户ID,请求IP、请求的地域来作隔离。架构
说了完了隔离的思路,再来聊聊如何设计秒杀系统。因为秒杀的场景不一样,面向的用户数量不一样,参与秒杀的资源数量不一样,每一个公司的现有系统架构千差万别,而且硬件配置和网络环境也各有不一样。没法提出一个统一的架构,只能针对秒杀系统中出现的问题进行解决。回到秒杀场景的特征,实际上咱们要解决的就是短期对稀缺资源,高并发读写和结果可靠性的问题。解决这些问题的方法,在平时的系统架构中也会用到,只是在秒杀系统中会更有表明性、更极端。总结下来主要是缓存、限流、熔断、分布式服务、分布式存储、数据一致性、分布式可靠性、系统的监控。可是这些问题涉及到系统架构的方方面面,单独来说你们都能理解,如何经过系统的方式给你们介绍,可以从架构的角度去看秒杀系统须要考虑哪些问题。这里咱们经过架构分层的方式,逐层讲解如何解决秒杀系统的问题。专题总共分来7个部分共15个章节来说述。最后总结为四横三纵。并发
专栏每章都会按照提出问题,讲解原理,实践落地的方式进行推动。说白了就是是什么->为何->怎么办。尽可能用大白话讲解复杂的问题。每段理论分析的部分会配上图解的方式帮助你们理解和记忆。由于上面提到的这些知识点,可能在目前还用不上,不过能够先了解,做为知识储备。等须要的时候在回看文章,那么图就是记忆的最好媒介,俗话说一图胜千言。下面我就把每一个章节的主题列出来供你们查阅。负载均衡