蘑菇街回應TeamTalk版權:開源的底線是尊重
10 月底,蘑菇街開源了其內部即時通訊軟件 TeamTalk,TeamTalk 是一款企業辦公即時通訊軟件,目前支持所有的主流平臺。正當開發者大贊蘑菇街的開源舉措時,TeamTalk 于 11 月 4 日晚被 GitHub 下架,原因是 TeamTalk 牽涉網易 POPO 版權。這一系列事件不禁讓我們想到開源的底線還應該是尊重,目前具體情況還在調查中。InfoQ 為此也專門采訪了蘑菇街的研發部架構師月明,以深入剖析 TeamTalk 背后的細節。
InfoQ:請先介紹一下 TeamTalk 這款產品以及蘑菇街開源 TeamTalk 的初衷。
月明:TeamTalk 是一款企業辦公即時通訊軟件,由蘑菇街技術團隊幾位工程師利用業余時間開發完成。在開源之前,主要用于蘑菇街內部的在線溝通。蘑菇街在創業前期擁抱開源社 區并使用了很多開源軟件,這些開源軟件幫助我們能夠在技術資源有限的情況下很好的支撐了公司業務的快速發展,在技術團隊發展壯大的過程中,我們逐步有一些 的技術沉淀和積累,抱著感恩社區回饋開源的心態,我們希望能夠把一些優秀的軟件回饋給開源社區,不止 TeamTalk,后續我們還會陸續推出服務化框架等更多的開源項目。
InfoQ:請介紹一下 TeamTalk 的架構,這么一個支持多平臺的產品,開發需要投入很多人力吧?
月明:TeamTalk 的架構設計主要是參考借鑒了蘑菇街自身線上 IM 的架構,考慮到消息類業務應用的特性,設計上優先考慮安全性、可用性、可伸縮性。設計的定量指標是平均單機 10W 并發用戶以及千萬級并發在線。
從前往后看的話, 前端有支持多平臺的客戶端,包括 Android、iPhone/Mac、Windows、Web,后端是負責登錄和負載均衡的 LoginService,負責消息通信的 MsgService,負責調度管理和集群擴展的 RouterService,負責業務邏輯的 BizService,負責存儲服務的 StorageService,以及其他系統類服務(監控服務,配置服務,日志服務,文件傳輸服務)。 具體詳細的架構設計圖,大家可以通過我們的 GitHub 查看細節。
TeamTalk 最早的代碼是從蘑菇街線上 IM 的一個分支拉出來的,現在主要是有 5 位工程師在貢獻代碼,他們大部分都是身兼多職的全棧式開發工程師,毫無疑問,現有的人員投入是遠遠不夠的,所以希望能有更多的人加入 TeamTalk 開源,一起開發和維護 TeamTalk。
InfoQ:在開發過程中,是否有借鑒其它 IM 軟件?相比來講,TeamTalk 有何優點?還有哪些方面需要改善?
月明:剛才已經提到在架構和代碼方面最大的借鑒是我們自己線上的 IM,這個線上 IM 主要是服務于蘑菇街自己的商家和用戶之間的閉環交流,在產品體驗操作上,我們參考了 QQ、微信等一些產品的做法,這也是讓用戶的操作習慣能夠保持一致。
同比其他 IM 軟件,個人覺得 TeamTalk 的優點主要有以下幾點:
- 開源:開源意味著免費和自定義開發,從客戶端端到后端,每一部分都開源,社區的力量能夠幫助它走得更快更好,也能夠幫助一些企業和開發者快速搭建自己的 IM 應用和服務。
- 跨平臺:多平臺客戶端支持,PC 下的 Windows 和 Web 頁面,移動化方面的 Android 和 iOS 都能夠很好的支持,符合當前應用全端的趨勢。
- 高安全性:通過對協議和數據的抽象分層設計,支持自定義協議傳輸和數據包加解密處理,支持消息閱后即焚功能,支持數據自定義加解密存儲。
- 彈性伸縮:通過對后端服務的高度分層和應用功能單一化處理,隔離消息通信處理和消息業務處理,使得運維成本,硬件成本降到最低,保證彈性伸縮。
- 高可用行:通過 LoginService 的排隊機制和負載策略,MsgSerivce/BizService 的多實例配置,RouterService 的調度和集群管理避免單點,保證了系統的高可用性。
TeamTalk 的不足還是很明顯的,存在以下幾點:
- 缺人:團隊在軟件開源管理方面經驗比較少,缺少社區開源這塊經驗豐富的運作人員,也缺少能夠貢獻代碼的開發者。
- 功能不夠完善:TeamTalk 作為全新的 IM 開源軟件,目前只具備了語音、文本、表情、傳圖等基礎 IM 業務功能,功能還不夠強大,框架層面,我們也只是做了比較基礎的部分。
- 文檔和注釋不夠規范:之前開發得比較急,很多代碼的注釋不夠詳盡,文檔也比較粗糙。
InfoQ:TeamTalk 是如何保證消息的安全性以及可靠性的?
月明:剛說到 TeamTalk 優點的時候也提到了安全性,我們通過對消息數據的在系統中 6 個生命周期:數據錄入、數據封包、數據傳輸、數據解包、數據存儲、數據展現進行了細致劃分,從協議和數據兩個維度出發做了高度抽象分層設計,采用了自定義 協議和自定義數據封解包處理。
為了節省網絡流量,TeamTalk 的協議是建立在 TCP 上的自定義二進制協議,TCP 協議棧保證了數據的可靠傳輸。但是由于移動設備的網絡不是很穩定,經常會出現一些連接超時斷開的問題,我們對消息的傳輸又做了應用層方面的 Ack 機制,這樣當客戶端沒有收到服務器的 Ack,會提醒用戶消息發送失敗。以后還會考慮加入 send-wait 這種機制來確保消息的可靠傳輸,即在發送下一條消息前,已經確保收到了前一條消息的 Ack。同時考慮到有些內網只支持 HTTP 穿透,我們后繼會考慮支持 HTTP 長輪詢接入,蘑菇街線上的服務器已經支持這兩種模式。
InfoQ:TeamTalk 未來的發展計劃是什么?會增加哪些新功能?是否會搭建云 IM 服務器為大家所用?會推出付費服務么?
月明:從長遠角度,我們的目標是希望 TeamTalk 能夠成為企業和開發者搭建自己 IM 的首選軟件,這個是理想。回到現實的話,半年之內,我們希望能夠完成以下幾個里程碑:
- 社區:有一個相對穩定活躍的社區,有一幫志同道合熱愛 IM 熱愛開源的小伙伴很重要。
- 文檔:GitHub 上的文檔和注釋能夠相對規范完善。
- 服務:對外提供公有云服務,切實的幫助中小企業和開發者快速以最小時間最小人力成本搭建自己的全端 IM 服務。
對于 TeamTalk 的新功能,由于 TeamTalk 支持插件式功能開發,所以我認為在開源的背景下,這個不是第一要位的事情,我想每個開發者都會很想給自己的女神開發一個搖一搖插件,發揮大家的能動性就好。TeamTalk 付費服務暫時不在我們考慮中。
InfoQ:11 月 4 日,TeamTalk 相關的倉庫都已經被 GitHub 禁用,GitHub 官方解釋是 TeamTalk 的架構、通訊協議以及部分代碼都有抄襲網易 POPO 之嫌。能解釋下這件事情么?目前準備怎么處理?
月明:TeamTalk 做出開源決定的初衷,是因為我們在創業初期也使用了很多優秀的開源軟件,所以想把一些優秀的軟件也回饋給開源社區。4 號 11 點多我們突然發現被下架的情況,之后收到 GitHub 的下架通知,大家也非常重視,畢竟 TT 凝聚了工程師們的大量心血。但恰逢雙十一,而且這個雙十一是蘑菇街上線自己的電商交易平臺以來的第一個雙十一,我們主營業務的開發壓力非常大,為了盡快排 查 TT 被下架的細節情況,澄清事實,解決問題,我們已經安排了專人在仔細地檢查代碼,并和 GitHub 以及 POPO 團隊進行積極的溝通。但從現在的情形看來,還需要多一點時間。
我們已經向 GitHub 提出了申訴,同時,如果排查的結果確實存在版權問題,我們會做出公開道歉并制定懲戒方案。
<span id="shareA4" class="fl">
</span> </div>