蔡润达:微信的系统重构

个人简介 蔡润达,2009年从华南师范大学计算机学院毕业,加入腾讯\QQMail团队。 2011年转入微信团队。 2012年转入微信公众平台团队至今,负责微信公众平台后台架构。 期间带领团队多次重构系统架构,并发布了公众号api,微信授权登陆,卡券与门店,公众号服务四方授权登陆等重大特性。 工程管理上,对敏捷软件开发,项目管理感兴趣。认为在业务变化非常快的今天,如何既快速响应需求,满足业务发展,又保持横向扩展性,是一个极具挑战的工作,本身也享受挑战的过程。 业余时间,走街串巷,行行摄摄,搜刮美食。 希望能和大家多多交流,相互学习。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. InfoQ的网友大家好,现在我们是在QCon北京的现场,作客专访间的是腾讯微信开放平台基础部开发一组组长蔡润达先生。您平时有什么业余爱好?你比较喜欢去什么样的地方旅游?

蔡润达:平常可能就爬爬山,拍拍照,旅游。比较喜欢去那种比较靠近大自然的,比如说青海觉得不错,之前团队旅游的时候,跟团队去了柬埔寨,看吴哥窟,感觉挺不错的。玩摄影玩的不多,这几年都落下了,刚毕业的时候比较闲,就开始玩一下单反,但是现在玩的时间不多了。

   

2. 在微信的发展过程中,你带领团队进行了好几次系统重构,能谈一谈这些重构背后的故事吗?

蔡润达:我觉得有几个阶段,重构比较多的还是公众平台。公众平台在2012年做了一次比较大的重构,持续到2013年。我们内部以前其实有两个不同的架构,一个叫开放平台,一个叫公众平台,并且提供两套不同的API接口。开发者会非常费解,当有一些新的Future要发布的时,通常要两边适配,非常痛苦。后来就把开放平台定位为以APP为主,让开发者可以管理他的APP和公众账号之间的关系。

   

3. 就是我们在后台看到的游戏?

蔡润达:对,它可能对应有一个公众账号,它之间的数据是可以桥接打通的。我们在做这个转型之前,有两套不同的架构,当时团队的人也挺少的,我们就把两个不同的架构merge为一个架构。第二个事情应该算是微信登录,这个对我们整个后台起了比较大的影响,一个是扫码登录,一个是游戏、APP拉起微信,完成登录授权。你可以看到好友在玩什么游戏。当时在做这个应用的时候,我们人当时还是非常少的,只有3-4个员工在做这件事情。当时的挑战是,发布量没有渐进式增长,一发布就是爆发式的增长。当时微信5.1发布,全民打飞机很火,一下就上亿用户,接着去推一些新游戏的时候,都是一天就有几千万,对整个后台的请求量,这一分钟可能是10万,下一分钟几十万,再下分钟就是100万,接着400万、500万这样飙上去。当时我们在发布的时候,自己也是捏了一把汗。

   

4. 当时授权是怎么做的?

蔡润达:我们的授权是遵循了OAuth2.0的一个规范来做,在所有调用关系链profile接口的时候,都需要去鉴权用户有没有授权,以保证这套体系的安全。作为一个开放平台,接入的APP有很多,每个APP的权限又是不一样的,这里面对我们的挑战就是,一个是量上面,因为这个东西是从无到有的,一发布能够扛得住这么大的请求量。二是能不能支撑一个横向扩展性,一个游戏火了,另一个游戏进来,第二个游戏也火了,第三游戏又进来,一开始发布时是两周一个游戏,几个月以后,发行要求一周一个游戏。这一整个研发和重构是对我们团队的第二次考验。第三个阶段就是公众号授权,公众号可以对一个第三方平台授权,不需要他自己的用户名、密码。打个比方,某个第三方研发了一个生鲜平台,那我们可以注册很多不同的公众号。不同公众号的运营者,注册完以后,登录到它的平台,就可以在他的平台上创建菜单,添加一些组件。把公众号一秒钟变成一个生鲜平台,这个东西对我们的改造非常大。

   

5. 这跟你们之前的微商好像不一样。

蔡润达:这个场景是很抽象的,它可以作为一个第三方平台,它也可以作为一个阅读第三方平台。有些第三方平台根本不挂钩交易,它就做一个编辑器,可以把图文消息整理得非常漂亮,你首先授权登录它的平台,因为我把用户名、密码给你的时候,你会很担心的,这不安全,公众号如果被盗了,会产生很大的经济损失。

   

6. OAuth2授权协议里也有一些漏洞。

蔡润达:对,但是我们在第三方平台这里,首先是准入会更高,第二,我们的信息加密做得会更好。第三就是用户能随时取消授权,我们有一个界面可以很方便地管理,你可以先授权一部分的东西,去体验一下,觉得OK了,你再多授权一些权限给他。我们发现很多第三方开发者也在做自定义菜单,做图文消息编辑器,做电商,我们不希望每个人重复开发一遍,只需要最终有一个强者成长起来,在某一个细分领域里面做出一个足够强大的平台,最终用户会帮忙选出这个平台,并加速其成长。这个过程中要求我们原有的公众号九大系列接口,全部要符合新的规范,无论是对外的表现,还是对内的一个架构的重新整理,这是一个非常大的挑战,特别是那时候我们的业务已经非常复杂了。

   

7. 那时候你们有多少人做这个事情?用了多久?

蔡润达:当时做这个第三方授权,大概花了5-6个正式主力在这个上面。做了大概有3个多月。我刚刚讲的是后端,当然前端那一部分工作量非常复杂。另外一个团队的同事也是投入了巨大的精力在整个前端流程上面。

   

8. 你们的这些服务是不是一开始就放在腾讯云上呢?

蔡润达:不,我们是放在自己的机器上。微信是统一的线上运营环境,没有放到云上,我们内部有自己的资源调度。

   

9. 现在微信公众号平台的功能越来越丰富,集成的东西也越来越多,是有计划进行的吗?比如说集成的JS。有没有计划说再集成其他新的东西进去?

蔡润达:我们认为这些JS API非常好用,一开始我们只是放了一个分享的功能,后来就发现这些用户开发者很聪明,他会这些API的一些使用技巧,然后就去用。有人用的很守规则,没有乱用。而有些小聪明的玩家就可能把它玩坏了。比如那种一定要分享才能看到内容,可能一开始他的出发点是好的,但是导致了大量重复内容刷屏,这个现象对整个生态来说不好,所以我们认为这个东西应该用一种标准的方式。什么叫标准呢?第一是要识别链路方,识别究竟是谁在调用这个东西。第二要有鉴权,你是否可以调用,调的合法还是不合法。第三,为了开发者着想,提高他们的开发效率,我们可以将功能通过JSSDK打包集成,并提供给开发者,提高他的开发效率,提高用户的产品体验,用户用了JSSDK开发的产品以后,感觉整个体验变好了。新的集成也在计划,现在把一些基本原则的操作,比如像网络、地理位置、分享、界面控制、音频、图像、语音识别做完后,还计划把一些业务的东西集成进去。

   

10. 语音现在还是不能直接分享在朋友圈的是吧?

蔡润达:你讲的是朋友圈的,跟这个好像不太一样。我讲的是在H5上面,可以怎么样去录一段音。最原始的时候,你需要自己写一个录音控件,但挺麻烦的。如果是传图片,就搞一个Form然后就传,断了也不知道为什么,要处理起来挺麻烦,要不然自己去写一个插件,前端写一个插件,通过Socket来传还是自己做分包传,都挺麻烦。我们希望通过微信本身很强大、很成熟、很稳定的一个传图的技术,通过JSSDK集成给到你。除了这些基本的原始操作,我们还把一些微信支付、扫一扫、卡券这些东西集成过来,未来我们还计划把POI、附近等功能提供给开发者。

   

11. CRT之类的功能也会往里放吗?

蔡润达:有这个可能性。我们相信把原始的操作给到开发者,开发者会有很好的一些创意出来,整个生态会越来越繁荣。

   

12. 微信现在的版本更新周期大概怎样的?这个版本发布的时候,是不是每次都增加一些新功能?

蔡润达:微信客户端不是我这一块去负责的。微信客户端现在有一个比较稳定的发布周期,每个月都有一些版本发布。新功能不一定,有一些小版本是fix bug性的优化。有一些版本有一些大的Future发布,我们的后台会跟踪它,本身设计都做好了,协议也相互兼容,节奏上更自由。开放平台这一边主要侧重商家,同时也关注微信客户端,我们是中间一个桥梁。我们关注有哪些更好的东西可以整合到开发者这一端,比如说之前发的那个小视频挺火的,我们要想办法说把这个小视频功能适配到消息API里面去,能够让公众号收到用户的小视频,可能有一些比较有趣的用户场景,我们没有想到,但这个功能就先做了。

   

13. 有了全局搜索,现在不用订阅任何公众号,通过关键字搜索就可以看到。这个全局搜索对后台架构的压力是不是相当于做一个搜索引擎?你们是怎么解决劫持问题的?

蔡润达:对,搜索引擎我们是跟北京和深圳一个联合团队来做的。我们这边作为整个底层的基础架构,当然数据上其实是打通的。另外搜索的索引服务是独立切分的一部分,并不会互相影响。我们从去年就开始发布一些防劫持的东西,至于技术细节不是太方便透露。因为我们也是为了提高微信用户的整个阅读体验。比如在阅读的时候,下面突然间蹦出一些很低俗的广告,是蛮讨厌的,我们希望通过我们新的防劫持的技术,能够减少这种骚扰。

   

14. 谈一下对QCon大会的评价吧,或者给我们提提建议,哪些地方还需要改进?

蔡润达:首先真的很感谢QCon提供这样一个平台全球全中国最顶尖的一些软件开发者去交流,互相学习,互相提高,这非常好。另外也是一个窗口,国外的一些先进的技术、先进的开发者,他通过这个窗口去了解我们中国的东西,国内的东西,我们国内可以通过这个窗口对外去了解更多的东西,我觉得非常好。

   

15. 做APP开发,比如以前是全Native的那种开发方法,现在掺杂一些Web的东西进来了,比如H5,要怎么样做呢?

蔡润达:我觉得对微信来说这是一个没有办法去避免的事情,整个微信最核心的功能其实是IM,就是消息通知。除了IM所有的逻辑功能都必须要落地,有两种解决方案。A,比如叫车服务,我要把滴滴打车落地到微信里,如果原生地去做,微信的逻辑会非常重,那仅仅是一个滴滴打车,我可能就要有一堆代码、一堆逻辑、一堆原生的view去支撑它。如果还有一个叫外卖的,叫洗车的,那整个扩展性就很差,而且周期迭代成本也很高,另外整个APP非常大,最后可能一个APP要1G,这个非常夸张。B,我们给用户最核心的体验,最有极致影响力的体验,替代原生并提供一个接近原生体验的H5能力,把其他的一些业务逻辑用H5来承接,避免增加微信的复杂度。这种方法更灵活,而且客户端不会太臃肿。从整体设计上来说,微信还是很轻量的。如果不用滴滴打车,根本就看不到它,如果不用洗车、吃外卖,你也不会看到它。当你要用它的时候,直接把那个公众号置顶就行了,点这个按钮就进去了。有些人习惯在微信上买彩票,天天买,他把彩票公众号直接置顶在那上面,就可以每天很方便地完成这个动作,不需要再去下载一个APP。

   

16. 你个人对哪个语言感兴趣?你认为哪个语言比较有前景?

蔡润达:其实我个人用的最多的还是C,因为可能跟我工作关系比较大,但是我非常看好现在比较流行的Go,还有很多脚本语言。我觉得在开发效率上,它非常强,秒杀这种传统的C几条街,很方便。但是我觉得在国内这个社区还需要成长。如果去创业,选一个语言是要比较慎重,要考虑招人的成本,我觉得是这样。

你可能感兴趣的:(蔡润达:微信的系统重构)