企业级应用高性能可扩展架构设计
前言
马上又要618了,每年到了这个时候,商家就开始促销,价格低会吸引来超多用户,对系统来说就是更多的流量,技术上如何确保网站稳定运行,且不被超卖,同时还要让用户有个良好的购物体验。
12306网站在最开始的时候,经常出现系统瘫痪,而如今也已经能够支持同时上千万人同时抢票且不受影响。
这些都离不开高并发技术,以及根据业务进行架构设计,应对流量的冲击。
今天我们一起来谈谈这些与架构设计有关的技术
文章目录
- 前言
- 一. 高并发
- 1.1 什么是高并发
- 1.2 高并发有什么关键指标
- 二. 高可用
- 2.1 高可用的衡量指标
- 2.2 服务器的可用性数字化的衡量指标
- 总结
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
一. 高并发
1.1 什么是高并发
高并发,通常是指通过设计保证系统能够同时处理很多请求,也就是在同一个时间点,有很多请求同时访问同一个接口。
高并发是一种系统在运行过程中遭受的“短时间内大流量冲击” 的情况,如果处理不好,就很容易造成系统吞吐量下降,响应变慢,从而影响用户体验,甚至可能造成系统无法提供服务的情况。
这时候我们通常需要优化系统,硬件,网络,应用,数据库等来达到高并发要求。
1.2 高并发有什么关键指标
-
响应时间
响应时间是衡量系统性能的重要指标之一,它表示系统从接收请求到向用户返回响应所需要的时间。
响应时间是用户感知系统性能的关键因素之一,因为它直接影响到用户满意度和用户转化率。当一个用户发出请求时,如果系统不能在很短的时间内提供响应,则用户可能会感到不耐烦,并可能在等待时间过长后离开网站、应用或服务
从用户角度来说,响应时间越长,用户体验感越差,响应时间越短,用户体验越好,留存率也越好。
从系统角度来说: 响应时间决定着系统的性能,响应时间越短,系统性能越高,也就能更好的处理业务。
- 吞吐量
吞吐量是单位时间内系统所处理的用户请求数。
对互联网应用来说,吞吐量能够反映系统的负载能力。
公式1: 吞吐量=并发数/平均响应时间
公式2: 吞吐量=请求总数/总时长
- 每秒钟请求数(QPS)
QPS指的是服务器在一秒内共处理了多少个请求,主要用来表示读的请求。
依据二八原则,80%的流量是在20%的时间里产生的,比如现在有 5000000 个请求,预估白天的QPS=(5000000 0.8)/ 1260600.2 =462
然后分析业务得到最高QPS可能是平均的两倍,当前的系统峰值就是462*2=924
预估出QPS后,再根据峰值 QPS/单台机器可承受的qps, 算出需要多少台服务器。
机器数== 峰值QPS/ 单台机器最高可承受的QPS
- 每秒事务数TPS
举例来说,如果你在银行办理转账业务,每一次的转账都是一个事务,那么银行的TPS就是指每秒内可以处理多少笔转账业务。
TPS通常用于评估系统的性能和负载能力,同样适用于高负载场景下的互联网服务提供商。例如,电商平台可以通过监控TPS来判断系统的稳定性和用户满意度。
值得注意的是,虽然QPS和TPS都是用来衡量系统的吞吐能力,但由于事务通常比请求需要处理更多数据,并且需要更长的处理时间,因此,在大多数情况下,TPS 的值要比 QPS 小。
TPS主要包含以下三个过程:
- 客户端请求服务器端
- 在服务器端内部进行业务逻辑处理
- 服务器端响应客户端。
当一个用户访问一个完整页面时,请求+响应的整个过程就是一个TPS。
这一次完整的请求可能产生多次对服务器的请求,这些请求计入QPS
假设访问一个页面时候会请求服务器3次,这样的一次访问会产生1个TPS和3个QPS
-
访问量PV
pv是页面浏览量,用户每对网站中的一个网页访问1次均被记录1次,用户对同一个页面的多次访问被累计记录,PV是评价网站流量的最常用指标。 -
独立访客 UV
独立访客数记录标准一般为"一天",即一天内如果某访客从同一个IP地址来访问某网站n次的话,访问次数计作n, 独立访客数则计作1。
同一天内同一个IP多次访问同一个网站只记为1个。
二. 高可用
高可用性是指一个系统经过专门的设计后具备的减少停工时间并保持提供服务的高度可用性。该特性是衡量系统提供服务能力的一个特征,也是对系统进行设计时需要考虑的一个重要因素。
对于分布式数据库系统而言,“三高一易”(高可用、高可靠、高性能、易用性)几乎囊括了所有重要的特性。而随着互联网需求和技术的发展,高可用性被提到一个新的高度。CAP理论认为,A(可用性)应当被更加重视
2.1 高可用的衡量指标
- 可用性:系统必须能够在任何时候都处于正常运行状态,即便是在故障发生的情况下也应如此。
- 可靠性:系统必须能够保证每个用户请求都能够得到可靠的响应,而不是出现错误或系统崩溃等异常情况。
- 可恢复性:系统必须能够快速恢复到正常运行状态,以最小化业务中断和数据损失。
- 可扩展性:系统必须能够快速、有效地适应业务增长和变化,以满足不断变化的需求。
- 负载均衡:系统必须具备负载均衡的能力,能够平衡工作负载,充分利用所有可用资源,确保高性能和稳定性。
- 安全性:系统必须能够通过强大的身份验证、访问控制和数据加密等多重安全措施,保护数据和应用程序免受恶意攻击和数据泄露。
- 性能:系统必须能够处理和响应大量的用户请求,保持高性能和低延迟。
2.2 服务器的可用性数字化的衡量指标
- SLA(Service Level Agreement):服务等级协议是指服务提供商与客户之间达成的关于服务水平的约定,通常包括服务的可用性、响应时间、故障修复时间等。
- SLO(service level objective)服务等级目标,指的是设计可用性,其意思即为设计该产品时期望达到的可用性目标。
- MTBF(Mean Time Between Failures):平均故障间隔时间,是指系统正常工作期间,平均多长时间才会发生一次故障。
- MTTR(Mean Time To Repair):平均修复时间,是指当系统出现故障时,平均需要多长时间才能进行修复。
- MTTF(Mean Time To Failure):平均失效时间,是指系统平均能够稳定运行的时间,即从系统启动或上次故障发生以来到下一次故障发生之间的时间。
- Uptime:系统正常运行时间的百分比,可以通过系统日志或监控工具来计算。
- Response Time:服务响应时间,是指从用户发出请求到系统返回响应之间所需的时间。该指标是用户感受服务性能的重要指标,对于一些需要低延迟响应的应用程序而言尤为重要。
- TPS(Transactions Per Second):每秒事务处理数,是指系统在每秒钟内能够处理的事务数量。该指标通常被用于衡量系统的处理能力和负载能力。
上述指标可以帮助服务提供商评估其服务的可用性和性能,便于提高服务质量和满足客户需求。
我们平常经常看到互联网公司喊口号,我们今年一定要做到3个9、4个9,即99.9%、99.99%,甚至还有5个9,即99.999%。 这些就是服务器的可用性数字化的衡量指标的SLA 服务等级协议。
这么多9是怎么计算的呢?
全年拿365天做计算吧,看看几个9要停机多久时间做能才能达到!
1年 = 365天 = 8760小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
从以上看来,全年停机5.26分钟才能做到99.999%,即5个9。依此类推,要达到6个9及更多9,可以说非常难了。
总结
本文主要介绍了高性能架构的理论基础,后续再讲解架构的设计案例。
💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
相关文章:
企业级应用高性能可扩展架构设计
前言 马上又要618了,每年到了这个时候,商家就开始促销,价格低会吸引来超多用户,对系统来说就是更多的流量,技术上如何确保网站稳定运行,且不被超卖,同时还要让用户有个良好的购物体验。 12306…...
【安全架构】
概念 安全是产品的属性,安全的目标是保障产品里信息资产的保密性(Confidentiality)、完整性(Integrity)和可用性(Availability),简记为CIA。 保密性: 保障信息资产不被未…...
RabbitMq-高级
参考:https://blog.csdn.net/dingd1234/article/details/125032383 1 TTL TTL QUEUE 声明args TTL MESSAGE postmessage中设置 区别:过期消息会直接删除消息,过期队列若配置死信队列会移到死信队列 ps:同时配置两个已小的为准 2…...
iOS App的打包和上架流程
转载:iOS App的打包和上架流程 - 掘金 1. 创建账号 苹果开发者账号几种开发者账号类型 个人开发者账号 费用:99 美元/年(688.00元)协作人数:仅限开发者自己不需要填写公司的邓百氏编码( D-U-N-S Number…...
Net6中遇到的一个很奇葩的问题
先来看一段代码,是控制台应用程序 internal class Program{static void Main(string[] args){Test().Wait();}private static async Task Test(){await Task.Run(() >{Debug.WriteLine("线程内输出");});Debug.WriteLine("线程外输出");}}执…...
2940. 花坛的最小改变次数
Powered by:NEFU AB-IN Link 文章目录 2940. 花坛的最小改变次数题意思路代码 2940. 花坛的最小改变次数 题意 略 思路 首先需要区间查询gcd,想到st表 其次思路,固定左端点,二分右端点,找gcd与区间长度相等的右端点,个…...
安装源代码 QT 4.8.7
在centos7.9.2009 (Core)操作系统上,安装qt 4.8.7 查看centos版本:cat /etc/centos-release 安装g:sudo yum install gcc gcc-c g版本查看(gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)):g -v 先安装…...
PINN学习与实验之拟合sin(x)
首先给出数学上的知识。 1. 2. 3. 其次给出PINN最基础的理解与应用说明。 1.PINN中的MLP多层感知机的作用? 答:目的是用来拟合出我们需要的那个 常微分方程,即函数逼近器。 2.PINN中物理信息的作用? 答:用于约束MLP反向…...
Java中进制转换的两种方法你知道吗?
目录 十进制转其他进制 其他进制转十进制 实战: A进制转B进制 关于大数运算可以参考躲不掉的高精度计算,蓝桥杯必考_高精度算法在哪些比赛考_无忧#的博客-CSDN博客 十进制转其他进制 使用 Integer.toString(int n,int radix) 方法,该方法…...
Qemu搭建ARM Vexpress开发环境
Qemu搭建ARM Vexpress开发环境 文章目录 Qemu搭建ARM Vexpress开发环境Qemu简介QEMU安装前的准备工作QEMU 安装的两种方式通过网络在线安装源码编译安装源码获取QEMU依赖库安装编译安装 命令选项qemu的标准选项qemu显示选项网络属性相关选项kvm的网络模型 Ubuntu 双网卡&#x…...
JMM如何实现volatile写/读的内存语义
内存屏障类型表 StoreLoad Barriers是一个“全能型”的屏障,它同时具有其他3个屏障的效果。现代的多处理器大多支持该屏障(其他类型的屏障不一定被所有处理器支持)。执行该屏障开销会很昂贵,因为当前处理器通常要把写缓冲区中的数…...
Smali的使用技巧:快速定位Android应用程序中的关键代码
简述 Smali是一种Android应用程序的Dalvik虚拟机指令集汇编语言,用于编写和修改应用程序的DEX文件。通过编写和修改Smali代码,可以实现对Android应用程序的定制化和逆向分析。Smali语言类似于汇编语言,直接操作Dalvik虚拟机指令集。 Smali代…...
04_两种常见的网页反爬措施及应对方法
一、封禁IP地址反爬 1、应对思路: 理解这种反爬方法的含义:当我们用自己电脑的ip地址短时间,高频率访问某个具有此类反爬设置的网站,这种网站就会把我们的ip地址封禁,一般都是封24小时或者其他时间。解决方案:通过代理ip访问,这种方式只不过就是让你有了重新访问网页的…...
安装docker环境,并制作docker镜像
docker环境安装 进入linux虚机后,安装docker环境,制作docker镜像并运行,进入运行中的容器,查看挂载的日志或报告 1.安装docker sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 2.使用docker仓库安装…...
MySQL数据库 – node使用
1 MySQL查询对象 2 MySQL查询数组 3 mysql2库介绍使用 4 mysql2预处理语句 5 mysql2连接池使用 6 mysql2的Promi 这里仅说明如何使用服务器连接数据库并进行操作。 预处理语句就是可以输入变量的语句(表现形式是有符号:?)。需…...
JAVA使用HTTP代码示例模板
以下是一个使用Java发送HTTP请求的示例代码: java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpExample { public static void main(String[] args) { try…...
elementui tree 支持虚拟滚动和treeLine (下)
由于我之前没有发布过npm 包,这里还得现学一下。 参考资料: 链接: 如何写一个vue组件发布到npm,包教包会,保姆级教学链接: vue组件发布npm最佳实践 按照上面的步骤,我通过 vue-sfc-rollup 生成了项目,…...
富人父母都教给孩子什么样的财富思维?
1.认清金钱的价值和作用,不要否认或忽视它对生活的影响。 2.提高社交能力,学会与不同的人沟通和合作,扩大人脉和资源。 3.理性消费,让钱在流动中产生效益,而不是囤积或浪费。 4.释放自己的欲望,追求自己想要…...
国内比较火的报表工具测评——Smartbi电子表格软件和Finereport
最近在学习BI软件,因为最近工作中需要开发报表,因此选用了国内市场比较热门的报表工具——Finereport和Spreadsheet进行学习。 BI软件经常会定期发布新的版本,增加新的功能模块,或者对现有功能进行增强,提升运行效率。…...
变电所运维云平台在电力系统中的应用
安科瑞虞佳豪 变电所运维云平台可以看做是电力监控系统的网络应用延伸,变电所运维云平台通过互联网,电力运维人员通过手机可以随时随地了解工厂配电系统的运行情况,做到无人值守或者少人值守,同时可以监测用能状况、漏电、线缆异…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
