窺探QQ基礎資料庫架構演變史

發表於2012-06-13

來源:騰訊大講堂,本文由@Cen-Jing 推薦

作為騰訊最核心最基礎的後臺服務之一,QQ基礎資料庫是儲存QQ使用者帳戶資訊和關係鏈資訊的海量叢集,它承載了百萬級每秒的訪問量、十億級的賬戶數、百億級關係鏈。如此大規模的叢集,它是如何從300萬的數量級一步一步演變而來?在它資料量不斷增長的過程中,它經歷了哪些困難,又是如何解決的?如今,它的架構是怎麼樣的?4月10日晚,騰訊大講堂《QQ基礎資料庫架構演變之路》活動在武漢人文館主廳舉辦。超過1000位學生和業內人士到場參加,整個會議廳人山人海。

該活動視訊

 

窺探QQ基礎資料庫架構演變史

廖念波先生從QQ Basic DB是什麼講起,開始了本次的講座。

窺探QQ基礎資料庫架構演變史

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級的容災

窺探QQ基礎資料庫架構演變史

2、灰度釋出

窺探QQ基礎資料庫架構演變史

3、強監控,及時處理

窺探QQ基礎資料庫架構演變史

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倍!

窺探QQ基礎資料庫架構演變史

Bison列舉的一個簡單XML儲存例子

在下一個部分,Bison主要提到了大家比較關心的QQ Basic DB安全性問題,其中一個非常重要的點就是異地部署。他特別強調,資料安全最關鍵的是有一套簡單健壯、適應窄帶化的資料複製機制。QQ Basic DBV2.0通過類似mysql複製機制做到了簡單健壯,頻寬佔用窄帶化,在專線故障情況下,流量可以在內外網靈活切換。目前在全國各地都有部署。

窺探QQ基礎資料庫架構演變史

接下來,廖念波先生給大家介紹了優化了分片(sharding)方式、超長關係鏈解決方法、過載保護等方面的內容,給大家全面展示了騰訊的一些技術積累和總結。

窺探QQ基礎資料庫架構演變史

 

 

 

相關文章