爲什麼我們從 Docker 轉向了 Go?

本文經授權轉自公衆號 CSDN(ID:CSDNnews)

作者 | meezeeworkouts 

譯者 | 彎月

在以往的很多項目中,我們都採用了 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# 好太多了。**最終只有一個二進制文件。

構建時,只需運行:

go build

測試時,只需運行:

go test

部署時,只需運行:

scp app user@host:
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 內置功能建立的構建和部署還簡單嗎?我敢向你保證,並沒有。

對於 Docker,你有何想法?請在下方留言。

原文鏈接:https://launchyourapp.meezeeworkouts.com/2021/03/why-we-dont-use-docker-we-dont-need-it.html?m=1

本文轉自公衆號 “CSDN”,ID:CSDNnews

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/vaevUolvl-Oeo9GMvkanoA