写点什么

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

2014 年 11 月 05 日

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 提出了申诉,同时,如果排查的结果确实存在版权问题,我们会做出公开道歉并制定惩戒方案。

2014 年 11 月 05 日 22:5210029
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 108.2 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

什么是物联网?常见IoT 物联网协议最全讲解

华章IT

物联网 IoT

排查指南 | mPaaS 小程序提示“网络不给力”时该如何排查?

蚂蚁集团移动开发平台 mPaaS

小程序 网络 小程序生态 mPaaS

“摸爬滚打”多年,从月薪3K到30Kjava大神,我是怎么蜕变的?

比伯

Java 编程 架构 面试 计算机

【3年Java经验面经】阿里三面被挂!幸获内推历经5轮终于拿到口碑offer!

Java成神之路

Java 程序员 架构 面试 编程语言

Java基础+JVM+分布式+算法+锁+MQ+微服务+数据库等499道Java面试题整理(含答案)。

Java成神之路

Java 程序员 架构 面试 编程语言

CAP理论

DL

深度剖析,为何C语言在开发领域的地位如此稳固

Philips

Python go .net rust C语言

《我想进大厂》之Spring夺命连环10问

艾小仙

Java spring 程序员 面试 大厂

那些年我们一起追过的高深术语

linux亦有归途

编程 程序员 程序人生 C/C++

Mysql数据备份与恢复

张攀钦

MySQL

薇娅携手中国航天基金会与我们的太空 带你“益起探月,共舞九天“

Geek_459987

一线大厂欺负程序员?京东单方面辞退38岁P7员工三次败诉

Java架构师迁哥

微服务已然成为Java开发的面试门槛,你连SpringCloud都不会还想跳槽涨薪?

Java成神之路

Java 程序员 架构 面试 编程语言

Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)

YourBatman

云原生 Spring Boot 新特性

什么是低代码(Low-Code)?

阿里巴巴云原生

程序员 云原生 代码

使用resilio实现多集群的k8s pod数据双向非实时同步

东风微鸣

Kubernetes 探索与实践 openshift

华为云MVP高浩:打破AI开发瓶颈,解决数据、算法、算力三大难题

华为云开发者社区

人工智能 数据 华为云

揭秘11.11监控排障利器 京东高稳定日志服务深度解析

京东智联云开发者

云计算 DevOps 日志监控

不懂源码?来看看阿里P8亲自手码的Spring源码解析整套笔记,高薪offer唾手可得!

比伯

Java 编程 架构 面试 计算机

C++语言中std::array的神奇用法总结,你需要知道!

华为云开发者社区

容器 数组 函数

「面试必备」最新整理出的腾讯C++后台开发面试笔记

linux大本营

c++ Linux 后台开发 架构师

产业新基建,撬动数字经济发展新机遇

京东智联云开发者

人工智能 新基建 京东

一份知识点全面又能不断更新与时俱进的《Java面试宝典》,有人已成功靠它拿到阿里、京东、字节跳动等大厂offer,

Java成神之路

Java 程序员 架构 面试 编程语言

Mac下Docker Desktop配置阿里云镜像加速器

jiangling500

Docker 阿里云镜像加速器

使用 Jira Service Management 管理资产,您需要知道的5件事

Atlassian速递

数字化转型 Atlassian Jira ITSM ITIL

一点就透的二分查找算法

比伯

Java 编程 程序员 面试 计算机

架构师训练营第十周作业

文智

极客大学架构师训练营

Kubernetes初体验--用Kubernetes部署一个Web服务

网管

go Kubernetes k8s Web 服务

架构师第一期作业(第 11 周)

Cheer

作业

每周花6小时跟清华大牛学Java:JVM、高并发多线程、算法、微服务等。技术能力蹭蹭往上涨!

Java成神之路

Java 程序员 架构 面试 编程语言

最近我发现瑞幸在这样做私域运营

Linkflow

营销数字化 客户数据平台 CDP 私域运营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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