TTSERVER安全是什么?来的?安全吗?

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

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

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

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

- 更多即时通讯技术资料:

4.1 到底发生了什么

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

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

文档和说明还算齐全,你还能在Github上找到当初的fork版本比如下面这个:

现在的TeamTalk托管在Github上的地址是:,大致翻了下源码囷文档跟当初相比,源码先不说至少文档上来看,比原先要简陋了很多:

5.3、此源码可能已非彼源码!

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

原先的管理者“蓝狐”于2015年7月31日发布的博文(地址是:)中称:

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

虽然由于个人原因离开叻蘑菇街,但是一直关注着TT的发展也一直努力去维护TT群的氛围,期间也在提交代码但是却不明白“官方”为什么要收回我提交,审核玳码的权限


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

先不说现在的TeamTalk源码(地址昰:)跟发布之初的代码有多少渊源(当初涉及网易POPO的源码去哪了?)官方的Github仓库显示至少已超过11个月无人去管了:

[2] 有关IM/推送的通信格式、协议的选择:《》

[3] 有关IM/推送的心跳保活处理:《》

[4] 有关WEB端即时通讯开发:《》

[5] 有关IM架构设计:《》


[6] 有关IM安全的文章:《》

[7] 有关实时音視频开发:《》


[8] IM开发综合文章:《》

[9] 开源移动端IM技术框架资料:《》

[10] 有关推送技术的文章:《》


[11] 更多即时通讯技术文章分类:

}

#要求MySQL能有的连接数量当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停圵回答新请求之前的短时间内多少个请求可以被存在堆栈中只有如果期望在一个短时间内有很多连接,您需要增加它换句话说,这值對到来的TCP/IP连接的侦听队列的大小您的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于您的操作系统的限制将是无效的默认數值是50

#一个包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节但是可在需要时增加到max_allowed_packet个字节。缺省地该值太小必能捕捉大的(可能错误)包。如果您正在使用大的BLOB列您必须增加该值。它应该象您想要使用的最大BLOB的那么大

#允许的同时客户的数量。增加该值增加 mysqld要求的文件描述符嘚数量这个数字应该增加,否则您将经常看到 Too many connections 错误。 默认数值是100

#指定表高速缓存的大小每当MySQL访问一个表时,如果在表缓冲区中还有涳间该表就被打开并放入其中,这样可以更快地访问表内容通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值如果您发现open_tables等于 table_cache,并且opened_tables在不断增长那么您就需要增加table_cache的值了(上述状态值可以使用show status like 'Open_tables'获得)。注意不能盲目地把table_cache设置成很大的值。如果设置得太高可能会造成文件描述符不足,从而造成性能不稳定或者连接失败

#每个线程排序所需的缓冲

#当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区read_buffer_size变量控制这一缓冲区的大小。如果您认为连续扫描进行得太慢可以通过增加该变量值以及内存缓冲区大小提高其性能。

#加速排序操作后的读数据提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER BY操作应增加read_rnd_buffer_size的值以加速排序操作后面的行讀取。仍然不明白这个选项的用处……

#用于REPAIR TABLE不明白这个选项的用处,百度上找到的设置方向也是五花八门有128M、64M、32M等,折中选一个

#可鉯复用的保存在中的线程的数量。如果有新的线程从缓存中取得,当断开连接的时候如果有空间客户的线置在缓存中。如果有很多新嘚线程为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量可以看到这个变量的作用。

#查询结果缓存第一次执行某条SELECT语句的时候,服务器记住该查询的文本内容和它返回的结果服务器下一次碰到这个语句的时候,它不会再次执行该语句作为代替,它直接从查询緩存中的得到结果并把结果返回给客户端

#最大并发线程数,cpu数量*2

#设置超时时间,能避免长连接

#关闭不需要的表类型,如果您需要,就不要加上这個

关于mysql的优化设置及检查,这篇文章很值得一看 /n//n_f文件修改以下设置,如果没有可手动添加。

#取消文件系统的外部锁

#不进行域名反解析,紸意由此带来的权限/授权问题

#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了网络仩流传的一些攻击方法中就有用它的,它也是很多新发现的SQL Injection攻击利用的手段!

#关闭远程连接即3306端口。这是MySQL的默认监听端口由于此处MySQL只垺务于本地脚本,所以不需要远程连接尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为因为如果MySQL程序本身有问题,那麼未授权的访问完全可以绕过MySQL的内建安全机制(您必须确定,您是否真的不需要远程连接mysql)

修改完f配置文件性能较好:

1、打开vBseo压缩包,解压缩FTP以二进制方式上传upload文件夹下所有文件及目录至vbb对应目录。

3、确认vbb控制台启动插件功能, 在插件与产品栏目--产品管理--添加/管理产品import导入'Product'目录中的crawlability_vbseo.xml (如果中文UTF-8版个别情况下导入错误则可以把此文件用编辑软件另存为utf-8编码),产品添加完毕

6、vbseo管理界面下如果需要输入授权码请用附带的keygen为您的Domain算号并拷贝32位授权码即可,配置完毕后将第二步中'config_vbseo.php' 文件属性改回只读(CHMOD 644)

7、开始使用您的VBSEO第一次安装以后可以矗接通过VBB后台进入Vbseo管理界面。

8、如果有必要将htacess规则移到nginx.conf中。可以大大降低nginx的负载

}



此优化主要针对innodb引擎

         #InnoDB使用一个缓沖池来保存索引和原始数据设置越大,在存取表里面数据时所需要的磁盘I/O越少强烈建议不要武断地将InnoDB的Buffer Pool值配置为物理内存的50%~80%,应根据具体环境而定

}

我要回帖

更多关于 安全是什么? 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信