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