系统估算类问题

已知 Twitter 2020 年大约有 2000 亿的推文(tweets),如果你来设计 Twitter 系统,请问发推服务的吞吐量需要多少,网络带宽要占用多大,要存储它们需要多少磁盘容量?

具体不同的编码方式,占用大小不一样的。比如你说的UTF8的话,英文字符是占用一个字节,如果是中文是三个字节;而Unicode编码的话则是两个字节。

对于系统估算类问题,最重要的是过程要符合逻辑,而估算的最后结果并不是最重要的。过程正确的话,结果的数量级基本上是八九不离十的,那么设计出的系统往往就是靠谱的。

从职位来看,如果职位需要比较强的架构设计能力,或者团队是做软件中的基础设施部分的,那往往就需要候选人具备靠谱且快速的估算能力。

吞吐量,一般可以估算 TPS(Transaction Per Second),2000 亿 / 365 天 / 24 小时/ 60 分 / 60 秒,大概是 6000 左右,那么考虑 TPS 的波动性,我们简单预留 3 倍的空间,认为系统的 TPS 需要预留到 20000 左右,就大致可行了。网络带宽,我们假设平均每条推文 200 个字符,众所周知每个字符占用 2 个字节(B,Byte),每个字节为 8 个比特(b,bit),我们在这里统一使用 Byte,而不是 bit(这里说明一下,你的网络运营商为了数据好看,可能会用比特每秒,而不是字节每秒宣传
它的带宽)。这样每条推文就占用了 200 * 2 = 400 Byte,因此带宽就是 400 Byte *20000 吞吐量 = 8 MB 的带宽。这里其实从 B 到 MB 应该使用 1/1024 的倍率,但是估算就使用了近似的 1/1000 的倍率。存储,2000 亿推文 * 200 个字符 * 2 Byte = 80 TB 一年

图片

假设条件:

  • 预计用户数:100万
  • 日活跃用户比例:10%
  • 平均每用户每天上传图片数量:5张
  • 平均每张图片大小:2MB
  • 图片访问频率:每张图片每天被访问10次
  • 数据冗余:3份数据副本
  • 年增长率:20%

容量计算:

  1. 存储容量计算

    • 每日新图片存储需求 = 用户数 * 日活跃用户比例 * 平均每用户每天上传图片数量 * 平均每张图片大小
    • 每日新图片存储需求 = 1,000,000 * 0.1 * 5 * 2MB = 10,000,000MB 或 10TB
  2. 总存储需求

    • 考虑到数据冗余,总存储需求 = 每日新图片存储需求 * 数据冗余
    • 总存储需求 = 10TB * 3 = 30TB
  3. 年度存储增长

    • 预计第一年结束时的总存储需求 = 总存储需求 * (1 + 年增长率)
    • 预计第一年结束时的总存储需求 = 30TB * (1 + 0.2) = 36TB
  4. 带宽需求计算

    • 每日图片访问带宽需求 = 用户数 * 日活跃用户比例 * 平均每张图片大小 * 图片访问频率
    • 每日图片访问带宽需求 = 1,000,000 * 0.1 * 2MB * 10 = 200TB 或 200TB
  5. 处理能力估算

    • 根据图片处理需求,估算所需的CPU和内存资源。这通常需要根据具体的图片处理算法和硬件性能来确定。
  6. 数据库容量

    • 存储元数据(如图片ID、用户ID、上传时间等)的数据库大小也需要估算。这通常取决于数据库的设计和索引策略。
  7. 备份存储需求

    • 根据备份策略(如每日增量备份和每周全备份),估算备份存储需求。
  8. 扩展性考虑

    • 考虑到用户和数据的增长,系统设计需要具备良好的扩展性,以便在资源不足时快速扩展。

video

“码率5Mbps”表示每秒传输的数据量为5兆位(megabits),通常用于描述视频或音频的传输速率。在视频和音频编解码过程中,码率决定了每秒钟传输的数据量,从而影响了图像或声音的质量和清晰度。因此,5Mbps的视频码率意味着每秒钟会以5Mbps的速度传输视频数据。

问题描述

假设你需要设计一个视频存储和流媒体系统,该系统用于存储用户上传的视频,并支持流媒体播放。系统需要满足以下要求:

  1. 支持 500 万(5,000,000)用户。
  2. 每个用户平均上传 50 部视频。
  3. 每部视频平均时长为 10 分钟。
  4. 视频分辨率为 1080p,平均码率为 5 Mbps(兆位每秒)。

你需要估算系统总共需要的存储容量,并考虑存储冗余(RAID 6)和备份策略(每日备份,保留最近 7 天的备份)。

计算过程

1. 总视频数

首先计算总视频数:
[ \text{总视频数} = \text{用户数} \times \text{每用户视频数} ]
[ \text{总视频数} = 5,000,000 \times 50 = 250,000,000 \text{(2.5亿部视频)} ]

2. 原始存储需求

计算每部视频的大小:
[ \text{每部视频大小} = \text{视频时长(秒)} \times \text{码率} ]
[ \text{每部视频大小} = 10 \text{分钟} \times 60 \text{秒/分钟} \times 5 \text{Mbps} = 3,000 \text{Mb} = 375 \text{MB} ]

计算总视频存储需求:
[ \text{原始存储需求} = \text{总视频数} \times \text{每部视频大小} ]
[ \text{原始存储需求} = 250,000,000 \times 375 \text{MB} = 93,750,000,000 \text{MB} = 93,750,000 \text{GB} = 93,750 \text{TB} ]

3. 存储冗余(RAID 6)

RAID 6 需要至少 4 个磁盘,其中两个磁盘用于冗余数据,存储效率为 ( n-2/n )(其中 n 是磁盘数量)。
假设使用 6 个磁盘:
[ \text{RAID 6 存储需求} = \frac{\text{原始存储需求}}{(n-2)/n} ]
[ \text{RAID 6 存储需求} = \frac{93,750 \text{TB}}{(6-2)/6} = \frac{93,750 \text{TB}}{0.6667} \approx 140,625 \text{TB} ]

4. 备份需求

需要每日备份,并保留最近 7 天的备份:
[ \text{备份存储需求} = \text{RAID 6 存储需求} \times 7 ]
[ \text{备份存储需求} = 140,625 \text{TB} \times 7 = 984,375 \text{TB} ]

5. 总存储需求

计算总存储需求(主存储 + 备份):
[ \text{总存储需求} = \text{RAID 6 存储需求} + \text{备份存储需求} ]
[ \text{总存储需求} = 140,625 \text{TB} + 984,375 \text{TB} = 1,125,000 \text{TB} ]

总结

系统总共需要的存储容量约为 1,125,000 TB,以满足 500 万用户,每用户 50 部视频,每部视频 10 分钟,1080p 分辨率、5 Mbps 码率的存储需求,并考虑 RAID 6 冗余和每日备份保留 7 天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38393.shtml

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

相关文章

【6.26更新】Win10 22H2 19045.4598镜像:免费下载!

当前微软已经发布了六月最新的KB5039299更新补丁,用户完成升级后,系统版本号将更新至19045.4598。此次更新解决了任务栏上应用跳转列表失败、可能导致系统无法从休眠状态恢复等多个问题,推荐大家升级。如果您不知道去哪里才能下载到该版本&am…

MySQL索引设计与性能优化策略详解

MySQL索引设计与性能优化策略详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 MySQL作为广泛应用的关系型数据库管理系统(RDBMS&#xf…

JavaScript原型对象和对象原型、原型继承、原型链

目录 1. 原型对象和对象原型2. 原型继承3. 原型链 1. 原型对象和对象原型 作用: 以前通过构造函数实例化的对象,每个实例化的对象的属性和方法都是独立的,会造成内存浪费。通过prototype对象原型能实现不同实例化对象共享公用的属性和方法,减…

STM32之四:TIM定时器(1-基本定时器)

目录 1. STM32有哪些定时器 2. 基本定时器 2.1 基本定时器主要功能 2.2 基本定时器的框图 2.2.1 时钟输入 2.2.2 至DAC 2.2.3 至时基单元(重点) 2.2.4 影子寄存器 2.2.5 基本定时器寄存器说明 2.2.5.1 控制寄存器1(TIMx_CR1&#x…

Linux Polkit 权限提升漏洞:CVE-2021-4034安全分析与修复指南

Linux Polkit 权限提升漏洞:CVE-2021-4034安全分析与修复指南 作为网络安全领域的专家,我对近期发现的影响Linux系统的Polkit权限提升漏洞(CVE-2021-4034)进行了深入分析。Polkit,即PolicyKit,是一个在Lin…

ITK-二值阈值分割

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 什么是二值阈值分割? 二值阈值分割是一种常见的图像处理技术,用于将图像的像素值分成两个类别&#xff1…

【JVM系列】JVM调优

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

量化交易策略:KDJ策略的买入卖出点确认

KDJ指标简介 KDJ指标,全称随机指标(Stochastic Oscillator),是一种非常常用的技术分析指标,用于判断股票价格的超买和超卖状态。KDJ指标由三条线组成:K线、D线和J线。其中,K线代表快速移动平均线,D线代表慢速移动平均线,J线是K线与D线的差值。 KDJ策略的原理 KDJ策…

AT32F425C8T7 开发笔记

目录 0x00 AT32F425C8T7 引脚矩阵映射关系0x01 AT32_Work_Bench 图形化配置指南0x02 AT32串口打印函数0x03 AT32 串口中断函数0x04 AT32 延时函数 0x00 AT32F425C8T7 引脚矩阵映射关系 详情可见AT32手册 AT32的矩阵映射其实也就是开启端口的复用功能,但是它的功能…

HTML-缓动函数-贝萨尔曲线

缓动函数速查表 (easings.net)-cubic-bezier(.06,.44,.94,.7) ✿ cubic-bezier.com 展示了如何使用easeOutSine函数来实现一个元素的平滑移动动画。这个demo创建了一个按钮&#xff0c;当点击它时&#xff0c;会使页面上的一个元素向右平滑移动。 <!DOCTYPE html> <ht…

【Jetpack】Lifecycle之监听LifecycleObserver

关于LifecycleEventObserver Lifecycle可以添加观察者&#xff0c;从而让其它工作与周期变化保持一致 比如我们希望Dialog和Activity的生命周期一致&#xff0c;能够在Activity结束时自动关闭 可以通过如下代码来实现 与Lifecycle同步的Dialog package com.android.codeim…

GPTPDF: 利用 GPT 将 PDF 转为 Markdown

GPTPDF 是一款利用视觉模型&#xff08;GPT-4o&#xff09;将 PDF 转为 MD 文件的开源工具 它利用 PyMuPDF 将 PDF 拆分为图片&#xff0c;再利用 GPT 来判断是否能够转为纯文本&#xff0c;否则直接使用图片&#xff0c;所以能够比较好的还原排版、数学公式、表格、图片、图表…

计算机组成原理——寄存器

文章目录 1. 寄存器 2. 带寄存器的加法器 3. 时钟信号与计算速度 1. 寄存器 上一篇D触发器可以在时钟上沿存储1位数据。如果想存储多个位&#xff08;bit&#xff09;的数据&#xff0c;就需要用多个D触发器并联实现&#xff0c;这种电路称之为寄存器。 寄存器是计算机中央…

深入模拟版图工程师基础学习:CMOS工艺解析

作为模拟版图工程师&#xff0c;了解CMOS&#xff08;互补金属氧化物半导体&#xff09;工艺是非常重要的&#xff0c;以下是我们需要掌握的基本内容&#xff1a; 1.基础理论&#xff1a;理解CMOS工艺的基本原理和结构&#xff0c;包括NMOS和PMOS晶体管的构造及其工作原理。&a…

python 无监督生成模型

无监督生成模型在机器学习中扮演着重要角色&#xff0c;特别是当我们在没有标签数据的情况下想要生成新的样本或理解数据的内在结构时。一种流行的无监督生成模型是生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;。 1.python 无监督生成模型 GA…

使用element-resize-detector监听普通元素

说明&#xff1a;在进行后台系统开发时&#xff0c;经常会用到一些图表展示&#xff0c;当改变浏览大小后&#xff0c;这些图表本身是没有响应式的&#xff0c;可以借助第三方插件element-resize-detector来监听窗口的变化 一、element-resize-detector 安装 npm install elem…

适配手机《植物大战僵尸杂交版》最新整合包,附Android、iOS、Windows保姆级教程和工具合集!

最近&#xff0c;新版的《植物大战僵尸杂交版》火爆全网啊&#xff01;许多小伙伴不知道手机和电脑怎样安装设置才能畅玩《杂交版》&#xff0c;所以今天阿星特意为大家准备了一份安装工具集。 里面有安卓、iOS及电脑端的安装包&#xff0c;包含安装视频教程、修改器、防闪退、…

力扣931. 下降路径最小和

Problem: 931. 下降路径最小和 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义状态&#xff1a;我们定义dp[i][j]为从矩阵的第一行到达位置(i, j)的最小下降路径和。 2.初始化状态&#xff1a;对于矩阵的第一行&#xff0c;即i 0时&#xff0c;dp[0][j]就是矩阵的第一…

密码学:对称加密算法、非对称加密算法、哈希算法

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

重生之我要学后端0--HTTP协议和RESTful APIs

http和RESTful APIs HTTP协议RESTful APIs设计RESTful API设计实例 HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下&#xff1a; 客户端请求&#xff08;Request&#xf…