程序員必看:性能大幅度提升的Twitter新系統(tǒng)架構(gòu)
2013年8月3日《天空之城》在日本的熱播創(chuàng)下每秒新增143119條推文的Twitter峰值記錄,是Twitter平均每秒發(fā)推數(shù)(TPS)5700條的25倍。
值得注意的是,在這次毫無征兆的“洪峰”到來時,Twitter全新的系統(tǒng)平臺并沒有被潮水般涌來的推文堵塞而產(chǎn)生任何延遲甚至宕機。

Twitter舊架構(gòu)與新架構(gòu)的性能對比
僅僅三年前,在2010年世界杯上,一個點球和一張紅牌產(chǎn)生的“推文風暴”都可能導(dǎo)致Twitter服務(wù)暫時失去響應(yīng),號稱地球脈搏的Twitter 經(jīng)常“心肌梗塞”。過去三年Twitter的工程師們夜以繼日的工作,試圖用“縫縫補補”的方式完善Twitter系統(tǒng),但最終隨著Twitter的快速 發(fā)展,這些方法的收效轉(zhuǎn)瞬即逝。
最終,Twitter痛下決心重新架構(gòu)為人詬病的IT系統(tǒng),新平臺上線運行后在性能和可靠性上都取得的翻天覆地的進步。無論是《天空之城》熱播還是超 級碗決賽都沒能卡住Twitter,而且新的架構(gòu)也為Twitter推出多媒體推文卡片,跨設(shè)備消息同步等新功能的推出提供了有力的支撐。
最近,Twitter平臺工程副總裁Raffi Krikorian(@raffi)在Twitter官方博客 撰文分享了Twitter新架構(gòu)的方法和經(jīng)驗,摘要如下:
重新架構(gòu)的緣由與問題癥結(jié)
2010年世界杯多次卡殼后,我們重新審視了系統(tǒng),有以下幾點發(fā)現(xiàn):
我們運行著全球最大的Ruby on Rails應(yīng)用,200名工程師負責開發(fā)運維這個系統(tǒng),但隨著用戶規(guī)模和服務(wù)數(shù)量的快速增長,系統(tǒng)所有的數(shù)據(jù)庫管理、Memcache鏈接以及公共API 的代碼屬于同一個代碼庫。這給工程師的學習、管理和并行開發(fā)都帶來巨大困難。
我們的MySQL存儲系統(tǒng)已經(jīng)遇到性能瓶頸。整個數(shù)據(jù)庫中到處都是讀寫熱點。
通過添置硬件已經(jīng)無法解決根本的系統(tǒng)問題——我們的前端Ruby服務(wù)器每秒處理交易的數(shù)量大大低于我們的預(yù)期,也與其硬件性能不成比例。
從軟件的角度看,我們陷入了“優(yōu)化的陷阱”。我們是在犧牲代碼庫的可讀性和靈活性來換取性能和效率。
重新檢視系統(tǒng),并設(shè)定三大目標/挑戰(zhàn)
一、新架構(gòu)必須在性能、效率和可靠性上表現(xiàn)優(yōu)異,減少延遲大幅提升客戶體驗;同時將服務(wù)器數(shù)量減少到原來的十分之一;新系統(tǒng)能夠隔離硬件問題防止其演變?yōu)榇笠?guī)模宕機。
二、解決單一代碼庫的種種弊端,嘗試松耦合的面向服務(wù)模型。我們的目標是鼓勵封裝與模塊化的最佳實踐,但這次是在系統(tǒng)層面,而不是類庫、模塊和數(shù)據(jù)包的層面。
三、最重要的是能夠支持新功能的快速發(fā)布。我們希望能夠由一些充分授權(quán)的小團隊能做出自主決策,并獨立發(fā)布一些用戶功能。
我們在動手前部分開發(fā)了一些概念驗證模型,最終我們確定了重建的原則、工具和架構(gòu)。
系統(tǒng)重建的關(guān)鍵措施
一、前端服務(wù):用JVM取代Ruby VM。通過重寫代碼庫將Ruby VM服務(wù)移植到JVM,性能提高了10倍,如今性能達到 10-20k請求/秒/主機。
二、編程模型:按服務(wù)類型對系統(tǒng)進行結(jié)構(gòu),建立一個統(tǒng)一的客戶端服務(wù)器庫并與負載均衡、故障轉(zhuǎn)移策略等綁定,從而讓工程師們能更加專注于應(yīng)用和服務(wù)界面。
三、采用SOA面向服務(wù)架構(gòu),使并行開發(fā)成為可能。
四、推文的分布式存儲。即使將整塊單一應(yīng)用分解成不同的“服務(wù)”,存儲依然是個巨大的瓶頸。過去Twitter采用的單一MySQL主數(shù)據(jù)庫只能線性 寫入推文,Twitter決定在推文的存儲上采用全新的分區(qū)策略,用Gizzard框架創(chuàng)建容錯的分片分布式數(shù)據(jù)庫存儲推文,但這樣一來就沒有辦法使用 MySQL的唯一ID生成功能。Twitter用 Snowflake解決了這個問題。
五、監(jiān)測與統(tǒng)計。將單一應(yīng)用轉(zhuǎn)化為復(fù)雜的SOA應(yīng)用后,需要購買匹配的工具才能夠駕馭。Twitter的服務(wù)推出速度很快,同時還需要實現(xiàn)數(shù)據(jù)化的決策支持,Twitter的Runtime系統(tǒng)團隊為工程師開發(fā)了兩個工具Viz和 Zipkin。