2億QQ用戶大調度背後的架構設計和高效運營(下)

作者介紹

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

周小軍

騰訊高級運維工程師,目前在騰訊社交負責社交業務海量NoSQL集羣運維和團隊管理。曾在天涯社區任運維副總監。對互聯網網站架構、數據中心、雲計算及自動化運維等領域有深入研究和理解,積累了十多年的IT運維管理經驗。希望窮盡一生來深入鑽研運維領域。

說明

關於本文的背景及面臨的挑戰,請參考:

2億QQ用戶大調度背後的架構設計和高效運營(上)

大調度背後的技術架構

1、多地分佈和異地容災能力

QQ及業務服務以SET的標準化方式部署,以在線容量爲標準劃分SET,採用無熱點的分佈式部署,做法是把QQ號碼通過基於unit的一致性分佈算法劃分成不同的Shard。

QQ SET內各層模塊解耦,100多個核心模塊分成接入中心、消息中心、狀態中心和同步中心4箇中心。中心內的模塊根據物理分佈情況靈活組合成流量內聚、號碼無關、僅跟在線容量相關的集羣。架構可以按照在線需求靈活擴容和伸縮,優化使用專線,實現異地分佈。

以此爲基礎,QQ核心服務做了三地分佈(深圳、天津和上海),單一地區服務故障時核心服務可迅速調度到另二個區域。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
圖:QQ三地分佈架構圖

QQ空間、音樂、相冊等業務以三層標準架構的SET方式部署。QQ空間按照訪問來源和功能的不同將SET劃分爲PC接入SET(Aset)、手機接入SET(Wset)和數據SET(Iset)。

這3類SET在設計架構時,就已經融入了三地分佈(深圳、天津、上海)的容災理念,通過GSLB和移動聯通服務,將來源不同的用戶分別均攤到三地,每地分佈的SET都能提供空間最核心的社交服務處理能力。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
圖:QQ空間三地分佈架構圖

跨地域SET訪問的流程如下圖:

  1. 終端用戶通過域名解析找到接入層

  2. 請求發到接入層

  3. 接入層通過內網名字服務查找邏輯層

  4. 接入層訪問邏輯層

  5. 邏輯層通過內網名字服務查找數據層,並寫入數據層

  6. 本地數據層SET同步到異地其它數據層SET

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
圖:手機QQ的一鍵式調度表單

QQ空間等核心模塊服務均爲SET多地分佈的架構,SET間數據無差異,在故障發生的場景,能夠輕鬆的實現跨地域調度,保障業務質量的穩定可靠。

2、快速的調度能力

SET之上是用戶或服務間的調度能力,調度分外網調度和內網調度。

外網調度有三種方式:基於域名解析的GSLB域名調度;QQ的IP調度和APP的WNS(內部代號維納斯)調度。

內網服務間調度通過L5和CMLB內網名字服務實現。

1)GSLB全局域名解析服務

GSLB是騰訊的DNS域名解析服務,可根據用戶IP識別出用戶歸屬地,繼而實現針對不同來源的用戶返回不同的IP功能。QQ空間的PC用戶調度便是依賴GSLB的調度能力實現。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

2)QQ IP調度

QQ具備精確到機架的最優調度能力。用戶請求經過實時計算獲得最優的訪問位置,包括城市、IDC、網絡模塊和服務器IP。

通過秒級的IP配置下發,用戶可立即重定向到指定的訪問機房。

3)WNS

維納斯(WNS,Wireless Network Service),又名移動連通服務,是一個爲APP提供高連通、高可靠、強安全的網絡連接通道的服務;它利用海量運維數據不斷持續優化調度算法,實現用戶就近接入。

移動端的接入使用WNS的服務,無需域名解析,直接利用WNS的IP跑馬邏輯尋求最優的接入方式,移動用戶可以通過WNS服務主動觸發用戶重連,繼而控制用戶調度所需接入的新IP。

4)L5/CMLB

L5和CMLB是內部服務模塊尋址和負載均衡的自研組件。

L5(Load Balancer,5代指Level5,即99.999%的可用性)是一套兼具負載均衡和過載保護的容錯系統,本質上是一個集名字服務、負載均衡、故障容錯和過載保護的路由決策系統。服務模塊間通過L5來尋址,譬如接入SET A通過L5來選擇邏輯SET B,邏輯SET B通過L5選擇數據SET C。

L5的基本工作原理可以抽象爲基於機器初始配置信息,通過自適應算法,以兩個關鍵指標(請求成功率和請求延時)爲依據,週期性計算出每個被調機器的權重,再使用高效的配額算法分配各個主調機器的訪問路由,主調機器上的業務進程通過API來取得這些路由,調用結束時通過API來反饋路由的好與壞。

5)一鍵式調度能力

一個工程師從織雲(內部自動化運維繫統的代號)上通過一鍵式操作就可以完成全網和內網調度過程。調度平滑,用戶無感知,千萬級用戶調度可以在30分鐘內實現。

3、數據多地同步能力

異地容災除了計算資源的分佈,更大的挑戰是存儲資源的分佈。QQ有三種方式實現數據多地同步,分別是:

  • QQ狀態同步,QQ DB數據的主備同步和QQ空間DB數據的同步中心。

1)QQ狀態同步

QQ在各個區域都是全量數據存儲。但用戶登錄時根據來源區域而調度到不同區域的IDC。用戶登錄到不同區域的狀態信息要在數秒內全量同步到所有區域的狀態中心,狀態數據包括離在線等基本狀態、登陸終端等用戶信息等。

同步要克服多地同寫、本地數據可靠、延遲丟包、數據一致等困難,挑戰是非常大的。

架構通過同步系統解決狀態信息同步。同步系統除通過本地的同步代理存儲本地雙份數據外,還負責三地狀態數據同步。它會從接入中心內收集在線登錄用戶的狀態信息,按照Shard組織單元彙總這些狀態信息,經數據去重後,同步給需要這些狀態信息的其他系統:

  • 同步隊列和斷點續傳保證短時中斷不丟數據;

  • 多級SEQ/時戳機制保證數據延時、數據源故障等異常下的數據一致;

  • TCP同步流容忍延時丟包,減小TCP擁塞算法的影響,並具備多級流量控制、業務粒度的過載保護。

本地的全量DR還會將狀態全量數據落地,以保證數據的高可靠性。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=
圖:QQ狀態同步架構圖

2)QQ DB數據的主備同步

QQ DB採用內部研發的Grocery 分佈式KV存儲系統,採用類似MySQL的主從複製架構實現主備冗餘和異地分佈。Grocery支持一主多備,其中主服務器提供讀寫能力,備服務器提供只讀能力。主備服務器可任意分佈在同一IDC或不同區域。

譬如某最終一致性的業務場景中,一臺主和一臺備存儲服務器部署在深圳,另2個備存儲服務器分別部署到天津和上海。業務集中寫深圳的主存儲服務器,主存儲服務器通過專線同步到天津和上海的備存儲服務器。主服務器出現問題時由某地的備服務器提升爲主服務器,並向業務提供寫能力。

Grocery的主備同步通過sequence和流水保證主備數據的一致性。

3)同步中心

QQ空間採用內部研發的CKV分佈式KV存儲系統,通過同步中心實現多地同步。同步中心是一套消息隊列服務,應用層先寫數據到同步中心,各地區的同步讀進程從隊列服務裏讀取同步數據,並寫入本地的數據SET,從而保證1秒以內的多地數據同步。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

運營能力

1、織雲自動化運維平臺

織雲是社交業務運維自動化平臺,已經實現上千個業務模塊的無人職守自動擴容,具有按業務搬遷能力,覆蓋社交網絡全部業務。

織雲改變了傳統的運維模式。以前的運維模式是以運維人員爲中心,所有變更都需要運維登錄到各運營系統(部署、發佈、接入)、協調各種資源(開發、測試、設備管理員)來完成。

而織雲是以配置爲中心,運維只需要在織雲管理好配置和流程,織雲會根據配置將變更自動化。

以業務擴容爲例,以前的運維模式是這樣的:

  1. 運維需要到資源管理系統申領設備;

  2. 到包發佈系統裝包;

  3. 到配置中心發配置;

  4. 用自己的工具同步文件;

  5. 到各權限系統申請權限……。

織雲將這一切操作自動化,一鍵觸發,10分鐘完成。

在這次龐大的“零感知”的遷移中,織雲起了關鍵的核心作用。遷移的流程成功率和工具成功率達到99%以上,自動調度流程成功率也達到80%以上。

2、柔性服務和過載保護

由於成本的限制,不可能對所有服務都實現高度冗餘。因此在某些非核心模塊達到容量閾值或同城故障而無異地容災時,通過配置開關來關閉非核心服務,犧牲一些業務邏輯來保證核心功能完整性及用戶體驗。

工程師織雲上通過一鍵式下發配置來實現柔性策略。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

每個服務上線前都具備過載保護機制。

如架構中的L5內網名字服務除提供尋址、容錯功能外,還利用時間片內基於客戶端請求質量延時和錯誤率統計來確定最高訪問請求數的閾值。通過負載均衡和重試的頻率控制,來防止處理不及時過載雪崩,限制處理最大的請求數過載雪崩。過載配置參數化,通過配置文件進行靈活調整。

某些服務模塊在請求進入隊列時打上時間戳,當隊列達到最大數,或檢查時間戳發現超時後會丟棄超出閾值的請求,保證系統不過載而導致服務不可靠。

3、快速伸縮能力

通過SET標準化部署和織雲自動化平臺,一個SET內的幾百臺服務器可在10分鐘內完成自動化部署上線,實現操作系統安裝、包安裝、應用部署、自動測試、自動上線等一體化能力。

4、立體監控

運營團隊建設了天網等集基礎監控和業務監控能力在內的監控平臺和核心視圖,能夠即時在PC端或移動端查看各業務、各架構層的容量水平,保證調度前後能夠隨時瞭解平臺狀態,提供了有效的預警機制和運營分析能力。

在監控數據和業務訪問鏈條的基礎上,監控平臺通過DLP(業務生死線)第一時間感知業務異常,通過root分析能力在10分鐘內準確定位業務異常的根源。

5、技術保障

運營團隊通過日常業務鏈條壓測和預演等方式來不斷髮現系統短板、優化運營能力和提升響應速度,定期和業務聯合演練。

下圖是PC QQ日常調度的預演郵件截圖:

每個業務和組件環節都各有相關預案。重大故障有成熟的處理機制,由大故障經理、運營值班工程師和QA等角色組成,在遇到重大故障時根據影響範圍啓動相應的應急機制,按既定策略來和流程實施不同的應急措施,將結果即時同步給業務、開發、QA和運營。

信息高效地在不同責任團隊中上傳下達,幫助了從上層到下層的決策和處理,使得調度處理及後續跟蹤有序進行,保證大調度的順利實施。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章