系統設計(架構師)指南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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...