三高系统的架构设计方案:高并发、高可用、高性能

news2025/1/27 19:48:32

文章目录

  • 一、互联网系统三高概述
    • 1、互联网的三高
    • 2、高并发
    • 3、高可用
    • 4、高性能
  • 二、高并发、高性能技术解决方案
    • 1、多高的并发才算高并发?
    • 2、水平扩展
    • 3、负载均衡思想
    • 4、缓存思想
    • 5、池化复用思想
    • 6、异步思想
    • 7、预处理-惰性更新思想
    • 8、分而治之思想
  • 三、高可用技术解决方案
    • 1、总览
    • 1、集群架构
    • 2、熔断降级
    • 3、限流
    • 4、隔离
    • 5、多活架构
  • 四、总结

一、互联网系统三高概述

1、互联网的三高

高并发、高性能、高可用,它们是互联网系统架构设计永恒的主题。

三高并不是孤立的,而是相互支撑,相互影响的,随着并发量的提高,请求延迟肯定会增大,就越考验系统的可用性和性能。

2、高并发

高并发是指互联网系统能够同时处理大量请求的能力。随着互联网业务的快速发展和用户数量的增加,系统需要处理的数据和请求量也越来越大。为了应对这种场景,互联网系统需要具备高并发的能力,以避免请求的拥堵和延迟。

高并发相关常用指标有每秒查询率QPS、每秒事务数TPS、并发用户数等。
QPS:Queries Per Second,每秒查询数,指一台服务器每秒能够 响应的查询次数。
并发用户数:同时承载正常使用系统功能的用户数量。
TPS:Transactions Per Second每秒事务数,可以是一个接口、多个接口、一个业务流程,包括增删改操作。

3、高可用

高可用是指互联网系统能够持续提供服务,不受到故障或宕机的影响。互联网系统一旦出现故障或宕机,将会导致用户无法使用业务或者造成数据丢失等严重后果。因此,互联网系统需要具备高可用的能力,以保证服务的连续性和稳定性。

通常使用SLA衡量一个系统可用性有多高,目标系统7 x 24小时不间断服务:

时间维度:系统可以正常使用时间与总时间之比(全年),1年=365天=8760小时。
999系统全年不可用时间:99.9 = 8760 * 0.001 = 8.76小时
9999系统全年不可用时间:99.99 = 8760 * 0.0001 = 52.6分钟
99999系统全年不可用时间:99.999 = 8760 * 1.00001 = 5.26分钟
……

请求次数维度:请求总次数和失败的占比(1000次请求为例,相对简单)
系统可用性99%:表示1000个请求中允许10个出错。
……

通常以时间维度来判断一个服务的高可用性。9越多代表全年服务可用时间越长,服务更可靠,停机时间越短。
但往往存在网络/机房问题,应用更新发版导致服务不可用。
大厂多数业务4个9是刚需,5个9是目标,6个9是理想。

4、高性能

高性能是指互联网系统能够快速响应和处理多种事务的能力。互联网系统的性能是用户体验的重要保障,如果系统响应速度慢或者无法支持多种事务,将会导致用户流失和业务损失。因此,互联网系统需要具备高性能的能力,以满足用户的需求和业务要求。

通常使用RT响应时间、吞吐量数等来衡量系统的响应速度,程序处理速度非常快延迟低,所占内存少、CPU占用率低,说明性能高。
响应时间:系统对请求做出响应的时间。
吞吐量:单位时间内处理的请求数量。

二、高并发、高性能技术解决方案

1、多高的并发才算高并发?

这需要结合具体的场景和资源投入。

比如说,1万QPS的商品列表查看,这不属于高并发,稍微结合缓存即可实现。
比如说,5K的TPS下单接口,就属于高并发。

基本上读并发都可以通过缓存来解决,写并发的解决才相对比较难。

2、水平扩展

无状态的业务,可以通过水平扩展(Scale Out),只要增加服务器的数量,就能线性的扩充系统性能。

但是整个系统,整个链路,由于木桶的短板效应,并不是都可以通过增加服务器的数量提高性能的。
全链路的水平扩展很难,因为有状态的业务(数据库等)。

但是一些全链路都是无状态的服务,是可以通过水平扩容的方式提高性能的。
比如视频的编解码服务(依赖机器内存、CPU)就可以无限的水平扩展。

再比如短信服务,运营商对一个ip,每秒最大允许几百次请求,运营商这里就成了性能瓶颈(可以扩ip、多帐号)。

3、负载均衡思想

负载均衡有很多算法:轮询、随机、加权轮询、节点固定hash等。

全链路可以用到负载均衡的地方很多:
网络DNS解析IP轮询;
网关分发请求后端服务;
应用服务内部RPC、Feign调用;
数据存储,分库分表。

4、缓存思想

前端浏览器会缓存静态资源;
网络DNS解析缓存;
应用程序使用 本地缓存(JVM)/分布式缓存(Redis)。
数据存储MySql Query Cache。

5、池化复用思想

池化思想:线程池、对象池、连接池、内存池等等。基本用的就是单例模式/享元模式。

比如:
java线程池;
jdbc、redis、httpClient连接池;
SpringIOC容器对象池;
Integer对象的内存池。

6、异步思想

多线程/消息队列;
前端ajax异步请求;
RockerMQ/Kafka同步双写-异步刷盘;
应用程序多线程异步处理。

7、预处理-惰性更新思想

定时任务/懒加载。

报表数据通过定时任务提前计算好,定期刷新。
缓存预加载。

8、分而治之思想

Master-Worker思想。

Handoop中的MapReduce;
JDK fork/join;
消息队列的广播消息;
归并排序等。

三、高可用技术解决方案

1、总览

高可用的解决方案,归根结底就是冗余、集群化+自动故障转移failover
在这里插入图片描述

1、集群架构

将多个相同的应用程序集中起来提供同一种服务,某个节点故障并不影响系统的使用。
可以通过横向扩展增加节点,提高并发处理能力。

实际应用:
微服务集群;
Redis集群/Kafka/Nginx集群;
Nacos集群/MySql集群/ZK集群等。

2、熔断降级

熔断服务,就是为了防止整个系统故障,抛弃一些非核心的接口和数据,返回兜底数据。

3、限流

当访问频率或者并发请求超过其承受范围的时候,考虑限流来保证接口的可用性。

限流算法有很多:令牌桶、漏桶等。

4、隔离

服务和资源互相隔离,比如网络资源、机器资源、线程资源等,不会因为某个服务的资源不足而抢占其他服务的资源。

5、多活架构

同城双活-双机房:
两个机房部署在同城,物理距离较近,两个机房通过专线网络连接,比单个机房内延迟大一些,但整体的延迟是可以接受的。
比如:同机房0.1ms,同城双机房1ms(100公里内),北京到广州55ms。

异地多活-两地三中心:
两地是指2个城市,三中心是指有3个机房,其中2个机房在同一个城市。
同时提供服务,第三个机房部署在异地,只做数据灾备。

多活架构会导致架构非常复杂,

四、总结

三高方案不是简单的一字一句就能说明白的,是需要日积月累,一步步踩坑踩出来的。
只不过现在有一些大厂的案例,供我们来参考,实际落地的时候,还需要根据各个公司不同场景进行不同的设计。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

监听DB配置变更之go-broadcast简单实现

文章目录 1. 前言2. 分析3. 实现4. 问题5. 小结6. 参考 1. 前言 之前遇到一个需求,因为配置的查找是基于db的,而db的更改却无法实时通知到具体利用到这条数据的使用方,为了实现db数据变动时,能够尽快让使用方知道这条数据发生了变…

echarts组件x轴坐标显示不全解决方法

1.旋转: 修改前: option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun,Mon, Tue, Wed, Thu, Fri, Sat, Sun,Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130,120, 200, 150, 80, 70, 1…

802.11漫游流程简单解析与笔记_Part3

原定计划在Part3分析ns3的Roaming流程抓包,但ns3并不支持漫游: 看过Part1的应该都知道,标准关联流程是auth*2 associate*2 key*4,但ns3里面没有与auth有关的部分,third脚本里面有cap字段,但无auth也无key&a…

elementUI el-table高度heght和总结summary 同时使用 表格样式异常

背景 同时使用height和 show-summary 样式错位 解决方案 在钩子函数updated 中重新渲染此表格 <el-table :height"autoHeight" show-summary ref"dataTable" >updated() {this.$nextTick(() >{this.$refs.dataTable.doLayout();})},更改后的效果 …

代码随想录算法训练营第三十三天| 1005.K次取反后最大化的数组和,134. 加油站,135. 分发糖果

1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);int i 0;while (i < nums.length && nums[i] < 0 && k > 0) {nums[i] num…

Apollo9.0 PNC源码学习之Control模块(二)

前面文章&#xff1a;Apollo9.0 PNC源码学习之Control模块&#xff08;一&#xff09; 本文将对具体控制器以及原理做一个剖析 1 PID控制器 1.1 PID理论基础 如下图所示&#xff0c;PID各参数(Kp,Ki,Kd)的作用&#xff1a; 任何闭环控制系统的首要任务是要稳、准、快的响…

LLM Algorithms(1): Flash Attention

目录 Background Flash Attention Flash Attention Algorithm 参考 NIPS-2022: Flash Attention: Fast and Memory-Efficient Exact Attention with IO-Awareness idea&#xff1a;减少资源消耗&#xff0c;提升或保持模型性能。普通attention的空间复杂度是 --》降低到F…

探究IOC容器刷新环节初始化前的预处理

目录 一、IOC容器的刷新环节快速回顾 二、初始化前的预处理prepareRefresh源码分析 三、初始化属性源 &#xff08;一&#xff09;GenericWebApplicationContext初始化属性源 &#xff08;二&#xff09;StaticWebApplicationContext初始化属性源 四、初始化早期事件集合…

亚马逊冗余库存处理

在亚马逊放置90天以上的产品&#xff0c;又不在正常的动销&#xff0c;就要采取一定的措施了。清库存方式&#xff1a; 最直接的方式——降价促销&#xff08;至少要降价百分之三十以上&#xff0c;库龄越久&#xff0c;降价越狠&#xff09;参加官方的活动促销的话是需要符合…

在 Word 中,如何有效调整文字与下划线之间的距离

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 如果你在使用 Word 时&#xff0c;希望调整文字和下划线之间的距离&#xff0c;让它们看起来更加美观&#xff0c;可以按照以下步骤操作&#xff1a; 1. 在你想要加下划线的文字前后各加一个空格&…

Tdengine的时序数据库简介、单机部署、操作语句及java应用

Tdengine的时序数据库简介、单机部署、操作语句及java应用 本文介绍了Tdengine的功能特点、应用场景、超级表和子表等概念&#xff0c;讲述了Tdengine2.6.0.34的单机部署&#xff0c;并介绍了taos数据库的常见使用方法及特色窗口查询方法&#xff0c;最后介绍了在java中的应用。…

Harmony中的HAP、HAR、HSP区别

Harmony中的HAP、HAR、HSP区别 想要更加合理的开发一个企业级别的Harmony应用&#xff0c;那么就不得不提其中的HAP、HAR、HSP了。 前言 对于普通的用户来说&#xff0c;可能一个普通的应用就等于一个安装文件如安卓下的APK。但是对于Harmony应用开发工程师来讲&#xff0c;…

Python | Leetcode Python题解之第143题重排链表

题目&#xff1a; 题解&#xff1a; class Solution:def reorderList(self, head: ListNode) -> None:if not head:returnmid self.middleNode(head)l1 headl2 mid.nextmid.next Nonel2 self.reverseList(l2)self.mergeList(l1, l2)def middleNode(self, head: ListNo…

单田芳mp3百度网盘,单田芳评书下载百度云百度网盘

单老的评书还注重情感的表达。他善于运用声音、语气、语调等手段&#xff0c;将人物的情感刻画得淋漓尽致。无论是喜怒哀乐&#xff0c;他都能准确地把握人物的情感变化&#xff0c;并通过自己的表演将其传递给听众。这种情感的传递&#xff0c;使得听众能够更加深入地理解故事…

Springboot 开发之任务调度框架(一)Quartz 简介

一、引言 常见的定时任务框架有 Quartz、elastic-job、xxl-job等等&#xff0c;本文主要介绍 Spirng Boot 集成 Quartz 定时任务框架。 二、Quartz 简介 Quartz 是一个功能强大且灵活的开源作业调度库&#xff0c;广泛用于 Java 应用中。它允许开发者创建复杂的调度任务&…

Web--CSS基础

文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中&#xff0c;作用于当前标签 <img src "/imges/logo.jpg" alt "" style "width 400"…

react修改本地运行项目的端口

一、描述 如果你想让项目在你想要的端口打开的话&#xff0c;就需要进行设置 二、代码 设置一下pages.json文件就可以了&#xff0c;如下&#xff1a; 如果想打开项目不需要点击下面的链接地址&#xff0c;让他运行npm run dev之后自己直接打开到浏览器的话&#xff0c;在后…

智能楼宇的智慧心脏:ARMxy工业计算机在自动化控制中的应用

智能楼宇已成为现代化城市不可或缺的一部分。在这场数字化转型浪潮中&#xff0c;ARMxy工业计算机凭借其强大的处理能力、高度的系统兼容性和灵活的I/O配置&#xff0c;成为了推动楼宇自动化控制领域创新的重要力量。 某大型商业综合体项目&#xff0c;面临着传统HVAC系统效率低…

Android Studio历史版本

android studio的历史版本

OpenAI 宕机事件:GPT 停摆的影响与应对

引言 2024年6月4日&#xff0c;OpenAI 的 GPT 模型发生了一次全球性的宕机&#xff0c;持续时间长达8小时。此次宕机不仅影响了OpenAI自家的服务&#xff0c;还导致大量用户涌向竞争对手平台&#xff0c;如Claude和Gemini&#xff0c;结果也导致这些平台出现故障。这次事件的广…