这是我参与更文挑战的第30天,活动详情查看:更文挑战。前端
架构设计都有哪些方法呢?架构设计遵循特定的方法,好比 TOGAF(The Open Group Architecture Framework,开放组体系结构框架)、五视图方法等。其中 TOGAF 主要针对复杂的企业系统架构,比较重,不大适合迭代速度很是快的互联网产品,因此互联网公司经常使用的主要是五视图方法。后端
什么叫五视图方法?它是指从业务逻辑、开发环境、运行状态、物理部署、数据关系等方面绘制出相应的逻辑视图、开发视图、运行视图、物理视图、数据视图来设计架构。 其中,逻辑视图、开发视图、运行视图属于软件架构的内容,物理视图、数据视图属于系统架构的内容。缓存
逻辑视图:对应逻辑架构,主要关注功能需求,以及系统职责和行为的划分。逻辑视图不只包括用户可见的功能,还包括相应的辅助功能。好比秒杀系统中的活动场次切换、商品列表、用户登陆、活动管理、后台权限等功能,其中后台权限属于辅助功能。服务器
开发视图:对应开发架构,主要关注系统开发过程当中的质量属性。它包括软件源码的组织方式、配置方式、编译打包方式以及与第三方包的依赖关系等。markdown
好比,咱们这里介绍的秒杀系统,采用的是 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 列表。
这些数据中,活动信息、商品信息、黑名单都是由管理员在管理后台管理的,只有订单信息是由用户在商城下单建立的,管理员能够经过管理后台查看订单信息。