窺探QQ基礎數據庫架構演變史
作為騰訊最核心最基礎的后臺服務之一,QQ 基礎數據庫是存儲 QQ 用戶帳戶信息和關系鏈信息的海量集群,它承載了百萬級每秒的訪問量、十億級的賬戶數、百億級關系鏈。如此大規模的集群,它是如何從 300 萬的數量級一步一步演變而來?在它數據量不斷增長的過程中,它經歷了哪些困難,又是如何解決的?如今,它的架構是怎么樣的?4月 10 日晚,騰訊大講堂《QQ 基礎數據庫架構演變之路》活動在武漢人文館主廳舉辦。超過 1000 位學生和業內人士到場參加,整個會議廳人山人海。
廖念波先生從 QQ Basic DB 是什么講起,開始了本次的講座。
QQ Basic DB 是什么?是 QQ 用戶帳號(用戶密碼與資料)與關系鏈等基礎數據的分布式海量存儲集群。是 QQ IM 業務的后臺 DB;是騰訊幾乎所有其他業務的基礎,提供用戶帳號和關系鏈服務。它與 QQ IM 集群并列為騰訊最核心、歷史最久的兩大集群。
早期的難題
在 2000 年,QQ Basic DB 將每 300 萬連續 QQ 號碼存儲在一個機器上。我們碰到的最大問題是在登錄比較頻繁的情況下,磁盤非常忙,登錄超時。找到了影響磁盤隨機尋址能力的因素,我們提出了解決方案在進 程空間內,動態分配一些內存,將用戶熱點數據 cache 到內存中。使得處理能力顯著提升,單機能夠處理1-2千次每秒的請求。
時間進入 2002 年,隨著機器臺數增多,死機是家常便飯。QQ Basic DB 通過 IDC 級容災、數據復制等方法將(500+)*2臺機器;數百億的關系鏈,數十億的賬戶數;每秒上百萬次讀,數萬次寫的數據庫的全年可用性做到了 99.99%。
如何做到高可用?
1、IDC 級的容災
2、灰度發布
3、強監控,及時處理
Bison 提到,隨著時代的變遷,需求不斷增加,QQ Basic DB 走入了 V2.0。當前的需求與 DB 能力的脫節;一地的機房已飽和,異地部署逼在眉睫!新增一個帳號相關字段,需要 2 個月,把內存全部重新 load 一遍,風險極高。老的架構不能很好的支持異地部署,因此 QQ Basic DB V2.0 應運而生。
在演講中 Bison 特別強調,要做到產品特性靈活擴展,最關鍵的是用戶數據結構的靈活性!QQ Basic DB 在 V2.0 版本中,對數據結構擴展性上進行了大量優化。現場 Bison 例舉了一個很簡單的例子:采用 XML 開式存儲用戶數據的優劣性。存儲海量數據的 QQ Basic DB,不適宜采用類似 XML 方式進行存儲,原因是當存儲量超過億級時,冗余信息將極大占用通訊帶寬!QQ 團隊通過 tag 整數化、必選的定長字段共用一個 tag 等手段,最終讓 DB 有效載荷相對 XML 模式提升了 10 倍,pack/unpack 效率提升了 100 倍!
Bison 列舉的一個簡單 XML 存儲例子
在下一個部分,Bison 主要提到了大家比較關心的 QQ Basic DB 安全性問題,其中一個非常重要的點就是異地部署。他特別強調,數據安全最關鍵的是有一套簡單健壯、適應窄帶化的數據復制機制。QQ Basic DBV2.0 通過類似 mysql 復制機制做到了簡單健壯,帶寬占用窄帶化,在專線故障情況下,流量可以在內外網靈活切換。目前在全國各地都有部署。
接下來,廖念波先生給大家介紹了優化了分片(sharding)方式、超長關系鏈解決方法、過載保護等方面的內容,給大家全面展示了騰訊的一些技術積累和總結。