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

文章目录

  • 概述
  • 基础概念
    • 性能指标
    • 利特尔法则(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)。
  • 资源隔离:关键业务与非关键业务使用独立资源池,避免相互影响。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决stylelint对deep报错

报错如图 在.stylelintrc.json的rules中配置 "selector-pseudo-class-no-unknown": [true,{"ignorePseudoClasses": ["deep"]} ]

VScode 中文符号出现黄色方框的解决方法

VScode 中文符号出现黄色方框的解决方法 我的vscode的python多行注释中会将中文字符用黄色方框框处: 只需要打开设置搜索unicode,然后将这一项的勾选取消掉就可以了: 取消之后的效果如下: 另一种情况:中文显示出现黄色…

大模型架构记录2

一 应用场景 1.1 prompt 示例 1.2 自己搭建一个UI界面,调用接口 可以选用不同的模型,需要对应的API KEY 二 Agent 使用 2.1 构建GPT

深度学习实战车辆目标跟踪与计数

本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本…

升级到Android Studio 2024.2.2 版本遇到的坑

一、上来就编译报错,大概率是因为选择了替换安装,本地配置文件出错 找到本地当前版本的配置文件,删掉,重启studio就好了: 1、打开终端 2、“cd /Users/用户名/Library/Application\ Support/Google” //到Google目录 …

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…

【网络安全工程】任务11:路由器配置与静态路由配置

目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用&#xff1a;通过路由表进行数据的转发。 2、交换机的作用&#xff1a;通过学习和识别 MAC 地址&#xff0c;依据 M…

如何用更少的内存训练你的PyTorch模型?深度学习GPU内存优化策略总结

在训练大规模深度学习模型时&#xff0c;GPU 内存往往成为关键瓶颈&#xff0c;尤其是面对大型语言模型&#xff08;LLM&#xff09;和视觉 Transformer 等现代架构时。由于大多数研究者和开发者难以获得配备海量 GPU 内存的高端计算集群&#xff0c;掌握高效的内存优化技术至关…

Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)

Dify部署参考&#xff1a;Dify Rag部署并集成在线Deepseek教程&#xff08;Windows、部署Rag、安装Ragan安装、安装Dify安装、安装ollama安装&#xff09; DifyDeepSeek - Excel数据一键可视化&#xff08;创建步骤案例&#xff09;-DSL工程文件&#xff08;可直接导入&#x…

linux下ollama离线安装

一、离线安装包下载地址 直接下载地址&#xff1a; https://github.com/ollama/ollama/releases/tag/v0.5.12 网络爬取地址&#xff1a; MacOS https://ollama.com/download/Ollama-darwin.zip Linux curl -fsSL https://ollama.com/install.sh | sh Windows https://olla…

MAC 搭建Dify+DeepSeek-R1整合部署

在开始安装之前&#xff0c;我们需要确保系统满足以下基本要求&#xff1a; CPU至少2核心内存至少4GB&#xff08;建议8GB以上&#xff09;硬盘空间至少20GB&#xff08;为了后续扩展&#xff09;操作系统支持&#xff1a;Windows、macOS或LinuxDocker环境 1. dify的安装步骤…

OpenManus介绍及本地部署体验

1.OpenManus介绍 OpenManus&#xff0c;由 MetaGPT 团队精心打造的开源项目&#xff0c;于2025年3月发布。它致力于模仿并改进 Manus 这一封闭式商业 AI Agent 的核心功能&#xff0c;为用户提供无需邀请码、可本地化部署的智能体解决方案。换句话说&#xff0c;OpenManus 就像…

springboot011基于springboot的课程作业管理系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得难了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等&#xff0c;你想解决的问题&#xff0c;今天…

swift -(5) 汇编分析结构体、类的内存布局

一、结构体 在 Swift 标准库中&#xff0c;绝大多数的公开类型都是结构体&#xff0c;而枚举和类只占很小一部分 比如Bool、 Int、 Double、 String、 Array、 Dictionary等常见类型都是结构体 ① struct Date { ② var year: Int ③ var month: Int ④ …

全域网络安全防御 健全网络安全防护体系

网络安全基本概念 网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断&#xff0c;使网络处于稳…

记录小白使用 Cursor 开发第一个微信小程序(二):创建项目、编译、预览、发布(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;二&#xff09;&#xff1a;创建项目、编译、预览、发布&#xff08;250308&#xff09;一、创建项目1.1 生成提示词1.2 生成代码 二、编译预览2.1 导入项目2.2 编译预览 三、发布3.1 在微信开发者工具进行上传3…

uploadlabs通关思路

目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一&#xff1a;直接修改或删除js脚本 方法二&#xff1a;修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程&#xff1a; 文件上传 pass-04 代码审计 文件上传 p…

CTFHub-FastCGI协议/Redis协议

将木马进行base64编码 <?php eval($_GET[cmd]);?> 打开kali虚拟机&#xff0c;使用虚拟机中Gopherus-master工具 Gopherus-master工具安装 git clone https://github.com/tarunkant/Gopherus.git 进入工具目录 cd Gopherus 使用工具 python2 "位置" --expl…

前端 | 向后端传数据,判断问题所在的调试过程

目录 ​编辑 1. 在 vue 文件中&#xff0c;在调用函数之前 先打印传入的数据 2. 在 js 文件中&#xff0c;打印接收到的数据 3. 在浏览器 Network 面板查看请求数据 4. 在 server.js 中查看请求数据 5. 确保 JSON 格式正确 知识点&#xff1a;JSON.stringify(req.body, …

STL之list的使用(超详解)

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 iterator的使用 1.2.3capacity&#xff08;容量相关&#xff09; 1.2.4 element access&#xff08;元素访问&#xff09; 1.2.5 modifiers&#xff08;链表修改&#xff09;…