OpenStack社区中的GO语言之争

时间:2024-03-03 18:50:49

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开源团队工程师李中华