摘要:
眾所周知,海量互聯(lián)網(wǎng)服務(wù)能力是世界公認(rèn)的技術(shù)難題。經(jīng)過十多年的發(fā)展,騰訊在海量互聯(lián)網(wǎng)服務(wù)方面已有不少技術(shù)積累。以QQ IM后臺服務(wù)為例,重現(xiàn)了QQ在線用戶從百萬級到億級的整個過程中遇到的技術(shù)挑戰(zhàn),并分享了眾多在海量互聯(lián)網(wǎng)后臺服務(wù)研發(fā)運(yùn)營方面不為人知的秘密。
莊泗華:騰訊通平臺部高級技術(shù)總監(jiān)、騰訊T4級技術(shù)專家、騰訊軟件開發(fā)通道分會會長。中科院計(jì)算技術(shù)研究所碩士,2004年畢業(yè)加入騰訊,是騰訊培養(yǎng)出的第一位T4專家級畢業(yè)生。一直致力于QQ IM后臺海量服務(wù)系統(tǒng)的研發(fā)和運(yùn)營工作,負(fù)責(zé)過聊系統(tǒng)、QQ接入與基礎(chǔ)通信服務(wù)系統(tǒng)等后臺系統(tǒng)的研發(fā)和運(yùn)營,見證了QQ在線從800萬到1.4億的整個過程。
QQ現(xiàn)在面臨7億活躍賬戶,每日1.4億用戶同時在線。QQ過萬臺IM服務(wù)器和百億級的關(guān)系鏈對數(shù)每天接受千億級的服務(wù)請求考驗(yàn)。在這些苛刻的數(shù)字面前騰訊要保證99.99%的可用性。當(dāng)然團(tuán)隊(duì)在QQ在線從10萬到1.4億的整個過程也經(jīng)歷了很多破折,同時從十萬級、百萬級、千萬級最終到億級在線騰訊也吸取了很多教訓(xùn)。這也說明了騰訊對海量服務(wù)的理解是長期積累的結(jié)果。
第一代架構(gòu) : 難以支持百萬級在線
騰訊QQ的第一代架構(gòu),當(dāng)達(dá)到一百萬在線時,老架構(gòu)會有各方面的瓶頸出現(xiàn)。以接入服務(wù)器的內(nèi)存為例,單個在線用戶的存儲量約為2KB,索引和在線狀態(tài)50字節(jié)。好友表400個好友 * 5字節(jié)/好友等于2000字節(jié)。大致來說,2G內(nèi)存只能支持一百萬在線用戶。與此同時,還有CPU/網(wǎng)卡包量和流量/交換機(jī)流量等瓶頸,其他服務(wù)器也面臨類似情況,單臺服務(wù)器支撐不下所有在線用戶/注冊用戶,第一代架構(gòu)已無以為繼。
莊泗華認(rèn)為十萬級到百萬級在線的關(guān)鍵技術(shù)是高性能和實(shí)現(xiàn)7乘24小時連續(xù)服務(wù)。實(shí)現(xiàn)高性能的關(guān)鍵因素包括絕不使用企業(yè)級解決方案、邏輯層多進(jìn)程、萬有一失的無鎖設(shè)計(jì)、用戶態(tài)IPC、MySQL分庫分表以及好友表自寫文件存儲。而通過大系統(tǒng)小做、平滑重構(gòu)、核心數(shù)據(jù)放入共享內(nèi)存、接入層與邏輯層分離以及命令分發(fā)動態(tài)配置化可保證QQ后臺實(shí)現(xiàn)7乘24小時連續(xù)服務(wù)。
第二代架構(gòu):難以支持千萬級在線
同樣第二代架構(gòu)也存在一些問題。包括同步流量太大、狀態(tài)同步服務(wù)器遇到單機(jī)瓶頸、所有在線用戶的在線狀態(tài)信息量太大、單臺接入服務(wù)器存不下等問題。并且當(dāng)在線數(shù)進(jìn)一步增加,單臺狀態(tài)同步服務(wù)器不能滿足需求,單臺狀態(tài)同步服務(wù)器支撐不了所有在線用戶,單臺接入服務(wù)器也支撐不了所有在線用戶的在線狀態(tài)信息。
通過深入分析,騰訊發(fā)現(xiàn)后臺機(jī)器越來越多,單機(jī)死機(jī)/故障就會經(jīng)常出現(xiàn)。同時每周新代碼的發(fā)布也導(dǎo)致BUG不斷出現(xiàn),嚴(yán)重影響服務(wù)。監(jiān)控機(jī)制的相對原始導(dǎo)致報警設(shè)置不全。最后當(dāng)運(yùn)維操作通過vim或者mysql進(jìn)行時也非常容易失誤。
莊泗華表示想要解決這些問題就需要對現(xiàn)有架構(gòu)進(jìn)行改造。這包括對外提供高可用性的服務(wù)、對內(nèi)提供高可運(yùn)維性的系統(tǒng)。同時灰度發(fā)布、運(yùn)營監(jiān)控、容災(zāi)以及運(yùn)維自動化/半自動化也是解決千萬級在線所面臨問題的關(guān)鍵技術(shù)。
第三代架構(gòu) : 億級在線時代的到來
隨著億時代在線到來,騰訊也面臨了新的問題。通過對原有系統(tǒng)持續(xù)完善已經(jīng)很難支撐億級在線。
莊泗華表示億時代在線的四個關(guān)鍵特性: 高性能、高可用性、高可運(yùn)維性和高靈活性
由于互聯(lián)網(wǎng)行業(yè)要求每個月出一個新版本。所以必須提供高靈活性的業(yè)務(wù)支持。作為硬件層面來說,高可運(yùn)維性則需要物理架構(gòu)詳細(xì)到機(jī)架、并具備故障分析智能化、運(yùn)維操作組件化和負(fù)載自動轉(zhuǎn)移等特性的支持。而要保證系統(tǒng)的高性能,自寫存儲層是至關(guān)重要的因素。莊泗華還表示: 在線量每提升一個量級,技術(shù)難度也會提升一個量級
最后,莊泗華認(rèn)為互聯(lián)網(wǎng)行業(yè)有自己的技術(shù)規(guī)律,需要做自己的技術(shù)積累。而騰訊IM服務(wù)的未來戰(zhàn)略就是全球化分布、高效率的研發(fā)以及監(jiān)控告警的智能化。
本文轉(zhuǎn)自: 騰訊1億用戶在線背后的技術(shù)挑戰(zhàn)
----------------------------------------------------------
QQ基礎(chǔ)數(shù)據(jù)庫架構(gòu)演變史
QQ基礎(chǔ)數(shù)據(jù)庫,
作為騰訊最核心最基礎(chǔ)的后臺服務(wù)之一,是存儲QQ用戶帳戶信息和關(guān)系鏈信息的海量集群,它承載了百萬級每秒的訪問量、十億級的賬戶數(shù)、百億級關(guān)系鏈。如此大規(guī)模的集群,它是如何從300萬的數(shù)量級一步一步演變而來?在它數(shù)據(jù)量不斷增長的過程中,它經(jīng)歷了哪些困難,又是如何解決的?如今,它的架構(gòu)是怎么樣的?
QQ Basic DB是什么?是QQ用戶帳號(用戶密碼與資料)與關(guān)系鏈等基礎(chǔ)數(shù)據(jù)的分布式海量存儲集群。是QQ IM業(yè)務(wù)的后臺DB;是騰訊幾乎所有其他業(yè)務(wù)的基礎(chǔ),提供用戶帳號和關(guān)系鏈服務(wù)。它與QQ IM 集群并列為騰訊最核心、歷史最久的兩大集群。
早期的難題
在2000年,QQ Basic DB將每300萬連續(xù)QQ號碼存儲在一個機(jī)器上。碰到的最大問題是在登錄比較頻繁的情況下,磁盤非常忙,登錄超時。找到了影響磁盤隨機(jī)尋址能力的因素,我們提出了解決方案在進(jìn)程空間內(nèi),動態(tài)分配一些內(nèi)存,將用戶熱點(diǎn)數(shù)據(jù)cache到內(nèi)存中。使得處理能力顯著提升,單機(jī)能夠處理1-2千次每秒的請求。
時間進(jìn)入2002年,隨著機(jī)器臺數(shù)增多,死機(jī)是家常便飯。QQ Basic DB通過IDC級容災(zāi)、數(shù)據(jù)復(fù)制等方法將(500+)*2臺機(jī)器;數(shù)百億的關(guān)系鏈,數(shù)十億的賬戶數(shù);每秒百萬次讀,數(shù)萬次寫的數(shù)據(jù)庫的全年可用性做到了99.99%。
如何做到高可用?
1、IDC級的容災(zāi)
2、灰度發(fā)布
3、強(qiáng)監(jiān)控,及時處理
Bison提到,隨著時代的變遷,需求不斷增加,QQ Basic DB走入了V2.0。當(dāng)前的需求與DB能力的脫節(jié);一地的機(jī)房已飽和,異地部署逼在眉睫!新增一個帳號相關(guān)字段,需要2個月,把內(nèi)存全部重新load一遍,風(fēng)險極高。老的架構(gòu)不能很好的支持異地部署,因此QQ Basic DB V2.0應(yīng)運(yùn)而生。
在演講中Bison特別強(qiáng)調(diào),要做到產(chǎn)品特性靈活擴(kuò)展,最關(guān)鍵的是用戶數(shù)據(jù)結(jié)構(gòu)的靈活性!QQ Basic DB在V2.0版本中,對數(shù)據(jù)結(jié)構(gòu)擴(kuò)展性上進(jìn)行了大量優(yōu)化。現(xiàn)場Bison例舉了一個很簡單的例子:采用XML開式存儲用戶數(shù)據(jù)的優(yōu)劣性。存儲海量數(shù)據(jù)的QQ Basic DB,不適宜采用類似XML方式進(jìn)行存儲,原因是當(dāng)存儲量超過億級時,冗余信息將極大占用通訊帶寬!QQ團(tuán)隊(duì)通過tag整數(shù)化、必選的定長字段共用一個tag等手段(tag-length-value,TLV),最終讓DB有效載荷相對XML模式提升了 10倍,pack/unpack效率提升了100倍!

Bison列舉的一個簡單XML存儲例子
在下一個部分,Bison主要提到了大家比較關(guān)心的QQ Basic DB安全性問題,其中一個非常重要的點(diǎn)就是異地部署。他特別強(qiáng)調(diào),數(shù)據(jù)安全最關(guān)鍵的是有一套簡單健壯、適應(yīng)窄帶化的數(shù)據(jù)復(fù)制機(jī)制。QQ Basic DBV2.0通過類似mysql復(fù)制機(jī)制做到了簡單健壯,帶寬占用窄帶化,在專線故障情況下,流量可以在內(nèi)外網(wǎng)靈活切換。目前在全國各地都有部署。

接下來,廖念波先生給大家介紹了優(yōu)化了分片(sharding)方式、超長關(guān)系鏈解決方法、過載保護(hù)等方面的內(nèi)容,給大家全面展示了騰訊的一些技術(shù)積累和總結(jié)。
本文轉(zhuǎn)自 : 窺探QQ基礎(chǔ)數(shù)據(jù)庫架構(gòu)演變史
參考推薦:
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
