如果真的要把Go语言加入OpenStack开发,需要考虑哪些问题?

一直以来OpenStack都只是用Python编写的,别的语言不是没用只是用到的很少,核心部分几乎都是Python,现有人提议让Go语言也用在API服务方面。

在新版本Newton出炉的周期中,技术评估委员会接到了一份把Go语言作为OpenStack官方开发语言的提议。随后进行了许多讨论,这里不过多赘述过程,只是谈谈几点讨论的结果。

决议是暂时拒绝让Go作为官方开发语言,但表示未来可以接着讨论,我觉得Go被拒绝可能有以下几方面的原因:

1.技术委员会成员担心增加新的语言会对社区造成的影响。会不会对社区带来分裂,会不会形成一个孤岛,会不会给新入门的人带来额外的门槛?

2.技术委员会的一些成员认为如今对社区中的一些方面缺乏信息,研究和工作。 Go代码如何在整个社区中共享? 认证怎么做? 消息层怎么弄? 如何产出版本? 如何维持分支的稳定?

3.提议Go语言的团队除了自己的项目以外根本就没做过跨项目的任务,这不由得引起了怀疑,使得许多技术委员会的质疑是否能够顺利完成。

接受一门新的语言需要哪些条件呢?

我先声明,我所说的不代表技术委员会而仅代表我个人意见,从而方便交流,好会让整个社区的人发表意见,无论是同意或者反对我的想法。

讨论期间我最关心的是第一部分,主要是因为我觉得向“Big Tent”的迁移还没完成。我也不知道怎么才会让我觉得这迁移已经完成了,我能肯定的是我们在解决大的变化发生前需要解决的问题。

言归正传,我越来越喜欢给许多东西设定期望,尤其是一些能带来改变的请求。把预期列出来之后,就能让相关的人了解到他们正在向哪一个方向行进,并且找到改变可能会面临的问题。

我对第二个问题远没有第一个问题那么担心。它会对参与讨论这一变化的团队表现出很强的承诺,因为这涉及到未来对社区所有成员使用和参考的基础知识库。我以为第二部分的工作可能有些超纲,但并不是这样。通过研究怎么共享代码,怎么测试代码,怎么输出代码,怎么做认证库等,我们在设定未来实际工作中需要用到的基础的东西。

无论如何,我上面提到的“基础的东西”是什么呢?我将在下面不太详尽的列表中简单谈一下:

为新语言定义分享代码和库的方式

Oslo Team负责维护整个OpenStack社区需要经常用到的库。这些库包括消息库(oslo.messaging),i18n库(oslo.i18n),数据库层库(oslo.db)等关键库。

这些库本身并不能让Oslo组的人忙起来,它们是为了收集以前在社区中存在于许多项目中的重复性的公共代码。这个代码现在由Oslo移除,稳定和发布。

我觉得作为一个社区,这是无可避免的。一旦越来越多的项目使用相同的语言就会出现共享代码的需求。 因此,我觉得我们需要更好地定义一个编程语言的代码怎么在社区共享,这个挺重要的,哪怕是在编程语言被接受之前就很重要。

我觉得提前做一些事情不意味着将来没事可做,我们都知道会有许多为预料到的事情和发生变化的事情,我觉得这些工作能涉及到大部分初始化的工作。

关于OpenStack基本服务的基本库

这可能看起来像一个相当高的目标。虽然想搞清楚代码如何共享是一个很困难的需求,但我认为这离OpenStack服务的最低要求还差很远。

集成在生态系统中的OpenStack服务至少需要以下任意一个库:

·keystoneauth / keystone-client

·oslo.config

·oslo.db

·oslo.messaging

如果在使用数据库或者消息队列抽象库的时候没有任何消耗的话,很可能提供的抽象层是错的,从而导致糟糕的API。从另一个方面说,认证层是几乎所有OpenStack服务都会用到的部分,应该可以很方便使用才对,但这不是说这件事本身很简单。

通过处理这些库中的任何一个,都可以测试CI作业,通过这些作业来确保新项目的基础设置是正确。

定义可交付项如何分布

OpenStack的发布过程几乎完全是自动化的,发布过程中涉及到的所有可交付项都是由社区自动产出并由发布团队来管理的。最后,将每个交付项生成压缩包。

目前使用Python编程语言(以及其他几门编程语言)的时候 ,这些压缩包因为只包含这些源代码所以还很简单。对于像Go这样的编译型语言,我们就得考虑压缩包里要压缩什么了,压缩编译过的二进制代码吗?是不是应该加入源代码呢?如果要包含二进制代码,是不是也应该考虑两种不同的压缩包呢?一个是二进制代码,一个是源代码。

维护稳定分支部分的工作怎么办?

稳定的分支在社区经常被遗忘,维护这些稳定分支的团队得到的感谢比较少。然而稳定分支的代码运行在许多OpenStack云环境下,它们对于向后兼容的后端迁移修复非常关键。

每一门语言都有自己发布库的方式,管理兼容性的方式。当为社区加入新的编程语言,与原有的其他团队之间的合作是至关重要的。

为新的语言设置CI管道

还有就是与基础设施组讨论设置CI管道。

这个任务可能是许多工作的基础。为了解决之前的许多任务,有必要设置CI作业,这涉及与基础架构团队协调。后者是至关重要的。 基础设施团队的参与对于添加任何新语言都至关重要,他们的反馈将在许多决策中发挥重要作用。

回顾一下为Python语言做的一些基础工作,其实是大多数项目都需要做的事情。我希望致力于加入新语言的团队可以做一些通用性的事情,为以后跨多个项目的时候使用。

比如会有以下几方面的通用性工作:

·Lint checkers

·Doc builders

·Release Pipelines

要做的似乎还有很多

把上面提到的方方面面都做到的话的确需要许多人力和时间。不幸的是,涉及到的许多团队真的腾不出手来做别的事情了,所以我觉得大部分工作将会由各组里多语言感兴趣的人来贡献出来的。无论如何,这些工作势必耽误每个团队的工作时间,即使是大部分的研究,文档和补丁都是由有兴趣的团队来自愿完成的。

整个社区花了多年时间让Python处于目前的状态。我不指望一个团队工作一个礼拜来把新的语言代码加入到已经用了六年的Python体系中。然而,机制已经建立,团队也已经存在,在一起协作下,上述的问题可能会在合理的时间点得到解决。

我希望这是个循序渐进的过程,这就是我为什么强调需要经过以上几个步骤的原因。人有流动性,即使是做过承诺有时候也不管用,我认为做这是最重要的是先做,然后在渐渐接受这门语言。

最后,即使存在一个形式良好的添加新语言的过程,我仍然推荐优先使用Python而不是其他语言。这与语言偏好无关,只是与我们社区中现有的知识的传播有关,我相信这种知识是无价的,将这些知识变成一种新的语言需要几年时间,相比之下优化则是一个更容易的任务

创新对很多项目都很重要。我们也相信不可能永远保持原样,语言的变化,项目的兴起,项目的消亡等等。加入新语言这回事儿也是社区变化 的一部分,我也希望OpenStack社区尽可能以最好的方式拥抱变革。但我希望是以一种相对保守的方式。我相信本文中提到的这些任务将会帮助大家未来以更快、更安全的方式来增加新的语言。

当然,以上都是我的个人观点,我现在越来越痴迷于明确预期。因此,我会起草并提交一份正式文档到技术委员会。

本文转自d1net(转载)

时间: 2024-10-30 15:00:59

如果真的要把Go语言加入OpenStack开发,需要考虑哪些问题?的相关文章

KVM下用DevStack快速安装和配置OpenStack开发环境教程

  OpenStack是一个开源的云计算管理平台项目,支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台.本文我们来谈谈DevStack安装和配置OpenStack开发环境. OpenStack的安装和配置有一点复杂,特别对于初学者来,第一次安装OpenStack时经常会碰到很多的问题.不过在Openstack社区中,一些开发者开发了一些自动化脚本来方便搭建OpenStack的开发环境,其中,DevStack是其中相对比较完善的,也是OpenStack

网易公司基于 OpenStack 开发的一套云计算管理平台

[编者按]OpenStack自 2010 年项目成立以来,已经有超过 200 个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的IaaS实现,目前在企业的应用越来越普遍,网易公司私有云团队分享了他们在基于OpenStack 开发的一套云计算管理平台的实战经验,期待和广大的OpenStack 使用者进行交流. 以下为原文: 本文为您介绍了网易公司基于 OpenStack 开发的一套云计算管理平台,以及在开发.

如何选择用什么语言进行网站开发

对于很多企业或者需要建站的个人来说,如何选择一个开发语言来进行网站开发是大家经常考虑的问题.很多行外的都是这样子跟我说,我要你们最先进的语言来进行开发,要最厉害的.其实对于我们来说,没有最先进的语言来说,只有最合适的语言.   什么是最合适的语言,是相对你要进行开发的内容是什么?你要达到什么目的或者说效果,你的侧重点在于哪里?有人曾经跟我说他要开发一个他们公司的企业网站,他说停别说都是Java好,是不是用Java开发的对他们来说比较好.我告诉他,Java是能开发的,Java确实是稳定性.安全性方

Rackspace和英特尔共建OpenStack开发中心

电信公司和云服务提供商对OpenStack的部署远远超过了企业OpenStack部署,Rackspace正运营着其中最大的 OpenStack云.为了让这一开源软件对企业更加友好,同时加快这一进程,英特尔和Rackspace计划在得州圣安东尼奥市建立一个 OpenStack创新中心,届时一个大型的专业OpenStack开发团队将与运营OpenStack 云的Rackspace技术人员展开密切合作. 英特尔云平台部门副总裁兼总经理Jason Waxman说:"这并不是又一个OpenStack的发行

[Windows Phone] 以多国语言做为开发前提 (2)

原文:[Windows Phone] 以多国语言做为开发前提 (2) ? 前言 在先前的文章 [Windows Phone 开发 - 以多国语言做为开发前提 (1)] 中说明了简单的多国语言范例,今天再补充两个常见的例子,讯息中包含变数和图片,方法一样是透过资源档的方式达成. 此部分内容一样是来从 TechDays 2013 的课程 [开发 Windows Phone 商务应用程式就是这麽快] 学习而来. ? 讯息中包含变数 我们有一段讯息,讯息中包含变数,如下所示 : 英文(预设语言) The

php与asp的pk:用什么语言进行网页开发最好?

什么是PHP PHP代表了"超文本处理器",这意味着你必须知道,它是一种服务器端的处理语言,且以HTML的形式出现.它最常用的地方就是网页了,数据从客户机发送到Web服务器,信息在此被处理并返回结果. 但这种通用性的语言丝毫不局限于在网页方面,PHP也能被用在命令行shell中,它可作为操作系统的一个扩展,由此执行相应的PHP文件. 在数据库方面的应用也是PHP的一个强项,MySQL.SQL.Microsoft Access.Oracle及InterBase只不过是采用了PHP语言的一

Go语言与数据库开发:01-10

测试 现在的程序已经远比Wilkes时代的更大也更复杂,也有许多技术可以让软件的复杂性可得到控制.其中有两种技术在实践中证明是比较有效的.第一种是代码在被正式部署前需要进行代码评审.第二种则是测试 我们说测试的时候一般是指自动化测试,也就是写一些小的程序用来检测被测试代码(产品代码)的行为和预期的一样,这些通常都是精心设计的执行某些特定的功能或者是通过随机性的输入要验证边界的处理. 软件测试是一个巨大的领域.测试的任务可能已经占据了一些程序员的部分时间和另一些程序员的全部时间.和软件测试技术相关

代码大战:哪种语言会赢得开发的霸权?

原CNET的开发人员Dan Seewer和Kevin Cobb接受了我们的采访,就哪些编程语言位列开发语言前茅以及哪些语言正在参与排名的竞争发表了自己的看法.Dan在软件开发上的经验超过17年,他所使用过的语言包括Perl.C.Java和C#.Kevin有超过5年的(软件)开发经验,而且是Sun认证的Java程序员. Builder.com:就你们的观点来看,在未来两年里哪种编程语言是"必须懂"的开发语言?   Kevin:COBOL. Dan:关于这个问题,我已经考虑了很多,但是还不

SharePoint 2010多语言UI及开发人员需要注意的问题

SharePoint 2010支持同一个网站呈现出不同语言的UI.比如,一个中文版的SharePoint 2010系统,管理员可以在服务器上安装SharePoint 2010英文语言包,然后在网站设置的"语言设置"中,选择"英语"为备用语言. 开发人员需要注意的问题-sharepoint ui设计"> 然后用户就可以随时使用页面右上角的用户菜单,将当前网站的显示UI,在多个语言之间进行切换. 如果你尝试一下这个功能,就会发现一个有趣的现象.对于Sha