为什么我们从Docker转向了Go?

系统 Linux
我们选择Go的原因是,golang的打包比node、Java或C#好太多了。最终只有一个二进制文件。

[[392060]]

 在以往的很多项目中,我们都采用了Docker,而且效果都很不错(大多数时候都不错,只不过有时我们的生产系统中的红帽系统文件会出一些莫名的状况,但可能并不是Docker的问题)。但是,这一次我们并没有采用Docker,原因是没有必要。我们用golang编写了Web服务和静态的html,并且还是用了golang 1.16的新指令//embed,最终得到了一个可部署的二进制文件。

作为一个自强自立的创业公司,我们可以使用的资源非常有限。正是出于这个原因,我们才选择了Golang。我们也渴望能够花费几个星期来构建完善的CI / CD管道、优雅的部署流程以及漂亮的仪表板。但是,为了吸引用户订阅,我们需要交付软件。任何与这个目标没有直接关系的工作都要靠边站,Docker就是其中之一。Docker本身的代码量超过了900万,其自身的bug不可避免,而且还有其自身的特质。

使用Golang可以让我们构建速度非常快的Web服务(至少能够满足我们当前的增长水平),而且可伸缩性非常强(至少能够满足我们当前的需求)。我们的每台服务器每秒可以处理数千个事务。但实际的业务量每秒还不到一千。但是,可以肯定的是,我们用node或deno也可以达到相同的水平。V8引擎也非常快。如果你的最大流量每秒只有大概两个事务(我们有一个健身视频应用,但肯定没有推特那个水平的扩展性问题),那么实际上无论选择哪种编程语言都没有关系。如果容量不足,只需升级服务器就可以了。

我们选择Go的原因是,golang的打包比node、Java或C#好太多了。最终只有一个二进制文件。

构建时,只需运行:

  1. go build 

测试时,只需运行:

  1. go test 

部署时,只需运行: 

  1. scp app user@host:  
  2. ssh user@host “nohup ./app” 

我们的实际工作的确比上述“稍微”复杂一些,我们创建了一个SystemD脚本在服务器启动时运行服务。我们还投入了一个专用的构建服务器,其上运行了一个10行代码的shell脚本,而这个脚本可以完成所有的构建工作(git clone、go build、go test、go lint、go vet)。但是,我们之中还有人认为这太复杂了。过几天,可能我们还会添加一个界面(比如https://www.rundeck.com)来控制部署。

我们花在建立构建和部署系统的总时长非常短,我们甚至都不知道如何衡量。

下面,我们来算一算学习Docker、部署Docker、还有故障排除等工作需要花费多少时间。即便你非常喜欢Docker,而它也改变了你的生活,但它是必不可少的吗?你真的认为Docker比我们使用golang内置功能建立的构建和部署还简单吗?我敢向你保证,并没有。 

 

责任编辑:庞桂玉 来源: 马哥Linux运维
相关推荐

2016-09-27 21:25:08

Go语言Ken Thompso

2020-06-10 09:06:48

MongoDB架构高可用

2020-06-05 08:29:40

语言PythonGo

2020-09-09 09:38:47

GoLangNodeJS编程语言

2021-04-26 09:33:46

Go Iota语言

2013-08-07 16:04:22

2019-09-30 07:50:51

ITOps云端ITOM

2019-11-27 10:25:15

SaaS云端IT架构

2021-12-06 12:48:40

Gosyncatomic

2023-03-29 15:01:43

微服务开发

2023-02-10 08:58:46

2021-09-14 08:50:38

Kubernetes容器Docker

2016-02-15 10:52:04

华为

2019-11-20 10:39:35

iPhone缓存清理

2024-04-11 14:03:24

云计算云提供商

2013-11-11 13:35:44

虚拟化应用

2021-09-23 13:44:20

物联网IPv6设备

2018-06-15 21:26:13

PythonCrystal语言

2019-08-05 14:23:43

DockerKubernetes容器

2021-12-27 14:19:44

杀毒软件病毒电脑安全
点赞
收藏

51CTO技术栈公众号