后台技術演化啟示
在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
Author:samuelchoi
Email:samuelchoi#163.com
Blog:www.cnblogs.com/samuelchoi
