写点什么

秒杀系统架构

用户头像
Damon
关注
发布于: 2021 年 06 月 15 日

作者:Damon

博客:http://www.damon8.cn

程序猿 Damon | 微服务 | 容器化 | 自动化

架构设计方法

架构设计都有哪些方法呢?架构设计遵循特定的方法,比如 TOGAF(The Open Group Architecture Framework,开放组体系结构框架)、五视图方法等。其中 TOGAF 主要针对复杂的企业系统架构,比较重,不大适合迭代速度非常快的互联网产品,所以互联网公司常用的主要是五视图方法。


什么叫五视图方法?它是指从业务逻辑、开发环境、运行状态、物理部署、数据关系等方面绘制出相应的逻辑视图、开发视图、运行视图、物理视图、数据视图来设计架构。 其中,逻辑视图、开发视图、运行视图属于软件架构的内容,物理视图、数据视图属于系统架构的内容。


逻辑视图:对应逻辑架构,主要关注功能需求,以及系统职责和行为的划分。逻辑视图不仅包括用户可见的功能,还包括相应的辅助功能。比如秒杀系统中的活动场次切换、商品列表、用户登录、活动管理、后台权限等功能,其中后台权限属于辅助功能。


开发视图:对应开发架构,主要关注系统开发过程中的质量属性。它包括软件源码的组织方式、配置方式、编译打包方式以及与第三方包的依赖关系等。

比如,我们这里介绍的秒杀系统,采用的是 Go 语言开发代码,使用的是 TOML 格式存放配置,还有 Gitlab 执行编译打包等。


运行视图:对应运行架构,主要关注软件运行过程中的质量属性,它包括进程、线程、协程、对象之间的并发、同步、通信的问题等。

比如,秒杀系统在运行时有用于从队列消费数据的协程,有用于过滤请求并将有效请求写入队列的协程,这就需要好的设计来解决它们之间并发、同步、通信的问题。

以上是五视图法中软件架构方面的内容,接下来咱们看另外的两个,属于系统架构方面的内容。


物理视图:对应物理架构,主要关注安装和部署需求。它包括软件运行时的系统、网络、服务器等基础设施和相关配置,以及如何利用基础设施来实现应用程序的高可用、可伸缩等。

比如秒杀系统使用云厂商的 SLB(Server Load Balancer,负载均衡器)来提供负载均衡能力,使用云厂商的多可用区来实现高可用。


数据视图:对应数据架构,主要关注数据需求,它包括数据的格式、属性、关系等。

比如,秒杀系统中活动场次与活动主题、活动商品的关系和属性,管理员可以通过管理后台创建、修改和删除活动主题、场次、商品等。

为什么软件架构设计需要这些视图呢?它们是为了解决什么问题呢?

俗话说“一图抵千字”,架构设计中的五视图就好比建筑工程中大楼的各部分施工图,可以让我们更容易理解各自需要完成的工作。


比如,研发人员一看逻辑视图、开发视图、运行视图、数据视图,就知道要开发哪些功能、如何实现、如何部署;运维人员一看物理视图,就知道基础设施需要怎么部署;测试人员一看数据视图,就明白如何通过一系列的操作来验证数据的准确性。

秒杀系统架构设计

前面我们介绍了架构设计的方法,以及为何要做架构设计。那么秒杀的系统架构该如何设计呢?

接下来我就用刚才提到的五视图方法来介绍下。

逻辑架构

从前面的定义我们了解到,逻辑架构关注的是功能需求。还记得我在模块一里面提到的小米网秒杀系统的那些功能需求吗?当时介绍了秒杀系统的前端、后端及管理后台的需求分析,比如活动信息管理、活动详情、商品详情等,这些需求分析结果就是为了设计逻辑架构。

系统前端、后端和管理后台的需求有那么多,我们该怎样组织那些需求信息呢?在逻辑架构中有一个“三层架构”法可以帮我们解决这个问题。哪三层呢?它们是表现层、业务逻辑层、数据层。

表现层

所谓表现层,简单来说是指用户可以通过哪些方式使用系统功能。通过需求分析我们了解到小米网秒杀系统的主要使用者有:消费者、管理员。其中消费者可以通过电脑 Web 端、手机 Web 端、手机 App 端获取秒杀的活动信息、商品信息;管理员可以从电脑 Web 端访问管理后台管理秒杀活动。

这里的电脑 Web 端、手机 Web 端、手机 App 端主要用来向用户呈现秒杀的活动信息、商品信息,并提供相关操作的入口,比如购买和后台维护,它们属于表现层。

逻辑层

逻辑层主要是和业务逻辑相关,比如秒杀系统的前端功能主要包括有用户登录、查看活动、订阅通知、查看商品、抢购、下单等;管理后台的功能主要包括有专题管理、场次管理、商品管理、库存管理、价格管理、限购管理等。这些都跟秒杀业务逻辑相关,所以我们可以把相关需求归于逻辑层。

数据层

数据层是指系统的业务逻辑需要处理哪些数据。比如,秒杀系统的数据包括配置数据和用户数据,其中配置数据主要是活动信息和商品信息,用户数据主要是用户订单和用户信息,他们就可以归于数据层。

物理架构

  • 第一,为了实现动静分离,我们需要部署 CDN 节点,将秒杀系统静态页面和静态数据利用 CDN 缓存起来,以便利用 CDN 的就近访问能力提供更高的性能。比如我们可以在中国和新加坡都部署 CDN 节点,以便为中国用户和海外用户提供更好的访问速度。

  • 第二,动静分离意味着除了 CDN 外,我们还需要部署秒杀后端节点。为了实现秒杀后端节点的高可用,我们需要使用云架构保障其基础设施层的高可用。而且需要部署到云的多个可用区,防止单一可用区发生故障影响服务。比如,使用两个可用区,每个可用区使用两台机器。每台机器访问存储的时候,采用主备方式,优先访问当前可用区内的存储,如果当前可用区内存储有故障,自动切到其他可用区的备用存储。不同可用区之间的存储,采用高速专线同步。

  • 第三,为了将不同可用区作为一个整体对外提供服务,我们需要部署路由器、防火墙、交换机、SLB(Server Load Balancer,负载均衡器)。其中,路由器是负责接收外网请求并转发到内网;防火墙负责过滤掉有风险的数据,比如过滤掉黑客发起的网络攻击;交换机负责将请求转发到具体的可用区内;SLB 是负载均衡器,它可以将可用区内多个节点作为一个整体对外提供访问,并将请求均衡地转发到后端各节点。SLB 之间采用主备的方式部署,如果可用区 1 的 SLB 挂了,可用区 2 的 SLB 会自动接管属于可用区 1 的流量,并将流量转发给可用区 1 内的云主机。

  • 第四,部署完各节点后,还需要设置域名解析,将域名解析到我们部署的 SLB 外网 IP 上。通常,对于流量大的系统,会采用多个负载均衡器,然后使用动态 DNS 解析的方案做多个 SLB 的 DNS 负载均衡,以防单个 SLB 无法扛住大流量。

数据架构

数据架构通常用 E-R 图(Entity Relationship Diagram,实体-联系图)表示,我们通常用它来表示数据对象与属性、用户之间的关系。

在需求分析过程中,我们了解到秒杀系统主要有两大主要数据:活动信息和商品信息。除了这两大主要数据外,还有两大次要数据:订单和黑名单。其中订单是用户抢购商品并下单生成的,而黑名单是为了反黄牛而设计的,通常通过大数据分析统计生成,如果用户 ID 在黑名单中,则不允许抢购商品。

那这几大数据都包含哪些属性呢?

结合需求分析过程,我们得知:

  • 活动信息,包括专题、场次、描述、时间、限购策略、商品列表、状态等信息;

  • 商品信息,包括商品 ID、名称、描述、规格、原价、活动价、活动库存等信息;

  • 订单信息,包括订单 ID、用户 ID、商品 ID、商品价格、商品数量、总价、收货地址、创建时间等信息;

  • 黑名单,包括用户 ID 列表。

这些数据中,活动信息、商品信息、黑名单都是由管理员在管理后台管理的,只有订单信息是由用户在商城下单创建的,管理员可以通过管理后台查看订单信息。


精彩推荐

结束福利

开源实战利用 k8s 作微服务的架构设计代码:

欢迎大家 star,多多指教。

关于作者

  笔名:Damon,技术爱好者,长期从事 Java 开发、Spring Cloud 的微服务架构设计,以及结合 Docker、K8s 做微服务容器化,自动化部署等一站式项目部署、落地。目前主要从事基于 K8s 云原生架构研发的工作。Golang 语言开发,长期研究边缘计算框架 KubeEdge、调度框架 Volcano 等。公众号 程序猿Damon 发起人。个人微信 MrNull008,个人网站:Damon | Micro-Service | Containerization | DevOps,欢迎來撩。

欢迎关注:InfoQ

欢迎关注:腾讯自媒体专栏


欢迎关注


发布于: 2021 年 06 月 15 日阅读数: 18
用户头像

Damon

关注

God bless the fighters. 2020.03.11 加入

欢迎关注公众号:程序猿Damon,长期从事Java开发,研究Springcloud的微服务架构设计。目前主要从事基于K8s云原生架构研发的工作,Golang开发,长期研究边缘计算框架KubeEdge、调度框架Volcano、容器云KubeSphere研究

评论

发布
暂无评论
秒杀系统架构