依據預期壓力所建構的架構才會適配客戶需求情境
假設題目為設計一個twitter。
直覺上會有允許使用者發推文、使用者能看到關注推文等基本功能。
我會將每條推文在SQL Scheme中,如timestamp, author_id, context(500字), tweet_id, vedio_uri(100字)等。
那可以直接開發嗎?(可以想一下,我會丟個問題)
Q1: 產品初期目標預期人數是1百萬人,每日約有20%活躍用戶,其中有20%為活躍發文用戶(3 post per day)。
服務要跑一年,需要多大的VM支持SQL,延遲能降到1 millisecond嗎?
SQL bytes of each row: (8 + 36 + 500 + 36 + 100) = 680 bytes
post per day: 10^6 * 0.2 * 0.2 * 3 = 1210^4 post per day = 1.38 post/s
read per day: 10^6 * 0.2 0.8 = 1610^4 read per day = 1.85 read/s
row a year: 4.38 * 10^7 rows
storage a year: 680 bytes * 4.38 * 10^7 =2.9410^10 bytes = 30GB
bandwidth per second: 1.38 * 680 bytes/s + 1.85 * (50 * 680) = 0.1MB/s (假設使用者每次只能看到50篇)
storage price per year: 41.4$/year,依據AWS RDS pricing
IOPS price: 0 (1.38+1.85)10 IOPS < 29.4 * 3 IOPS
SQL lantency: 29.43IOPS / 1000 IOPS/ms = 0.0882ms
答: 可
Storage: 每年SQL實體需要增加30GB。
費用: 41.4$/30GB,跑十年約2277$(6萬台幣)
Lantency: 在限制SQL Select數量下,十年期間SQL lantency會由0.0882ms遞增到1.12ms
Q2: 未來趨勢人數5億人且每日活躍用戶約為99%,可以算一下,很刺激。