系統設計(架構師)指南2封底估算&新浪微博實例

来源:https://www.cnblogs.com/testing-/archive/2023/08/31/17665678.html
-Advertisement-
Play Games

前言 前面說了很多Kafka的性能優點,有些童鞋要說了,這Kafka在企業開發或者企業級應用中要怎麼用呢?今天咱們就來簡單探究一下。 1、 使用 Kafka 進行消息的非同步處理 Kafka 提供了一個可靠的消息傳遞機制,使得企業能夠將不同組件之間的通信解耦,實現高效的非同步處理。在企業級應用中,可以通 ...


2 封底估算

在系統設計面試中,有時會要求你使用 "封底估算"(back-of-the-envelope estimation)來估算系統容量或性能需求。根據谷歌高級研究員傑夫-迪恩(Jeff Dean)的說法,"封底估算是你結合思想實驗和常見性能數字進行的估算,目的是讓你對哪些設計能滿足你的要求有一個良好的感覺"。

2.1 常用單位

2的方次 近似值 全稱 簡稱
10 Thousand 千位元組(Kilobyte) KB
20 Million 兆位元組(Megabyte) MB
30 Billion 千兆位元組(Gigabyte) GB
40 Trillion 太位元組(Terabyte) TB
50 Quadrillion 百億位元組(Petabyte) PB

image

2.2 延遲

來自谷歌的迪恩博士揭示了 2010 年典型電腦操作的時長。隨著電腦速度越來越快、功能越來越強大,有些數字已經過時。不過,這些數字仍能讓我們瞭解不同電腦操作的快慢。

操作 時間
L1緩存 0.5ns
分支誤預測 5ns
二級緩存 7ns
互斥鎖定/解鎖 100ns
主記憶體引用 100ns
Zippy壓縮1K位元組 10 μs
1Gbps網路發送2K位元組 20 μs
記憶體順序讀取1MB 250μs
同一數據中心內往返 500μs
磁碟尋道 10ms
網路順序讀取1MB 10ms
磁碟順序讀取1MB 30ms
發送數據包CA(California)->Netherlands->CA 150ms

image

谷歌的一名軟體工程師製作了一個工具,將Dean博士的數字可視化。該工具還考慮了時間因素。下圖顯示了截至 2020 年的可視化延遲數字(數字來源:參考資料 https://colin-scott.github.io/personal_website/research/interactive_latency.html )。

image

  • 記憶體速度快,但磁碟速度慢。
  • 儘可能避免磁碟尋道。
  • 簡單的壓縮演算法速度快。
  • 儘可能在通過互聯網發送數據前對其進行壓縮。
  • 數據中心通常位於不同地區,在它們之間發送數據需要時間。

2.3 可用性數字

高可用性是指系統在理想的長時間內持續運行的能力。高可用性是以百分比來衡量的,100%表示服務沒有停機時間。大多數服務介於99%和100%之間。

服務水平協議(SLA:service level agreement)是服務提供商的常用術語。這是您(服務提供商)與客戶之間的協議,該協議正式規定了您的服務將提供的正常運行時間水平。雲服務提供商亞馬遜、谷歌和微軟將其 SLA 定義為 99.9% 或以上。正常運行時間傳統上以9為單位。9越多越好。

image

參考資料

http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html

https://colin-scott.github.io/personal_website/research/interactive_latency.html

  • Amazon Compute Service Level Agreement:

https://aws.amazon.com/compute/sla/

  • Compute Engine Service Level Agreement (SLA):

https://cloud.google.com/compute/sla

2.4 實例:估算新浪微博QPS和存儲需求

請註意以下數字僅用於本練習,並非新浪微博的真實數字。

假設

  • 3億月活躍用戶。
  • 50%的用戶每天使用。
  • 用戶平均每天發佈2條微博。
  • 10%的微博包含媒體內容。
  • 數據存儲 5 年。

估計值:

每秒查詢次數 (QPS Query per second) 估計值:

  • 日活躍用戶(DAU Daily active users) = 3億 * 50% = 1.5億
  • 博文QPS = 1.5億*2條推文/24小時/3600秒 = ~3500
  • 峰值QPS =2*QPS = ~7000

我們在此僅估算媒體存儲量。

  • 平均微博大小
    • weibo_id 64 位元組
    • 文本 140 位元組
    • 媒體 1 MB
  • 媒體存儲量 每天1.5億 * 2 * 10% * 1 MB = 30TB
  • 5年媒體存儲: 30TB * 365 * 5 = ~55PB

2.5 面試小結

封底估算的關鍵在於過程。解決問題比獲得結果更重要。面試官可能會測試你解決問題的能力。以下是一些應遵循的技巧:

  • 圓周率和近似值。面試時很難進行複雜的數學運算。例如,"99987/ 9.1"的結果是什麼?沒有必要花費寶貴的時間來解決複雜的數學問題。不要求精確。使用整數和近似值對你有利。除法問題可簡化如下: "100,000/10".

  • 寫下你的假設。最好寫下你的假設,以便日後參考。

  • 標註單位。寫下 "5 "時,是指 5 KB 還是 5 MB?這可能會讓你感到困惑。寫下單位,因為 "5 MB "有助於消除歧義。

釘釘或微信號: pythontesting 微信公眾號:pythontesting
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 8月30日,由 NineData 和 SelectDB 共同舉辦的主題為“實時數據驅動,引領企業智能化數據管理”的線上聯合發佈會,圓滿成功舉辦!雙方聚焦於實時數據倉庫技術和數據開發能力,展示如何通過強大的生態開發相容性,對接豐富的大數據生態產品,助力企業快速開展數據分析業務,共同探索實時數據驅動的未... ...
  • ![file](https://img2023.cnblogs.com/other/3195851/202308/3195851-20230831114702799-1091292653.jpg) 提到數據處理,經常有人把它簡稱為“ETL”。但仔細說來,數據處理經歷了ETL、ELT、XX ETL(例 ...
  • ![file](https://img2023.cnblogs.com/other/2685289/202308/2685289-20230831101757216-1368442529.png) 作者 | 李晨 編輯 | Debra Chen 數據準備對於推動有效的自助式分析和數據科學實踐至關重要 ...
  • 一、尋找合適的線上預覽Excel的js庫 我: 線上預覽Excel文件有哪些好用的js庫 ChatGPT: 有幾個好用的JavaScript庫可以用來在網頁上實現線上預覽Excel文件。以下是一些常見且功能強大的庫: SheetJS (xlsx.js): 這是一個功能強大的庫,可以在網頁上實現Exc ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 問題描述:最近工作中出現一個需求,純前端下載 Excel 數據,並且有的下載內容很多,這時需要給下載增加一個 loading 效果。 代碼如下: // utils.js const XLSX = require('xlsx') // 將一 ...
  • # React Native 封裝Toast ## 前言 > 使用react native的小伙伴都知道,官方並未提供輕提示組件,只提供了ToastAndroid API,顧名思義,只能再安卓環境下使用,對於ios就愛莫能助,故此,只能通過官方的核心組件,自行封裝,實現Toast功能 ## 實現 * ...
  • 本文主要介紹 AI 繪圖開源工具 Stable Diffusion WebUI 的 API 開啟和基本調用方法,通過本文的閱讀,你將瞭解到 stable-diffusion-webui 的基本介紹、安裝及 API 環境配置;文生圖、圖生圖、局部重繪、後期處理等 API 介面調用;圖像處理開發中常用到... ...
  • 今天給大家介紹下掃碼登錄功能是怎麼設計的。 掃碼登錄功能主要分為三個階段:待掃描、已掃描待確認、已確認。 整體流程圖如圖。 下麵分階段來看看設計原理。 1、待掃描階段 首先是待掃描階段,這個階段是 PC 端跟服務端的交互過程。 每次用戶打開PC端登陸請求,系統返回一個唯一的二維碼ID,並將二維碼ID ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...