当前位置: 首页 > 科技观察

为什么我们从Docker切换到Go?

时间:2023-03-16 13:38:45 科技观察

在之前的很多项目中,我们都使用了Docker,效果非常好(大部分时候是好的,但是有时候我们生产系统中的RedHat系统文件会出现一些莫名其妙的问题,但是它可能不是Docker的问题)。但是,这次我们没有使用Docker,因为没有必要。我们用golang写了web服务和statichtml,还是用了golang1.16的新指令//embed,终于得到了一个可部署的二进制文件。作为一家自力更生的初创公司,我们可支配的资源非常有限。正是出于这个原因,我们选择了Golang。我们也渴望能够花几周的时间构建可靠的CI/CD管道、优雅的部署流程和漂亮的仪表板。但是,为了让用户订阅,我们需要交付软件。任何与这个目标不直接相关的工作都会被搁置,Docker就是其中之一。Docker本身有超过900万的代码,自身的bug在所难免,也有自己的特点。使用Golang允许我们构建速度非常快(至少对于我们当前的增长水平而言)且可扩展性非常强(至少对于我们当前的需求而言)的Web服务。我们的每台服务器每秒可以处理数千个事务。但实际业务量每秒不到千条。但是,可以肯定的是,我们可以用node或deno达到相同的水平。V8引擎也非常快。如果您的最大流量仅为每秒两个事务(我们有一个健身视频应用程序,但肯定没有Twitter级别的可扩展性问题),那么您选择哪种编程语言并不重要。如果容量不足,只需升级服务器即可。我们之所以选择Go,是因为golang的封装比node、Java或C#好很多。最后只有一个二进制文件。构建时,只需要运行:gobuild测试时,只需运行:gotest部署时,只需运行:scpappuser@host:sshuser@host"nohup./app"我们的实际工作确实比上面的“稍微”复杂一些,我们创建了一个用于在服务器启动时运行服务的SystemD脚本。我们还投入了一个专用的构建服务器,该服务器运行一个10行的shell脚本来完成所有构建(gitclone、gobuild、gotest、golint、govet)。然而,我们当中有些人认为这太复杂了。几天后,也许我们还会添加一个接口(如https://www.rundeck.com)来控制部署。我们花在构建和部署系统上的总时间太少了,我们甚至不知道如何衡量它。接下来我们来计算一下学习Docker、部署Docker、排错需要多少时间。即使你非常喜欢Docker并且它改变了你的生活,它是否必不可少?你真的认为Docker比我们使用golang的内置功能构建和部署更简单吗?我可以向你保证,不会。