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