騰訊十多個人管理一萬多臺NoSQL存儲服務(wù)器的秘密
嘉賓介紹
周小軍, 騰訊高級運(yùn)維工程師,目前在騰訊社交網(wǎng)絡(luò)事業(yè)部負(fù)責(zé)社交業(yè)務(wù)海量NoSQL集群運(yùn)維和團(tuán)隊(duì)管理。曾在天涯社區(qū)任運(yùn)維副總監(jiān),負(fù)責(zé)天涯整體運(yùn)維。對互聯(lián)網(wǎng)網(wǎng)站架構(gòu)、數(shù)據(jù)中心、云計(jì)算及自動化運(yùn)維等領(lǐng)域有深入研究和理解,積累了十多年的IT運(yùn)維管理經(jīng)驗(yàn)。希望窮盡一生來深入鉆研運(yùn)維領(lǐng)域。
主題簡介
騰訊目前有三大NoSQL分布式存儲系統(tǒng),分別是:
◆Grocery,主要支撐QQ業(yè)務(wù),包括關(guān)系鏈、群、圈子、消息等
◆CKV,主要支撐QQ空間、騰訊云、相冊、音樂和廣點(diǎn)通等
◆Quorum_KV,主要支撐微信業(yè)務(wù),包括消息、朋友圈等產(chǎn)品
我們是SNG(騰訊社交網(wǎng)絡(luò)事業(yè)部)社交網(wǎng)絡(luò)運(yùn)營部平臺技術(shù)運(yùn)營中心下的數(shù)據(jù)運(yùn)維團(tuán)隊(duì)。團(tuán)隊(duì)主要負(fù)責(zé)CKV和Grocery二大NoSQL分布式存儲集群的運(yùn)營。目前團(tuán)隊(duì)有十幾名工程師,負(fù)責(zé)一萬幾千臺存儲服務(wù)器。主要部署在深圳、天津、上海和廣州等大區(qū)域。
存儲服務(wù)器劃分為幾十個SET(倉庫)集群,共有幾百TB的內(nèi)存和SSD存儲容量,服務(wù)于QQ、朋友網(wǎng)、QQ空間、相冊、廣點(diǎn)通、微云、音樂等各類互聯(lián)網(wǎng)核心業(yè)務(wù)。
部署模式
NoSQL集群按SET的方式部署,SET也稱之為“倉庫”。一個SET是一個物理單元。倉庫內(nèi)至少擁有四種服務(wù)器角色:
◆接入機(jī)(代理服務(wù)器)
◆存儲機(jī)(主機(jī)+備機(jī))
◆倉庫管理機(jī)
◆搬遷機(jī)器
每個SET可部署為跨機(jī)架、跨IDC、跨城容災(zāi)。一個SET就是一個永不停服、永不丟數(shù)據(jù)的獨(dú)立的,標(biāo)準(zhǔn)化的服務(wù)單元,類似于標(biāo)準(zhǔn)化集裝箱。我們***的SET機(jī)器部署數(shù)量不會超過上千臺,超大的SET會加大管理成本。
在騰訊的海量服務(wù)運(yùn)營模型中,SET是一個非常重要的概念。接入層、邏輯層和數(shù)據(jù)層均按SET單元化來部署。一個業(yè)務(wù)譬如QQ音樂可能接入層和邏輯層各有十幾個SET,數(shù)據(jù)層有幾個SET。SET分別部署到不同的區(qū)域。每個SET都能容納一定數(shù)量的在線用戶(譬如500萬在線用戶)。
天津大爆炸2億用戶跨省大調(diào)度
8月12日發(fā)生在天津的特大爆炸事故中,騰訊天津數(shù)據(jù)中心距爆炸現(xiàn)場才1-2公里。當(dāng)時天津數(shù)據(jù)中心高危,現(xiàn)場數(shù)名工程師受傷,市電隨時可能中斷,柴電只能支持不到一天。8月13日我們啟動了大調(diào)度,把天津所容納的二億多華北活躍用戶全部調(diào)度回深圳和上海。調(diào)度過程QQ用戶無感知(從那幾天IT業(yè)界的新聞來看,外界對這一大事件毫無知曉)。
這應(yīng)該是中國互聯(lián)網(wǎng)史上***規(guī)模的一次調(diào)度。調(diào)度的成功受益于SET化的管理,受益于數(shù)據(jù)SET的三地同步。
同步是怎么做的呢?
業(yè)務(wù)數(shù)據(jù)按倉庫為單元,在全國各地IDC部署幾個異地倉庫,通過數(shù)據(jù)流水來實(shí)現(xiàn)各異地倉庫間數(shù)據(jù)同步和一致性保證。當(dāng)某一城市的IDC災(zāi)難性故障時,業(yè)務(wù)能迅速切到其他城市IDC恢復(fù)數(shù)據(jù)的讀寫,實(shí)現(xiàn)業(yè)務(wù)柔性可用,保證業(yè)務(wù)服務(wù)的持續(xù)性。數(shù)據(jù)的同步由同步中心負(fù)責(zé),業(yè)務(wù)寫入同步中心,由各地的倉庫同步服務(wù),從同步中心中讀取數(shù)據(jù),并寫入本地倉庫。
技術(shù)特點(diǎn)
1.低成本:利用數(shù)據(jù)冷熱自動分離技術(shù),將熱數(shù)據(jù)存儲在內(nèi)存,冷數(shù)據(jù)存儲在SSD中,從而大幅度降低成本,且保證20%以內(nèi)的數(shù)據(jù)保存在內(nèi)存中。
2.可擴(kuò)展性強(qiáng):表存儲空間可以在線自動無損伸縮,業(yè)務(wù)基本無感知,適合各種規(guī)模的業(yè)務(wù),和業(yè)務(wù)的各個生命周期。
3.高性能:單表***支持千萬次/秒的訪問。通過網(wǎng)絡(luò)訪問的延時1ms左右。單臺存儲服務(wù)器千兆網(wǎng)絡(luò)環(huán)境支持50萬/秒的訪問,萬兆網(wǎng)絡(luò)環(huán)境支持超過100萬/秒的訪問。
4.可用性超過99.95%:軟硬件全冗余設(shè)計(jì),雙機(jī)熱備,主備切換對業(yè)務(wù)透明,跨機(jī)架跨交換機(jī)部署。
5.數(shù)據(jù)持久性超過8個9:數(shù)據(jù)落磁盤存儲,多內(nèi)存和磁盤副本,具有災(zāi)難時回檔能力。
高可用架構(gòu)
經(jīng)過幾年的不斷打磨及優(yōu)化,我們NoSQL分布式集群的架構(gòu)已經(jīng)非常的成熟,主要有以下幾個特點(diǎn):
1.高可靠:主備冗余,故障自動切換機(jī)制來解決單點(diǎn)問題,當(dāng)主機(jī)故障時自動切換到備機(jī)。同時后臺調(diào)度系統(tǒng)啟動搬遷服務(wù),把單點(diǎn)的備機(jī)數(shù)據(jù)搬遷到倉庫里空閑的資源池。
2.異地容災(zāi):多地部署,單IDC、甚至單個城市災(zāi)難時,服務(wù)持續(xù)可用。
3.強(qiáng)一致性:主提供讀寫,備容災(zāi),保證數(shù)據(jù)強(qiáng)一致性;主故障時自動只讀,用戶切到備機(jī)后恢復(fù)讀寫,確保在單機(jī)故障時數(shù)據(jù)零丟失。
4.倉庫集群機(jī)制:標(biāo)準(zhǔn)化部署,容量伸縮自動化,數(shù)據(jù)服務(wù)能力自動適配業(yè)務(wù)增長或衰退,保持對外服務(wù)的持續(xù)可用。
數(shù)據(jù)即服務(wù)的運(yùn)營理念
數(shù)據(jù)中心由計(jì)算、存儲、傳輸三大要素構(gòu)成,IaaS服務(wù)提出了把傳統(tǒng)數(shù)據(jù)中心的CPU,內(nèi)存,網(wǎng)絡(luò)和存儲等轉(zhuǎn)變?yōu)橘Y源的目標(biāo),為業(yè)務(wù)提供計(jì)算資源的池化及智能調(diào)度管理。對于數(shù)據(jù)層我們的目標(biāo)則是DaaS,把數(shù)據(jù)做為服務(wù)提供給用戶。
構(gòu)建可伸縮的分布式數(shù)據(jù)庫
我們的分布式數(shù)據(jù)庫把存儲資源池化,把內(nèi)存存儲塊及磁盤存儲塊做為資源,放在一個存儲大池子里按照較固定的存儲單元進(jìn)行管理,并在其之上部署存儲智能調(diào)度系統(tǒng)。
因此,我們的上萬臺存儲服務(wù)器已經(jīng)是真正意義上,具備動態(tài)伸縮能力的分布式數(shù)據(jù)庫:
◆業(yè)務(wù)使用數(shù)據(jù)容量最小為1GB,***為10TB。
◆內(nèi)存存儲從1GB擴(kuò)容到多機(jī)的100GB在分鐘級在線完成,擴(kuò)容過程業(yè)務(wù)無感知無損。
◆業(yè)務(wù)保持可用率4個9,延遲2ms。
◆擴(kuò)容過程不需要工程師跟蹤。
我們的數(shù)據(jù)管理集中化,在數(shù)據(jù)復(fù)雜度以及數(shù)據(jù)量不斷增長的情況下,數(shù)據(jù)運(yùn)維能夠支撐多變的業(yè)務(wù)需求。
運(yùn)維即服務(wù),數(shù)據(jù)即服務(wù)
在DaaS中,我們已經(jīng)落地實(shí)施了以下幾點(diǎn):
1.業(yè)務(wù)自助接入服務(wù):業(yè)務(wù)申請、創(chuàng)建業(yè)務(wù)ID、自動創(chuàng)建表空間、自動下線,貫穿整個業(yè)務(wù)的生命周期。
2.機(jī)器部署:采用基礎(chǔ)運(yùn)維平臺,包括包安裝,一鍵上架等自動化部署。支持跨機(jī)架部署。
3.彈性伸縮:一是存儲代理的彈性;二是存儲分配空間的彈性,根據(jù)業(yè)務(wù)存儲使用率自動擴(kuò)縮容。
4.水位調(diào)度:業(yè)務(wù)流量在接入集群間自動流動,存儲塊在存儲集群間自動流動。
5.用戶報(bào)表:全方位的訪問趨勢、存儲趨勢、數(shù)據(jù)冷熱分布、接入機(jī)分布、存儲機(jī)分布、主機(jī)當(dāng)前負(fù)載等業(yè)務(wù)存儲數(shù)據(jù)。
6.多協(xié)議支持:支持私有協(xié)議、Redis協(xié)議和Memcache協(xié)議。
7.成本分?jǐn)偅?/strong>按請求量和存儲量進(jìn)行月度財(cái)務(wù)核算,便于對用戶成本透明。
成本優(yōu)化策略
上萬臺存儲集群的成本優(yōu)化是運(yùn)營中比較核心的目標(biāo)之一,我們在成本上的措施主要為:
1.用訪問密度做為可度量的成本指標(biāo),按每單位GB的訪問量來衡量業(yè)務(wù)接入的合理性。
2.數(shù)據(jù)密度,由于數(shù)據(jù)塊是由固定長度的Block組成的。用戶記錄的不定長會造成存儲塊碎片嚴(yán)重。所以我們通過定期的碎片整理來實(shí)現(xiàn)存儲塊的高效使用,碎片少,提升有效存儲空間。
3.分層存儲,熱KEY保存在內(nèi)存,冷KEY下沉到SSD硬盤。按通常的八二冷熱數(shù)據(jù)比例,我們可以節(jié)省大量的內(nèi)存服務(wù)器。
4.備機(jī)復(fù)用,為保證數(shù)據(jù)的強(qiáng)一致性,我們的存儲主機(jī)提供讀寫服務(wù),備機(jī)只提供數(shù)據(jù)流水落地,不提供服務(wù)。因此我們在備機(jī)上部署容器,滿足公司離線計(jì)算或長尾業(yè)務(wù)對計(jì)算資源的需求。
運(yùn)營團(tuán)隊(duì)的工作本質(zhì)
研發(fā)和DBA的關(guān)系就如同一輛車,我們造好一輛車,寫好說明手冊,而DBA則負(fù)責(zé)調(diào)教和維護(hù)這輛車,讓它能發(fā)揮***的性能,坐得最舒服。
—MySQL研發(fā)團(tuán)隊(duì)成員賴錚
的確,我們運(yùn)營團(tuán)隊(duì)也是類似,與研發(fā)團(tuán)隊(duì)一起把原始的數(shù)據(jù)庫引擎打磨得更易于運(yùn)維、性能更高及對業(yè)務(wù)更多的特性支持,發(fā)揮工匠精神,不斷在成本、安全、質(zhì)量和效率上追求***。
除了研發(fā)團(tuán)隊(duì),運(yùn)維團(tuán)隊(duì)本身也是開發(fā)&運(yùn)維相結(jié)合的團(tuán)隊(duì),團(tuán)隊(duì)內(nèi)有開發(fā)和運(yùn)維二種角色:
◆開發(fā)工程師:負(fù)責(zé)持續(xù)集成環(huán)境、流程引擎、接口、代碼審核等工作。
◆運(yùn)維工程師:負(fù)責(zé)上到產(chǎn)品經(jīng)理,下到任務(wù)粒度級的開發(fā)等職責(zé)。
運(yùn)維強(qiáng)大的工具平臺具備了功能豐富的API接口,譬如身份驗(yàn)證、流程引擎、CMDB接口、監(jiān)控接口、日志上報(bào)、包安裝接口等功能,極大地提高了運(yùn)維工程師工具開發(fā)效率。
如何一起愉快地發(fā)展
“高效運(yùn)維”公眾號(如下二維碼)值得您的關(guān)注,作為高效運(yùn)維系列微信群(國內(nèi)領(lǐng)先的運(yùn)維垂直社區(qū))的唯一官方公眾號,每周發(fā)表多篇干貨滿滿的原創(chuàng)好文:來自于系列群的討論精華、運(yùn)維講壇精彩分享及群友原創(chuàng)等。“高效運(yùn)維”也是互聯(lián)網(wǎng)專欄《高效運(yùn)維***實(shí)踐》及運(yùn)維2.0官方公眾號。
重要提示:除非事先獲得授權(quán),請?jiān)诒竟娞柊l(fā)布2天后,才能轉(zhuǎn)載本文。尊重知識,請必須全文轉(zhuǎn)載,并包括本行及如下二維碼。