章文嵩:怎样做开源才有意义?

2023-05-16

转至:http://www.infoq.com/cn/interviews/how-to-make-open-source-meaningful?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

大家好,我是InfoQ的主持人,现在在架构师峰会现场。今天我们很高兴邀请到阿里云的技术负责人章文嵩博士来接受我们的采访。第一个问题是有关淘宝-阿里系的开源进程,我们从外面看起来似乎是有三个比较明显的阶段:第一个是说我引入开源的方案来替换掉商业的方案;第二个是我们把开源的方案改进,然后形成一些淘宝自己的T项目,再通过淘蝌蚪等平台把这些项目对外开源;第三个阶段好像是现在在用自研的方案去替换一些开源的方案。您自己是怎么看待这个过程的?

章文嵩:这应该是我们发展的不同阶段。那一开始当然,拿淘宝来说,早年业务的发展很迅速,我关注怎么样快速的能交付,那时候用了很多商用的产品。但是很多商用的产品,随着规模慢慢增大了,商用的产品是不能支撑的,因为商用的产品对我们来说是黑盒子,碰到问题解决的时间周期就特别长,而我们在线上出任何问题,都是需要第一时间去修复的,所以这个黑盒子基本上对我们来说,很多年以前,2009年以前就已经不能接受了。

比如说淘宝的图片,最早存在NetApp上面,NetApp到2006年就支撑不了。它比较好笑的问题是,我们用NetApp最高端的设备,存储容量还够,但是文件数已经放不下了,因为我们存的图片都是小文件。但是NetApp我们一台放不下,他们就建议我们一台不够换两台,两台不够换四台,那时候就逼得我们不得不自己去研发一个更低成本的,更扩展式的一个分布式存储系统。

我们就自己做,2007年上线,项目名字叫TFS,就是淘宝File System,在2010年9月份我们把它开源了。我们现在的TFS目前存了四十多P的内容,开源的版本就是我们自己用的版本,而且在TFS上我们实际上做了很多架构的取舍,针对这种图片存储已经优化的相对比较极致。所以TFS在性能、价格、稳定性、规模这些方面还很有优势的,我相信在未来很多年会继续存在。

你刚才说第三个阶段是拿自研取代开源的,这个就要看了。我们如果自研的有一些优势,像TFS是自研的也是开源的,但我们每回替换的过程中总是要有收获,比如是不是这东西做得更好了,成本是不是更低,性能更好。我们还是需要拿数据来说话,所以这个可能性都是存在的。

比如WebServer,过去最早阿里是用Apache,然后到2010年我们逐步换成Nginx。Nginx的社区相对来说比较封闭,我们提供的patch,收录的速度很慢,我们做了很多的功能,Nginx上游接受的速度很慢。可能因为它本身背后有一个商业公司,做得Feature跟我们做的Feature很类似。后来我们就不得不Fork了一个项目Tengine,就你所说的T项目,Tengine目前也是完全开源的,开源的版本跟我们用的版本一样,现在是第九大最流行的WebServer之一,目前国内很多公司在用,海外也有。这种可能性都存在。像TFS新浪微博在用,新浪微博的很多图片也存在上面。原来我一个早先的同事正好在那边做存储项目,然后我当然给他建议,用TFS会解决很多问题,我们已经开源了。然后他就把它架起来,我们也提供一定的帮助。这在阿里投资新浪微博前就发生了。

我们一方面自己研发的有可能会开源出来,另一方面我们在开源的项目上再做了一个开源项目。

 

2. 阿里总体来说还是一个业务导向的公司,研发过程肯定是产品导向,而不是说先有spec,基于spec去做,一切目的是快速完成产品经理的需求,这个是首要的任务。开源社区基本上正好过程是反过来的:他们先去讨论,我有这么个想法,这么做对不对。然后大家讨论说,你的想法好,按照你的做法去做吧,然后这样才出来实现。所以他就有个矛盾,就比如说Google做Android,Android代码一开始它是被内核社区曾经驱逐过。就是他们先做出来了,然后放进去,但是之前没有讨论,所以社区的人就不接受。我听说阿里也有因为类似的原因,没有被上游认可的Patch。从业务的角度, “产品优先”才是正确的;但是从工程的角度,可能是“思路验证优先”是更正确的。您怎么去做这个平衡?

章文嵩:我觉得要分开来看这个问题。我们开源的东西往往是有共用的一些价值,可以拿到别的应用场景复用的,这样开源才有意义。你刚刚说那个业务上产品导向也没错,比如淘宝跟天猫的平台上面,我们有四千多个应用,应用开发本身我们要业务导向,要做的很快,那没错。但是我们里面沉淀了一些东西,下面的中间件或者底层的研发平台,这种底层的支撑平台、基础平台这方面来说实际上有共通性,那这方面可能更容易开源。这方面的变化节奏,就不像上面的业务会来的那么快,而且本身我们做一个底层或者中间件,肯定都会考虑不光是一个应用要用,很多其他的应用也会用。所以这里面赋予我们开发的时间,包括架构的设计时间会更长。

往往开源的项目是属于那些有共用的,相对偏底层的一些偏基础的一些东西,所以这两者我觉得如果分开来看不会那么多矛盾了。我们当然响应业务的需求,怎么把上面的应用、产品做得更快,那我们的开源的大部分是有一些共用价值的东西,可以有更多的时间来做,而且要好好规划的,不光是为一个产品来做,要为更多的产品来做。

 

3. 第三个问题是有关自研的选择。一般来说团队去选择自研方案,首先可能是因为有一些开源的实现,但是不够成熟,但是业务又马上需要。要么另一种原因就是说,我觉得我有信心,做的比现在的那些方案都好,才去这么做。但是如果业务不是马上需要的情况,其实也可以等他们过两年,然后开源项目就成熟,就变成可用的了。但是这个时机可能也是会比较早的,就是先进去做有可能就成炮灰了,所以到这种情况就有三个选择:第一个选择就是我立刻把所有兵力都投进去,然后搞自研,拼一把;第二个选择是我找一个看起来还不错的开源项目,我去投人进去,然后把它搞起来,以后如果这个项目发展起来,我就有主导权;第三个选择是我先观望两年再说,如果是你来选择的话,如果有一个领域你觉得挺有前景的,但是现在处在这个时间段,你会怎么选择?

章文嵩:我会选择第二种。我会先看开源的解决方案,有哪些可能的方案存在。我们会去评估一下这些开源方案,它目前的所处的状态、成熟度怎么样,有哪些功能是我们期望拿到的,可能有哪一些目前还没有做到,也会评估我们能不能在这个基础上,在上面加东西。如果整个框架可以很容易去扩展,里面加东西也比较灵活方便的话,那至少跟我们定义想做的东西是匹配的。长远来说架构上面如果没什么大的冲突,那我们在上面发展,实际上是非常好的事情,一方面可以节约人力投入,自己可能少走一些弯路,将来还有机会可能参与到整个社区里面。社区的话,不光是我们一家公司在做,有可能很多家公司都在做,大家如果形成一个生态系统,每家公司的投入相对都会少。

关键是这个开源的东西是不是服务我们的业务,如果服务我们的业务很好,我们投入的人少,那何乐而不为。我会倾向你所说的第二种;除非是评估了一圈没有合适的,但我们想做的东西又可能不远的将来马上要要,那我们有可能会选择自己去先投入去看一看,先尝试一下,这也是有可能的。

 

4. 不会担心以后对项目失去掌控权,因为大家都在往里头做?

章文嵩:我觉得这个不用担心。我们不说掌控权,大部分说影响力,这个影响力是看我们对这个开源项目的贡献来定的。大家也知道,因为在社区贡献,大家做的贡献多,影响力自然就会大起来。

即便不行,碰到情况,假设原来的社区碰到问题,我们也可以在这个基础上fork出来做另一个开源项目,我觉得未来这个路径都是通的,我觉得不存在太大的问题。

 

5. 第四个问题,现在有一种说法是,开源的发展促进了IT行业人才的流动。比如说这个人在一个公司搞内核,或者是搞OpenStack,或者是Ceph、Hadoop这样的,那么这个东西是通的。假设说他想去换一个公司,到了新公司如果也用一样的架构,他就可以经验立刻复用了。但是如果到了新公司,他的技术体系是另外一套,他不管有多少经验,先得把这套东西再学一遍,学个几星期、几个月,然后才能有真正的贡献。但是现在国内的情况,几个互联网巨头,包括像阿里也是有很多私有的项目或者分支,会造成上述的问题。你对这个问题是怎么看的?是觉得它不可避免,还是可以改进?

章文嵩:你问的是很好的一个问题。我觉得要看这个产品上面获得的竞争力对整个公司的业务的重要程度来定。拿淘宝、天猫来说,我们真正是建一个大规模的交易平台,在上面的很多业务做的好坏就是靠数据,比如说信用模型,用户的交易记录,导致每一个商家都有相应的信用的数据,然后消费者也有信用的数据。实际上对整个淘宝、天猫来说,这个数据是最关键的,数据是日积月累,拿不走。所以数据是我们最关键的竞争力。

软件当然是我们的一种能力。我们能实现这么大规模的一个平台的能力,我们把它开源出去,对我们核心的业务价值不会有什么损失,别人拿这个软件再建另一套淘宝、天猫,也很难与此竞争的。因为如果建一个软件的平台,要找到合适的人,大概花一些时间也能建出来,但建出来在这个平台上没有任何数据,那试问一个消费者,他愿意在淘宝、天猫的平台上做交易,还是跑到一个空空如也的平台上做交易?那显然应该是前者。当然阿里本身也很开放,所以淘宝、天猫的很多技术平台我们已经对外开源了。

那是不是我们有产品是没开源的?当然有了。比如说我们目前的飞天平台是没对外开源的。飞天能处理五千台或者未来上万台的一个规模,是大规模的数据处理、存储,基本上是分布式的一个操作系统平台。对阿里来说,这也是非常大的一个竞争力,尤其在云计算上面。如果要保持这个竞争力,当然目前的状态,目前是没有开源。除非有一天,我自己个人的一个想法就是,如果将来我们的云计算的规模、优势已经非常大了,我们已经不再担心别人拿我们的软件再去搭一套平台跟我们竞争,我们竞争优势已经在别的方面了,那开源也是有可能的。所以我觉得这个是不是用开源不开源,是用不同的状态来看待这个问题的。

 

6. 最后一个问题是关于开源本身。开源模式的价值,其实它最大价值是说我可以在全球范围内去找到用户和贡献者,不分任何的国界。其实包括LVS项目的成功,其实很大一部分原因也是,它一开始就是以国际化的项目去做的,所以你认为有必要纠结于国产的开源项目,或者是由国人发起来的开源项目这种说法?开源项目是否都以国际化的思路去做会比较好?

章文嵩:我觉得关键是看自己面对的客户群。如果我们的客户群都在国内,那没必要,如果整个网页都写成中文的,用户会更接近,更容易使用,这是最关键的。如果我们的客户群是全世界的,当然要让全世界的用户更容易的了解我们的项目,就要用英文来做。我觉得不存在国产的或者国际的开源项目,关键看我们的定位。

1998年我做LVS项目的时候,说那时候也没有太多选择,因为那时候很多开源项目的邮件列表都是在海外,那肯定做了一样东西,要让全世界更多的人来了解,所以那时候一上来LVS的网站,一开始都是用英文写,做了哪个版本发布,哪些功能,都是跑到邮件列表里去发邮件,用英文发。回过头来,还是我们这个开源项目的客户群来决定的。

InfoQ:十分感谢章博士接受我们的采访。

章文嵩:谢谢。

 

7. 就是说,如果平台足够好,这种技术人才流动需要学习额外的东西,他的代价是值得付出的?

章文嵩:对,当然对公司来说也是要看,投入的成本、人员的学习成本都要考虑,我为了获得一定的竞争优势,愿不愿意花这么大的代价。如果评估出来是愿意的,那没问题。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

章文嵩:怎样做开源才有意义? 的相关文章

  • 串口调试助手vc源程序及其详细编写过程

    目次 xff1a 1 建立项目 2 在项目中插入MSComm控件 3 利用ClassWizard定义CMSComm类控制变量 4 在对话框中添加控件 5 添加串口事件消息处理函数OnComm 6 打开和设置串口参数 7 发送数据 8 发送十
  • 18张含金量最高的大数据证书

    这年头从事数据行业很不赖 用人需求量之大达到创记录的水平 xff0c 薪资也水涨船高 几乎任何数据认证都会让你的薪资涨一涨 本文介绍了哪几大数据认证可以让你稳赚丰厚薪水 顶级数据技能拿顶薪 你是不是在想 xff1a 为获得那下一份数据认证付
  • XML解析——Java中XML的四种解析方式

    XML是一种通用的数据交换格式 它的平台无关性 语言无关性 系统无关性 给数据集成与交互带来了极大的方便 XML在不同的语言环境中解析方式都是一样的 只不过实现的语法不同而已 XML的解析方式分为四种 xff1a 1 DOM解析 xff1b
  • JVM调优总结 -Xms -Xmx -Xmn -Xss

    Xms 是指设定程序启动时占用内存大小 一般来讲 xff0c 大点 xff0c 程序会启动的快一点 xff0c 但是也可能会导致机器暂时间变慢 Xmx 是指设定程序运行期间最大可占用的内存大小 如果程序运行需要占用更多的内存 xff0c 超
  • Spring Boot 传参方式

    最近在搞Spring Boot的项目 xff0c 把传参方式总结一下 网上也参考一些文章 xff0c 总结的很不错 xff0c 这里借鉴一下 注解 64 RequestParam 这个注解用来绑定单个请求数据 xff0c 既可以是url中的
  • Java BigDecimal开方

    前言 一般开平方使用的是Math中的静态方法Math sqrt double a xff0c 涉及到金融计算的时候 xff0c Math sqrt double a 精度就不够了 金融领域的计算 xff0c 用的都是BigDecimal类型
  • Spring Boot 集成RabbitMQ

    RabbitMQ is an open source multi protocol messaging broker 前言 参照官方Messaging with RabbitMQ xff0c 记录在实战中的一些坑 搭建RabbitMQ服务
  • Java 获取接口所有实现类

    利用Spring的Bean工厂 xff0c 获取接口所有实现类 前言 在学习Spring Boot 集成RabbitMQ时 xff0c 发现定义了好几个bean xff0c 这些bean在什么地方用到呢 xff1f 查看RabbitAdmi
  • Intellij IDEA-SSH executable-Native

    Connecting to gitlab using PuTTY generated SSH key in IDEA 背景 项目开发中 xff0c 使用Gitlab搭建git服务 xff0c 做代码的版本管理 xff0c 一开始是使用htt
  • 匿名四轴PID参数调试讲解

    过程详解 1 要在飞机的起飞油门基础上进行PID参数的调整 xff0c 否则 烤四轴 的时候调试稳定了 xff0c 飞起来很可能又会晃荡 2 内环的参数最为关键 xff01 理想的内环参数能够很好地跟随打舵 xff08 角速度控制模式下的打
  • 使用cv2eigen或eigen2cv时注意头文件包含顺序

  • 对Socket CAN的理解(3)——【Socket CAN发送数据流程】

    转载请注明出处 xff1a http blog csdn net Righthek 谢谢 xff01 对于本文 xff0c 我们将从用户层使用Socket CAN进行数据发送时 xff0c 数据从用户空间到底层驱动的整个通信流程 xff0c
  • 【智能家居篇】嵌入式WIFI与普通WIFI的区别

    转载请注明出处 xff1a http blog csdn net Righthek 谢谢 xff01 既然我们这系列的文章名称为 智能家居篇 xff0c 那么我们有必要提出一个与智能家居相关的概念 曾经一次在TI的无线研讨会上 xff0c
  • 【智能家居篇】wifi网络接入原理(中)——认证Authentication

    转载请注明出处 xff1a http blog csdn net Righthek 谢谢 xff01 还是用手机来举例 xff0c 扫描完成后 xff0c 我们会选择想要加入的WIFI热点 此时 xff0c 大部分都会弹出一个输入密码的窗口
  • px4 UDP实现WIFI数传

    Mavros offboard 1 UDP实现wifi数传 机载电脑端设置 roscd mavros launch span class token function sudo span gedit px4 launch 随后修改gcs地址
  • PX4 Offboard的各种设置

    PX4 Offboard的各种设置 1 设置局域网PX4 span class token tag span class token tag span class token punctuation lt span launch span
  • 松耦合和紧耦合的架构设计及性能对比

    松耦合和紧耦合的架构设计及性能对比 laxcus大数据 2016 07 20 07 26 41 浏览756 评论0 架构 算法 性能优化 摘要 xff1a 在最近的一次大数据技术讨论会上 xff0c 本行业一家公司的技术高管谈到松耦合架构和
  • 运筹学从何学起?如何快速入门精确式算法?

    相信各位小伙伴在看到运筹学时 xff0c 第一反应肯定是 xff1a 前面我们聊过 xff0c 如何学习启发式算法 那么今天就聊聊如何学习精确式算法吧 和启发式算法不同的是 xff0c 精确式算法不仅需要数学基础 xff0c 还需要运筹基础
  • k8s中的pod如何通过域名访问外网

    下面是我的YAML文件的配置 xff0c 需要pod通过域名访问外网 xff0c 比较简单的解决方式是添加template spec dnsPolicy字段 xff0c 将其设置为Default xff0c 从而使Pod继承所在宿主机的DN
  • strchr, strrchr函数实现——string.h库函数

    函数实现 xff1a 信息来自RHEL xff0c man page STRCHR span class hljs number 3 span Linux Programmer 39 s Manual STRCHR span class h

随机推荐

  • Windows7系统下安装Ubuntu实现双系统

    Windows7系统下安装Ubuntu实现双系统 参考链接 xff1a https blog csdn net naked emperor article details 81871592 https jingyan baidu com a
  • rviz 选取点云数据

  • [USB波形分析] 全速USB波形数据分析(一)

    在之前的文章一次CAN波形分析之旅里 xff0c 根据示波器采集的波形数据 xff0c 详细地分析了CAN通信 今天来分析USB数据 xff0c 还是同样的流程 xff0c 但是这次使用matplotlib来协助分析 USB基本波形 USB
  • [USB波形分析] 全速USB波形数据分析(二)

    在上一篇文章全速USB波形数据分析 一 介绍了全速USB的数据包 Packet 的组成 xff0c 数据的类型等基本知识 这篇文章介绍USB的几种传输方式 事务 Transaction USB协议定义了三种不同的事务 Transation
  • STM32的PCROP代码保护功能

    软件供应商们在致力于开发属于自己的知识产权的软件产品 xff0c 尤其是那些中间件产品的同时 xff0c 如何保护这些知识产权 IP 实际上也是他们非常关心和重视的问题 基于各类微处理器的嵌入式产品对IP保护的要求也日益明显和迫切 为了满足
  • 人类高质量芯片工程师的那些“黑话”

    1 xff1a 计划 A xff1a 你们项目组芯片什么时间TO xff1f B xff1a 年底 A MPW B 直接FULL MASK A xff1a 有钱 B xff1a 芯片面积太大 xff0c 占了6个SEAT xff0c 况且年
  • Keil MDK各版本及pack包下载

    转自安富莱 MDK5 29 xff0c 5 30 xff0c 5 31 xff0c 5 32 xff0c 5 33 5 34 xff0c 5 35 5 36 5 37和各种pack软件包镜像下载 xff08 2022 05 04 xff09
  • g2o非线性优化架构详解图

    流程 xff1a 1 每次添加边的时候 xff0c 会对jacobian workspace更新size xff0c 最终size等于所有边中顶点相关顶点数量最多的顶点数 xff1b 这样做的原因是所有边求解雅克比矩阵 xff0c 用的是同
  • 利用协方差约束单个方向的g2o写法

    由于匹配结果有时候只约束单个方向 xff0c 比如法向 xff0c 因此需要考虑只约束部分方向的误差方程写法 xff0c 虽然可以使用自定义边 xff0c 但经过测试 xff0c 自定义欧式距离边加上位姿的求解通常不能收敛 xff0c 因此
  • 双目相机融合(五)

    预备中
  • 转贴:黑客高手必懂基础内容 (发在这里只为娱乐大家)

    转贴 xff1a 黑客高手必懂基础内容 发在这里只为娱乐大家 黑客高手必懂基础内容 一楼 xff1a DOS命令大全 二楼 xff1a TCP端口 作用 漏洞 操作详析 三楼 xff1a 开始 运行 命令 集锦 四楼 xff1a IPC 空
  • 大数据平台架构设计探究

    近年来 xff0c 随着IT技术与大数据 机器学习 算法方向的不断发展 xff0c 越来越多的企业都意识到了数据存在的价值 xff0c 将数据作为自身宝贵的资产进行管理 xff0c 利用大数据和机器学习能力去挖掘 识别 利用数据资产 如果缺
  • ros 解析激光点云的强度信息

  • 国外程序员整理的 C++ 资源大全

    转 xff1a http www csdn net article 2014 10 24 2822269 c 43 43 C 43 43 是在C语言的基础上开发的一种集面向对象编程 泛型编程和过程化编程于一体的编程语言 应用较为广泛 xff
  • Oracle、MySQL、SQL Server数据库的jdbc连接驱动配置

    Oracle MySQL SQL Server数据库的jdbc连接驱动配置 Oracle jdbc driver 61 oracle jdbc driver OracleDriver 或者 oracle jdbc OracleDriver
  • PID调参详解1

    PID调参详解1 xff08 比例环节 xff09 PID控制中有P I D三个参数 xff0c 只有明白这三个参数的含义和作用才能完成控制器PID参数调整 下面我们分别通过实例来分析比例微分积分三个环节对系统输出的影响 上式为PID控制器
  • NVIDIA NX刷机,配置深度学习环境

    买来的NVIDIA NX自带了一个sd卡和一个ssd卡 xff0c 刚开始按照sdkmanager去安装系统 xff0c 结果安装后发现装到了sd卡上 xff0c 后又根据视频教程在ssd上安装了系统 xff0c 最后配置了深度学习的环境
  • 串口调试助手VC源程序及详细编程过程

    串口调试助手VC源程序 及编程详细过程 作者 xff1a 龚建伟 可以任意转载 xff0c 注明作者和说明来自 龚建伟技术主页 目次 xff1a 1 建立项目 2 在项目中插入MSComm控件 3 利用ClassWizard定义CMSCom
  • linux 下 pytorch 安装

    我的显卡是gtx 730M 已经安装linux版本的驱动 xff0c 安装环境centos8 xff0c 内核版本Linux localhost localdomain 4 18 0 305 19 1 el8 4 x86 64 1 xff0
  • 章文嵩:怎样做开源才有意义?

    转至 xff1a http www infoq com cn interviews how to make open source meaningful utm campaign 61 infoq content amp utm sourc