![]()
5百萬人在30秒內同時點贊同一條帖子。你的數據庫撐得住嗎?
這是2024年某頭部社交平臺真實壓測場景。當頂流明星發布動態,傳統關系型數據庫在15秒內耗盡連接池,事務鎖死,服務雪崩。工程師Ankit Verma在Medium發布的架構復盤顯示:他們最終用BASE定理(基本可用、軟狀態、最終一致性)重構了整個 feed 流系統,把單點故障變成了可橫向擴展的分布式服務。
ACID 為什么成了性能毒藥
關系型數據庫的ACID特性(原子性、一致性、隔離性、持久性)在單機時代是黃金標準。銀行轉賬必須保證錢不憑空消失,訂單系統必須防止超賣——這些場景需要強一致性。
但社交 feed 完全不同。
當5000萬粉絲的大V發帖,系統需要在毫秒級內向5000萬個時間線推送這條內容。如果堅持ACID,數據庫必須鎖定粉絲列表的每一行,逐條插入新動態,等待所有事務提交。Verma的測試數據顯示:MySQL集群在這種寫入壓力下,TPS(每秒事務數)從正常的8000暴跌至400,響應延遲從50ms飆升至12秒。
核心矛盾在于:社交場景要的是「足夠快」,不是「絕對準」。用戶可以接受刷新后1秒才看到新點贊,但不能接受頁面轉圈10秒。
Fan-Out-on-Write:把寫入壓力拆成100份
Verma團隊的關鍵改造是放棄「拉模式」(Pull),全面轉向「推模式」(Push)的變體——Fan-Out-on-Write(寫入時分發)。
具體實現:用戶發帖時,消息不直接寫入粉絲的主時間線,而是進入Kafka隊列,由消費者服務異步推送到每個粉絲的預計算 feed 緩存。這個設計把單次大事務拆成了100個并行的小任務。
數據對比很直觀。改造前,單條熱門帖子的傳播延遲中位數是8.7秒,P99(99分位延遲)超過45秒。改造后,中位數降至230毫秒,P99控制在1.2秒內。Verma在文中提到:「我們犧牲了即時一致性,換取了可預測的響應時間。」
這里有個反直覺的細節。Fan-Out-on-Write通常被認為對超大V不友好——5000萬粉絲意味著5000萬次寫入。但Verma團隊做了分層處理:普通粉絲走異步推送,活躍粉絲(最近7天登錄過)走優先隊列,僵尸賬號延遲到夜間批量處理。實際寫入量從5000萬降到了800萬,成本下降84%。
軟狀態與最終一致性:允許系統「暫時撒謊」
BASE定理的后兩個字母——Soft State(軟狀態)和Eventual Consistency(最終一致性)——是工程實現中最難接受的部分。
軟狀態意味著:系統某一刻的數據可能是「錯的」。比如用戶A剛點贊,用戶B刷新頁面,可能暫時看不到這個點贊數。Verma的設計中,點贊先寫入Redis計數器,異步同步到持久化存儲。如果此時Redis故障,那幾秒鐘內的點贊數據會丟失,但服務不會中斷。
最終一致性則規定了「錯多久」。Verma團隊設定的SLA是:點贊數在5秒內全局一致,評論列表在10秒內,關注關系在30秒內。這些數字不是拍腦袋定的——他們分析了用戶行為數據,發現95%的用戶在發帖后15秒內不會二次刷新,10秒窗口足夠掩蓋臨時不一致。
一個有趣的邊界案例:當兩個用戶同時評論,由于分片路由延遲,可能出現「后發的評論先顯示」。Verma的解決方案不是加鎖,而是在客戶端做時間戳排序,把排序責任推給最終呈現層。
從架構圖到落地:三個被低估的細節
Verma的原文花了大量篇幅講代碼實現,其中三個細節值得技術管理者關注。
第一是「寫放大」的控制。Fan-Out-on-Write本質是用寫換讀,但無限制寫入會壓垮存儲。他們的做法是設置「傳播預算」:單條帖子最多異步推送給100萬活躍用戶,超出部分走「拉模式」兜底。這個閾值來自成本模型——推送成本 vs 拉取成本的盈虧平衡點。
第二是故障隔離。Kafka消費者按用戶ID哈希分片,單個分片延遲不會影響全局。Verma展示了一張監控圖:某次網絡抖動導致3個分片積壓,但99.7%的用戶無感知。
第三是可觀測性改造。最終一致性系統最難調試的是「數據去哪了」。他們在每個異步環節注入追蹤ID,端到端延遲可以精確到某個Redis分片的某次寫入。Verma提到:「我們花了3周開發這個鏈路追蹤,但上線后故障定位時間從平均4小時降到了15分鐘。」
這套架構支撐了1億日活和峰值50萬QPS(每秒查詢數),年度基礎設施成本比ACID方案低62%。Verma在文末放了一個未解答的問題:當視頻內容占比超過60%,預計算 feed 的存儲成本將指數級增長——他們的下一步是嘗試「混合模式」,只在內存保留最近24小時的視頻索引。
如果你的系統明天要承接10倍流量,你愿意讓用戶暫時看到「舊數據」,還是堅持一致性直到服務崩潰?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.