大型网站技术架构
薛宪光
河北省石家庄市,河北省 石家庄市 050000、
摘要:软件开发通常会提到一个名词 “三高”,即高并发、高性能、高可用。他要求一个软件或系统能在一段时间内能够处理大量的请求、通过设计减少系统不能提供服务的时间。
关键词:高并发,高性能,高可用
中图分类号: 文献标志码:A
Large-scale website technology architecture
Xue Xianguang
Shijiazhuang, Hebei Province, Shijiazhuang, Hebei Province 050000
Abstract: Software development usually refers to the term "three high", which is high concurrency, high performance, and high availability.He requires that a software or system be able to handle large numbers of requests over a period of time and reduce the time the system cannot provide services.
Keywords: High concurrency, high performance, and high availability
0 引言
互联网应用系统开发肯定经常会看到高并发和高性能这两个词,可谓是耳熟能详而具体的含义和关系真的如你所想的,真正的理解了吗?
1 定义
1.1高并发
高并发是指可以让软件系统在一段时间内能够处理大量的请求。比如每秒钟可以完成10万个请求。这是互联网系统的一个重要的特征。不像并发说的是“处理”,并行说的是“执行”,高并发说的是最终效果。只要能达到效果,不管怎么实现都行。
1.2高性能
说到高性能,在不同角色的眼中对于性能的定义也不同。用户感受到的性能,就是从提交后到看到页面的时间,开发者更关注的是应用服务器的性能,对于运维人员,会更关注一些基础设施的性能和利用率
1.3高可用
高可用通常是指,通过设计减少系统不能提供服务的时间。
2架构设计
2.1高性能
性能直接影响用户的感官体验,访问一个系统,如果超过5秒没有响应,绝大数用户会选择离开。那么有哪些因素会影响系统的性能呢?用户网络环境,请求/响应的数据包大小,业务系统 CPU、内存、磁盘等性能,业务链路的长度,下游系统的性能,算法实现是否高效
2.1.1 高性能缓存
对一些热点数据每次都从 DB 中读取,会给 DB 带来较大的压力,导致性能大幅下降。所以,我们需要用缓存来提升热点数据的访问性能,比如将活动信息数据在浏览器的缓存中保存一段时间。
2.1.2日志优化,免IO瓶颈
避当系统处理大量磁盘 IO 操作的时候,由于 CPU 和内存的速度远高于磁盘,可能导致 CPU 耗费太多时间等待磁盘返回处理的结果。对于这部分 CPU 在 IO 上的开销,我们称为 “iowait”。
2.2高可用
高可用指标是指用来衡量一个系统可用性有多高。
2.2.1主备切换,缩减故障时间
当系统出现故障时,首要任务不是立马查找原因,考虑到故障的复杂样,定位排查要花些时间,等问题修复好,SLA也降了好几个档。有没有更快的方式解决这个问题?那就是故障转移。当发现故障节点的时候,不是尝试修复它,而是立即把它隔离,同时将流量转移到正常节点上。这样通过故障转移,不仅减少了 MTTR 提升了 SLA,还为修复故障节点赢得了足够的时间。主备切换大致分为三步:
第一步故障自动侦测,第二步自动转移,第三步自动恢复
2.2.2熔断,提供过载保护
所谓过载保护,是指负载超过系统的承载能力时,系统会自动采取保护措施,确保自身不被压垮。熔断就是在系统濒临崩溃的时候,立即中断服务,从而保障系统稳定避免崩溃。它类似于电器中的“保险丝”,当电流过大的时候,“保险丝”会先被烧掉,断开电流,以免电路过热烧毁电器引起火灾。
2.2.3限流,提供过载保护
限流的原理跟熔断有点类似,都是通过判断某个条件来确定是否执行某个策略。但是又有所区别,熔断触发过载保护,该节点会暂停服务,直到恢复。限流,则是只处理自己能力范围之内的请求,超量的请求会被限流。
2.2.4、降级
比如电商大促,业务在峰值时刻,系统抵挡不住全部的流量时,系统的负载、CPU 的使用率都超过了预警水位,可以对一些非核心的功能进行降级,降低系统压力,比如把商品评价、成交记录等功能临时关掉。弃车保帅,保证 创建订单、支付 等核心功能的正常使用。
2.3高并发
2.3.1读写分离
持久层最先可能会用到的应对高并发的方法就是读写分离。对于高并发系统来说,一开始都是读多写少,大量的读请求经过业务层到达持久层之后对数据库产生了极大的压力,此时就会准备一个和生产库一致的数据库来单独接收处理读请求,一般这个叫做从库,也会被称为读库,高并发流量中的读请求会被引流到从库,而写请求还是在主库写,主库和从库之间依靠主从复制机制来确保两个库的数据近乎实时一致,这样用户在读请求的时候几乎发现不了数据的不一致。
2.3.2分库分表
读写分离主要是为了应对读请求,那如果写请求的流量大,此时又会有什么应对的方案呢?常见的一种处理方法就是分库分表。分库分表是一种常见的将数据分片的方式,它的基本思想是依照某一种策略将数据尽量平均地分配到多个数据库节点或者多个表中。不同于主从复制时数据是全量地被拷贝到多个节点,分库分表后,每个节点只保存部分的数据,这样可以有效地减少单个数据库节点和单个数据表中存储的数据量,在解决了数据存储瓶颈的同时也能有效地提升数据查询的性能。同时,因为数据被分配到多个数据库节点上,那么数据的写入请求也从请求单一主库变成了请求多个数据分片节点,在一定程度上也会提升并发写入的性能。
3 结束语
参考文献:
[1] 刘骞田云鹏. 高性能非学历在线培训网站系统架构设计: 云南开放大学学报. 2015,17(01)
[2] 张鹏.基于SSH框架的高并发与高可用网站架构的设计与开发. 电脑知识与技术. 2020,16(27)
[3] 吴光明, 电子商务网站访问性能优化的研究与实现. 爆炸与冲击, 厦门大学