首页 > 其他分享 >架构设计【高可用】

架构设计【高可用】

时间:2023-11-01 14:35:31浏览次数:30  
标签:架构设计 请求 可用 性能 系统 IO 100 分位

一、简介

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

二、提高系统性能

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

        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、集群

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

 

 

 

 

 

             

 

标签:架构设计,请求,可用,性能,系统,IO,100,分位
From: https://www.cnblogs.com/xiaobaicai12138/p/17800828.html

相关文章

  • 没有可用软件包 gitlab-jh。
    一问题安装gitlab时,提示“没有可用软件包gitlab-jh” 二解决1、yum没有找到对应依赖包,更新epel第三方软件库,运行命令:yuminstall-yepel-release更新完epel第三方软件库后,再次尝试使用yum命令安装对应的软件包2、如果还不行yumupdate更新,时间长一些  ......
  • prometheus几种高可用架构介绍及联邦架构部署
    **问题背景:**单个prometheus性能到达瓶颈问题、多个prometheus-server数据汇总问题等**prometheus监控数据持久化**首先大家都知道prometheus是自带数据存储功能的。优点是简单易用,基本无需配置缺点是:1、存在数据无法长久保存(尤其是频繁变更的监控对象,监控对象变化,短时间内监控......
  • 软件架构设计师需要记住的内容
    第一章系统工程与信息系统基础1软件开发方法(1)结构化开发特点:用户至上,自顶而下,逐步分解,严格区分工作阶段,每阶段都有任务和结果,强调系统开发过程的整体性和全局性,系统开发过程工程化,资料文档标准化。优点:理论基础严密,它的指导思想是在用户需求在系统建立之前就能被充分了解和理......
  • nginx+keepalived实现nginx服务的高可用
    本章教程,简单介绍如何利用keepalived实现nginx服务高可用。keepalived是一个开源的高可用性解决方案,它可以在Linux系统上实现负载均衡和故障转移。它主要用于确保在服务器集群中的主服务器出现故障时,能够快速切换到备用服务器,从而保证系统的可用性。keepalived通过VRRP(VirtualRout......
  • Ansible部署mariadb高可用集群
    节点规划主机名IP地址master192.168.238.10node1192.168.238.11node2192.168.238.12node3192.168.238.13准备四台虚拟机,使用CentOS-7-x86_64-DVD-2009.iso镜像基础准备1,安装ansible[root@masterroot]# yuminstallepel-release-y  #......
  • 系统集成易混淆知识点汇总-稳定性、可靠性、可用性、健壮性
    概念:(1)稳定性:系统的稳定性是指:受规则的约束,系统的内部结构和秩序应是可以预见的;系统的状态以及演化路径有限并能被预测;系统的功能发生作用导致的后果也是可以预估的。稳定性强的系统使得系统在受到外部作用的同时,内部结构和秩序仍然能够保持。(2)可靠性:可靠性是指从系统开始运行到......
  • shell 脚本一键部署 k8s 高可用集群
    github地址:https://github.com/Johnny-Demo/deploy/tree/k8s-cluster有不理解的地方可以私信我......
  • harbor登陆提示:核心服务不可用
    1、检查日志,错误明细redis组件应该出问题了tail-f/var/log/harbor/core.logdockerps2、排查redis日志,就重启过一次这个文件权限也不知道为什么就不对了,.查看harbor对应的docker-compose.yaml文件,该目录对应的本地的/data/redistail-f/var/log/harbor/redis.log解......
  • DWS临时内存不可用报错: memory temporarily unavailable
    本文分享自华为云社区《DWS临时内存不可用报错:memorytemporarilyunavailable》,作者:漫天。1、定位报错的DN/CN当出现memorytemporarilyunavailable报错时,首先根据报错信息确认具体是哪个cn/dn报的,如果报错信息没有类似dnxxxx_xxxx这样的信息,就是cn报的,需要去每个cn的日志里......
  • go list查看包可用列表
    ➜awesomeProjectgolist-m-versions"github.com/gin-gonic/gin"github.com/gin-gonic/ginv1.1.1v1.1.2v1.1.3v1.1.4v1.3.0v1.4.0v1.5.0v1.6.0v1.6.1v1.6.2v1.6.3v1.7.0v1.7.1v1.7.2v1.7.3v1.7.4v1.7.5v1.7.6v1.7.7v1.8.0v1.8.1v1.8.2......