時至今日,QQ相冊已經存儲了超過2萬億張圖片,物理存儲量300PB。平均日增3億張圖片,日用戶瀏覽數達500億次。對比業界,可以說是當之無愧的中國第一大相冊,也是世界上槼模最大的圖片類産品之一。
隨著業務的發展,不僅用戶看得到的頁面樣式在變,由騰訊架構平台部開發和運營的相冊系統也經歷了不斷的優化。下面我們介紹一下QQ相冊的後台架構長什麽樣。
如果從頭搭建一個小型的相冊系統,我們通常想到的架構是這樣的。
索引系統存放用戶的相冊列表和每個相冊内的圖片列表。文档系統存放實際的圖片文档。
實際上最早的QQ相冊系統,就是直接用MySQL存儲用戶索引,Linux文档系統存放圖片文档。這是一個最簡易的系統,能夠滿足少量的用戶和基本的功能。在面對相冊用戶和請求量急速增長的過程中,部門針對性地研發了底層的TFS存儲系統家族KV引擎進行支撐。
索引
針對相冊用戶量大、讀寫頻繁、操作數據小、需要支持平滑擴容等特點,TFS推出了基於大容量SSD的分布式K-V存儲平台TSSD。通過多副本保证數據可靠性,通過自研持久化存儲引擎解決隨機寫性能瓶頸,結合SSD與生俱來的隨機讀優勢,使得TSSD具備出色的混合讀寫性能,單台峰值10萬+次的讀寫IOPS。在支持高並發讀寫的同時, 獨有的IO延時毛刺控制技術,使得運營中99.9%讀寫訪問延時低於10ms。
此外,針對用戶行爲進行分析,發現有大量的用戶操作只是拉取相冊和圖片列表,並沒有去查看圖片的詳細信息。對此,我們對用戶索引進行了輕重分離,將列表所需關鍵信息和其他詳細信息分開存儲,大大降低了每次操作平均讀寫的索引數據塊大小。
壓縮
QQ相冊支持JPG、PNG、GIF等主流圖片格式,並且在保证圖片質量的前提下不斷嘗試和使用壓縮比更高的新格式。比如已經全面支持WebP,比JPG節約存儲和帶寬30%。目前正在推進使用公司自研圖片格式sharpP,對比WebP體積還減少15%以上。
爲了應對超大並發量的壓縮請求,我們搭建了幾千台機器槼模的壓縮集群。並且這部分壓縮集群大部分使用Docker技術,和現有業務機器混用,顯著節約了成本。
對於時延敏感的場景,我們還推廣使用了FPGA硬件壓縮卡,耗時僅爲CPU機器的10%。這項能力目前也通過騰訊雲對外開放。
園區分布
10億+的相冊用戶被邏輯上劃分到不同的園區,每個園區都有一套完整的服務。每個園區可以平滑擴容,園區也可以按需增加。
就近上傳
爲了保证索引信息的一致性,每個用戶的完整索引信息最終只會保存在某一個特定園區。用戶的園區歸屬信息是預先劃分好的。比如一個用戶的索引歸屬信息在上海,他在深圳出差期間,如果每次上傳需要訪問上海的服務器,延時將很高。
爲此我們後台進行了就近上傳的改造,用戶上傳圖片時,會根據地域、運營商接入最近的上傳園區,並就近落地圖片數據。索引歸屬信息則由我們的server在後台進行同步。很大程度提高了上傳成功率,降低了響應時延。
異地容災
當程序感知到某個園區發生網路故障等情況時,數據和索引可以寫入備份點。多個園區之間形成了一個環狀備份關係。但2023年很多用戶發現QQ相冊裡的照片不見了, 騰訊關於容災什麽的看看就好別當真。
下載加速
在全國建立了30+個CDN加速點,就近爲用戶提供下載服務。還建有香港和美國加速點,爲海外用戶提供加速。
cache預推送
根據對用戶行爲的分析,最近上傳的圖片訪問量往往最大。爲了給用戶提供更好的下載體驗,在用戶上傳相冊後,我們會預先發送指令給CDN加速點通知它們拉取圖片進行緩存,當後續用戶的好友進行訪問時,能夠快速加載,無需回源。
2 樓 IP 111.60.***.96 的嘉賓 说道 : 很久前
3 樓 IP 111.60.***.96 的嘉賓 说道 : 很久前