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. 【python】使用openpyxl解析json并写入excel(xlsx)

    目标: 将json文本解析并存储到excel中 使用python包 openpyx import simplejsonmport codecsimport openpyxl import os # d ...

  2. 【转】SENDING KEY VALUE MESSAGES WITH THE KAFKA CONSOLE PRODUCER

    SENDING KEY VALUE MESSAGES WITH THE KAFKA CONSOLE PRODUCER When working with Kafka you might find yo ...

  3. (一)AppScan的安装及破解

    IBM AppScan是一款目前最好用的Web 应用安全测试工具,Rational AppScan 可自动化 Web 应用的安全漏洞评估工作,能扫描和检测所有常见的 Web 应用安全漏洞,例如 SQL ...

  4. 网站添加logo图片

    网站添加log图片 第一种方法 这里使用的图片一般为16*16大小的图片 <link rel="shortcut icon" href="http://xxx.xx ...

  5. NAT和PAT

    地址转换技术 优点: 内网能够主动访问外网 外网不能主动访问内网 内网安全 节省公网ip地址 缺点:慢   PAT 端口地址转换 节省公网IP 替换源端口和源地址 NAT 不节省公网IP 一个公网地址 ...

  6. 数据库概念 MySQL语法

    数据库概念 将保存的数据部分,存到一个公共的地方,所有的用户涉及到数据相关都必须来这个公共地方查找 MySQL 本质就是一款基于网络通信的应用软件,任何基于网络通信的软件底层都是socket 可以把M ...

  7. Second Max of Array

    Find the second max number in a given array. Example Given [1, 3, 2, 4], return 3. Given [1, 2], ret ...

  8. Spring MVC的方法返回值和参数传递

    1. SpringMVC方法的返回值类型 3.1String类作为返回值 3.1.1Controller层 /** * 返回值类型为String时,一般用于返回视图名称 * 1.当方法返回值为null ...

  9. [Angular 8] Implement a Custom Preloading Strategy with Angular

    Preloading all modules is quite an extreme approach and might not always be desirable. For instance, ...

  10. Windows 创建Raid

    Windows 常见raid有0.1和5,以下操作在虚拟机下模拟,学会这招在自己电脑做个raid也未尝不可啊~ 一.RAID 0 创建: 添加两块硬盘,联机并初始化(2T以下选MBR,以上选GPT) ...