浅析软件架构中的“三高”
李晨晨
(石家庄铁道大学,河北省石家庄市050000)
摘要:在当前数据时代,每天都会产生海量的数据需要我们或我们设计的系统进行处理,这样就对系统带来了 一定的挑战,系统的处理速度必须进行不断地优化才能在短时间内处理完数据,返回正确的答复。而这 就离不开软件设计架构的“三高系统”。本论文将针对“三高框架”中的高性能、高并发、高可用性进行 介绍以及框架的应用场景。
关键词:高性能;高并发;高可用性
中图分类号: 文献标志码:A
Analysis of the three-high framework in the software architecture
lichenchen
1. Shijiazhuang Tiedao University, Shijiazhuang City, Hebei Province, 050,000
Abstract: In the current data era, massive amounts of data are generated every day and need to be processed by us or the system we designed, which brings certain challenges to the system. The processing speed of the system must be continuously optimized to process the data in a short time and return the correct reply.This is inseparable from the "three-high system" of the software design architecture.This paper will introduce the high performance, high concurrency and high availability in the "three high framework" and the application scenarios of the framework.
Keywords: High performance; High concurrency; High availability
0 引言
软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,本文将浅析一下三者的指标和应用场景。
1 高并发
1.1 高并发的概念和指标
既然是高并发系统,那并发一定要高,不然就名不副实。并发的指标一般有QPS、TPS、IOPS,这几个指标都是可归为系统吞吐率,QPS越高系统能hold住的请求数越多,但光关注这几个指标不够,我们还需要关注RT,即响应时间,也就是从发出request到收到response的时延,这个指标跟吞吐往往是此消彼长的,我们追求的是一定时延下的高吞吐。
比如有100万次请求,99万次请求都在10毫秒内响应,其他次数10秒才响应,平均时延不高,但时延高的用户受不了,所以,就有了TP90/TP99指标,这个指标不是求平均,而是把时延从小到大排序,取排名90%/99%的时延,这个指标越大,对慢请求越敏感。
除此之外,有时候,我们也会关注可用性指标,这可归到稳定性。
一般而言,用户感知友好的高并发系统,时延应该控制在250毫秒以内。
什么样的系统才能称为高并发?这个不好回答,因为它取决于系统或者业务的类型。不过我可以告诉你一些众所周知的指标,这样能帮助你下次在跟人扯淡的时候稍微靠点儿谱,不至于贻笑大方。
通常,数据库单机每秒也就能抗住几千这个量级,而做逻辑处理的服务单台每秒抗几万、甚至几十万都有可能,而消息队列等中间件单机每秒处理个几万没问题,所以我们经常听到每秒处理数百万、数千万的消息中间件集群,而像阿某的API网关,每日百亿请求也有可能。
2 高性能
性能直接影响用户的感官体验,访问一个系统,如果超过5秒没有响应,绝大数用户会选择离开。
2.1高性能缓存
对一些热点数据每次都从 DB 中读取,会给 DB 带来较大的压力,导致性能大幅下降。所以,我们需要用缓存来提升热点数据的访问性能,比如将活动信息数据在浏览器的缓存中保存一段时间。
上层的寄存器、L1 缓存、L2 缓存是位于 CPU 核内的高速缓存,访问延迟通常在 10 纳秒以下。L3 缓存是位于 CPU 核外部但在芯片内部的共享高速缓存,访问延迟通常在十纳秒左右。高速缓存具有成本高、容量小的特点,容量最大的 L3 缓存通常也只有几十MB。
本地内存是计算机内的主存储器,相比 CPU 芯片内部的高速缓存,内存的成本要低很多,容量通常是 GB 级别,访问延迟通常在几十到几百纳秒。
内存和高速缓存都属于掉电易失的存储器,如果机器断电了,这类存储器中的数据就丢失了。
特别说明:在使用缓存时,要注意缓存穿透、缓存雪崩、缓存热点问题、缓存数据一致性问题。当然为了提升整体性能通常会采用多级缓存组合方案(浏览器缓存+服务端本地内存缓存+服务端网络内存缓存)
3 高可用性
高可用指标是指用来衡量一个系统可用性有多高。包括系统可用时长、系统从故障后到恢复正常所耗费的时间、服务等级协议,用于评估服务可用性等级。
3.1高可用性的策略
①主备切换,缩减故障时间
当系统出现故障时,首要任务不是立马查找原因,考虑到故障的复杂样,定位排查要花些时间,等问题修复好,SLA也降了好几个档。有没有更快的方式解决这个问题?那就是故障转移。
当发现故障节点的时候,不是尝试修复它,而是立即把它隔离,同时将流量转移到正常节点上。这样通过故障转移,不仅减少了 MTTR 提升了 SLA,还为修复故障节点赢得了足够的时间。
②熔断,提供过载保护
所谓过载保护,是指负载超过系统的承载能力时,系统会自动采取保护措施,确保自身不被压垮。
熔断就是在系统濒临崩溃的时候,立即中断服务,从而保障系统稳定避免崩溃。它类似于电器中的“保险丝”,当电流过大的时候,“保险丝”会先被烧掉,断开电流,以免电路过热烧毁电器引起火灾。
③限流,提供过载保护
限流的原理跟熔断有点类似,都是通过判断某个条件来确定是否执行某个策略。但是又有所区别,熔断触发过载保护,该节点会暂停服务,直到恢复。限流,则是只处理自己能力范围之内的请求,超量的请求会被限流。
④降级
比如电商大促,业务在峰值时刻,系统抵挡不住全部的流量时,系统的负载、CPU 的使用率都超过了预警水位,可以对一些非核心的功能进行降级,降低系统压力,比如把商品评价、成交记录等功能临时关掉。弃车保帅,保证 创建订单、支付 等核心功能的正常使用。
4 结束语
我们不能只能将目光放在项目的完成与否,只完成了项目,但不能忽视了编程最本质的东西,掌握最基本最核心的编程能力,比如数据架构和算法,设计,惯用法,培养技术的审美,也是很重要的,既要致高远,又要尽精微。