QQ 架構的演變

轉載地址:http://www.cnblogs.com/samuelchoi/archive/2012/03/31/2427424.html

後臺技術演化啓示

  在QQIM後臺技術演化過程中,每一個級別要求的技術不一樣,如十萬級和百萬級在線要求高性能、7*24小時連續服務;千萬級要求高可用性和高可運維性。而到了億級在線,就要求高性能、高可用性、高可運維性和高靈活性“四高”準則,每提升一個量級,相應的四個高都會有相應的要求,而且技術難度也會提升一個量級。
  團隊經歷了從1.4萬到千億級飛躍的過程,免不了很多教訓,正是因爲有了這些技術積累,才換來今天這麼大的規模。互聯網行業與傳統IT行業不一樣,有自己的技術規律,需要做自己的技術積累。
不僅IM業務,騰訊公司在很多不同業務上都走過一些彎路,積累了相應的經驗,邊重構邊生活、大系統做小、先扛住再優化、乾乾淨淨......這些正是在不斷的試錯和總結中得出的理念和價值觀,是在技術演化的過程中得出的啓示。

從十萬級到百萬級在線,第一代架構難支持
  QQ在最早期1.0時代,由於用戶量較少,十萬級在線,並且業務功能非常簡單,例如登陸、添加好友、在線狀態獲取等,因此架構非常簡單,由QQ客戶端+接入服務器+存儲服務器組成。隨後隨着業務的拓展,需要支持支持視頻、語音、傳文件等實時寬帶業務,以及更多類型的用戶資料,我們增加了長連接服務器,爲無法直連的客戶端進行實時寬帶數據中轉,還對存儲服務器進行輕重分離,使核心服務器保證穩定,利用擴展服務器快速支持新增業務,這就是之後的1.5版本。但是我們發現無論是1.0還是1.5,我們發現都難以支撐百萬級別在線。因爲一百萬的時候,各方面都會遇到很大的瓶頸。以接入服務器的內存爲例,單個在線用戶的存儲量約爲2KB,索引和在線狀態50字節,好友表400個好友* 5字節/好友=2000字節,這樣算來2G內存只能支持一百萬在線用戶,因此第一代架構肯定沒有辦法繼續下去,我們必須要升級。
  2.0的主要改進在於單臺服務器擴展成集羣,增加狀態同步服務器。在接入服務器之間同步在線狀態。

  這次升級幫助QQ在2001年順利突破100萬在線用戶數。隨後爲了支持QQ羣,又將2.0升級到2.5,增加了QQ羣服務器和羣貼圖服務器。

在從十萬到百萬的過程中,有兩個重要的經驗,一是後臺架構的高性能,主要通過六個方面實現:絕對不用企業級解決方案,邏輯層多進程,萬有一失的無鎖設計,用戶態IPC,MySQL分庫分表,好友表自寫文件存儲。二是7乘24小時連續服務,主要通過以下方法實現的:大系統小做,平滑重構,核心數據放入共享內存,接入層與邏輯層分離,命令分發動態配置化。

千萬級在線的考驗,第二代架構難維繫
  2005年QQ同時在線迅速增長到千萬級,於是之前的架構再次面臨挑戰,突出的問題主要體現在,同步流量太大,狀態同步服務器遇到單機瓶頸;所有在線用戶的在線狀態信息量太大,單臺接入服務器存不下;單臺狀態同步服務器支撐不下所有在線用戶;單臺接入服務器支撐不下所有在線用戶的在線狀態信息。沒有辦法,只得進行再次升級,3.0時代到來。
  3.0改造的主要特點是全面的集羣化

  但是事情並非我們想象的那樣順利,很快新問題產生了。
  問題一:後臺機器越來越多,單機死機/故障經常出現,IDC故障也不少,影響服務,也影響人員生活。經過分析我們決定加速容災改造,存儲集羣建立半自動切換模式,業務集羣、接入集羣、同步集羣建立自動切換模式,後臺分佈在兩套IDC,並有指揮中心設備健康狀態。
  問題二:每週有新代碼發佈,BUG不斷出現,嚴重影響服務。這個問題我們採用Code Review和灰度發佈的方法,得到有效的解決。
  問題三:監控機制原始、報警設置不全,出事了都不知道。這個促使我們完善監控和報警機制。
  問題四:運維操作通過vim或者mysql進行,非常容易失誤。我們通過運維操作Web化(半自動化)、自動化有效的解決了這個問題,並服務可用性終於提升到了行業先進水平。
  通過解決以上問題,我們得到了3.5架構

     這一階段,我們得到如下經驗,架構必須對外提供高可用性的服務,對內提供高可運維性的系統。同時利用灰度發佈,運營監控,容災,運維自動化/半自動化等方法解決架構問題。

億級在線的飛躍,新時代伴隨着新煩惱

  隨着在線億時代的到來,新的問題和煩惱也隨之出現。首先是靈活性問題,比如說QQ暱稱長度增加一半需要兩個月,增加故鄉字段需要兩個月,增加最大好友數從500變成1000需要三個月。其次,億時代還需要具備一些重要的能力,比如原來有上萬的好友;對隱私權的控制;PC QQ與手機QQ別互踢;異地容災,即一個城市出問題的時候,別的城市也能提供服務等等。但億時代帶來的最大的挑戰是,原先IM後臺從1.0到3.5都是在原有的基礎上改造升級,IM後臺1.0的代碼在3.5的下面都能找到,但是這種持續打補丁的方式已難以支撐上億級的用戶。所以除了底層的公共部分之外,IM後臺4.0必須從零開始,重新設計實現。
  IM後臺4.0存儲系統歷時三年完成,支持千萬級的好友在線,加強了隱私權限控置,可以靈活擴展字段,原來擴展一個字段需要兩三個月,現在只需要一週,同時還具備高可運維性,高性能。
  IM後臺4.0通信系統歷時兩年多,架構比原來的複雜很多,希望再過一年可以完成。到目前爲止,已取得了一些成果:首先是多點登陸,可以管理不同的登陸終端;支持5至10億個實例同時在線;方便接入微信等多種業務;實現區域自治。
  在億級在線時代,需要的關鍵技術首先是提供高靈活性的業務支持,傳統IT行業可能半年到兩年出一個新版本,而互聯網行業每個月就需要出一個新版本。同時還要保持高性能,高可用性,高可運維性。展望騰訊IM服務的未來之路,全球化分佈、高效的研發、監控報警的智能化成爲未來發展的戰略。

 REF PPT:http://djt.qq.com/article-19-1.html

 REF 視頻:http://djt.open.qq.com/article-33-1.html



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