打造千万级流量秒杀系统 掌握高可用、高性能、高并发 “三高”系统架构设计 part 1

  • Post author:
  • Post category:其他




1 前端优化

由于用户量大,页面需要采用前后端分离、动静数据分离的方式。静态资源和静态数据由CDN(内容分发网络)和前端缓存。



2 非功能需求:高可用、高性能、高并发指标



2.1 什么是非功能需求

可用性、并发能力、性能、安全防护能力、水平扩容缩容能力、运维/运营成本等



2.2 秒杀系统的核心非功能需求

高可用指标

高性能指标

高并发指标



2.3 如何计算高可用指标


MTBF(平均可用时长)


系统正常、稳定运行的平均时长


MTTR(平均修复时长)


系统从失效后到恢复正常所耗费的平均时间


SLA(服务等级协议)


评估服务可用性等级,公式MTBF/(MTBF+MTTR)



2.4 影响SLA的因素

1 服务自身因bug挂掉或无法正常工作

2 服务因机器物理故障导致无法正常工作

3 地震、洪水、台风等灾害

4 被黑客攻击导致无法正常工作

5 并发量超过系统承载能力,导致系统崩溃、数据错乱



3 如何设计秒杀的系统架构



3.1 秒杀系统架构设计-物理架构设计要点

1.部署CDN节点,将秒杀系统静态页面和静态数据利用CDN缓存起来

2.部署秒杀后端节点,使用云架构保障其基础设施层的高可用,需要部署到云的多个可用区

3.为了将不同可用区作为一个整体对外提供服务,需要部署路由器、防火墙、交换机等

4.设置域名解析,将域名解析到部署的SLB外网IP上

注:


一般对于流量大的系统,会采用多个负载均衡器,我们会做动态dns解析,做多个slb的dns负载均衡,以防止单个slb无法扛住大流量。



3.2 slb简介



3.2.1 SLB是什么?

负载均衡(Server Load Balance),简称SLB)是一种网络负载均衡服务器,针对阿里云弹性计算平台而设计的,在系统架构、系统安全及性能,扩展,兼容性设计上都充分考虑了弹性计算服务器使用特点和特定业务场景。

在这里插入图片描述



3.2.2 SLB的构成

SLB主要由三个基本概念组成。


LoadBalancer

:代表一个SLB实例把接收到的需求按照规则策略转发到后面的服务器上


Listener

:代表用户定制的负载均衡策略和算法规则


Backendserver

:是后端的一组服务器。

来自外部的访问请求,通过SLB实例并根据相关的策略和转发规则分发到后端ECS进行处理



3.2.3 SLB的特点

1.高可用(双机房容灾)

2.低成本

3.弹性扩容:根据所需服务器进行调配,缩减扩充

4.安全:云盾

5.SLB收费模式:按出口流量计费

6.SLB一台Listener下面可以挂50台ECS,根据HTTP协议提供安全证书100 个,提供丰富的监控数据,实时了解SLB运行的状态,结合云盾提供WAF及防DDOS攻击能力包括:CC、SYNFLOOD

7.支持同一地域(Region)跨数据中心容灾,结合DNS还可以支持跨Region容灾。


1.

一个SLB 可以挂载同一个region下(不同机房,不同zone)的服务器;如果其中任何一台机器异常,都会自动隔离这台机器,达到机房容灾,同一个机房不同zone的容灾



2.

一个域名(www.taobao.com) 通过DNS 解析到2个SLB(这2个SLB 是属于不同的Region),所以借助DNS 可以实现跨region 进行容灾

8.SLB提供控制台API、SDK多种管理方式。ECS的权重越高被分发的几率越大。

9 .提供公网和私网2种类型

10.提供4层(TCP协议)和7层(HTTP 和HTTPS协议)

11.SLB服务会检查云服务器池中ECS的健康状态-健康监测-自动隔离屏蔽一场的ECS:三次握手四次分离



3.3 秒杀系统物理架构图

在这里插入图片描述



3.4 数据视图

在这里插入图片描述



3.5 汇总

1.物理架构:指导运维工程师部署软件,以便实现基础设施的“三高”

2.数据架构:指导开发人员做数据库表设计;指导测试人员进行软件功能测试时检查数据准确性



4 领域建模:DDD 原理及秒杀系统领域模型



4.1 什么是DDD

领域驱动设计,是一种软件设计方法,指在软件设计的过程中始终围绕领域来构建模型。在一个遵循领域驱动设计的业务系统中,可以有多个领域,但有且只有一种核心领域,另一些非核心领域,统称为子领域。



4.2 DDD的作用

在这里插入图片描述



5 云架构:基础设施是如何做到高可用的?



5.1 基础设施是如何做到高可用的

秒杀系统可以充分利用云架构的基础设施,提高秒杀服务底层的可用性。



5.2 云架构分层设计及其高可用

在这里插入图片描述



5.2.1 IDC基础设施层

1.机房优先建在自然灾害发生概率低的地方

2.机房环境方面,需配备空调、消防设备,防止火灾等意外

3.电源和网络高可用:配备多条线路

4.多机房部署


利用DDNS(动态域名服务)通过域名解析将流量调度到多个可用的机房



5.2.2 物理主机层


1.物理主机层通常采用存储和计算分离的方案来部署,能尽量避免因磁盘故障而导致计算能力下降。降低存储的整体成本。


2.NAS(网络附属存储)通过高速网卡和交换机提供高并发和高性能访问能力。NAS机器上的磁盘采用RAID(磁盘阵列)提升性能和可用性。


NAS简介



NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。国际著名的NAS企业有Netapp、EMC、OUO等。


3.计算节点高可用又是如何做到的呢?


IDC机房会准备一批备用机器。同一业务运行中的机器,采用

虚拟ip



心跳技术

将两台主机做成双机互备模式

扩展:


双机热备

: 双机热备是应用于服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络连接,正常情况下主机处于工作状态,从机处于监视状态,一旦从机发现主机异常,从机将会在很短的时间之内代替主机,完全实现主机的功能。


双机互备

:双机互备是在双机热备基础上,两个相对独立的应用在两台机器同时运行,但彼此均设为备机,当某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应用接管过来,从而保证了应用的持续性。也就是主机和备机运行于不同的应用,主机与备机互为备份。



5.2.3 IAAS层

iaas(Infrastructure as a Service,即基础设施即服务)通过虚拟化技术在宿主机上虚拟出多个运行环境,应用部署在虚拟出来的运行环境里。主要分为主机虚拟化,容器虚拟化。



5.2.3.1 主机虚拟化

主机虚拟化-

利用软件来虚拟整套计算机硬件

,vm(虚拟机)vmware、kvm、xen配合云计算管理平台管理、调度虚拟机。虚拟机通常配合SDN(软件定义网络)和SDS(软件定义存储)等技术来使用。

案例1:

在这里插入图片描述

案例2:

在这里插入图片描述

案例3:

在这里插入图片描述

案例4:

在这里插入图片描述



5.2.3.2 容器虚拟化

利用linux命名空间技术,在linux系统里

划分出多个互相隔离的运行环境



利用kubernetes强大的

调度能力



网络管理能力

以及

滚动更新机制

,iaas层的可用性得到进一步提升。



5.2.4 paas层


paas(平台即服务)云产商将通用组件打包部署在已有的主机上,并提供访问组件的SDK或者API,开发者修改应用的代码引入sdk或者调用api来访问云产商提供的通用组件。

paas采用独立的集群来提供基础能力,使用多种技术手段及时发现故障、转移故障、恢复故障、提升集群可用性。


业务系统对paas的性能要求比较高

优先访问同一可用区、同一地区的paas服务

业务系统接入paas的时候,通常需要引入paas的sdk



5.2.5 saas层

saas(软件即服务)提供软件的后端、前端页面。可以通过

同城双活、异地备份、多云部署

等方案来降低单云单机房故障的风险。



5.3 秒杀系统的云架构

云架构演变过程:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



5.4 小结

在这里插入图片描述



6 故障转移和恢复:如何通过主备切换缩减故障时间?



6.1 故障转移和恢复

故障转移:当发现故障节点时,立即把它隔离同时将流量转移到正常的节点上。



6.2 主备切换


什么是主备切换:


在这里插入图片描述

主备切换的目的-始终保障系统中有可用的节点



6.3 主备切换的大致过程

在这里插入图片描述



6.4 存储系统的主备切换

在这里插入图片描述

存储节点互备示意图:

在这里插入图片描述

在这里插入图片描述

keepalived能为集群节点提供

心跳



主备切换

功能,常用于负载均衡器的主备切换。



6.5 业务系统的主备切换

在这里插入图片描述


在nginx上配置健康检查:


在这里插入图片描述



6.6 SLB和DNS的主备切换

在这里插入图片描述

ddns并不一定完全满足需求,因为dns中ip变更是有时间限制的,通常是5分钟,这样当slb故障,ip列表更新了,因为客户端dns缓存的缘故,又或者dns被劫持,这将导致请求失败。 针对这种情况,有的公司会提供

httpdns接口

,给客户端下发ip列表。客户端会将此域名和ip的映射关系缓存下来。请求的时候会随机选择一个ip进行连接,直到连接成功或者达到最大重试次数。当发现ip数据无效时,将再次请求该接口 ,获取最新的数据。

在这里插入图片描述


存储系统采用了狭义上的主备切换,有明确的主备关系,业务系统和SLB通常是无状态的,更倾向于依靠上游组件来做故障转移。



6.7 小结

无状态的系统:更倾向于采用系统外的组件,比如

DDNS、nginx

来做流量调度



版权声明:本文为qq_22270363原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。