腾讯刘昕:如何自下而上在腾讯做开源
腾讯科技讯 15万颗GitHub Star,57个涵盖人工智能、移动开发、小程序、架构、系统等多个前沿技术领域的开源项目——这是6月26日上午,腾讯移动互联网事业群总经理刘昕,作为腾讯开源顾问和Linux基金会董事,在LC3 (LinuxCon+ ContainerCon+ CloudOpen)国际开源盛会上,介绍的腾讯部分开源成果。
在过去六年里,腾讯开源坚持做好开发者体验,从内部开源到对外开源,实现从开源新兵到开源社区一员大将的跨越。
腾讯开源始于2010年,在开放战略之下,“开放、共享、合力开发”的研发模式开始在内部推行。至今,已有超过8000个优质项目在腾讯内部跨团队、跨部门、跨业务地被广泛运用。这为腾讯外部开源打下了坚实基础。
2016年至今,腾讯不断将内部开源出来的优质项目在GitHub上发布,腾讯开源逐步进入快节奏时代。其中仅2017年一年,就开源将近20个项目。其中不乏世界排名前十的前端开发工具WeUI,阅文集团、科大讯飞等公司都广泛使用的微服务框架TARS,可以快速建立大规模机器学习平台的AI开源项目Angel等受国际社区高度认可的优秀开源项目。
然而,要深度融入开源社区,不只需项目发布,更需社区参与。“我们非常重视社区治理的概念,好的开源不仅仅是代码、程序,更是一个建筑之上的、有着规则和制度的社区,是Community over Code”。今天,在Linux、CNCF、OpenStack、Hadoop等国际主流开源社区,均可见到腾讯开源的活跃贡献。在本次大会上,腾讯成为了Linux 基金会白金会员,并宣布将向基金会捐赠TARS、TSeer两个自研开源项目。
“腾讯到底适不适合做开源?我想答案显然是肯定的。”在刘昕看来,基于扎实的技术积累,腾讯能源源不断向开源社区输出优质项目,推动社区蓬勃发展。同时,公司也从开放、互助、创新的开源生态中获取养分,以更低的成本提升重点战略技术,与开源伙伴形成相互促进的良性关系。
刘昕演讲全文如下:
腾讯开源起始于2010年,到近两年逐渐步入正轨。腾讯的企业文化鼓励内部竞赛,产品导向,团队习惯于先抗住再优化,强调技术为业务和用户服务,因此腾讯开源的起步阶段面临很多困难,亟需自上而下的战略规划。
2010-2015年,腾讯首先在内部倡导开源,提倡“开放、共享、合力开发”的研发模式,可靠组件公司内部实现复用,减少重复造轮子,提升效率。这是一个观念和习惯培养的过程,大家先通过内部开源试水,好的项目会跨团队、跨部门、跨业务得到广泛使用。这是对外开源的基础。
2016年,腾讯开始有非常优秀的开源项目在Github上公布,那个时候,一个项目的从内到外经过的开源合规审核需要长达3个月之久。对于公司做开源来说,尤其是在和基金会合作的过程中,我们都发现,合规是基础要求,是非常重要的。所以这一年,我们精耕细作,完善开源合规流程,与法务同事合作,效率翻了3倍。
2017年,腾讯对外开源开始进入了快节奏时代,这一年腾讯开源了将近20个项目,覆盖云计算、腾讯游戏、腾讯AI、腾讯安全、小程序等相关领域,这些都是经过腾讯众多明星业务海量检验的项目进行对外开放,一经开源,立刻引发社区的关注。“做开源,腾讯认真了。”
截止到18年6月,腾讯发起的开源项目累计在GitHub获得了近15万Star,在国内和国际收获了关注和认可,今年,我们非常重视社区治理的概念,好的开源不仅仅是代码、程序,更是一个建筑之上的、有着规则和制度的社区,是Community over Code。对内,我们成立开源管理办公室,每个开源项目都设立的相应的管理委员会,对外,我们积极与开源社区合作,上半年我们就有三个项目加入了Linux基金会运作,我们也赞助了LC3的大会,设立了腾讯开源的展位和TARS开源项目的workshop,我们非常希望能与开发者共建,共同去打造开源社区的生态。
在未来,腾讯会持续输出优质的开源项目,并且参与Linux、 CNCF、 OpenStack、Hadoop等社区建设,贡献代码,同时,我们会探索一些可以让开源产生价值、形成长久的生命力的商业化模式。
腾讯目前所有的开源项目,共有57个,集中在人工智能、移动开发、前端、小程序、后台/架构、数据库/存储、平台/系统,组件/工具多个领域,有的是经典技术架构,例如像微服务框架Tars和名字发现框架TSeer,已在腾讯内部积累了10年,经过100多个业务考验。
有的是热门技术领域,例如在人工智能领域,腾讯开源了高性能分布式机器学习平台Angel和移动端申请网络前向计算框架NCNN等等;有的是腾讯自己建设和服务的开发者生态,例如微信原生视觉的基础样式库Weui和小程序开发框架Wepy等等。大家都可以在GitHub的腾讯官方账号进一步了解。
腾讯现在的开源项目的社区数据指标中,GitHub Star数最高的WeUI项目已经有1.9万个Star,是世界排名前十的前端开发工具。超过1万Star数的项目有5个,超过5000 Star数的项目有9个,超过3000的有16个。这说明腾讯开源的项目深受开发者关注,证明了项目本身的高质量和腾讯的技术实力。
腾讯开源提交数Commits最高的10个项目中,平均社区提交的Commits占开源后总体Commits的25%。腾讯致力于社区开发者共建,打造更广泛的开源生态。
腾讯开源的项目保持和社区健康、良好的互动,issue和PR的关闭比例都是非常高的,甚至达到了100%,这也说明,项目的社区参与度和项目开发者的反馈速度都很高,腾讯的开发者在积极的回应他人提出的关于项目的问题、并作出反应,这样社区开发者对项目保持信心,并热情的参与,帮助项目共建,让这些开源项目越来越好。
此外,除了自主开源项目,腾讯也在积极的参与与国际开源社区的互动,加大对开源领域的投入,参与国际通行的协作方式,成为开源社区的积极贡献者,发挥中国企业的科技力量。
我相信通过这些数据和案例,大家应该对腾讯做开源这件事有了更直观的印象。
生态对于开源项目来说是非常重要的,有着围绕一个项目的开发者、贡献者、管理委员会、甚至是下游厂商、交付团队,这些是项目能够持久散发活力、持续优化的保障。
腾讯目前正在探索建设的生态的方式,主要从存在于以上几种路线:与基金会合作例如TARS,开发商业版本例如TStack,培育开发者生态例如微信,和制定行业标准例如蓝鲸。但这些具备商业生态的开源项目,最初大多是自下而上发生的,可能是一个服务内部使用多年的项目,可能是几个程序员为了协作方便而建立的库,自下而上做开源虽然需要明确项目的生态定位,但比定位更重要的是,开发的激情与开源的乐趣。
接下来我会举几个例子一一介绍。
TARS和TSeer是腾讯MIG无线运营部研发团队在10年前研发出来的微服务开发框架和名字服务框架,经过10年的打磨,均于去年开源。
10年前,腾讯没有一个统一的开发框架,每个业务都有自己的开发习惯,每个团队也有自己的开发语言,使开发协作出现很多问题。比如,不同语言之间的通信适配非常繁重,不同团队会重复实现一样的功能组件,代码质量参差不齐。有时,有些团队没有实现业务容灾。有些团队为了快速上线,直接写死IP在代码中。有些后台开发团队没有平台建设人员,很多操作都需要登录服务器,导致造成误操作。基于以上痛点,TARS应运而生,它完美解决了开发和运维在日常工作中遇到的所有难题。TARS是基于 TARS 协议的高性能 RPC 框架,为开发和运维提供了一体化的微服务治理方案。它具备多语言,敏捷研发,高可用,高效运营这几种优势,为公司带来一个开箱即用的企业级产品。也完美实践了业界DevOps理念和腾讯海量服务之道。
目前TARS已经成为腾讯内最广泛使用的微服务治理开发框架和运营平台,已经为数百个产品提供服务,微服务规模达到百万级。但是,仍有一些暂未使用TARS框架的服务,亟需一套能与非TARS开发框架通讯的名字服务。
TSeer就是这样的一套方案。Seer的意思是先知,先知原本是指对宇宙、人类社会或自然科学方面的大事有较早了解或准确预言的人,我们这里引申TSeer为服务注册发现容错方面的先知。我们有一个北京的开发团队,原来没有一套统一的开发框架,由于外部同质化产品竞争激烈,且业务逻辑复杂无法在短时间内全部重构为TARS服务。在时间紧、任务重的情况下,一个轻量化的名字服务是他们最佳的选择。TSeer是对TARS名字服务功能的轻量化。它轻巧灵便,对业务的侵入性低。在服务发现的核心功能之上,TSeer还支持轮询、随机、静态权重、一致性哈希四种负载均衡算法,提供调用上报、故障屏蔽、定时探测、缓存调用等可靠的故障容错策略,同时通过IDC、SET等多种分组策略可有效解决业务跨地区跨机房调用等难题,极大提升服务的可用性和调用质量。根据需要,用户可以选择Agent和API两种接入方式使用,方便快捷。TSeer在腾讯内部众多业务中广泛采用,目前日均承载百亿级的请求量,是微服务框架中优秀的名字服务解决方案。
TARS团队一直与各种类型的企业和机构进行深度的技术交流与合作:与中国信息通信研究院合作,一起建立国内微服务相关标准;与大唐移动合作,共同开发基于TARS的5G核心网SBA架构;与财付通合作,开发基于TARS的银行核心网系统。同时,TARS在腾讯外也有非常广泛的应用。腾讯不仅与国内知名的互联网企业进行交流,在非常多中小型企业里也在积极尝试。他们在使用过程中,也为TARS开源社区提供了很多贡献。如阅文集团为TARS提供了PHP语言的补充,是广大PHP开发者的福音,满足了PHP语言对于微服务治理框架的需求。科大讯飞为TARS扩展了对Google Protobuffer协议的支持。还有其他热心的社区开发者为TARS提供了一键化安装脚本以及TARS-Docker镜像。TARS开源社区在国内开发者中已非常活跃。接下来,我们想进一步吸引来自全球更多的开发者。基于Linux是全球中立的开源组织,我们决定让腾讯自研的TARS和TSeer加入到Linux基金会里面。本次大会也是这两个项目进入基金会的重要里程碑。
TStack最初是腾讯内部使用云平台,是企业IT团队研发的为内部提供支撑的技术服务。TStack基于Openstack搭建,是社区版本拉出一个分支自主研发,那时,与社区的互动还不多。针对Openstack缺乏统一的组件管理和蹩脚的自动化部署等问题,腾讯企业IT团队通过自主研发优化,接入大量腾讯内部成熟的PaaS和SaaS服务,同时实现多种部署方式结合的8小时快速部署。Tstack对腾讯内部提供了安全、可靠的支持,并积累了海量的的运营经验,2年前,它从内部开始走向外部,开始为中国的政企用户提供服务,并深入参与到Openstack基金会的社区中,目前已经成为Openstack的白金会员,并且荣获17年Openstack Super User大奖。
以OpenStack为基石,腾讯云TStack致力于构建新一代的开源商业模式——以开源技术为核心的产品和服务型企业,以满足企业客户场景化需求和开源社区技术发展之间的协同和进化。这种新一代开源商业模式意味着,腾讯云TStack不仅可以按照国际规则参与开源社区,通过代码贡献把握和影响OpenStack社区方向,同时又能够基于客户需求将OpenStack产品化,降低企业级客户采用OpenStack的门槛,还可以将实践中积累客户需求反馈社区,推动社区良性发展。”
最初的WeUI原型是微信设计中心网页重构组的一个内部样式库,主要用于自身业务开发。
2015年初微信全面开放了JS-SDK,助力第三方开发者更好为用户地提供服务。在这个背景下,越来越多的公司和个人,以微信作为入口,借助微信开放的接口,开发自己的Web应用。Web应用体验是否良好,很重要的一点就是UI。在当时,较多的第三方微信Web应用,都缺乏良好的UI设计,页面设计参差不齐,用户体验不够友好。
为了更好地帮助微信开发者开发出体验更好的网页,微信团队重新梳理、规范并开源了样式库。微信开发者利用WeUI样式库,可以轻松搭建出符合微信设计规范的更好体验的Web应用及小程序,这也成为微信Web应用、小程序时候用户提供更加统开发者必备的开源项目。由此,我们可以看到自下而上能够产生怎样的爆发。
另一个关于微信小程序的开源项目Wepy的开源经历就更加传奇了,Wepy本身不是微信团队开发的,而是由一个完全不相关的部门的一个普通的程序员业余时间做出来的,Wepy提供更接近Vue.js的开发框架,对原生小程序的开发模式进行了再次封装,更贴近于MVVM的架构模式,最初是满足自己的开发习惯,开源后却得到社区开发者的广泛使用和核心贡献。这两个案例都体现出,当一个开源项目要解决的问题足够刚需,即使是没有强势资源的支持,也能够形成自己非常活跃的开源社区。
对于微信小程序来说,开发者生态十分重要的。微信近来在小程序上的扩张触动着更多平台和巨头的神经,而小程序的成功也让整个类轻应用生态和平台开始蠢蠢欲动。刚过去的GDC大会上,Google宣布「即时应用」开始支持游戏;不久前,国内十家手机厂商也共同发布了「快应用」标准,整个轻应用生态都在重整旗鼓;苹果iOS对于PWA支持步伐这两年也骤然加速。
微信用行动证明了轻应用的时代马上就要来了,闻声而来的竞争对手也让小程序不再是微信一个人的赛道。就像以往手机OS、VR和AI的平台,在这类竞争中,谁能获得更多开发者的支持,占住开发者生态的高地,便有更大的机会夺取最终的胜利。而开源显然是非常是一条有效的途径。
腾讯到底适不适合做开源?我想答案显然是肯定是。
从外部环境来看,随着主流的开发平台Linux, Android等逐渐开源化,IT产业想要取得更大的市场份额,拥抱开源可说是当务之急。
从腾讯内部的技术积累来看,腾讯内部技术研发基础设施完整,有超过8000个开源项目,横跨各个技术领域,经过海量用户验证。腾讯能够源源不断向开源社区输出优质开源项目。
从生态机遇来看,开源能够很好的服务于腾讯重点战略方向,
例如作为腾讯云的Paas、Saas服务封装,推动机器学习和人工智能的广泛应用,或者通过行业标准的制定领导下一代的技术创新。这些都是开源能够给腾讯带来的生态机遇。
那么,自下而上做开源,相对于自上而下来说有哪些优势,首先,通过内部竞争并开源出来的技术是得到了广泛实践验证的,这是项目的质量强有力的保证。第二,相对于聘请专职开源人员来维护,通过完善的社区治理规范和机制,更能够保证项目不受某个人的离职或者转岗的影响。第三,自上而下的战略容易受KPI的导向或者与现有业务做紧密捆绑,很难实现长期价值的积累,或者允许创新发力,推动新兴技术的开源,因为战略的制定有时跑不过创新的速度。
但无论是自下而上还是自上而下,有几点是共通的,从技术驱动走向商业战略,从部落到联盟,建设健康的开发者生态,实现共赢,最后,最重要的,持续不断的技术创新