开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀

一、前言

随着云IM的发展,已吸引愈来愈多有IM需求的APP接入。但考虑到云IM不管从商业模式仍是运营模式上,还需通过多年的沉淀,才可能真正实现客户与服务商的运营和服务良性循环的共赢局面。在此以前,加上有些场景下(好比为了信息安全而不容许接入第3方云IM的应用、IM做为公司核心技术发展而不考虑用云的状况等)也确实不适合采用云IM,因此目前开发彻底自主IM的需求和动力依然很旺盛。

但要想作好全功能、全平台的IM,没必定的技术积累,显然是很难驾驭的了。正如TeamTalk的服务端设计者所说“IM的开发,从功能抽象的角度看可能很是简单,能够认为是管理大量的客户端链接和在不一样的客户端之间传递消息,但具体到实现细节就比较复杂了。打个不恰当的比喻,OS的功能抽象也很是简单,无非是进程间的调度和硬件资源的管理,但要是本身去实现一个,通常人也就只能呵呵了”。

有鉴于此,不少团队开发自主IM时,都会首先想到在开源IM的基础上修改后,做为已用。但话虽如此,靠谱的支持全平台的开源IM,少之又少,这其中,蘑菇街开源的TeamTalk勉强算是一个。但正如国内大多数的开源工程同样,对已无利的事,不多会有人真心坚持的下去。

本文将简要介绍TeamTalk开源的过去和如今,为打算研究和采用TeamTalk的同行提供必定程度的参考。文中所涉及内容若有不妥,还请各位看官见谅。php

(本文同步发布于:http://www.52im.net/thread-447-1-1.html)html

二、即时通信技术交流

- 即时通信开发交流群: 215891622 [推荐]前端

- 更多即时通信技术资料:http://www.52im.net/forum.php?mod=collection&op=allandroid

三、TeamTalk相关资源

开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀_8542441.png

官方网站:http://mogu.io/
官方Blog:http://tt.mogu.io/
曾今的管理者的Blog:http://www.bluefoxah.org/
Github地址1:https://github.com/mogujie/TeamTalk (2015年5月后
Github地址2:https://github.com/mogutt (2015年5月前git

四、版权纠纷:源码存在版权纠纷,使用有风险

4.1 到底发生了什么?

源码被Github下架后TeamTalk的网站给出的申明,截图以下:
开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀_5459e73d9cfc1_middle.jpg 

github

4.2 来自官方的访谈和回应

做为蘑菇街官方对TeamTalk源码与网易泡泡版权纠纷的回应,如下是对蘑菇街研发部架构师月明的访谈全文,现摘录以下:

2014年10月底,蘑菇街开源了其内部即时通信软件TeamTalk,TeamTalk是一款企业办公即时通信软件,目前支持全部的主流平台。正当开发者大赞蘑菇街的开源举措时,TeamTalk于11月4日晚被GitHub下架,缘由是TeamTalk牵涉网易POPO版权。这一系列事件不由让咱们想到开源的底线还应该是尊重,目前具体状况还在调查中。本次访谈了蘑菇街的研发部架构师月明,以深刻剖析TeamTalk背后的细节。

Q:请先介绍一下TeamTalk这款产品以及蘑菇街开源TeamTalk的初衷。
A:TeamTalk是一款企业办公即时通信软件,由蘑菇街技术团队几位工程师利用业余时间开发完成。在开源以前,主要用于蘑菇街内部的在线沟通。蘑菇街在创业前期拥抱开源社区并使用了不少开源软件,这些开源软件帮助咱们可以在技术资源有限的状况下很好的支撑了公司业务的快速发展,在技术团队发展壮大的过程当中,咱们逐步有一些的技术沉淀和积累,抱着感恩社区回馈开源的心态,咱们但愿可以把一些优秀的软件回馈给开源社区,不止TeamTalk,后续咱们还会陆续推出服务化框架等更多的开源项目。

Q:请介绍一下TeamTalk的架构,这么一个支持多平台的产品,开发须要投入不少人力吧?
A:TeamTalk的架构设计主要是参考借鉴了蘑菇街自身线上IM的架构,考虑到消息类业务应用的特性,设计上优先考虑安全性、可用性、可伸缩性。设计的定量指标是平均单机10W并发用户以及千万级并发在线。

从前日后看的话, 前端有支持多平台的客户端,包括Android、iPhone/Mac、Windows、Web,后端是负责登陆和负载均衡的LoginService,负责消息通讯的MsgService,负责调度管理和集群扩展的RouterService,负责业务逻辑的BizService,负责存储服务的StorageService,以及其余系统类服务(监控服务,配置服务,日志服务,文件传输服务)。 具体详细的架构设计图,你们能够经过咱们的GitHub查看细节。

TeamTalk最先的代码是从蘑菇街线上IM的一个分支拉出来的,如今主要是有5位工程师在贡献代码,他们大部分都是身兼多职的全栈式开发工程师,毫无疑问,现有的人员投入是远远不够的,因此但愿能有更多的人加入TeamTalk开源,一块儿开发和维护TeamTalk。

Q:在开发过程当中,是否有借鉴其它IM软件?相比来说,TeamTalk有何优势?还有哪些方面须要改善?
A:刚才已经提到在架构和代码方面最大的借鉴是咱们本身线上的IM,这个线上IM主要是服务于蘑菇街本身的商家和用户之间的闭环交流,在产品体验操做上,咱们参考了QQ、微信等一些产品的作法,这也是让用户的操做习惯可以保持一致。

同比其余IM软件,我的以为TeamTalk的优势主要有如下几点:算法

  • 开源:开源意味着免费和自定义开发,从客户端端到后端,每一部分都开源,社区的力量可以帮助它走得更快更好,也可以帮助一些企业和开发者快速搭建本身的IM应用和服务。
  • 跨平台:多平台客户端支持,PC下的Windows和Web页面,移动化方面的Android和iOS都可以很好的支持,符合当前应用全端的趋势。
  • 高安全性:经过对协议和数据的抽象分层设计,支持自定义协议传输和数据包加解密处理,支持消息阅后即焚功能,支持数据自定义加解密存储。
  • 弹性伸缩:经过对后端服务的高度分层和应用功能单一化处理,隔离消息通讯处理和消息业务处理,使得运维成本,硬件成本降到最低,保证弹性伸缩。
  • 高可用行:经过LoginService的排队机制和负载策略,MsgSerivce/BizService的多实例配置,RouterService的调度和集群管理避免单点,保证了系统的高可用性。


TeamTalk的不足仍是很明显的,存在如下几点:编程

  • 缺人:团队在软件开源管理方面经验比较少,缺乏社区开源这块经验丰富的运做人员,也缺乏可以贡献代码的开发者。
  • 功能不够完善:TeamTalk做为全新的IM开源软件,目前只具有了语音、文本、表情、传图等基础IM业务功能,功能还不够强大,框架层面,咱们也只是作了比较基础的部分。
  • 文档和注释不够规范:以前开发得比较急,不少代码的注释不够详尽,文档也比较粗糙。


Q:TeamTalk是如何保证消息的安全性以及可靠性的?
A:刚说到TeamTalk优势的时候也提到了安全性,咱们经过对消息数据的在系统中6个生命周期:数据录入、数据封包、数据传输、数据解包、数据存储、数据展示进行了细致划分,从协议和数据两个维度出发作了高度抽象分层设计,采用了自定义协议和自定义数据封解包处理。

为了节省网络流量,TeamTalk的协议是创建在TCP上的自定义二进制协议,TCP协议栈保证了数据的可靠传输。可是因为移动设备的网络不是很稳定,常常会出现一些链接超时断开的问题,咱们对消息的传输又作了应用层方面的Ack机制,这样当客户端没有收到服务器的Ack,会提醒用户消息发送失败。之后还会考虑加入send-wait这种机制来确保消息的可靠传输,即在发送下一条消息前,已经确保收到了前一条消息的Ack。同时考虑到有些内网只支持HTTP穿透,咱们后继会考虑支持HTTP长轮询接入,蘑菇街线上的服务器已经支持这两种模式。

Q:TeamTalk将来的发展计划是什么?会增长哪些新功能?是否会搭建云IM服务器为你们所用?会推出付费服务么?
A:从长远角度,咱们的目标是但愿TeamTalk可以成为企业和开发者搭建本身IM的首选软件,这个是理想。回到现实的话,半年以内,咱们但愿可以完成如下几个里程碑:后端

  • 社区:有一个相对稳定活跃的社区,有一帮志同道合热爱IM热爱开源的小伙伴很重要。
  • 文档:GitHub上的文档和注释可以相对规范完善。
  • 服务:对外提供公有云服务,切实的帮助中小企业和开发者快速以最小时间最小人力成本搭建本身的全端IM服务。


对于TeamTalk的新功能,因为TeamTalk支持插件式功能开发,因此我认为在开源的背景下,这个不是第一要位的事情,我想每一个开发者都会很想给本身的女神开发一个摇一摇插件,发挥你们的能动性就好。TeamTalk付费服务暂时不在咱们考虑中。

Q:11月4日,TeamTalk相关的仓库都已经被GitHub禁用,GitHub官方解释是TeamTalk的架构、通信协议以及部分代码都有抄袭网易POPO之嫌。能解释下这件事情么?目前准备怎么处理?
A:TeamTalk作出开源决定的初衷,是由于咱们在创业初期也使用了不少优秀的开源软件,因此想把一些优秀的软件也回馈给开源社区。4号11点多咱们忽然发现被下架的状况,以后收到GitHub的下架通知,你们也很是重视,毕竟TT凝聚了工程师们的大量心血。但恰逢双十一,并且这个双十一是蘑菇街上线本身的电商交易平台以来的第一个双十一,咱们主营业务的开发压力很是大,为了尽快排查TT被下架的细节状况,澄清事实,解决问题,咱们已经安排了专人在仔细地检查代码,并和GitHub以及POPO团队进行积极的沟通。但从如今的情形看来,还须要多一点时间。

咱们已经向GitHub提出了申诉,同时,若是排查的结果确实存在版权问题,咱们会作出公开道歉并制定惩戒方案。安全

五、源码割裂:混乱的源码管理

5.一、2015年5月前的TeamTalk

笔者清楚的记得,TeamTalk开源之初的github托管地址是:https://github.com/mogutt,源码和文档都是很齐全的,好比下面的截图:

开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀_QQ20160723-1.png 
开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀_QQ20160723-0.png 

文档和说明还算齐全,你还能在Github上找到当初的fork版本,好比下面这个:https://github.com/lizj3624/https-github.com-mogutt-TTServer

5.二、2015年5月后的TeamTalk

如今的TeamTalk托管在Github上的地址是:https://github.com/mogujie/TeamTalk,大体翻了下,源码和文档跟当初https://github.com/mogutt相比,源码先不说,至少文档上来看,比原先要简陋了不少:

开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀_QQ20160723-2.png 

5.三、此源码可能已非彼源码!

鉴于发布之初与网易泡泡的源码存在很大的纠纷(说白了极可能是网易泡泡的离职人员直接使用了POPO的代码),2015年5月后的源码(就是如今的官方托管地址:https://github.com/mogujie/TeamTalk)可能已非当初的源码,具体能不能用,还有多少借鉴价值,就不得而之了。

六、管理之争:TeamTalk开源管理者的离去

原先的管理者“蓝狐”于2015年7月31日发布的博文(地址是:http://www.bluefoxah.org/teamtalk/another_tt_roadmap.html)中称:

自从离开蘑菇街以后,蘑菇街收回了个人github代码提交权限,这让我很是诧异,TeamTalk是一款开源的产品,为何全部的控制权必定要把控在某个公司手里?我内心知道这是谁的主意,也能够想象出来当时的场景。不事后面仍是冷静下来思考良久。也许是他们担忧TeamTalk的“荣誉”被我给“占领”了。我想说的是,既然是开源产品,就该本着自由,开放,共享,贡献,合做的精神来把TeamTalk发展起来,而不是在背后瞎BB。 

虽然因为我的缘由,离开了蘑菇街,可是一直关注着TT的发展,也一直努力去维护TT群的氛围,期间也在提交代码,可是却不明白“官方”为何要收回我提交,审核代码的权限。


以上文字很少,但做为技术同行的你,应该能想见TeamTalk这背后的“人”和“事”了,各位自行猜想吧。

七、没有将来:已1年无更新的TeamTalk谈何将来

先不说如今的TeamTalk源码(地址是:https://github.com/mogujie/TeamTalk)跟发布之初的代码有多少渊源(当初涉及网易POPO的源码去哪了?),官方的Github仓库显示至少已超过11个月无人去管了:

开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀_QQ20160723-3.png 

八、即时通信开发资料分享

[1] 网络编程基础资料:
TCP/IP详解 - 第11章·UDP:用户数据报协议
TCP/IP详解 - 第17章·TCP:传输控制协议
理论经典:TCP协议的3次握手与4次挥手过程详解
计算机网络通信协议关系图(中文珍藏版)
NAT详解:基本原理、穿越技术(P2P打洞)、端口老化等
UDP中一个包的大小最大能多大?
Java新一代网络编程模型AIO原理及Linux系统AIO介绍
NIO框架入门(三):iOS与MINA二、Netty4的跨平台UDP双向通讯实战
NIO框架入门(四):Android与MINA二、Netty4的跨平台UDP双向通讯实战
>> 更多同类文章 ……

[2] 有关IM/推送的通讯格式、协议的选择:
为何QQ用的是UDP协议而不是TCP协议?
移动端即时通信协议选择:UDP仍是TCP?
如何选择即时通信应用的数据传输格式
强列建议将Protobuf做为你的即时通信应用数据传输格式
移动端IM开发须要面对的技术问题(含通讯协议选择)
简述移动端IM开发的那些坑:架构设计、通讯协议和客户端
理论联系实际:一套典型的IM通讯协议设计详解
58到家实时消息系统的协议设计等技术实践分享
>> 更多同类文章 ……

[3] 有关IM/推送的心跳保活处理:
Android进程保活详解:一篇文章解决你的全部疑问
为什么基于TCP协议的移动端IM仍然须要心跳保活机制?
微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)
移动端IM实践:WhatsApp、Line、微信的心跳策略分析
>> 更多同类文章 ……

[4] 有关WEB端即时通信开发:
新手入门贴:史上最全Web端即时通信技术原理详解
Web端即时通信技术盘点:短轮询、Comet、Websocket、SSE
SSE技术详解:一种全新的HTML5服务器推送事件技术
Comet技术详解:基于HTTP长链接的Web端实时通讯技术
WebSocket详解(一):初步认识WebSocket技术
socket.io实现消息推送的一点实践及思路
>> 更多同类文章 ……

[5] 有关IM架构设计:
浅谈IM系统的架构设计
简述移动端IM开发的那些坑:架构设计、通讯协议和客户端
一套原创分布式即时通信(IM)系统理论架构方案
从零到卓越:京东客服即时通信系统的技术架构演进历程
蘑菇街即时通信/IM服务器开发之架构选择
腾讯QQ1.4亿在线用户的技术挑战和架构演进之路PPT
微信技术总监谈架构:微信之道——大道至简(演讲全文)
如何解读《微信技术总监谈架构:微信之道——大道至简》
快速裂变:见证微信强大后台架构从0到1的演进历程(一)
17年的实践:腾讯海量产品的技术方法论
>> 更多同类文章 ……

[6] 有关IM安全的文章:
即时通信安全篇(一):正确地理解和使用Android端加密算法
即时通信安全篇(二):探讨组合加密算法在IM中的应用
即时通信安全篇(三):经常使用加解密算法与通信安全讲解
即时通信安全篇(四):实例分析Android中密钥硬编码的风险
传输层安全协议SSL/TLS的Java平台实现简介和Demo演示
理论联系实际:一套典型的IM通讯协议设计详解(含安全层设计)
微信新一代通讯安全解决方案:基于TLS1.3的MMTLS详解
来自阿里OpenIM:打造安全可靠即时通信服务的技术实践分享
>> 更多同类文章 ……

[7] 有关实时音视频开发:
即时通信音视频开发(一):视频编解码之理论概述
即时通信音视频开发(二):视频编解码之数字视频介绍
即时通信音视频开发(三):视频编解码之编码基础
即时通信音视频开发(四):视频编解码之预测技术介绍
即时通信音视频开发(五):认识主流视频编码技术H.264
即时通信音视频开发(六):如何开始音频编解码技术的学习
即时通信音视频开发(七):音频基础及编码原理入门
即时通信音视频开发(八):常见的实时语音通信编码标准
即时通信音视频开发(九):实时语音通信的回音及回音消除概述
即时通信音视频开发(十):实时语音通信的回音消除技术详解
即时通信音视频开发(十一):实时语音通信丢包补偿技术详解
即时通信音视频开发(十二):多人实时音视频聊天架构探讨
即时通信音视频开发(十三):实时视频编码H.264的特色与优点
即时通信音视频开发(十四):实时音视频数据传输协议介绍
即时通信音视频开发(十五):聊聊P2P与实时音视频的应用状况
即时通信音视频开发(十六):移动端实时音视频开发的几个建议
即时通信音视频开发(十七):视频编码H.26四、V8的前世此生
简述开源实时音视频技术WebRTC的优缺点
良心分享:WebRTC 零基础开发者教程(中文)
>> 更多同类文章 ……

[8] IM开发综合文章:
移动端IM开发须要面对的技术问题
开发IM是本身设计协议用字节流好仍是字符流好?
请问有人知道语音留言聊天的主流实现方式吗?
IM系统中如何保证消息的可靠投递(即QoS机制)
谈谈移动端 IM 开发中登陆请求的优化
彻底自已开发的IM该如何设计“失败重试”机制?
微信对网络影响的技术试验及分析(论文全文)
即时通信系统的原理、技术和应用(技术论文)
开源IM工程“蘑菇街TeamTalk”的现状:一场虎头蛇尾的开源秀
>> 更多同类文章 …… 

[9] 开源移动端IM技术框架资料:
开源移动端IM技术框架MobileIMSDK:快速入门
开源移动端IM技术框架MobileIMSDK:常见问题解答
开源移动端IM技术框架MobileIMSDK:压力测试报告
>> 更多同类文章 ……

[10] 有关推送技术的文章:
iOS的推送服务APNs详解:设计思路、技术原理及缺陷等
Android端消息推送总结:实现原理、心跳保活、遇到的问题等
扫盲贴:认识MQTT通讯协议
一个基于MQTT通讯协议的完整Android推送Demo
求教android消息推送:GCM、XMPP、MQTT三种方案的优劣
移动端实时消息推送技术浅析
扫盲贴:浅谈iOS和Android后台实时消息推送的原理和区别
绝对干货:基于Netty实现海量接入的推送服务技术要点
移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)
为什么微信、QQ这样的IM工具不使用GCM服务推送消息?
>> 更多同类文章 ……

[11] 更多即时通信技术文章分类:
http://www.52im.net/forum.php?mod=collection&op=all

相关文章
相关标签/搜索