系统的三高指标

简介: 前面我们将功能性的需求几乎都已经都陈列出来,这些几乎是从外部因素考虑的。但对于运行系统的环境,以及系统的并发能力也是我们需要考虑的,这部分可称为非功能需求。非功能性需求包括:可用性、并发能力、性能、安全防护能力、水平扩容缩容能力、运维/运营成本等
一个人走的很快,一群人走的更远,欢迎留言点评提出你们的问题和建议。未来的日子里,一起成长,加油!!!

前言

本项目是重学Go语言后的实战项目,主要目的是加深Go学习,并通过此学习,对系统的高可用,高并发,高性能能够进一步的学习。
前面我们将功能性的需求几乎都已经都陈列出来,这些几乎是从外部因素考虑的。但对于运行系统的环境,以及系统的并发能力也是我们需要考虑的,这部分可称为非功能需求。

非功能性需求包括:可用性、并发能力、性能、安全防护能力、水平扩容缩容能力、运维/运营成本等

比如:一个系统的可用性达到99.99%。并发能力达到100万QPS,请求延迟低于500ms,能防范跨站脚本攻击,1分钟快速扩容,总成本控制在10万元每月等等,这些都是非功能需求要满足的。

所以,系统需要满足非功能需求的一些指标,以防止系统在运行时出现重大的故障。

秒杀系统的核心非功能需求主要有:高可用指标、高性能指标、高并发指标

高可用指标

  • MTBF(Mean Time Between Failure 平均可用时长) :系统正常、稳定运行的平均时长
  • MTTR(Mean Time to Repair 平均修复时长):系统从失效后到恢复正常所耗时的平均时间
  • SLA(Service-Level Agreement 服务等级协议):用于评估服务可用性等级,公式是SLA=MTBF/(MTBF+MTTR)。可用性高于99.99%,是指SLA高于99.99%

系统高可用的指标是SLA来判断

系统P 是由四个子系统a、b、c、d构成。那么,系统P的SLA是低于其他四个子系统;下游系统的SLA通常需要高于上游SLA,这样才能保证上游系统的稳定

高并发指标

QPS(Queries Per Second 每秒查询率)是衡量系统的承载能力。

不同的业务对并发能力要求不一致,用户量小的系统对并发要求相对比较低,用户量大的就要求比较高。

评估高并发指标,通常需要从用户增长、用户习惯、业务形态、系统承载能力等方面分析。就比如,秒杀系统,用户量肯定远大于库存量,库存一旦为0则活动就结束。

系统资源在设计上保留10%~20%的余量,以便应对突发流量

评估用户增长情况,需要月/日活用户的量,再加上因推广过程带来的用户增长来预估一个当日活动可能达到一个用户量。然后在业务系统设计上保留余量。

比如评估业务承载最高270万QPS,底层Redis承载能力1万QPS。实际设计中,业务承载服务300万,要高些以防突发突增流量,底层Redis资源8000QPS,低一些,因为底层资源比较固定不容易扩容,需要限制QPS不要超出其最大承载能力

高性能指标

对于电商平台如果访问请求超过2s影响用户体验,超出5s有可能导致流失用户,造成损失。以下因素将会影响性能指标:

  • 用户网络环境
  • 请求/返回数据大小
  • 业务系统CPU、内存、磁盘等性能
  • 下游资源的性能
  • 算法实现是否高效
  • 请求链路长短

为确保满足性能要求,我们对这边流量比较大的系统一般需要做大量的性能测试和性能调优。

场景:用户请求系统的网络环境延迟100ms,请求/返回数据处理为10ms,业务内部磁盘操作30ms,请求下游资源10ms,算法计算5ms。那么,整个请求共耗时将超过155ms。

如果超过155ms对公司造成一定损失,那么我们还需要继续优化性能。当然,优化过程也需要考虑成本等各种问题,并非指标越高越好。

目录
相关文章
|
负载均衡 算法 应用服务中间件
面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
字节跳动面试题:Nginx有哪些负载均衡算法?Nginx位于七层网络结构中的哪一层?
375 0
|
网络协议 容灾 Java
【游戏】服务器性能测试(四) 简单压测工具理论篇
做了一个简单的压测交互关系,对服务器压测需要大量的“真实”用户,每个用户都是独立与服务器进行协议通信。首先压测工具需要有网络模块的支持,目前大部分的游戏网络通信是基于TCP协议的,也有一些是基于UDP协议的。其次同时需要支持这么多用户运行,就需要考虑多线程模块。最后就是压测所需的并发控制与事务统计等功能。 1. 网络编程 压测的用户数会需要很多,少则三五千,多则上万。图1的用户与socket比例为1:1可以看出,创建socket的对象数量也会很大,而实际压测中很多情况下用户与socket比例可能会更高。
1413 0
【游戏】服务器性能测试(四) 简单压测工具理论篇
|
Dubbo Java 应用服务中间件
Dubbo-线程池调优实战分析
Dubbo-线程池调优实战分析
1112 0
|
监控 IDE 开发工具
【esp32c3配置arduino IDE教程】
设计用户操作界面,该设备具备简单易用的操作界面,外加显示屏SSD1306和旋转编码器进行显示和控制,用户后期可进行二次开发WiFi或蓝牙连接电脑或手机监控。
2495 0
|
9月前
|
数据采集 人工智能 安全
1000多个智能体组成,AI社会模拟器MATRIX-Gen助力大模型自我进化
在人工智能领域,大型语言模型(LLMs)的发展迅速,但如何提升其指令遵循能力仍是一大挑战。论文提出MATRIX-Gen,一个基于多智能体模拟的AI社会模拟器。MATRIX-Gen通过模拟智能体交互生成多样化的现实场景,不依赖预定义模板,从而合成高质量指令数据。它包括MATRIX模拟器和MATRIX-Gen指令生成器,能生成监督微调、偏好微调及特定领域的数据集。实验表明,使用MATRIX-Gen合成的数据集微调后的模型在多个基准测试中表现出色,显著优于现有方法。然而,该方法也面临智能体和场景规模对数据质量的影响等挑战。
338 33
|
11月前
|
Java API Spring
Java实现异步编程的几种方式
通过本文的介绍,我们了解了在Java中实现异步编程的几种常用方式。每种方法都有其优点和适用场景,具体选择哪种方式应根据实际需求和场景决定。如果任务较简单,可以使用 `Thread`或 `ExecutorService`;如果需要处理复杂的异步流程,可以考虑使用 `CompletableFuture`或Reactive编程框架。希望本文对您理解和实现Java异步编程有所帮助。
437 1
|
11月前
|
前端开发 Linux iOS开发
使用Python推送FLV流
本文介绍如何使用Python推送FLV流,涵盖环境准备、FFmpeg安装、创建Flask应用及前端页面,最后提供运行服务器和查看结果的步骤,适合初学者参考实践。
394 0
|
Java UED 开发者
揭开Java性能提升之谜:异步编程如何让你的应用响应速度飞升?
【8月更文挑战第30天】随着互联网技术的发展,系统性能和用户体验成为关注焦点,异步编程因其能提高应用响应速度和吞吐量而在Java领域广泛应用。本文将详细阐述Java异步编程的概念与优势,并通过实战示例展示其在实际项目中的应用,如使用`Future`、`Callable`及`CompletableFuture`等接口和类实现异步操作,帮助开发者更好地理解和运用这一技术,以提升程序性能和用户体验。
132 0
|
负载均衡 算法 Java
java中nginx负载均衡配置
java中nginx负载均衡配置
205 0