架构思维:高性能架构_01基础概念

server/2025/3/15 2:54:08/

文章目录

  • 概述
  • 基础概念
    • 性能指标
    • 利特尔法则(O = T × L)
    • 系统优化策略
      • 1. 降低耗时(L↓)
      • 2. 增加容量(O↑)
      • 3. 增加时延(L↑)
    • 场景化指标选择
      • 响应时间优先
      • 吞吐量/容量优先
      • 平衡策略

在这里插入图片描述


概述

一个高性能系统的架构需要在客户端请求、网络静态缓存(如CDN)、网络接入、业务逻辑、数据缓存以及数据存储方面进行优化。接下来我们主要从这些方面来介绍如何实现一个高性能的架构。不过在进入具体的优化内容之前,我们需要先了解一下系统的高性能指标。

基础概念

性能指标

  • 响应时间(RT):请求从发起到接收响应的总耗时,包括网络传输、排队和执行时间。

    响应时间也称为响应时延(response latency,RT),是指从客户端发送一个请求到客户端接收到服务器端返回的响应结果所经历的时间,响应时间由请求发送时间、网络传输时间和服务器处理时间3部分时间组成。

  • 并发数(O):系统同时处理的请求数,反映系统容量。

    并发数:并发数也叫并发度,是指系统同时处理的请求数、事务数或者用户数等,不同场景下的统计方式有些许差别。

  • 吞吐量(T):单位时间处理的请求量(如QPS、TPS)

    吞吐量:吞吐量(throughput)也可以理解为吞吐率,即每秒处理的信息值,例如每秒事务数(transactions per second,TPS)、每秒请求数(HTTP requests per second,RPS)、每秒查询数(queries per second,QPS)等。


利特尔法则(O = T × L)

揭示了并发数(O)、吞吐量(T)和响应时间(L)的动态关系。

  • 初始阶段:吞吐量提升可增加并发数(O↑= T↑L)。

  • 饱和阶段:吞吐量达上限时,响应时间增加,导致请求堆积(O↑= T×L↑),需通过限流或扩容避免系统崩溃。

利特尔法则(Little’s law)由麻省理工学院的John Little教授提出并证明,它是基于排队论(queuing theory)发展而来的。

利特尔法则的内容是:在一个稳定的系统中,长时间观察到的平均顾客数量L等于长时间观察到的有效到达速率λ与平均每个顾客在系统中花费的时间W的乘积,即L=λW
将利特尔法则应用到3个性能指标中:O =TL
其中,

  • O代表容量,即系统同时容纳的请求或者数量,可以理解为并发数;
  • T代表吞吐量;
  • L代表响应时延。

系统优化策略

1. 降低耗时(L↓)

  • 减少排队时间(TQ↓)

    • 缩短队列长度:如调整Tomcat的acceptCount限制请求积压。
    • 异步处理:将耗时操作异步化(如消息队列),避免阻塞主线程。
  • 减少执行时间(TE↓)

    • 优化算法:如使用更高效的数据结构或缓存计算结果。
    • 并行处理:增加线程池大小(如Tomcat的maxThreads)或利用分布式计算。
    • 资源升级:使用更快的硬件(如SSD、高性能CPU)。

示例:商品详情页通过CDN缓存静态资源、优化数据库索引,将响应时间从200ms降至50ms,提升用户体验。

2. 增加容量(O↑)

  • 水平扩展:通过负载均衡横向添加服务器,提升整体吞吐量。
  • 垂直扩展:升级单机资源(CPU、内存)以处理更多请求。
  • 资源复用:使用连接池、线程池减少资源创建开销。

示例:双十一期间,通过弹性扩容云服务器集群,将并发处理能力从10万QPS提升至百万级。

3. 增加时延(L↑)

  • 允许合理排队:通过延长队列(如消息队列积压)暂时容纳突发流量,避免直接拒绝请求。
  • 削峰填谷:将高峰流量缓冲至队列,后端按固定速率消费。

示例:购票系统在抢购时引导用户进入排队页面,提示“当前排队人数较多”,缓解瞬时压力。


场景化指标选择

响应时间优先

  • 适用场景:实时交互系统(如在线游戏、视频会议)、API服务。
  • 优化手段
    • 缓存:使用Redis缓存热点数据,减少数据库访问。
    • CDN加速:静态资源就近分发,降低网络延迟。
    • 数据库优化:添加索引、分库分表减少查询耗时。

吞吐量/容量优先

  • 适用场景:日志处理、批量任务、高并发抢购。
  • 优化手段
    • 异步化:通过Kafka解耦生产与消费,提升吞吐量。
    • 无状态设计:便于水平扩展,如微服务架构
    • 限流与降级:通过Sentinel或Hystrix保护核心链路,确保系统不崩溃。

平衡策略

  • 动态调整:根据流量波动自动扩缩容(如Kubernetes HPA)。
  • 资源隔离:关键业务与非关键业务使用独立资源池,避免相互影响。

在这里插入图片描述


http://www.ppmy.cn/server/175039.html

相关文章

python web开发django库安装与使用

下面我将指导您如何安装 Django 库以及基本的使用方法。Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。以下是详细的步骤: 1. 安装 Django 首先,确保您的系统上已经安装了 Python 和 pip(Python 的包…

[Linux] Not enough free space to extract *.zip or file

原因分析: 导致该错误的主要原因是,虽然你的主分区确实有足够的可用空间,但很多图形解压工具在解压时会默认先把文件写到一个较小的临时文件系统(tmpfs),比如这里只显示 1.6 GB。ZIP 文件在解压过程中会产…

解决git fetch 成功后还是不能checkout到fetch分支

错误记录 当代码仓里分支信息非常多时,如果每次都用git pull更新信息,会耗费很长时间,因此可以用git fetch把我们要checkout的分支线fetch下来,再去checkout。但是,我遇到一个问题,这个看起来已经fetch到指…

框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性

最近在思考一个问题:如何能够更好的分享主流框架源码学习笔记(主要是源码部分)?让有缘刷到的同学既可以有所收获,还能保持对相关技术架构探讨学习热情和兴趣。以及自己也保持较高的分享热情和动力。 今天尝试用一个SQL查询作为引…

fpga系列 HDL:ModelSim 波形绘制tips

Stop Drawing 按钮 暂停波形更新: 点击“Stop Drawing”按钮时,ModelSim 会暂停将仿真结果实时绘制到波形窗口中。仿真继续运行,波形窗口不会实时更新显示新的仿真数据。 提高仿真速度: 在大规模设计或长时间仿真的情况下&#x…

Tomcat 安装

一、Tomcat 下载 官网:Apache Tomcat - Welcome! 1.1.下载安装包 下载安装包: wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz 安装 javajdk。 yum install java-1.8.0-openjdk.x86_64 -y /etc/altern…

软件工程概述、软件过程模型、逆向工程(高软45)

系列文章目录 软件工程概述、软件过程模型、逆向工程。 文章目录 系列文章目录前言一、软件工程概述二、能力成熟度模型1.能力成熟度模型CMM2.能力成熟度模型集成CMMI 三、软件过程模型1.瀑布模型SDLC2.原型化模型3.螺旋模型4.增量模型5.喷泉模型6.敏捷模型7.统一过程模型RUP 四…

数字图像处理与Python语言实现-Box模糊CUDA实现

Box模糊CUDA实现 文章目录 Box模糊CUDA实现1、Box模糊的基本原理2、算法优化:滑动窗口技术3、参数对模糊效果的影响4、Box模糊的优缺点5、与高斯模糊的对比6、实际应用场景7、算法实现7.1 PyCUDA实现7.2 CuPy实现7.3 C++与CUDA实现8、总结在图像处理领域,**Box模糊(方框模糊…