抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

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:542138
用户头像
郭蕾 关注我视频号:极客时间小盖

发布了 218 篇内容, 共 117.4 次阅读, 收获喜欢 147 次。

关注

评论

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

面试官:什么是死锁?怎么排查死锁?怎么避免死锁?

小林coding

多线程 操作系统 死锁

2021年企业需要了解的和云计算相关的6大趋势

浪潮云

云计算

ZooKeeper 会话的秘密

HelloGitHub

Java zookeeper ZooKeeper原理 zk

Uniswap v3揭开真面目NA公链(Nirvana)NAC公链表示不服

区块链第一资讯

Patract将支持隐私DeFi协议Manta Network集成Wasm合约功能

Patract

rust blockchain polkadot Patract Wasm

AIOps 让「事件管理」变得更加智能

睿象云

AIOPS 告警管理

INTERSPEECH2020 语音情感分析论文之我见

华为云开发者社区

数据处理 模型 音频 语言情感分析 INTERSPEECH2020

Apache Flink Meetup · 上海站,超强数据湖干货等你!

Apache Flink

flink 数据湖 iceberg

当 ITOA 遇上 Cloud Alert,企业可以至少每年节省 3600 小时!

睿象云

智能告警

RUOYI 框架教程 12| 若依视图解决多表查询,就是这么简单!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

Rust从0到1-所有权-概念介绍

rust 所有权

节能降耗——搭建绿色IDC能耗与管控系统

一只数据鲸鱼

物联网 数据中心 数据可视化 IDC 机房管理

有了人工智能技术,告警管理会发生什么变化?

睿象云

人工智能 事件管理

【LeetCode】笨阶乘Java题解

HQ数字卡

算法 LeetCode 4月日更

PatraStore上线,带来DApp操作系统的全新体验

Patract

rust blockchain polkadot Patract Wasm

波卡合成资产协议Coinversation与Patract合作共建Wasm合约开放平台

Patract

rust blockchain polkadot Patract Wasm

答题拿奖两不误:华为云知乎金牌答题官,就是你!

华为云开发者社区

程序员 华为云 知乎答题 答案 金牌答题官

华为帐号服务学习笔记(二):OAuth2.0协议详解

Coding狙击

android 华为 OAuth 2.0 HMS

LiteOS内核源码分析:任务栈信息

华为云开发者社区

LiteOS 任务栈 栈指针 LOS_StackInfo LOS_Task

波卡无抵押借贷平台Bandot加入Patract Wasm合约开放平台

Patract

blockchain polkadot Patract Wasm ink!

Litentry基于Patract的Redspot和Europa产品进行ink!合约开发,拓展身份服务生态

Patract

rust blockchain polkadot Patract Wasm

Patract 与Apron Network就 Elara节点服务相关产品达成战略合作

Patract

rust blockchain polkadot Patract Wasm

第12周课后练习-数据应用(一)

潘涛

架构师训练营 4 期

华为帐号服务学习笔记(一):什么是HMS,什么是华为帐号服务

Coding狙击

android HMS

统一元数据,数据湖Catalog让大数据存算分离不再是问题

华为云开发者社区

大数据 元数据 存算分离 华为云MRS 数据湖Catalog

需求分析是什么?

Simon

架构实战营

Java-技术专题-Synchronized锁的分析

李浩宇/Alex

Java synchronized

微众银行区块链开源基于Rust的Wasm合约语言框架Liquid

Patract

rust blockchain polkadot Patract Wasm

零代码实现一对一表关系和无限主子表级联保存

crudapi

API crud crudapi 主子表 多对多

有道云笔记新版编辑器架构设计(下)

有道技术团队

架构 前端

一文掌握GaussDB(DWS) SQL进阶技能:全文检索

华为云开发者社区

sql 全文检索 华为云 GaussDB(DWS) 字段

Study Go: From Zero to Hero

Study Go: From Zero to Hero

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