架构设计(九):估算

架构设计,估算 · 浏览次数 : 290

小编点评

**二的幂** 二的幂是指一个数字的乘积。例如,2的10的幂等于 2^10 = 256。 **延时指标** 延时指标是衡量系统响应时间的重要指标。例如,如果数据库响应查询所需 10 分钟,则其响应时间为 10 分钟。 **系统可用时间百分比** 系统可用时间百分比是指一个系统在一个理想的长时间内持续运行的能力。例如,如果一个服务有 99.9% 的可用性,这意味着它在任何给定的时间内运行的平均时间为 99.9%。 **高可用性** 高可用性是指一个系统在任何给定的时间内运行的平均时间不超过特定值的系统。例如,如果一个服务的高可用性为 99.9%,这意味着它在任何给定的时间内运行的平均时间不超过 0.01%。

正文

架构设计(九):估算

作者:Grey

原文地址:

博客园:架构设计(九):估算

CSDN:架构设计(九):估算

估算在系统设计中非常重要,这决定了你的设计是否可以满足要求,要实现比较靠谱的估算,就需要对如下几个概念熟练掌握

第一个概念:二的幂

尽管在处理分布式系统时,数据量可能是巨大的,但计算都可以归结为基础知识。为了获得正确的计算结果,关键是要知道使用2的幂的数据量单位。一个字节是一个8位的序列。一个ASCII字符使用一个字节的内存(8位)。可参考如下表格

次幂 近似值 名称
10 1000 1KB
20 100万 1MB
30 10亿 1GB
40 1万亿 1TB
50 1千万亿 1PB

第二个概念:关于延时指标的常见场景

注:以下指标说明来自J. Dean.Google Pro Tip: Use Back-Of-The-Envelope-Calculations To Choose The Best Design ,虽然是基于2010年的状况,但是目前这些指标还是有一定的参考价值。

操作 参考时间量级
L1高速缓存 0.5 ns
分支错误预测 5 ns
L2高速缓存 7 ns
互斥器锁定/解锁 100 ns
主内存 100 ns
用Zippy压缩1K字节 10,000 ns
通过1 Gbps网络发送2K字节 20,000 ns
从内存中连续读取1MB 250,000 ns
在同一数据中心内的数据往返 500,000 ns
磁盘搜索 10,000,000 ns
从网络中连续读取1MB 10,000,000 ns
从磁盘顺序读取1MB 30,000,000 ns

上述场景也有一个可视化的工具可以查看,见Latency Numbers Every Programmer Should Know
目前展示到了 2020 年。

img

通过分析上述数字,可以得到以下结论。

  • 内存很快,但磁盘很慢。

  • 如果可能的话,要避免磁盘寻道。

  • 简单的压缩算法是快速的。

  • 如果可能的话,在通过互联网发送数据之前要进行压缩。

  • 数据中心通常在不同地区,在它们之间发送数据需要时间

第三个需要了解的概念是:系统可用时间百分比

高可用性是指一个系统在一个理想的长时间内持续运行的能力。高可用性是以百分比来衡量的,100%意味着一个服务没有停机时间。大多数服务在99%和100%之间。服务水平协议(SLA)是服务提供者的一个常用术语。这是你(服务提供商)和你的客户之间的协议,这个协议正式定义了你的服务将提供的正常运行时间水平,正常运行时间传统上是以九为单位衡量。九位数越多,越好。如表2-3所示,九位数与预期的系统停机时间相关。

可用性 平均每天停机时间 平均每年停机时间
99% 14.40分钟 3.65天
99.9% 1.44分钟 8.77小时
99.99% 8.64秒 52.6分钟
99.999% 864毫秒 5.26分钟
99.9999% 86.4毫秒 31.56秒

云供应商亚马逊谷歌微软将其SLA设定为99.9%或以上。

参考资料

System Design Interview

与架构设计(九):估算相似的内容:

架构设计(九):估算

架构设计(九):估算 作者:Grey 原文地址: 博客园:架构设计(九):估算 CSDN:架构设计(九):估算 估算在系统设计中非常重要,这决定了你的设计是否可以满足要求,要实现比较靠谱的估算,就需要对如下几个概念熟练掌握 第一个概念:二的幂 尽管在处理分布式系统时,数据量可能是巨大的,但计算都可以

架构设计(一):从单服务器模式到负载均衡设计

# 架构设计(一):从单服务器模式到负载均衡设计 作者:[Grey](https://www.cnblogs.com/greyzeng/) 原文地址: [博客园:架构设计(一):从单服务器模式到负载均衡设计](https://www.cnblogs.com/greyzeng/p/16980532.h

架构设计(二):数据库复制

架构设计(二):数据库复制 作者:Grey 原文地址: 博客园:架构设计(二):数据库复制 CSDN:架构设计(二):数据库复制 在架构设计(一):从单服务器模式到负载均衡设计中提到了数据库类型的选择, 针对大数据量,高可用的场景,数据库复制是一种比较好的方式,其中多个数据库实例之间可以是主/从关系

架构设计(三):引入缓存

架构设计(三):引入缓存 作者:Grey 原文地址: 博客园:架构设计(三):引入缓存 CSDN:架构设计(三):引入缓存 缓存是一个临时存储区域,如果请求的数据获取代价比较高或者数据的访问频率比较高,则会把响应结果存储在内存中,以便更快速地提供后续请求。 每次加载一个新的网页,都要执行一次或多次数

架构设计(四):CDN

架构设计(四):CDN 作者:Grey 原文地址: 博客园:架构设计(四):CDN CSDN:架构设计(四):CDN CDN 全称 Content delivery network ,即:内容分发网络。 CDN 是一个地理上分散的服务器网络,主要用于提供静态内容。如:图片、视频、CSS、JavaSc

架构设计(五):有状态服务和无状态服务

架构设计(五):有状态服务和无状态服务 作者:Grey 原文地址: 博客园:架构设计(五):有状态服务和无状态服务 CSDN:架构设计(五):有状态服务和无状态服务 无状态的服务 在横向扩展服务的过程中,将状态(例如用户会话数据)从服务中移出并将会话数据存储在持久性存储介质中,如关系型数据库或 No

架构设计(六):引入消息队列

架构设计(六):引入消息队列 作者:Grey 原文地址: 博客园:架构设计(六):引入消息队列 CSDN:架构设计(六):引入消息队列 消息队列是一个支持持久化的组件,数据存储在内存中,支持异步通信。它作为一个缓冲器,分配异步请求。消息队列的基本架构很简单,包含两个部分 第一部分:输入服务,称为生产

架构设计(七):日志、监控和自动化

架构设计(七):日志、监控和自动化 作者:Grey 原文地址: 博客园:架构设计(六):日志、监控和自动化 CSDN:架构设计(六):日志、监控和自动化 针对小型网站,日志、监控和自动化支持是很好的做法,但不是必须的。然而,如果网站已经发展到为大型企业服务,日志、监控和自动化工具是必不可少的。 日志

架构设计(八):数据库的水平扩展和垂直扩展

架构设计(八):数据库的水平扩展和垂直扩展 作者:Grey 原文地址: 博客园:架构设计(八):数据库的水平扩展和垂直扩展 CSDN:架构设计(八):数据库的水平扩展和垂直扩展 数据库的扩展有两种方法:垂直扩展和水平扩展。 垂直扩展是通过提高现有机器的硬件配置(CPU、硬盘、内存等)来进行扩展。比如

[转帖]Nginx(2):架构设计与工作流程

https://cloud.tencent.com/developer/article/1886166?areaSource=&traceId= 这些天呐,实在是给我看晕了。起因自然还是对 nginx 不是很了解哈。那我是来看什么的?一开始就从细节出发,有点管中窥豹,不得全貌了。 图来自网络 架构设