互联网三高架构
摘要:越来越多的互联网用户和高并发的访问等使得各大网站都需要提高系统的高性能、高并发和高可用性,这也就是互联网的三高架构。文章探讨了互联网三高架构的特点及要求,并分别阐述了三个特性的解决方案,探讨三高架构在网站开发中的重要作用与策略。
关键词:三高架构;高性能;高并发;高可用
中图分类号: 文献标志码:A
0 引言
大型Web网站的技术挑战主要来自于大量的用户,高并发的访问和海量的数据存储,任何简单的业务一旦需要处理TB级别的数据和面对数以亿计的用户,问题就会变得很棘手。那么如何打造一个高可用、高性能、易扩展、可伸缩且安全的网站?首先要从架构方面入手,打造高并发、高性能、高可用的系统。
1 三高架构概述
互联网三高架构:高并发、高性能、高可用,简称三高(3H)。目前所有集群分布式,微服务,云原生,中台,数据湖,大数据等等,包括SpringCloud一系列解决方案组件等等,最终目的都是为了这三点。
1.1 高并发
高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求。当多个进程或线程同时(或者在同一段时间内)访问同一资源时会产生并发问题,因此需要通过专门的设计来保证系统能够同时(并发)正确处理多个请求。
1.2 高性能
高性能计算(High performance computing, 缩写HPC)是指设备性能强,系统运算能力强,响应速度快。与性能相关的一些指标有响应时间、吞吐量、并发用户数、TPS等。
1.3 高可用
高可用性H.A.(High Availability)指的是一个系统经过专门的设计,从而缩短因日常维护操作和突发的系统崩溃所导致的停机时间,以提高系统和应用的持续可用。HA系统是企业防止核心计算机系统因故障停机的最有效手段。
2 高并发设计方案
2.1 高并发场景
像淘宝这样的大型站点,单凭一个接口调用的量就有可能达到百万的并发。在双11这样的大型活动场景里,淘宝的并发请求数都能达到上亿次,这样的体量无论是在国内还是在国际都是排在前列的。
那么如何设计一个可以承载巨量并发请求的架构呢?要想设计一个高并发的架构,首先要搞清楚架构的分层,我们先来看一个综合分层的架构图:
图2-1 分层架构图
2.2 架构策略
2.2.1 CDN
CDN(Content Delivery Network,内容发网络),它依靠部署在各个区域的边缘服务器,实现负载均衡、内容分发调度等功能。它使得用户就近获取内容,降低网络堵塞,提供用户访问响应速度。
CDN是处于整个架构体系中最前端的一层,它是直接面对用户的,CDN会把静态的请求(图片、js、css等)直接消化掉,然后把动态的请求往后传递。高并发网站一定会使用CDN,而且需要把静态文件存储在边缘服务器上。
2.2.2 负载均衡
这一层,其实就是一个反向代理(或者叫做分发器),它的主要作用是把用户的请求按照预设的算法发送给它后面的WEB服务器。该层在实现上大致分为两类:四层和七层。从吞吐量上来分析,四层的负载均衡更有优势。所以,要想实现高并发,负载均衡这一层必须要使用四层技术,其中LVS就是一款不错的开源负载均衡软件。
2.2.3 WEB层
如果最前端使用了CDN,那么在WEB这一层处理的请求绝大多数为动态的请求。图片、js、css、html、音频、视频等等都属于静态资源。而涉及到数据库存取操作的请求都属于动态请求。如果到了WEB这一层全都是动态的请求的话,那么并发量的多少主要取决于WEB层后端的DB层或者Cache层。也就是说要想提升WEB层服务器的并发性能,必须首先要提升DB层或者Cache层的并发性能。
2.2.4 Cache层
增加这一层的目的是为了减轻DB层的压力,Cache层有一个特点:数据的读写发生在内存里,跟磁盘并没有关系。正是因为这个特点,保证了数据的读写速度非常快。假如没有Cache层,并发1000万的动态请求意味着这1000万会直接透传到DB层(如MySQL),1000万的并发就会造成1000万对磁盘的读写操作。
2.2.5 DB层
DB层是整个架构体系中非常关键的一层,因为它涉及到对磁盘的读写。所以,为了提升性能,对服务器磁盘要求很高。高并发网站一定会使用CDN,而且需要把静态文件存储在边缘服务器上。
2.2.6 消息队列层
消息队列的引入极大提升了整个架构的并发能力。从WEB层接收到动态的请求后,Cache层过滤掉一部分,然后请求逐一地发送到DB层,在这个过程中,查询时间很长的请求可以单独摘出来,把它搞到消息队列里,这样WEB层和DB层只处理那种快速有结果的查询,并发量自然很大。
2.2.7 存储层
DB层的存储使用本地磁盘,日志类、静态文件类使用分布式文件存储可以更好地提高并发性。
3 高性能设计方案
3.1 高性能场景
高性能就是指程序处理速度快、耗能少。高并发和高性能是紧密相关的,提高应用的性能,可以提高系统的并发能力。
图3-1 影响系统性能的因素
从上图可以分析出性能瓶劲主要表现在两个方面:
1、 硬件资源层面,如不同运营上的网络,服务器的带宽限制,服务器的CPU、内存及磁盘IO等;
2、 软件层面,Web应用程序的性能,数据库服务器的性能;
3.2 架构策略
3.2.1高性能缓存架构
绝大部分在线业务都是读多写少。导致几千万条的select语句对数据库的压力非常大。缓存就是为了弥补存储系统在复杂业务场景下的不足,其基本原理是将可能重复使用的数据放到内存中,一次生成、多次使用,避免每次使用都去访问存储系统。缓存能够带来性能的大幅提升。
3.2.2高性能负载均衡
负载均衡也是高性能的一块,一个合适的负载均衡,对系统的提升也非常明显。从大往小了说,主要分为三类,分别是:DNS负载,硬件负载,软件负载。
4 高可用设计方案
4.1 高可用场景
可用性是在各种异常情况下,应用都要是可用的,用户都能够正常访问系统,完成业务处理。
这些异常情况包括各种硬件故障,比如应用服务器及数据库宕机、磁盘损坏等。还有各种软件故障。此外,还有外部环境引发的不可用,比如促销引来大量用户访问,导致系统并发压力太大而崩溃,以及,黑客攻击、机房火灾、挖掘机挖断光缆,各种情况导致的应用不可用。
图4-1 影响系统可用性的因素
4.2 架构策略
4.2.1容错设计
程序是人开发的,错误当然就是不可避免的,一个好的容错方案可以大大提高软件对于错误的兼容程度,使得系统在遇到突发错误时候仍能够保证一定的可用性。
(1)避免单点
如采用负载均衡策略,相对直接的一种容错方案,通过部署多个节点解决故障节点业务承接的问题,一般节点越多,容错效果就越好。
(2)服务降级
服务降级,是一种“牺牲局部、保全整体”的思想,在系统面临崩坍时,实现保证主线业务的存活。主要方式有:关闭非核心功能,如电商平台在“618,双11大促”时候,发货的时效性并不是最重要的,那么就可以关闭物流发货服务,空闲出来的资源则可以优先保障产品、订单和计费服务的正常运转;简化系统流程;同步变异步等
(3)重试机制
超时重试是比较典型的架构容错设计思想,但是重试机制不可肆意运用,无限制的重试机制对于服务来说可能会是一种灾难。重试的实现方试包括编码和开源框架两种,
(4)隔离设计
隔离设计的初衷是将错误控制在一定范围,避免错误的传播,对于交易型的业务系统一定要进行“隔离设计”。
4.2.2 限流设计
限流设计是一种面向未知的设计思想,在流量超过实际容量时,拒绝容量之外的请求以达到保护系统的目的,对于高并发类业务系统,限流是必备选项。
5 结论
综上所述,在进行架构设计时要对架构策略搭配使用,最大程度选择组合才可以设计出符合业务的高性能、高并发和高可用的架构。基于此,相关开发人员应重视对该方面的研发,使其更好地应用于网站设计中。
参考文献:
[1] 房辉,常盛. 大型网站高性能架构研究[J]. 信息系统工程,2015(12):76-77.
[2] 刘健,黄才胜.基于协程的高并发架构研究[J].数字技术用,2018,36(04):85-86.DOI:10.19695/j.cnki.cn12-1369.2018.04.43.
[3] 马辰,王博,曹宁生.云架构中高可用技术现状与发展[J].舰船电子工程,2017,37(07):1-5.