【秒杀】2、what?秒杀也能够作引擎?

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。vue

秒杀系统是一件复杂的事,从咱们上篇文章中就能看出来,洋洋洒洒又臭又长接近5000字。这样复杂的东西,若是每一个系统都要写一次,势必是个很是大的人力浪费。其中一个环节考虑不周,就会功败垂成。git

从上次在技术交流群里聊到秒杀系统的设计,到目前为止已经招募到8位对其很是感兴趣的小伙伴,主笔编码。通过你们的讨论,感受除了作成一个秒杀的demo,咱们还能够更近一步,将其作成一个秒杀引擎。程序员

在这里,xjjdog将和你们分享这个过程。结果并不重要,重要的是思路和过程。你可能会获取一些框架类代码的开发经验,但愿或许如此吧。github

【秒杀】1、系统设计要点,从卖病鹅提及spring

一个黑盒

最主要的思路,就是把秒杀引擎当作是一个黑盒,对完成秒杀的逻辑进行屏蔽。一端输入,一端输出。也就是说,你把要秒杀的数据,通过清洗倒入秒杀引擎后,剩下的就没原来系统的什么事了。数据库

“精致秒杀引擎,云加速,弹性可伸缩高可用架构。SLA整年5个9,绿色无公害,为您的业务保驾护航。专业的售前技术支持,协助您完成最优配置。”是否是很是熟悉而扯淡的宣传语?这就是黑盒,我只要完成功能了,你管我是牛鬼蛇神。springboot

概念抽象

从过程上来说,咱们将秒杀的代码也归类为三个阶段:准备、秒杀、清算。为了完成上面的目标,仍是须要对涉及的资源进行进一步抽象。如下是初步定下的一些概念,后续或有变更。bash

actor 秒杀参与者

根据字面意思,就可以看到这里抽象的是操做的主体,也就是参与的人。actor会带有一些附着信息,好比用户的一些基本信息。这样,就可以实现一些个体的流控策略,或者风控策略。举个例子,假若有一个逻辑:最新注册的帐号没有秒杀资格。那么actor的附加信息里,就应该包含用户的注册时间。微信

queue 缓冲队列

队列是秒杀请求的缓冲,是首先落地的地方。不管是内存队列,仍是分布式队列,其实操做起来都是差很少的。咱们也对其进行一下抽象。这样,经过配置参数,就能够调节秒杀队列的行为和性能。架构

source 秒杀数据源

数据的提供者。数据可能来源于一个外部的数据库(db),也可能来自于外部的推送(push),也可能来自于外部接口的拉取(pull)。这个数据获取的过程,咱们就给它起个名字,叫作source。固然,这部分的功能也是能够扩展的,好比source数据来自ES。

sink 秒杀数据落地下沉

主要处理秒杀完成后,数据的去向。与source相似,它是一个反向的动做。处理的是相似库存扣减一类的落地动做。这个组件的行为,或许是推送,也或许是直接发送一个事件消息。source和sink,组成了一个秒杀目标的具体数据流向,是黑盒以外的东西。

target 秒杀目标

是时候给秒杀目标起个名字了。它拥有一个在秒杀引擎中惟一的名字:targetID,用来标识是哪种商品。很是很是多的个性化配置参数,就在这里,好比秒杀开始时间,队列长度,是否懒加载商品等。

stock 库存操做

库存操做指的是在黑盒以内的操做,这些信息会不按期的进行合并,sink到业务端。对stock的操做,就须要保证其正确性和吞吐量。这也是咱们的核心概念之一。

action 动做

相似消息总线的做用。动做,action,指的是actor所产生的全部行为的载体,在整个生命周期中,是不可变的(Immutable)。动做会被缓冲,追踪,调度,记录,是穿插整个引擎的行为实体。

runtime 实时运行单元

runtime是变化的,用于秒杀混沌期的信息缓冲,原则上不会记录和下沉。咱们的运行单元会作不少运算和判断,直到最终的数据,达到BASE的状态。

主要流程

目标

秒杀引擎会用到各类各样的技术,咱们手到拈来,可是也须要一种方式进行分享。配合教程+源码的方式,会有更好的效果。为了保证程序的健壮性,会使用单元测试,尽可能的覆盖代码;为了评估整个系统的性能,咱们也会介绍一些压力测试方面的工具;最后,会使用一个springboot项目集成秒杀引擎,作一个最终的效果。

其中的抽象概念部分,要可以作到动态替换,并提供自定义的扩展方式。

暂定的技术选型

秒杀引擎包含三部分。

一、核心部分
此模块会依赖尽可能少的组件,以便用在各类开发环境中(不只仅是spring),涵盖了重要的概念和实现逻辑。会有特别多的精细化配置参数进行性能调节。

二、demo部分
使用springboot、vue、flutter等最流行的技术,展示一个完整的示例。

三、方案部分
对一些特殊场景的优化,或者某个扩展性的主题,出具的具备典型性表明的方案。

用最有营销力的一个词来讲,就是行业解决方案

代码

项目代码在github,目前只有部分抽象概念。有兴趣能够跟踪。

https://github.com/xjjdog/seckill-engine
复制代码

小姐姐味道微信公众号会持续跟踪状态变动和值得一提的技术,采用实践的方式,对过去的一些知识点进行回顾和穿插。

欢迎加我微信,提出你的宝贵意见。

做者简介:小姐姐味道 (xjjdog),一个不容许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不同的味道。个人我的微信xjjdog0,欢迎添加好友,​进一步交流。​

相关文章
相关标签/搜索