張小峰 Oray技術總監(jiān)
簡介
張小峰專注于高性能網(wǎng)絡辦事架構,15年C++網(wǎng)絡應用開發(fā)和團隊辦理經(jīng)驗;在DNS架構、C++網(wǎng)絡通信技術、各操作系統(tǒng)API交互、圖像處理、加密算法等領域都有著深入的研究;在Oray技術團隊中負責所有產(chǎn)品的網(wǎng)絡辦事及圖像底層架構設計與開發(fā);帶領團隊先后研發(fā)了多款花生殼、向日葵遠程控制軟件千萬量級的產(chǎn)品,從事其中的結構設計與關鍵技術攻關。是Oray技術團隊的領頭羊與靈魂人物。
應用配景介紹作為提供各種互聯(lián)網(wǎng)辦事且具有海量用戶的的Oray,我們也一直在實踐各種新技術新架構;緩存方面我們從memcached、ttserver、redis等都有較多應用,其中redis我們的dns體系中有著很深度的集成使用;MySQL InnoDB memcached plugin出來挺久的了,網(wǎng)上還沒見到國內有把它用到生產(chǎn)環(huán)境的實例,我今天就給大家說下小白鼠體驗。
創(chuàng)始產(chǎn)品花生殼是個簡單的動態(tài)域名產(chǎn)品,用戶可以用它發(fā)布本身的各類辦事,從網(wǎng)站到各類專用數(shù)據(jù)連接;就算在中國互聯(lián)網(wǎng)環(huán)境如此殘酷同時IPv4資源在不停萎縮的今天,這個產(chǎn)品還在不停的發(fā)展壯大。雖然外貌看起來是個簡單的工具軟件,但它為中國一代代的互聯(lián)網(wǎng)人解決了很多基礎的連接問題!
但很大一部分用戶使用我們的花生殼也就是為了遠程操作電腦,所以2010年,在我們埋頭苦干了1年多后推出了向日葵遠程控制產(chǎn)品,這個產(chǎn)品的基本功能就是讓用戶不需要關心IP端口等技術知識就可以遠程辦理控制他的所有電腦,這個產(chǎn)品主要依賴以下技術:
1、 通過關系型數(shù)據(jù)庫辦理用戶主機清單;
2、 使用長連接維持被控在線狀態(tài);
3、 P2P通信技術傳輸控制信號以及圖像信號;
4、 優(yōu)化的算法盡可能的降低用戶帶寬占用以及提高圖像質量;
5、 其他周邊技術,如HTML5免插件遠程控制、遠程開機等。
客戶端、操作系統(tǒng)以及相關遠控技術問題我們今天先不探討,向日葵也不是一個簡單的C/S結構軟件,我們需要像聊天辦事器那樣與客戶端進行實時交互,而客戶端在線量一直在兇猛的增長中,我們的系統(tǒng)以及運維和開發(fā)團隊也就不竭的迭代并成長。
向日葵遠程控制技術的數(shù)據(jù)需求上面提到,向日葵使用關系型數(shù)據(jù)庫存貯某一個用戶擁有哪些主機,以及這些主機的具體相關信息;在此同時,我們也需要臨時存儲一些關鍵的實時數(shù)據(jù):
1、 主機鑒權信息
2、 主機在線狀態(tài)
3、 如何連接主機
其實剛發(fā)布向日葵的幾個月我們是把它們同時放在關系數(shù)據(jù)庫里的,阿誰時候主要考慮的也不是辦事端的性能問題,而是整個系統(tǒng)跑通,只是我們的數(shù)據(jù)庫后來吃不用了,這一段經(jīng)歷不長,說真的也沒啥好講的。
緩存優(yōu)化史既然存在關系數(shù)據(jù)庫中分歧適,我們就開始用各種緩存技術來存儲這種實時數(shù)據(jù)。
從memcached到ttservermemcached第一代的主機狀態(tài)數(shù)據(jù)緩存化,我們把它放在了memcached,整個客戶端的登陸過程是這樣的(里頭略去了各種錯誤處理及異常以及各種附屬架構,好比負載均衡或者備份等):
把狀態(tài)等需要頻繁拜候的數(shù)據(jù)放到緩存后,這個大框架到現(xiàn)在也還基本上是這樣,API負責所有跟持久化DB的交互操作,長連接只負責跟memcached的通信,這樣也制止了我們的DB有過多角色參與讀寫;別的這個時候我們只有一臺memcached辦事器,因為我們算過16G內存大約可以放上億的主機信息。
但這些數(shù)據(jù)跑memcached真的合適嗎?
在經(jīng)歷了兩次memcached瓦解后我們也瓦解了,memcached的數(shù)據(jù)是完全放在內存里的,瓦解后所有主機全部會釀成不在線且只能通過重啟所有辦事器解決,而重啟所有辦事器意味著所有原先在線客戶端都得全部重新登陸一次,這個過程會極其漫長,以小時計的。
ttserver我們要改進了,順其自然的,我們想到了ttserver,ttserver可以在瓦解重啟后恢復數(shù)據(jù)且具備主備同步功能,而丟失那部分數(shù)據(jù)我們可以在客戶端登陸時從DB里自動恢復出來;
由于ttserver跟memcached通信協(xié)議上完全兼容,但為了制止全局性的災難,我們在完成多cache辦事優(yōu)化后,新系統(tǒng)很快就上線了。
新緩存體系的結構長這樣的:
完全堆疊式的設計,理論上也是可以無限擴容的,但我們沒意識到ttserver幾個大問題:
ttserver不支持key過期的,需要開啟table database模式,并通過lua腳本的方式來實現(xiàn),但該模式ttserver的運行性能相當差,而且在數(shù)據(jù)很大的時候出現(xiàn)不不變的現(xiàn)象。