蘑菇街回应 TeamTalk 版权:开源的底线是尊重

  • 郭蕾
  • 张天雷

2014 年 11 月 5 日

话题:语言 & 开发文化 & 方法

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 的首选软件,这个是理想。回到现实的话,半年之内,我们希望能够完成以下几个里程碑:

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

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

InfoQ:11 月 4 日,TeamTalk 相关的仓库都已经被 GitHub 禁用,GitHub 官方解释是 TeamTalk 的架构、通讯协议以及部分代码都有抄袭网易 POPO 之嫌。能解释下这件事情么?目前准备怎么处理?

月明:TeamTalk 做出开源决定的初衷,是因为我们在创业初期也使用了很多优秀的开源软件,所以想把一些优秀的软件也回馈给开源社区。4 号 11 点多我们突然发现被下架的情况,之后收到 GitHub 的下架通知,大家也非常重视,毕竟 TT 凝聚了工程师们的大量心血。但恰逢双十一,而且这个双十一是蘑菇街上线自己的电商交易平台以来的第一个双十一,我们主营业务的开发压力非常大,为了尽快排查 TT 被下架的细节情况,澄清事实,解决问题,我们已经安排了专人在仔细地检查代码,并和 GitHub 以及 POPO 团队进行积极的沟通。但从现在的情形看来,还需要多一点时间。

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

语言 & 开发文化 & 方法