
(網(wǎng)易云信CTO 闕杭寧)
“網(wǎng)易出品,必屬精品”,開發(fā)界流傳的這句話對于大多數(shù)開發(fā)者并不陌生。網(wǎng)易云信,一個凝聚了網(wǎng)易公司15年技術(shù)積累的即時通訊云服務(wù)平臺,憑借出色的穩(wěn)定性以及對開發(fā)者的增益價值在上線8個月的時間內(nèi)攬下7萬+APP用戶。近日,網(wǎng)易云信CTO闕杭寧向開發(fā)者分享了網(wǎng)易IM云的演變,云信的架構(gòu)特點以及開發(fā)者生態(tài)等內(nèi)容。
網(wǎng)易IM云演變
云計算的架構(gòu),其核心是基于面對服務(wù)(SOA)的自動化服務(wù)管理架構(gòu),其特征是資源池化、通過互聯(lián)網(wǎng)交付的按需彈性、簡單易用、可計量的服務(wù)。
網(wǎng)易在即時通訊方面的自主研發(fā)已有近10年。網(wǎng)易泡泡是一款和QQ同一時期,也偏于PC時代的即時通訊產(chǎn)品,其架構(gòu)也一直在持續(xù)迭代優(yōu)化。在移動互聯(lián)網(wǎng)發(fā)展的浪潮中,網(wǎng)易各種移動互聯(lián)網(wǎng)產(chǎn)品也陸續(xù)上線發(fā)布,大多數(shù)產(chǎn)品都有很強(qiáng)的即時通訊需求,例如云音樂的私信功能、網(wǎng)易花田的社交通信、網(wǎng)易BoBo的連麥等等。云信即在網(wǎng)易泡泡架構(gòu)的基礎(chǔ)上,針對移動互聯(lián)網(wǎng)的網(wǎng)絡(luò)特性以及產(chǎn)品特性,做了全面的改造和升級,以基礎(chǔ)設(shè)施的形 態(tài)去承載了諸多網(wǎng)易億級體量的產(chǎn)品穩(wěn)定運行。
(網(wǎng)易IM云的演變歷程)
2015年,為響應(yīng)政府和總理“互聯(lián)網(wǎng)+”計劃,網(wǎng)易啟動了云信對外服務(wù)的計劃,并立項重構(gòu)整個云信團(tuán)隊,聚集了網(wǎng)易公司內(nèi)各團(tuán)隊的專家,并以產(chǎn)品團(tuán)隊牽頭,對云信平臺對外服務(wù)體系進(jìn)行了設(shè)計與落地。也正是因為云信本身基礎(chǔ)夯實,有足夠重量級的產(chǎn)品開發(fā)對接經(jīng)驗以及線上穩(wěn)定運維服務(wù)經(jīng)驗。所以項目啟動不到一年,網(wǎng)易云信就通過了嚴(yán)密的測試和內(nèi)部邀請試用各環(huán)節(jié)驗證,在2015年10月正式對外發(fā)布了云信平臺。接入網(wǎng)易云信的開發(fā)者需要和云信的技術(shù)團(tuán)隊、商務(wù)團(tuán)隊協(xié)作,雙方共同努力適應(yīng)新的部署模式和業(yè)務(wù)模式,確保IM順利接入。在這個過程中,需要大量的技術(shù)細(xì)節(jié)溝通和產(chǎn)品代碼的調(diào)整和對接,雙方也要根據(jù)具體需要調(diào)整自己身產(chǎn)品和平臺的功能和實現(xiàn)方式,大量實踐之下對于接入IM功能的APP和云信的完善和成熟度也有很好的促進(jìn)作用。
網(wǎng)易云信架構(gòu)特點
闕杭寧認(rèn)為可以用“穩(wěn)定、務(wù)實”兩個詞來形容云信的架構(gòu)特征。所謂穩(wěn)定在上文已經(jīng)提過產(chǎn)品驗證方面的依據(jù),而在架構(gòu)本身,要做到真正穩(wěn)定的效果,就需要各環(huán)節(jié)各子系統(tǒng)都做到抗抖動、抗單點風(fēng)險和全面的實時監(jiān)控和自動化應(yīng)對,這些并不是靠理論基礎(chǔ)就實現(xiàn),需要通過業(yè)務(wù)實戰(zhàn)一步步走過來。網(wǎng)易云信自泡泡開始至今,經(jīng)過了無數(shù)次的技術(shù)升級,才有現(xiàn)在的穩(wěn)定性體現(xiàn)。
“務(wù)實”這個詞似乎不會用來描述架構(gòu),闕杭寧表示他口中的“務(wù)實”是指網(wǎng)易云信在面對眾多互聯(lián)網(wǎng)產(chǎn)品上,做了數(shù)量龐大的細(xì)節(jié)優(yōu)化去提高接入的產(chǎn)品體驗,比如移動互聯(lián)網(wǎng)弱網(wǎng)狀態(tài)下的實時音視頻數(shù)據(jù)包udp重傳算法、舒適噪音、方便移動辦公的多端消息漫游同步、可供開發(fā)自主定義的多端在線策略等等。同時面對開發(fā)者接入難度和便利性上,云信也做了非常多有助于各層次開發(fā)者快速自由接入的工作,例如提供了開發(fā)文檔、入門教學(xué)視頻、擁有精致交互和視覺的Demo開源項目、開源的UI組件及使用說明、提供了論壇放置了常見問題的處理(如安卓Demo導(dǎo)入的手把手教程)。網(wǎng)易云信實際地解決接入者的問題,并且?guī)椭尤氘a(chǎn)品擁有和網(wǎng)易產(chǎn)品同樣的優(yōu)質(zhì)體驗。在消息穩(wěn)定性、實時音視頻質(zhì)量、聊天室并發(fā)以及消息到達(dá)率和速度上,都有很好的效果。
具體談到IM云的架構(gòu)特點,網(wǎng)易云信具有高可用,易擴(kuò)展等大型分布式服務(wù)器架構(gòu)共有的特征。網(wǎng)易多年以來積累了豐富的設(shè)計經(jīng)驗和產(chǎn)品服務(wù)經(jīng)驗,比如用于多媒體等文件的對象存儲系統(tǒng)、分布式關(guān)系型數(shù)據(jù)庫服務(wù)、分布式緩存服務(wù)、反垃圾集群系統(tǒng)等等,并都在網(wǎng)易系產(chǎn)品中廣泛使用;而外部開發(fā)者并不能直接獲得這些系統(tǒng)為開發(fā)工作所帶來的便利,而云信作為PaaS平臺,也作為媒介為開發(fā)者提供了一個良好的訪問入口來使用這些服務(wù);也正是有網(wǎng)易內(nèi)部的平臺,云信才能擁有良好的高可用,易擴(kuò)展等特性,從而為開發(fā)者提供穩(wěn)定的服務(wù)。
網(wǎng)易云信的架構(gòu)選擇理念
談到近年來,新的編程語言(舊編程語言新用)的層出不窮,闕杭寧也分享了他的一些看法以及云信的架構(gòu)選擇理念。開發(fā)語言本身,各有優(yōu)劣,網(wǎng)易云信的考量主要是兩個維度, 第一是語言本身的普及程度以及語言特性是否可以滿足系統(tǒng)需要;第二是團(tuán)隊本身的積累。他表示對于新語言或者新技術(shù),網(wǎng)易云信會積極吸收和探索,但涉及到生產(chǎn)級的服務(wù),云信還是傾向于先選用主流穩(wěn)定的技術(shù)。因為新技術(shù)在缺乏大量實際產(chǎn)品驗證的情況下,可能會存在一些難填的坑以及待添加完善的服務(wù)組件,這種不確定性會對產(chǎn)品和服務(wù)的穩(wěn)定性帶來危害進(jìn)而損害用戶的利益,所以云信的生產(chǎn)系統(tǒng)更多是使用成熟的語言來開發(fā)。成熟的編程語言代表擁有廣泛的開發(fā)人員,更加適合大團(tuán)隊的開發(fā)作業(yè)。
網(wǎng)易云信技術(shù)團(tuán)隊倡導(dǎo)的理念是先獲得自身技術(shù)的突破,等待成熟以后再應(yīng)用到商品化產(chǎn)品中。例如在保證產(chǎn)品性能穩(wěn)定的同時,云信積極嘗試新的語言和框架,例如網(wǎng)易云信實時音視頻相關(guān)的新服務(wù)中使用了Golang。
對于網(wǎng)易云信技術(shù)團(tuán)隊的發(fā)展和技術(shù)積累來說,闕杭寧希望所有人持有包容的態(tài)度來看待和學(xué)習(xí)新技術(shù),每個云信技術(shù)團(tuán)隊成員把自己定位為“程序員”而不是“Java程序員”或“前端程序員”。技術(shù)或者語言具有相通性,雖然并不要求團(tuán)隊內(nèi)每個人都成為全棧程序員,但不斷的學(xué)習(xí)積累有助于團(tuán)隊合作時互換角色思考,提升自身的團(tuán)隊協(xié)作能力。
網(wǎng)易云信開發(fā)者生態(tài)
在開發(fā)者方面,網(wǎng)易云信在接口設(shè)計上對接口的靈活度和接入便利性一直都有相對全面的考量。網(wǎng)易云信希望把簡單易用的接口提供給不同層次的開發(fā)者和不同產(chǎn)品場景需求去使用,所以并沒有以多版本接口的方式去設(shè)計冗繁的API體系,而是在保持向下兼容本身,對接口進(jìn)行持續(xù)迭代優(yōu)化??紤]到同時面對資深開發(fā)人員,網(wǎng)易云信預(yù)留了足夠自由的參數(shù)傳入和自由定義發(fā)揮空間,幾乎所有的子系統(tǒng)上面,都有自定義、用戶擴(kuò)展預(yù)留設(shè)計的體現(xiàn)。而面對剛?cè)胄械拈_發(fā)者,我們在調(diào)用示例本身和功能組合上,做了足夠豐富的示例和注釋,來幫助這些開發(fā)者快速的實現(xiàn)自身業(yè)務(wù)。并在技術(shù)支持層面,7*24小時響應(yīng)接入咨詢,來保障對接開發(fā)工作的快速順暢。