1 背景介绍

Swift之前几乎所有的代码都是用Python实现的,但是性能一直不理想,

社区为了解决性能问题,尝试过很多方法,后来发现用Golang语言进行一部分代码重写,

性能得到了一定的提升,社区把这部分重写的分支命名为hummingbird。

但是目前OpenStack的基础设施还无法支持Golang语言,

比如跑单元测试,集成测试的工具支持。

所以,目前hummingbird分支社区没法完全按照一般python代码合入、管理。

于是有人向社区申请OpenStack社区提供对Golang语言的支持,从而引发了社区的激烈讨论。

2 Golang的优劣

(1) 给OpenStack带来的收益:

    性能:直接编译成机器码,不依赖其他库;运行环境不局限在某一个CPU内核,可以有效的利用多核,比原生Python在处理瓶颈业务时性能高一个数量级。

    并发处理: Go routine和channel大大的降低了编写高并发服务器的难度,很多情况下不用过多的考虑锁机制。

(2) 给OpenStack带来的问题:

一个项目采用两种语言,需要同时维护多个分支,很难找到既精通Python又精通Golang的人。

社区可能会面临Python和Golang的分裂,所有的项目可能会被Go重写。

需要基础设施支持,对于社区来讲也是一个不小的开支。

3 社区核心观点

(1) 赞成派:

认为Golang能为社区解决性能问题,同时也是技术发展趋势,业界有很多云平台都是基于Golang开发,

最热门的Docker也是用Golang开发,社区没有理由阻止创新。

(2) 反对派:

认为其实Python一样也能写出高性能的代码,从目前来看Golang语言的诉求主要还是来自于数据面,

而OpenStack主要还是定位为控制面。同时为了支持一门新语言,社区需要投入很大的工作量,引入的代价太大。

4 各种解决方案提议

(1) OpenStack引入Golang

两种语言共存会为OpenStack社区工作带来很多挑战:需要社区提供基础设施支持,

同时还需要各个夸项目团队增加很多工作,例如文档、发布管理等等;

需要有既精通Python又精通Golang的专家。

引入Golang作为官方语言,社区担心会有人用Golang重写OpenStack的项目。

会议上有人就提出如果Golang成为了官方语言,他将第一个人出来用Golang重写OpenStack。

(2) OpenStack不引入Golang,将OpenStack定位为控制面。

将Swift拆分为控制面和数据面两部分。

其中控制面在OpenStack社区管理(类似于Cinder、Manila),数据面则在其它外部社区管理。

有些人认为这种方案使得OpenStack不完整了,同时如果OpenStack后续只做控制面,

那么OpenStack就像是一个Rest Wrapper,没有什么技术含量,失去了技术创新。

这里引申出了OpenStack的定位:是否只定位为控制面。

(3) 明确各自语言的用途

Python定位为实现大部分功能,JS定位用于实现Web,Golang则用于Native相关的一些功能。

5 社区里的一些声音

-- 有人认为引入Go,那么很多功能需要完全重写,不符合开源精神,甚至有人提出如果go接受作为官方语言,他将第一开始用Go重写OpenStack的项目。

-- 有人说之前python和perl、c也争论过,那时有人认为C也可以写任何功能的代码,但是最后还是python成了主流,现在也不应该阻碍Golang。

-- 有人认为为Go维护一个分支,对基础设施要求、花费的代价都很大,同时还有Release管理,文档管理等各个方面工作,引入代价太大。

-- 有人认为不能因为说难而拒绝创新。

-- 有人认为如果OpenStack只是做控制面,那OpenStack就是一个Rest Wrapper,没有什么创新,需要有数据面,应该支持Golang。

目前社区还没有具体的定论,后面讨论还会持续。。。

编者注:本文来自OpenStack开源团队工程师李中华

OpenStack社区中的GO语言之争的更多相关文章

  1. go, iris , nuxt, 服务端渲染等技术在helloworld开发者社区中的应用与实践

    大家好,helloworld.net 上线已经有近半年的时间了,转眼过的好快,在这半年的时间里,迭代了近10多个版本,优化了很多的体验,交互上的不足之处,同时也上线了我们的安卓 app, 苹果的因为还 ...

  2. 如何向Openstack社区提交一个新项目

    前几天有个朋友问我:自己有一个idea不错的项目,也把基本的框架写好了,想贡献到Openstack社区,却不知道应该怎么做.正好之前我有过类似的经历,那么来分享一下我是如何向Openstack社区提交 ...

  3. OpenStack环境中的NFV实践

    原文链接:http://www.99cloud.net/html/2016/jiuzhouyuanchuang_1103/250.html 在开始实践之前我们首先需要了解一些NFV概念和术语. NFV ...

  4. 别语言之争了,最牛逼的语言不是.NET,也不是JAVA!

    谁都不用说,博客园明显的偏.NET,C#的讨论一出现,推荐讨论热火朝天,而发点JAVA的东西,应者寥寥.一旦有出现两大派系的竞争,那绝对是头条.每天都看,早就麻木了. 研二的我浸淫.NET已经三四年, ...

  5. 第九篇:在SOUI中使用多语言翻译

    为UI在不同地区显示不同的语言是产品国际化的一个重要要求. 在SOUI中实现了一套类似QT的多语言翻译机制:布局XML不需要调整,程序代码也不需要调整,只需要为不同地区的用户提供不同的语言翻译文件即可 ...

  6. c++中使用c语言函数

    在c++中使用c语言的函数时候,该函数必须在c文件中声明extern "C"才可以使用 如:extern "C" c_function_name(int, in ...

  7. IDEA14中安装go语言插件

    在IntelliJ IDEA14中安装go语言插件 go语言的集成开发环境仍不成熟,试用了liteide,感觉很不适应,弹出菜单对程序员的干扰太大.所以就试大牌的IntelliJ IDEA,这工具本来 ...

  8. 测试开发之Django——No6.Django模板中的标签语言

    模板中的标签语言 1.if/else {% if  %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if  %} 和 {% endi ...

  9. (转)python中调用R语言通过rpy2 进行交互安装配置详解

    python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753   python中调用R语言通过r ...

随机推荐

  1. 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题

    表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3   描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...

  2. Kubernetes概览

    Kuberbetes这个名字是什么意思?k8s又是什么?Kubernetes这个名字源自希腊语,意思是“舵手”,也是“管理者”,“治理者”等词的源头.k8s是 Kubernetes的简称(用数字『8』 ...

  3. jquery头部高亮显示方法

    做网站都有头部导航栏,但导航栏的高亮显示一般都是后台技术人员做传参判断来显示高亮样式,今天来教大家一个用jquery来显示 废话不多说,直接上代码 第一步,在需要的页面中写入 <input ty ...

  4. HashMap与HashTable的理解与区别

    Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2.虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了 ...

  5. 理解git 中的HEAD指针&branch指针

    理解git 中的HEAD指针&branch指针 Yooye关注 2019.02.28 10:44:32字数 492阅读 668 HEAD指针 使用git checkout 来移动HEAD指针, ...

  6. Hbase 错误记录分析(1) region超时问题

    错误现象: 默认等待时间是60秒,超过这个时间就报超时问题了.因此需调整超时时间,默认为60秒,在配置文件 hbase-site.xml中: 调整成10分钟 <property>    & ...

  7. 如何利用awk累加第一列的值?

    以下是一个五行文件的例子: 1.[root@master yjt]# seq 5 |awk 'BEGIN{sum=0;print "总和:"}{if(NR<=4)printf ...

  8. 微信小程序 使用字体图标 iconfont

    第一步:在阿里巴巴矢量图标库下载需要的图标 地址:https://www.iconfont.cn/ 添加至项目 第二步:打开在线代码 将在线代码复制 第三步:点击下载至本地下载图标 将下载的downl ...

  9. 微信小程序--更换用户头像/上传用户头像/更新用户头像

    changeAvatar:function (){ var that=this; wx.chooseImage({ count: 1, // 默认9 sizeType: ['original', 'c ...

  10. FLUENT导入CHEMKIN机理的单位问题【转载】

    转载自:http://blog.sina.com.cn/s/blog_4a0a8b5d0101pj3c.html CHEMKIN机理导入后,发现速率常数全变了,那么他们是怎样变化的呢? FLUENT中 ...