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

文章目录

  • 一、互联网系统三高概述
    • 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.mzph.cn/pingmian/26110.shtml

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

相关文章

【OS】AUTOSAR OS调度器实现原理

目录 前言 正文 1.Scheduler逻辑原理概览 2.Scheduler配置 3.Scheduler具体实现原理 4.Scheduler初始化 5. Scheduler任务的插入 6.Scheduler任务的弹出 7.总结 前言 在<<【OS】AUTOSAR Os是如何启动第一个Task的>>一文中我们介绍了AUTOSAR Os是如何启动…

BCZYYb(钡铈锆钇镱)主要用作电解质 我国技术研究与生产步伐正在加快

BCZYYb&#xff08;钡铈锆钇镱&#xff09;主要用作电解质 我国技术研究与生产步伐正在加快 BCZYYb&#xff0c;钡铈锆钇镱氧化物&#xff0c;钙钛矿结构&#xff0c;外观为白色至浅黄色粉末状&#xff0c;主要用作电解质&#xff0c;功能是传输离子&#xff0c;具有化学稳定性…

硬核新品!M4E EDU民航考培一体无人机

天途上新啦&#xff01; 应我国民用无人机首项强制性国家标准《民用无人驾驶航空器系统安全要求》&#xff0c;天途对现有小型无人机训练机的飞控、电池、感知避障和电子围栏等软硬件全面升级设计&#xff0c;严格按国标GB42590-2023规范生产。 M4E EDU四轴多旋翼无人机是天途…

LabVIEW处理大量数据时,怎样确保数据的准确性和完整性?

在LabVIEW处理中&#xff0c;确保大量数据的准确性和完整性至关重要。以下是详细的多角度分析和建议&#xff0c;以确保在LabVIEW中处理大量数据时&#xff0c;数据的准确性和完整性&#xff1a; 1. 数据采集阶段 1.1 高精度硬件选择 选择高精度的数据采集硬件&#xff0c;如…

[数据集][目标检测]变电站火灾检测电力场景烟雾明火检测数据集VOC+YOLO格式140张2类别真实场景非PS合成

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;140 标注数量(xml文件个数)&#xff1a;140 标注数量(txt文件个数)&#xff1a;140 标注类别…

Hive的存储格式和压缩算法的特点和选择

1、数据存储格式&#xff1a; ①TEXTFILE HIVE 中默认的存储格式&#xff1b; 一般使用在数据贴源层(ODS 或 STG) &#xff0c;针对需要使用脚本 LOAD 加载数据到 HIVE 数仓表中的情况&#xff1b;需要把表里数据导出或直接可以查看等场景&#xff0c;作为BI供数 易读性…

服务部署:使用docker部署开源Xxl-Job任务调度平台项目

一、项目构建 1、从gitee上下载源码&#xff1a;xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。https://gitee.com/xuxueli0323/xxl-job 2、本地使用…

适时示弱,才能在不动声色中自我沉淀,于韬光养晦中成就自己

适时示弱&#xff0c;才能在不动声色中自我沉淀&#xff0c;于韬光养晦中成就自己。 言语越怂的人格局越大你是否有过这样的经历&#xff0c;与路人因鸡毛蒜皮的小事起了争执&#xff0c;然后情绪失控大打出手。与家人因观点看法不同&#xff0c;最后争得面红耳赤&#xff0c;…

wordpress轻量免费主题

WordPress建站公司 适合提供WordPress建站服务的公司或个体(个人)工作室使用的WordPress建站公司主题模板。 https://www.jianzhanpress.com/?p545 首屏大图红色简洁wordpress主题 首屏大图红色简洁wordpress主题&#xff0c;非常地高端大气上档次&#xff0c;可用于多个行…

Linux 系统迁移中的 tar(bsdtar)备份陷阱与解决方案

&#xff08;首发地址&#xff1a;学习日记 https://www.learndiary.com/2024/06/bsdtar-numeric-owner/&#xff09; 朋友们&#xff0c;大家好&#xff01;我是来自淘宝网学习日记小店的 learndiary&#xff0c;专注于 Linux 服务领域。今天&#xff0c;我想和大家分享一次我…

轻松驾驭视频节奏:灵活调整视频播放速度,让视频内容更出彩!

视频已经成为了我们生活中不可或缺的一部分。无论是观看电影、电视剧&#xff0c;还是浏览短视频、直播内容&#xff0c;我们都希望能够根据自己的喜好和需求来调整视频的播放速度&#xff0c;甚至精确控制每一秒的播放内容。那么&#xff0c;如何轻松实现这一愿望呢&#xff1…

go语言接口之http.Handler接口

package httptype Handler interface {ServeHTTP(w ResponseWriter, r *Request) }func ListenAndServe(address string, h Handler) error ListenAndServe函数需要一个例如“localhost:8000”的服务器地址&#xff0c;和一个所有请求都可以分 派的Handler接口实例。它会一直运…

Pytorch 实现简单的 线性回归 算法

Pytorch实现简单的线性回归算法 简单 tensor的运算 Pytorch涉及的基本数据类型是tensor&#xff08;张量&#xff09;和Autograd&#xff08;自动微分变量&#xff09; import torch x torch.rand(5, 3) #产生一个5*3的tensor&#xff0c;在 [0,1) 之间随机取值 y torch.o…

OJ刷题——2080.夹角有多大II和2082.找单词、2085.核反应堆

2080.夹角有多大II 题目描述 Problem - 2080 运行代码 #include <iostream> #include <math.h> using namespace std; int main() {int T;double x1, y1, x2, y2;double res;scanf_s("%d", &T);while (T--) {scanf_s("%lf%lf%lf%lf", &…

机器学习算法 —— 贝叶斯分类之模拟离散数据集

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 实战&#xff08;贝叶斯分类&#xff09;莺尾花数据模拟离散数据集库函数导入数据导入和分析模型训练和预测 总结 实战&#xff08;贝叶斯…

群体优化算法---水波优化算法介绍以及应用于聚类数据挖掘代码示例

介绍 水波优化算法&#xff08;Water Wave Optimization, WWO&#xff09;是一种新兴的群智能优化算法&#xff0c;灵感来自水波在自然环境中的传播和衰减现象。该算法模拟了水波在水面上传播和碰撞的行为&#xff0c;通过这些行为来寻找问题的最优解。WWO算法由三种主要的操作…

打工人的福利,NewspaceGpt使用新体验

使用地址&#xff1a;https://newspace.ai0.cn/ NewspaceGpt大体所有功能一览(​​newspace.ai0.cn​​) 使用体验与官网完全一致&#xff0c;可在第一时间体验到官网所有新功能。无需特殊上网。内置多个Plus账号&#xff0c;不用担心次数不够。支持所有GPTS功能:DALLE-3模型(…

CTFHUB-SQL注入-时间盲注

本题用到sqlmap工具&#xff0c;没有sqlmap工具点击&#x1f680;&#x1f680;&#x1f680;直达下载安装使用教程 理论简述 时间盲注概述 时间盲注是一种SQL注入技术的变种&#xff0c;它依赖于页面响应时间的不同来确定SQL注入攻击的成功与否。在某些情况下&#xff0c;攻…

攻防世界---misc---embarrass

1、下载附件是一个数据包 2、用wireshark分析 3、ctrlf查找字符 4、 flag{Good_b0y_W3ll_Done}

angular2网页前端执行流程

示例代码版本&#xff1a; http://192.168.102.9/jas-paas/cloudlink-front-framework/tree/045f4811da782c107eca72f9bdea39ebaa086a7d 命令行运行命令启动服务 在开发环境下&#xff0c;打开项目目录&#xff0c;运行命令npm start,这个命令会进入package.json文件中&#x…