返回 登录
0

解读微信终端开源背后的故事

阅读8936

责编:陈秋歌,关注微信开发等领域,寻求报道或者投稿请发邮件chenqg#csdn.net。
欢迎加入“微信开发技术”群,参与热点、难点技术交流。请加群主微信「Rachel_qg」,申请入群,务必注明「姓名+公司+职位」。

2017微信公开课PRO版于2016年12月28日在广州亚运城综合体育馆盛大开幕。在活动现场,微信公开课讲师赵原宣布微信终端Mars跨平台网络组件正式开源。据悉,在Mars之前,微信已开源了热补丁技术Tinker,移动数据库MMDB也在走开源审核流程。这三个开源项目从APP开发的“三座大山”——网络、UI应用框架和数据库分别入手,解决其痛点问题。

会后,有幸采访到赵原,请他聊聊微信开源背后的故事。

问:在外界看来腾讯和微信都比较保守。而今微信将自己研发成果进行开源的原因是什么?可获得的最大价值是什么?

赵原:在选择开源之前,其实我们已做了很多对外输出技术能力的尝试。从去年到现在,微信的各个技术团队都参与其中,包括微信终端、微信后台、微信支付等团队。

无论技术文章还是大会演讲分享,在技术能力的输出上都还不够。要做到全方位技术能力输出,其中很重要的一个环节就是开源。微信开源主要目的有两个,其一是为了走出去,将微信本身的技术能力辐射出去,同时也可以更好地吸收外界的新技术。通过技术的开放,可以带来团队的持续学习发展。二是为了团队成员个人更长远的发展。参与开源项目的同事,即使今后跳槽其他公司,只要公司产品基于该开源项目,他们仍可以持续关注并维护这些代码,可以持续地增强对某一领域的积累。而对于微信来说,不再将技术开发工作限于同一个办公室内的同事,走出去的微信技术人也依然可以通过开源项目继续作为微信的开发者。

问:2017微信公开课PRO版上,您宣布Mars正式开源,Mars主要解决的开发痛点是什么?

赵原:移动应用的开发,离不开网络模块的开发。同样,网络作为微信的基础,重要性不言而喻。任何网络模块实现的 Bug 都可能导致重大事故。所以,自2012年起,微信就开始着手研发一套跨平台的网络基础库。经过四年多的发展,今天的Mars已包含信令网络组件STN、日志组件XLOG在内的多个组件集合。它的性能和稳定性已在微信丰富多样的应用场景、海量用户、复杂的环境中得到验证。如今开放出来,供广大开发者应用于其他APP,避免重复微信之前踩过的坑。

问:Mars除了在微信产品中使用,腾讯的其他产品线上是否也在使用?

赵原:目前Mars已在微信客户端版本中使用。Mars是一套很复杂的组件,包括STN长短连接的信令通道、CDN大数据传输的通道等很多部分。而这些并没有完全打包,其他产品可以根据自己的情况选用其中的某些部分。微信也正在一些尝试性的APP上应用Mars,它确实帮助其产品开发者大幅度减少了工作量。

问:Mars的研发有没有借用一些其它开源产品?

赵原:最开始研发时,Mars与业务相关,它的优化必须结合内部业务来完成,所有的技术都是自主研发完成。当然我们也会使用例如OpenSSL这样的一些非常基础的开源库。在Mars选择开源后,我们将其中很多业务相关的部分移除掉,将它改造成谁都可以使用的技术。

在研发过程中,也参考了一些其他同类开源项目,主要是借鉴它们解决问题的方法,如谷歌QUIC协议。像谷歌、Facebook这样行业内技术领先的公司,他们传递的一些好思想,我们会借鉴。

问:在微信开源计划中,还有一个MMDB,现在已经开源了吗?

赵原: MMDB移动数据库是对SQLite数据库的优化版本。目前内部已经走完了开源审核流程,还在做进一步的开源准备,具体开源时间还不能确定。

问:过去一些公司开源过一些项目,给大家的感觉是开源之后就没有维护了。微信开源之后,会有什么不同?

赵原:针对这一点,我们内部曾提到一个很尖锐的问题,即“开源了,这件事就结束了吗?大家就可以干一点其他的事了吗?”肯定不能这样简单结束掉,因为一个开源项目后期需要持续投入才会有活力。

过去很多公司的开源项目,开放出去的是一个版本,而内部使用的是另一版本,而这两个版本完全脱节,这就导致了大家需要同时维护两个版本的代码,比较耗费人力。在微信,我们一直在推动开发流程的全面”开源化“,保证开源项目只有一个版本的代码,团队只需要维护这一版代码即可,无需投入额外的人力。

公司内部有很多热衷于技术开源,热衷于开源社区的同事,他们在下班后,在周末时间会参与很多开源项目的维护。而微信做出的开源化改造,可以让他们更有热情、更高效地坚持下去。

问:结合你们经验,请问其他公司在开源项目时需要注意哪些事情?

赵原:代码不加处理,直接开放出去,也算是开源了。但这么做是没有任何价值的。可能有些有实力的公司会去学你的代码,但是大部分的中小公司完全没有办法用上你的代码。微信客户端,一个平台的代码少说也会有百万行,你要从微信百万行代码中挑出自己需要的,是件非常困难的事。

有关微信终端Mars跨平台网络组件的详细介绍请见:微信终端跨平台组件 mars 系列 - 我们如约而至


CSDN与微信支付团队联合开设了“微信支付”论坛板块,多位微信支付团队的技术专家坐阵,在线解答大家在微信支付开发接入过程中的技术问题。大家在微信支付开发过程中遇到的任何问题,欢迎来本论坛发问。

“微信支付”论坛板块:http://bbs.csdn.net/forums/wechatpay

大家也可以扫描下面二维码,加入CSDN微信开发者群,微信支付专家在线帮您答疑解惑。

图片描述

评论