互联网“三高”的简述及其应用

刘阳1

(1. 石家庄铁道大学,河北省 石家庄市 050700)

摘要:软件开发通常会提到一个名词 “三高”,即高并发、高性能、高可用。而这三高在互联网分布式框架在网页的设计及其他设计中起着关键性的作用。

关键词:软件开发;三高;互联网分布式框架,关键性;

中图分类号:TP393.092   文献标志码:A

 


0  引言

互联网应用系统开发肯定经常会看到高并发、高性能、高可用这三个词,可谓是耳熟能详,而具体的含义和关系真的如你所想的,真正的理解了吗?

1  “三高”架构概述

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等;高性能(High Performance)就是指程序处理速度快,所占内存少,cpu占用率低;高可用性(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性(一直都能用)。

2  高并发

我们使用 QPS(Queries Per Second,每秒查询率)来衡量系统承载能力。架构策略有哪些?

1、负载均衡

正所谓双拳难敌四手,高并发撑场面的首选方案就是集群化部署,一台服务器承载的QPS有限,多台服务器叠加效果就不一样了。

如何将流量转发到服务器集群,这里面就要用到负载均衡,比如:LVS 和 Nginx。

常用的负载算法有轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接数法等。

2、池化技术

复用单个连接无法承载高并发,如果每次请求都新建连接、关闭连接,考虑到TCP的三次握手、四次挥手,有时间开销浪费。池化技术的核心是资源的“预分配”和“循环使用”,常用的池化技术有线程池、进程池、对象池、内存池、连接池、协程池。

3、流量漏斗

上面讲的是正向方式提升系统QPS,我们也可以逆向思维,做减法,拦截非法请求,将核心能力留给正常业务!

互联网高并发流量并不都是纯净的,也有很多恶意流量(比如黑客攻击、恶意爬虫、黄牛、秒杀器等),我们需要设计流量拦截器,将那些非法的、无资格的、优先级低的流量过滤掉,减轻系统的并发压力。

3  高性能

性能直接影响用户的感官体验,访问一个系统,如果超过5秒没有响应,绝大数用户会选择离开。

那么有哪些因素会影响系统的性能呢?

用户网络环境

请求/响应的数据包大小

业务系统 CPU、内存、磁盘等性能

业务链路的长度

下游系统的性能

1、高性能缓存

对一些热点数据每次都从 DB 中读取,会给 DB 带来较大的压力,导致性能大幅下降。所以,我们需要用缓存来提升热点数据的访问性能,比如将活动信息数据在浏览器的缓存中保存一段时间。

2、日志优化,避免IO瓶颈

当系统处理大量磁盘 IO 操作的时候,由于 CPU 和内存的速度远高于磁盘,可能导致 CPU 耗费太多时间等待磁盘返回处理的结果。对于这部分 CPU 在 IO 上的开销,我们称为 “iowait”。

IO中断过程中,如果此时有其他任务线程可调度,系统会直接调度其他线程,这样 CPU 就相应显示为 Usr 或 Sys;但是如果此时系统较空闲,无其他任务可以调度,CPU 就会显示为 iowait(实际上与 idle 无本质区别)。

磁盘有个性能指标:IOPS,即每秒读写次数,性能较好的固态硬盘,IOPS 大概在 3 万左右。对于秒杀系统,如果单节点QPS在10万,每次请求产生3条日志,那么日志的写入QPS在 30W/s,磁盘根本扛不住。

Linux 有一种特殊的文件系统:tmpfs(临时文件系统),它是一种基于内存的文件系统,由操作系统管理。当我们写磁盘的时候实际是写到内存中,当日志文件达到我们的设置阈值,操作系统会将日志写到磁盘中,并将tmpfs中的日志文件删除。

这种批量化、顺序写,大大提升了磁盘的吞吐性能!

4  高可用

网站设计初期遇到的问题还是数据库的设计,当时并没有特别确定数据库建表该建什么,后来经过在百度网站的多次搜索查阅参考最终才确定了数据库的基本结构;网站设计中期主要是应对一些输入输出的BUG,解决方案是应用junit进行反复测试,然后不断完善对输入输出格式的限定,最终算是大体上完成了系统。网站设计后期主要应对的问题是网站安全性维护,我们采用了定期备份网站和数据库,有条件的话尽量在一个月或者一周备份一次,发现问题及时恢复。不轻易安装不熟悉的插件主题,不随意添加有调用外部链接的代码,因为这些不管是插件主题还是代码都有可能被留后门的嫌疑。最终完成了对网站安全性的维护。

高可用指标是指用来衡量一个系统可用性有多高。

MTBF(Mean Time Between Failure),系统可用时长

MTTR(Mean Time To Repair),系统从故障后到恢复正常所耗费的时间

SLA(Service-Level Agreement),服务等级协议,用于评估服务可用性等级。计算公式是 MTBF/(MTBF+MTTR)。

技术架构,高可用有哪些策略?

 

多云架构、异地多活、异地备份

主备切换,如redis缓存、mysql数据库,主备节点会实时数据同步、备份。如果主节点不可用,自动切换到备用节点

微服务,无状态化架构,业务集群化部署,有心跳检测,能最短时间检测到不可用的服务。

通过熔断、限流,解决流量过载问题,提供过载保护

重视web安全,解决攻击和XSS问题

1、主备切换,缩减故障时间

当系统出现故障时,首要任务不是立马查找原因,考虑到故障的复杂样,定位排查要花些时间,等问题修复好,SLA也降了好几个档。有没有更快的方式解决这个问题?那就是故障转移。

2、熔断,提供过载保护

所谓过载保护,是指负载超过系统的承载能力时,系统会自动采取保护措施,确保自身不被压垮。

熔断就是在系统濒临崩溃的时候,立即中断服务,从而保障系统稳定避免崩溃。它类似于电器中的“保险丝”,当电流过大的时候,“保险丝”会先被烧掉,断开电流,以免电路过热烧毁电器引起火灾。

4  结束语

最后,做一个总结:并发量,是一个容量的概念,服务可以接受的最大任务数量,动态的看待它,还需要把性能考虑进去。性能,是一个速度的概念,单位时间内可以处理的任务数量。高并发和高性能是紧密相关的,提高应用的性能,是肯定可以提高系统的并发能力的。应用性能优化的时候,对于计算密集型和IO密集型还是有很大差别,需要分开来考虑。增加服务器资源(CPU、内存、服务器数量),绝大部分时候是可以提高应用的并发能力和性能(前提是应用能够支持多任务并行计算,多服务器分布式计算才行),但也是要避免其中的一些问题,才可以更好的更有效率的利用服务器资源。

参考文献:

[1]基于Nginx和Redis的高并发Web场景下缓存的研究与设计[D]. 陈思.东华理工大学 2021

[2]基于负载均衡和服务流控的高并发访问机制的研究[D]. 张金鹏.南昌大学 2021

[3]集中采购系统交易管理子系统设计与实现[D]. 李旭东.大连理工大学 2021

[4]面向物联网系统的并发性优化研究与实现[D]. 张超超.北京邮电大学 2021

[5]面向异构系统的时序教育大数据可视化平台的设计与实现[D]. 杨启航.中国科学院大学(中国科学院沈阳计算技术研究所) 2021

[6]基于微服务技术架构的京淘商城系统重构研究[D]. 邓秀辉.昆明理工大学 2021

 

posted @   derek&cosmo  阅读(904)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示