系统SLA

news/2024/12/22 15:14:29/

SLA:Service-Level-Aggrement,即服务等级协议。常见的4中SLA指标:可用性、准确性、系统容量和延迟。

可用性(Availability)

可用性指的是系统服务能正常运行所占的时间百分比。

一般情况下,四个9的可用性(99.99%)或每年50分钟以内的中断时间,就被定义为高可用

虽然理论上来说,可用性越高越好,最好是到100%,但是现实告诉我们,从99% —》99.9% —》 99.99% —》99.9999% —》100%,难度是几何增加的,并且成本也越来越大。

在这里插入图片描述

我们在做系统设计或架构时,这是一个很重要的权衡点,假设可用性从99到99.9的成本是1,那么99.9到99.99的成本可能是10或20,这个代价是不是值得,很多时候是需要做一个trade-off的。

强如阿里云、亚马逊、谷歌等提供的云服务,也不能做到说100%的可用性。极端情况也会出现服务中断(机房着火、网线被挖断、发生地震等)。

我们以99.99%的可用性为例,这就意味着,我们一年的服务不可用时间最多为:365 * 24* 3600 * 0.0001 = 3153.6秒, 约等于52分钟。现在就能够看出来,假如说多一个9的可用性,其实就意味着服务不可用时间缩短了10倍,难度是倍增的。

准确性(Accuracy)

准确性指的是系统在一定时间段内,能够接受的数据丢失或数据不准确的程度。

往往有两个指标:一定时间范围内数据错误率、一定时间范围内数据丢失的比例,我这里用Error Rate和Miss Rate来表示。

不准确率,一般是针对OLAP系统来说的,因为更加注重分析的能力,因此能够接受一定程度的不准确性。假设5分钟内的错误率为1%,意味着,在五分钟内,假如来了10000的请求,那么允许错误的请求为10000 * 1% = 100个。

丢失率其实同理,就是能接受的数据丢失的比例。

关于OLAP和ALTP系统,我这里不做展开,分别举两个例子,详细的内容自行google。

OLAP:Doris数据库、ClickhouseOLTP:Mysql、Oracle

系统容量(Capacity)

系统容量通常指的就是系统的负载,我们可以用核心链路的QPS(Query per second)和TPS(Transaction per second)或者吞吐量来表示。

那我们在系统建设完成之后,怎么给出这个系统的负载呢?通常有以下几种方式:

  • 压测,可以通过Jmeter压测工具
  • 限流,在网关或server端做限流,例如使用google 的guava中的RateLimit或者使用分布式的缓存中间件。

当然,我们在压测或限流中,需要注意几点:

  • 压测数据尽量避免热点、需要做到足够分散,数学上叫离散。
  • 压测环境的配置要跟生产环境严格一致,这里给出几个细项:服务器的cpu、内存、磁盘(是否SSD)、服务器的带宽、所在网络域、数据库的相关配置等。
  • 一般系统都会用到缓存,那么需要考虑缓存命中率。因为命中缓存和直接查库,性能相差很大。性能差距可以参考下面的延迟数量级。
  • 限流,假如是利用的进程级别的限流,那么可能会不准,依赖于上游流量负载的策略。
Latency numbers every programmer should know
L1 cache reference ......................... 0.5 ns
Branch mispredict ............................ 5 ns
L2 cache reference ........................... 7 ns
Mutex lock/unlock ........................... 25 ns
Main memory reference ...................... 100 ns             
Compress 1K bytes with Zippy ............. 3,000 ns  =   3 µs
Send 2K bytes over 1 Gbps network ....... 20,000 ns  =  20 µs
SSD random read ........................ 150,000 ns  = 150 µs
Read 1 MB sequentially from memory ..... 250,000 ns  = 250 µs
Round trip within same datacenter ...... 500,000 ns  = 0.5 ms
Read 1 MB sequentially from SSD* ..... 1,000,000 ns  =   1 ms
Disk seek ........................... 10,000,000 ns  =  10 ms
Read 1 MB sequentially from disk .... 20,000,000 ns  =  20 ms
Send packet CA->Netherlands->CA .... 150,000,000 ns  = 150 ms

延时(Latency)

延迟指的是系统在收到用户请求到响应这个请求所耗费的时间。针对某次请求,也可以用rt来表示。

更通用的延迟表示格式为,P95为20ms或p99在20ms。这里的P99表示的是百分之99的请求,都在20ms内返回了,剩余百分之一的请求超过了20ms。

这是一项很重要的指标,往往系统容量和延迟是我们讨论的最多的。

总结

假如作为一个架构师,利用SLA精准的描述和定义一个系统是非常重要的。在做架构演进或优化过程中,始终将SLA作为衡量标准。

当然作为一名技术,当下次客户问到,你们系统/产品提供什么样的SLA?就可以按照以上四个维度来解释。


http://www.ppmy.cn/news/1458094.html

相关文章

环形链表问题详解

引言 环形链表的题大家都应该做过,如果没有做过可以去某扣上做一下 ,下面有传送门 141. 环形链表 - 力扣(LeetCode)https://leetcode.cn/problems/linked-list-cycle/submissions/530160081/ 正文 如果在面试的情况下出现了环形链表的题大…

umount.nfs : /out:device is busy

-f, --force force unmount (in case of an unreachable NFS system) -l, --lazy detach the filesystem now, and cleanup all later-l 这么牛?现在分离文件系统,稍后再进行清理

嵌入式linux学习第一天

参考正点原子Linux开发文档。记录下知识点。 Shell 基本操作 前面我们说 Shell 就是“敲命令”,那么既然是命令,那肯定是有格式的,Shell 命令的格式 如下: command -options [argument] command: Shell 命令名称。 options&…

Star-CCM+通过将所有部件创建一个区域的方式分配至区域后发热功率的赋值方法介绍

前言 Star-CCM通过将所有部件创建一个区域的方式分配至区域后发热功率的赋值方法与上文介绍的方法基本一致。 赋值热源 ● 热源类型选择: 本文按照“总热源”的类型展开介绍。具体的操作方式如下图1所示,在区域内下的物理条件中的能量源选项选择总热…

深入探索 Vue 中的 createVNode 与 resolveComponent

在 Vue 开发中,createVNode和resolveComponent是两个至关重要的工具,它们为我们提供了强大的能力来灵活地创建和操控组件。 一、首先,让我们深入了解一下createVNode。 这是一个用于创建虚拟节点的关键函数,通过它,我…

去水印思考

当然,关于去除图片或视频中水印的代码改进,这需要基于您当前使用的技术栈(如Python、OpenCV、PIL等)和具体的需求(例如水印的位置是否固定、水印的颜色、透明度等)。这里我提供一个基于Python和OpenCV的基本…

Rust web简单实战

一、使用async搭建简单的web服务 1、修改cargo.toml文件添加依赖 [dependencies] futures "0.3" tokio { version "1", features ["full"] } [dependencies.async-std] version "1.6" features ["attributes"]2、搭…

软设之编译程序与解释程序

编译型语言以c语言为典型,解释型语言以java为典型。 二者共同点: 1.都是高级程序语言 2.有词法分析,语法分析,语义分析过程。 不同点: 二者翻译程序,编译型语言是用编译器,解释型语言用解释器。 是否生成目标代码…