架构设计【高可用】

发布时间 2023-11-01 14:33:05作者: 木乃伊人

一、简介

       高可用,即同一时刻系统能处理多少请求。

二、提高系统性能

       首先该想到的是如何发挥单个服务器潜能,再考虑堆服务器。

        2.1、如何知道单台服务器性能瓶颈

                性能的衡量指标,在业界通常指的是响应时间或者吞吐量,但是单次的测试或者部分的测试响应时间是不足以来判断当前系统性能的好坏的,所以需要收集一段时间内的数据进行计算来提取这个衡量指标,常见的指标有下面几大类:

                 【平均值】                 

                  这个最简单就能获取到,就是将一段时间内的所有请求响应时间相加,然后除以总请求数,得到平均值。这种衡量指标能在一定的程度上反应这段时间的系统性能,这也是很多程序员喜欢用的判定性能的方式,但是这种方式判定具有不确定性,感知能力较弱,假如这段时间内只有少数的请求慢,其最终的平均值是没什么大的变化的,我们线上就有遇到这种情况。

                  假如,我们系统在1分钟内有10000次请求,每次请求时间大概1ms,那么我们提取的平均值则为(10000*1)/10000=1ms,此时,如果里面有100个请求响应较慢大概100ms,平均值为(100*100 + 9900*1)/10000= 1.99ms,当你看到这个数据是不是直接就忽略了,其实有1/100的请求响应慢了100倍。所以我们一般是可以先将平均值提取出来作为一个初期参考,并不作为最终的性能判定。

                 【最大值】

                  这个应该很好理解,就是指这段时间响应时间最大的,但是这个标准又太敏感了,你看啊,要是这10000次请求只有1次是100ms,就断定我们性能下降了吗,显然是不可靠的。那我们为什么要来找出这个值来参考的,是为了做到心中有数,对于这种大的响应请求可以进行分析,看看是不是程序bug还是三方接口数据连接等等问题,要将自己的系统做到极致。

                 【分位值】

                   分位值判定一般分为95分位,90分位75分位。比如,当前100个请求,然后将这100个请求进行升序的排序,排在第95位的即为95分位,排在90位的即为90分位等。分位值越大,对于慢请求的影响就越敏感。

                                   

 

               现在已经确定了系统性能的衡量指标了,那最终的性能是需要相关的编码进行实现的。

       2.2、提高单机性能

                单机性能的提高关键技术之一是并发模型的设计,其中并发模型体现在两点:

                1、服务器的连接管理

                2、服务器的请求处理

                上面两大关键技术点对应到我们实际操作系统上其实就是IO模型和进程模型:

                1、I/O模型:阻塞、非阻塞、同步、异步

                2、进程模型:单进程、多进程、多线程

                到了这里,加上前面分析的指标数据,通过压测找到你系统当前单机的性能瓶颈,此时肯定定能知道怎么去优化你的代码。无非就是并发方面的编程啊,异步操作,多路复用啥的。

      2.3、减少单次任务响应时间

               首先需要确认当前系统是CPU密集型还是IO密集型,再针对问题提出解决方案。

             【CPU密集型】:需要处理大量CPU计算,可选用更高效的算法或者运算次数更少的算法来进行优化提升性能。比如,系统的相关序列化,采用更高性能的序列化算法,或者计算Hash值,选用更高性能的hash算法等。

             【IO密集型】:指大部分操作是在等待IO(磁盘IO/网络IO)完成。如数据库系统、缓存系统、Web系统等都属于IO密集型系统,那么这类系统的瓶颈可以如何优化呢:

              1、可分析Linux系统上的磁盘、文件系统、网络协议栈、网卡以及内存等。可以发现并进行优化。

              2、在任务的不同地方进行耗时统计,从而定位优化。

     2.4、集群

             单机性能达到极致之后,在遇到支撑不下的时候就可以堆机器了,就是采用集群模式。