前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大公司开源并非易事,如何用产品思维去做?

大公司开源并非易事,如何用产品思维去做?

作者头像
腾讯开源
发布2018-03-02 16:51:53
9000
发布2018-03-02 16:51:53
举报

作者 | 刘豪

近几年,业内越来越多的人关注和落地微服务架构,Tars作为公司内部经过十年发展的一套稳定可靠的微服务治理框架,服务于腾讯160多个业务(如手机浏览器、应用宝、手机管家、手机QQ等)共计1.6万多台服务器。2017年4月10日,Tars正式对外开源。

一个忐忑不安的起点

Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。在腾讯内部,各大核心业务都在使用Tars,颇受欢迎,基于该框架部署运行的服务节点规模达到上万个。

但是对于这么一个大而全的框架和平台,开源并非易事。首先是项目本身过于复杂,需要精简和重构,统一代码风格;另外Tars更多面向的是企业用户,这对技术和文档的要求是更高的。

对于我和团队来说,Tars开源是一个忐忑不安的起点,谁都说不准这个在腾讯内部颇具影响力的框架,能否能受到外部开发者的赏识。

4月初,正式开源后4天,Tars的Star数突破一千,并在一个月的时间得到了腾讯开源的置顶推荐。

截止目前,每周活跃交流的用户达140多人,同时能得到50条以上的反馈。在公司外部,腾讯旗下的子公司以及从公司离开的老同事开始使用Tars,也开始有一些企业主动联系我们沟通合作的意向。

在整个过程中,我发现做开源时要尝试用产品经理的思维看问题,除了代码和技术本身的东西之外,还要了解开源用户使用习惯,列计划做运营,并且要保证迭代周期、加强社区建设等等。 这篇文章中,我把遇到的一些问题和走过的弯路分享出来,希望其中的经验和教训,能够启发更多的开源爱好者。

第一印象很重要

有天无意之中,我在知乎里看见,有人对某些开源项目的评论,其中一条让我印象深刻:”竟然采用word写文档,word是什么鬼?”

经常活跃在开源社区的人一般采用markdown来书写文档,它不仅易于文档的阅读,易于文档版本的管理和维护,也易于解析成html。虽然看上去只是文档使用习惯问题,但是这个实际上反应出一定的问题,对社区的人来说,不管你的项目到底怎么样,一旦开源出去,不符合社区的习惯或者规范,就会给人留下不好的第一印象。不好的第一印象将会令项目失去很多用户,后面的发展也将十分困难。

意识到这些,我们决定在开源前,了解公司内部和开源社区在项目管理、代码维护、文档书写等各方面的不同和差异,然后修改这些差异,保证开源后向社区的风格靠齐。比如我们做了下列修改工作:

  • 按照社区的习惯对Tars代码的组织结构进行调整,将内部原来分开维护的各个语言的框架代码统一在git上进行管理,文档全部采用markdown来书写;
  • 对Tars所有代码的编码和注释风格进行规范,让用户阅读代码更加简洁明了;
  • 对Tars所有代码文件、配置文件、db文件的字符集编码采用utf8进行标准化;
  • 对Tars框架编译安装的方式与社区常用的方式对齐,采用符合社区习惯的cmake方式。

一个开源项目更像一个产品

一个项目的开源不仅仅是代码或者技术的开放,它更像一个产品的对外发布,需要事先考虑到其中可能遇到的风险。

举个例子。先前,Tars(漫步在云上的机器人)这个开源项目的名称本来不叫Tars,而是沿用内部的统一应用框架TAF(Total Application Framework)来命名的。但是在公司开源的评审过程中,发现TAF这个名称已经被其它公司注册了商标,这样以TAF名称来开源的话,会有侵权的风险,可能会对公司造成影响,为了防止其中的风险,我们不得不更改项目的名称。

也许有人会说,不就是改不名称么,多简单的事。而实际上,项目名称变后,开源代码里以前统一的命名名称TAF开源后就不好解释了,代码都需要修改,然后重新测试,更大的影响是,如果后续内部基于TAF的项目也想开源,那么也需要修改,带来一连串的问题。

不得不感叹,以产品的思维和视角去做开源项目,提前跟公司相关部门确认其中的问题和风险,十分必要。

初心能告诉你方向

一个项目开源协议的选择,其实很有学问的,这里分享在Tars的开源协议是如何选择的。

社区常用的开源协议有GPL、APACHE、BSD、MIT等,它们有各自的约束和规范。比如:GPL有传染性,由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不太适合。

腾讯内部使用的Tars是一个比较庞大的框架,代码量比较大,涉及到前台、后台等方面的技术。虽然Tars的核心技术都是自己研发的,但是难免会依赖了一些第三方开源软件,而这些第三方的开源软件里有开源协议为GPL、APACHE、BSD、BOOST、MIT等。

我们当时左右为难,如果不想做大的修改,快点让Tars开源出去,那么Tars就得选择GPL开源协议,这样的话很难受到社区用户的认同和有商业化用户的青睐。如果不采用GPL开源协议,Tars的Web管理系统需要重构,这样的话就需要比较长的时间去修改,然后重新验证测试。

回望开源的初心,我们希望Tars这个框架真正的能帮企业或者用户快速构建自己的分布式应用,真正的能让社区一起参与进来一起共建。参考github社区最受欢迎的开源项目,大都不采用GPL开源协议。再加上Tars本身的核心技术都是自己研发的,应该在开源协议上更友好一些。最终我们选择BSD-3-Clause开源协议,决定以核心组件为基础,以不依赖开源协议为GPL的开源软件为目标,对其中的工具或者组件代码重新开发测试,让Tars使用更友好的开源协议。

开源是对项目代码风格、架构、质量的有效检验

Tars开源过程中,我们主要把精力放在了两件事上:

一方面是框架整体代码和文档的规范化和标准化,比如对Tars的所有代码和文档进行修改保证符合公司的规范和社区的习惯等,

另一方面是框架的精简和重构,比如与内部系统相关的框架功能精简和web管理系统的重构。

实际上通过这些事情,我们把Tars优化的甚至比内部使用的更加清晰、合理、简洁。但是细想一下,如果一开始我们就以开源的标准严格要求自己,对日常的文档、代风格和质量都提出规范,,那么真正开源时会减少很多不必要的工作,省时费力,简单容易很多。

开源不是结束,而是开始

一个项目的开源不应该是一个项目的结束,而是一个项目的开始。它需要后续持续的投入,比如:项目的版本规划,构建开发者社区等。这些都是真正把开源项目做好的关键,这块我们也在不断探索。

接下来,我们打算支持更多的语言、进一步完善我们的功能、以及将更多的内部功能开放出去,让大家能更方便的使用Tars。

计划如下:

1.tars多语言开发框架nodejs、php的开源

2.tars新特性之鉴权、调用链、docker化开源

3.tars插件化之名字服务开源

4.dcache开源

访问Tars: https://github.com/Tencent/Tars

提出issue,有好的改进也非常欢迎你提出合并请求。在github上给它一个star,有你的鼓励,我们会做的更好!

刘豪,12年加入腾讯,在无线运营部云服务中心平台开发组负责无线基础框架平台的开发,专注于微服务架构、云平台、分布式Nosql存储等技术领域,先后参与了TAF、Sumeru、BDB等项目。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档