写点什么

余兴超谈企业开源软件的选型以及开源文化

2015 年 5 月 24 日

前两天,InfoQ 上有一篇关于开源如何影响数据库市场的报道。文中谈到,2014 年,商业的关系型数据库仅增长了 5.4 个百分点,而开源数据库市场却增长了 31%,可谓后劲十足。现在越来越多的企业在商业软件和开源软件之间都选择了开源。使用开源软件最明显的优势之一就是成本降低,比如我们使用开源的 MySQL、PostgreSQL 数据库根本不用花一分钱。但开源软件的使用门槛并不低,比如在使用之前企业需要做好调研工作,在使用过程中,企业需要知道如何与社区版本进行同步、互惠互利。UnitedStack 是一家基于开源技术的商业公司,为了了解他们在开源软件方面的实践经验,我们采访了他们的技术负责人余兴超。

InfoQ:企业在使用开源软件是应该如何选型?自研和开源之间如何抉择?

余兴超: 在 2011 年,我们决定开始做一个 IaaS 平台,当时考虑了 OpenStack、CloudStack、Eucalyptus。

社区活跃度 名称

OpenStack

CloudStack

Eucalyptus

协议

Apache 2.0

Apache 2.0

GPL v3

成熟度

不成熟

较成熟

成熟

社区活跃度

非常活跃

较活跃

活跃

语言

Python

Java

Java

说实话,从上表的对比中,更应该去选择 Eucalyptus。但是我们当时选中 OpenStack 是因为两点原因:一是其发展前景,二是技术栈和我们团队匹配。

当时 Openstack 社区只有 Nova、Glance、Swift 三个项目,Keystone 认证服务人仍在孵化中,但在这个 IaaS 开源方案,在一开始就有众多巨头的积极参与,无论是在 API 设计,功能路线图,持续集成系统的改进,代码提交的规范,软件缺陷的修复上,让我们看到了一种不同于其他开源项目的活力。

我们选择了 OpenStack 软件栈作为我们的 IaaS 平台基础,那么接下来就是评估这套开源方案能否完全满足现有需求。当然这套方案是不可能完全满足我们需求的。因此,我们又会根据不同的情况选择是进行二次开发或者完全自研。

举个例子,当时我们希望把 Nova、glance、cinder 的后端统一使用 ceph rbd,但是社区当时还没有相应的计划。因此,我们决定对 nova、glance、cinder 进行二次开发,以满足我们内部的需求。随后,我们把该 bp 贡献到了社区。决定自研一般分为两种情况:一是开源软件完全不能满足需求,二是时间等不起,开源软件仍不成熟。以 OpenStack 面板 Horizon 为例,我们第一版的 dashboard 就是在 horizon 基础上进行二次开发的,但是 horizon 面板上的各页面响应速度完全不能满足需求。因此我们推倒重来,开发了自己的面板服务和 API 中间件来解决这个问题。

再以 billing 为例,Openstack 社区曾经有过一些长期的孵化项目比如计费系统,但是这对于一个运营公有云平台来说,计费是必须的,所以在时间成本上,我们是无法接受的,于是我们就有了自己的计费系统。

目前我们有十多个自研项目,但是它们都使用与 Openstack 社区完全统一的代码框架。这些项目都是由 BoneDragon 开发框架统一生成的。这一框架是用 Python 语言编写的,可以一键生成项目的基础开发框架,包含标准化的 API 模块、数据库模块和测试用例。BoneDragon 框架已经开源,并且发布到 GitHub 上。

InfoQ:企业内部修改开源软件后,如何做才能保证 patch 尽可能被接受?如果不接受,如何维护?如何随着主版本的升级而升级?

余兴超: 对开源项目进行二次开发其实并不是难事。难事在于我们如何维护这些私有代码,OpenStack 迭代频繁,每 6 个月会发布一个大版本,每 2 个月会发布一个里程碑。因此,我们在对待私有 Patch 的态度是非常谨慎的:我们会尽量把 Patch 提交到社区,当然这个 patch 必须是通用的,有完善的文档和测试用例,才能够被社区接受。若是该 patch 没有被社区接受或者是完全私有 patch,那么我们会尽可能地不去破坏原有的代码逻辑,例如 API 扩展。如果不得不进行修改,也会尽可能地保持代码的可维护性。

InfoQ:决定使用开源软件后,企业应该做哪些调研和测试?具备哪些基础条件后,可以考虑再生产环境使用?

余兴超: 从决定使用开源软件到最终在生产环境上线,期间会经历一段较为艰辛的历程。以 Openstack 为例,在对其进行了 POC 验证后,我们决定采用 Openstack 软件栈作为我们的 IaaS 平台基础。我们使用原生的 Openstack 搭建了一套用于内部研发使用的开发和测试平台,但由于页面缺乏快速响应,创建虚机的时间过长,缺乏计费,监控,管理员后台和运营后台等关键特性,因此并不适合将其直接用于商用。

在做了充分的客户调研后,我们对云平台提出了具体的特性列表和指标要求,比如页面的响应速度要求在 200ms 以内,操作系统镜像,虚拟机镜像,卷服务使用统一的后端存储,虚拟路由器能够在较短的时间内自动迁移等等。

在此基础上,我们制定了研发工作的 roadmap,定义了各个项目的 milestone。工程师们都全身心投入到了 OpenStack 项目以及 UnitedStack 自研项目的开发和自动化部署工作中。在经历了 3 个月时间的开发和调试工作后,我们完成了计划的特性开发,并将 UOS 平台部署到了生产环境。在最初的一个月时间里,UOS 平台进入内测阶段,只针对内部和部分受邀用户开放,研发工程师们对代码进行了多次打磨,修复收集到的软件缺陷,运维工程师对线上变更进行了梳理和规范,制定对于 Openstack 公共库管理机制,跨大版本升级机制,变更异常时的回滚机制等等。

在达到既定的功能和稳定性的要求并且建立起关于该平台的研发和运维规范后,我们正式将 UOS 云服务平台开放。

InfoQ:公司是否应该有开源文化?同事之间如何较好的传递开源软件的使用经验?

余兴超:作为一家使用开源 IaaS 平台的云计算公司,我们积极在公司内部推动开源文化,鼓励工程师们积极参与到开源社区去。工程师们主动地参与到开源社区的开发,我觉得这就是一种良好的开源文化。

拥有社区开发经验的同事可以带领其他同事参与到社区开发中去。通过指引和实践,从未接触过社区开发的同事可以迅速地掌握社区的开发流程和规范以及项目框架等等。除此之外,这些有社区开发经验的同事会在代码审查上向其他同事提出详尽的修改建议,这样其他同事就能够尽快地熟悉社区的代码风格和质量要求。

InfoQ:公司应该如何培养员工的开源文化、开源意识?

余兴超: 首先,一家公司中应该在其核心领域拥有一批在社区有影响力的工程师,他们会起到一个良好的带头作用。其次,鼓励(物质和精神双重)工程师们积极参与开源,对于公司和工程师个人来说,参与开源既是贡献,也是成长,也是在自我完善的过程。

InfoQ:开源文化对公司有什么样的积极影响?

余兴超:在过去三年里,我发现了一个有趣的现象:那些深度参与过 OpenStack 社区开发的工程师和未参与过社区开发的工程师有着较为显著的区别,这不仅体现在代码的规范、风格以及质量上,还体现在解决问题的思路上。之所以有如此显著的区别,有两方面的原因。一方面是因为开源社区拥有健全的持续集成体系和开发规范,积极的讨论环境和氛围;另一方面,公司内部业务需求的推动,使得参与开源开发的工程师获得了快速成长的机会。

因此,开源文化的推广有助于工程师个人素质的提升,对于公司产品和公司人才存储的竞争力来说都产生了积极的影响。

另外,一个积极拥抱开源文化的公司,意味着更加开放和自由,这将会持续吸引更多优秀的工程师加入。

InfoQ:企业在开源方面的投入是否值得?从哪个方向做起?

余兴超: 通过参与开源,企业能够提高对开源项目的代码掌控能力以及熟知项目的发展动态,就是非常值得的。

我觉得一个比较合理的起步方式,就从自己内部正在使用的开源项目开始,从简单的文档完善,代码的 bug 修复逐渐融入到开源社区中去。

受访嘉宾介绍

余兴超,现任 UnitedStack 平台架构负责人,同时也是 Puppet-OpenStack 社区核心开发人员,专注于自动化运维与持续交付领域。

2015 年 5 月 24 日 20:542023
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 108.4 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

限量,字节技术官十年经验总结并发编程核心方法与框架,太强了

周老师

Java 编程 程序员 架构 面试

架构师训练营 - 第一周学习总结

joshuamai

架构师训练营第 1 期第五周总结

Leo乐

极客大学架构师训练营

架构师训练营第一期 - 第五周课后 - 作业二

极客大学架构师训练营

区块链技术本质再认知

CECBC区块链专委会

区块链 大数据

化身“监工”的AI,我们该如何相处?

脑极体

架构师训练营培训第一周总结

lakers

极客大学架构师训练营

华为云如何赋能无人车飞驰?从这群AI热血少年谈起

华为云开发者社区

人工智能 无人驾驶

Spring 5.2.7和SpringBoot 2.3.3中文翻译发布啦!!!

青年IT男

spring springboot

开发一个交易所需要多少费用?币币交易系统

135深圳3055源中瑞8032

第五周学习代码技术选型总结

三板斧

极客大学架构师训练营

合约跟单软件开发,一键跟单系统搭建

135深圳3055源中瑞8032

USDT承兑商支付系统开发,区块链跨境支付源码

135深圳3055源中瑞8032

LeetCode题解:50. Pow(x, n),暴力法,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Java高并发编程的一本百科全书《Java高并发编程详解:多线程与架构设计》,把Java语言中最为晦涩的知识点都详解出来了!

Java架构之路

Java 程序员 架构 并发编程 编程语言

阿里18道常见的MySQL面试题,含解析

Java架构师迁哥

区块链多币种钱包开发服务商,多币种钱包APP

135深圳3055源中瑞8032

1分钟带你入门 React SCU、memo、pureCom

Leo

react.js 前端 React 前端进阶训练营 前端性能优化

笔记本中的“全优生”,英特尔Evo产品上市首日秒光!

intel001

惠普中国(HPE)技术总监教你如何做个“火影般”的“架构师”

Java架构师迁哥

Java 程序员 架构

知识视频创作者何去何从,百度给出解答

脑极体

极客时间 - 架构师一期 - 第五周作业

_

极客大学架构师训练营 第五周

2020,国产数据库崭露峥嵘的发轫之年

墨天轮

数据库 阿里云 华为云 SQL优化 活动专区

我从高级开发者身上学到的19条编码原则

Java架构师迁哥

架构师训练营第一期 - 第周五课后 - 作业一

极客大学架构师训练营

第五周总结

_

架构师一期 架构师第五周总结

了解HashMap数据结构,超详细!

程序员的时光

面试 hashmap HashMap底层原理

一周信创舆情观察(10.12~10.18)

统小信uos

第一周学习总结

Griffenliu

数字货币可能重构全球货币体系

CECBC区块链专委会

数字货币 金融

政府和企业如何认识到区块链的好处

CECBC区块链专委会

比特币 区块链

余兴超谈企业开源软件的选型以及开源文化-InfoQ