本文作者:Serdar Yegulalp[1]
原文鏈接:10 open source projects proving the power of Google Go[2]
譯者:Go 語言中文網 polaris ,非原文直譯方式
從 2007 年項目啟動,到 2009 年底對外開源,Go 語言已經 10 年了。這 10 年是狂奔的 10 年,特別是最近一兩年,從 Go 語言中文網的用戶量和訪問量可以明顯看出來,Go 確實越來越受到關注。同時由於豐富的庫和抽象機制簡化了開發併發分佈式(即雲)應用程序的工作,簡單、高性能、易於寫高併發程序、編譯速度極快的 Go 備受關注。
然而,一門語言要被大眾接受,生態很重要。得益於一些重量級的開源項目,使得 Go 得到了越來越多人的認可,特別是雲計算相關的項目,這其中最重要的莫過於 Docker 和 Kubernetes。Go 已證明它是快速開發網絡服務、軟件基礎結構項目以及各種功能強大的緊湊工具的首選。
本文介紹了 10 個用 Go 語言編寫的被大量關注、使用的項目,許多項目已經比 Go 語言更出名。所有這些項目都在各自的領域發揮了重要作用。本文介紹的所有項目都託管在 GitHub 上,因此對 Go 好奇的人可以輕鬆查看讓這些項目取得成功的 Go 代碼。
這 10 個項目是:
- Docker[3]
- Kubernetes[4]
- Fedora CoreOS[5]的Etcd[6]和Fleet[7]
- InfluxDB[8]
- Istio[9]
- Traefik[10]
- Hugo[11]
- Terraform[12]
- CockroachDB[13]
- Gravitational Teleport[14]
一個個看看。
Docker
Docker[15]是一個開源的應用容器引擎,讓開發者可以打包他們的應用和依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux 、Mac 或 Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
Docker 無疑是 Go 最成功的案例。在一年多點的時間裡,這種軟件容器化技術成為了 Go 適用於大規模分佈式軟件項目的典範。Docker 團隊之所以喜歡 Go[16],是由於它有很多優點:全靜態編譯、強大的標準庫、完整的開發環境,以及出色的跨平臺特性。
Kubernetes
Kubernetes,簡稱 k8s,是用 8 代替 8 個字符 “ubernete” 而成的縮寫。是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes 的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes 提供了應用部署、規劃、更新、維護的一種機制。
因為 Docker 是用 Go 編寫的,自然而言,其他重要的面向雲的容器項目也採用了 Go 編寫。谷歌的容器編排項目Kubernetes[17]就是一個 Go 項目,大部分 Kubernetes 子組件和生態系統也是如此。一個典型例子是:超輕量級的 Kubernetes 衍生品k3s
[18]適用於只需要 Kubernetes 基礎組件的人群。(Go 語言中文網譯註:K8S 有點 Java 中的 Hadoop 這種量級應用的味道)谷歌考慮過使用其他語言(包括 C/C++、Java 和 Python)編寫 Kubernetes。但是據 Kubernetes 的聯合創始人、前技術負責人,目前是 VMware 首席工程師的Joe Beda 聲稱[19],這些語言沒有一個像 Go 那樣“稱心如意”。正如 Beda 所說,“Go 既不太高級,又不太低級。”
Fedora CoreOS
CoreOS 是一種操作系統,於 2013 年十二月發佈,它的設計旨在關注開源操作系統內核的新興使用 — 用於大量基於雲計算的虛擬服務器。
CoreOS[20](現在是 Red Hat 的項目)使用 Docker 將 Linux 變成一堆鬆散耦合的容器,有可能擺脫一系列混亂的依賴項,依賴已成為 Linux 軟件包管理的基本對象。因此,CoreOS 利用 Docker 來實現它也就不足為奇了。CoreOS 的兩個基本服務 Etcd 和 Fleet 都是用 Go 編寫的。Fleet[21]讓你可以“就像 CoreOS 集群共享單一的初始化系統那樣對待它”。Etcd[22]是一個分佈式鍵值存儲系統,處理 Docker 應用程序與 CoreOS 實例之間的配置同步。兩者都是用 Go 編寫的,Go 擁有“出色的跨平臺支持、小巧的二進制文件以及強大的社區。”
InfluxDB
InfluxDB[23]是一個用於存儲和分析時間序列數據的開源數據庫。是“沒有外部依賴的分佈式時間序列數據庫”。“時間序列”這個術語是指 InfluxDB 主要負責獲取度量指標或事件,允許對它們進行實時分析。“沒有外部依賴”意味著你不需要其他軟件即可使用 InfluxDB。它完全是獨立自主的(Go 應用程序往往如此)。支持使用 REST 方式,通過 JSON 將數據寫入數據庫或從數據庫讀取數據,甚至可以允許使用簡單 SQL 語言進行查詢。InfluxDB 具有高度彈性和橫向可擴展性,選擇 Go 這種語言可能是為了使那些特性變得可行和易於實現。(Go 語言中文網注:使用 Go 語言實現的時序數據庫還有其他的,比如餓了麼開源的LinDB[24])
InfluxDB 主要特性有:
- 內置 HTTP 接口,使用方便
- 數據可以打標記,這樣查詢可以很靈活
- 類 SQL 的查詢語句
- 安裝管理很簡單,並且讀寫數據很高效
- 能夠實時查詢,數據在寫入時被索引後就能夠被立即查出
- ……
推薦 InfluxDB 中文文檔:https://jasper-zhang1.gitbooks.io/influxdb/content/
Istio
Istio[25]提供一種簡單的方式來為已部署的服務建立網絡,該網絡具有負載均衡、服務間認證、監控等功能,而不需要對服務的代碼做任何改動。它是 Kubernetes 生態系統的一部分,它解決許多企業應用環境中一個沒有深入瞭解又沒有處理好的問題:如何處理將服務彼此連接並與外界連接的網絡結構?Istio 在 Kubernetes 集群中的每個容器之間以及那些容器與外界之間提供了一個可編程的“服務網格”,或網絡代理層,那樣可以通過共享控制平面以編程方式對該網絡進行任何更改。鑑於 Kubernetes 也是用 Go 編寫的,因此 Go 非常適合此任務,另一個原因是 Go 適用於去中心化的分佈式網絡項目。
Traefik
Traefik 是一個為了讓部署微服務更加便捷而誕生的現代 HTTP 反向代理、負載均衡工具。 它支持多種後臺 (Docker[26],Swarm[27] ,Kubernetes[28],Marathon[29],Mesos[30],Consul[31],Etcd[32],Zookeeper[33],BoltDB[34], Rest API, file…) 來自動化、動態的應用它的配置文件設置。
Traefik 旨在與一系列廣泛的編排選項一起使用,從 Kubernetes 和 Docker Swarm 到 Amazon ECS 和 Azure Service Fabric,不一而足。Traefik 自動創建在那些編排器下運行的微服務所需的路由,以便與外界進行對話。它還生成適合編排器的跟蹤數據和統計信息。中文網:https://traefik.cn/
Hugo
Hugo 是由 Go 語言實現的靜態網站生成器。簡單、易用、高效、易擴展、快速部署。
靜態網站生成器現在很流行。因為它們僅僅使用靜態 HTML、CSS 和 JavaScript 來創建快速、安全的網站,這是一種很簡便的方法。Hugo[35]是一個靜態網站生成器,它利用了 Go 的許多特性來快速順暢地工作 —— 即 Go 用於渲染 HTML 的工具、網絡庫、國際化功能以及作為單個可以再分發的平臺原生二進制文件加以部署的特性。Go 的所有這些特性使 Hugo 易於拆包、運行,方便用來快速構建網站。中文網:https://www.gohugo.org/
Terraform
HashiCorp — 由 Vagrant(基於 Ruby 的開發環境管理工具)的開發者創辦,它充分利用 Go 的速度和強大來構建更龐大更宏偉的項目:Terraform[36],該系統用於通過定義文件轉為代碼在本地或雲端構建 IT 基礎架構。你所做的任何更改可以前滾或後滾,而且在調用代碼之前可以獲得到底會發生什麼情況的完整摘要(即執行計劃)。
Terraform 是一種安全有效地構建、更改和版本控制基礎設施的工具(基礎架構自動化的編排工具)。它的目標是 "Write, Plan, and create Infrastructure as Code”, 基礎架構即代碼。Terraform 幾乎可以支持所有市面上能見到的雲服務。具體的說就是可以用代碼來管理維護 IT 資源,把之前需要手動操作的一部分任務通過程序來自動化的完成,這樣的做的結果非常明顯:高效、不易出錯。
CockroachDB
Go 常被用於構建各種分佈式雲原生應用程序。CockroachDB[37]以彈性而聞名,這種分佈式數據庫旨在承受各種各樣的災難(甚至是數據中心故障),而能繼續響應你的 SQL 查詢。 CockroachDB 完全是用 Go 編寫的,只有部分來源於前一個項目 RocksDB 的性能密集型核心功能使用了一小部分 C++ 代碼。
CockroachDB 可實現跨數據中心同步的可伸縮開源數據庫。目標是打造一個開源、可伸縮、跨地域複製且兼容事務的 ACID 特性的分佈式數據庫,它不僅能實現全局(多數據中心)的一致性,而且保證了數據庫極強的生存能力,就像 Cockroach(蟑螂)這個名字一樣,是打不死的小強。
Gravitational Teleport
Go 已成為許多網絡項目以及基於它們的下游項目的默認語言。一個典型的例子是:用 Go 實現的 SSH 本身就很有用,充當Gravitational Teleport[38]等項目的基礎。Gravitational Teleport 讓用戶可以通過 shell 安全地訪問服務器。它通過單點登錄來保證安全,但又不需要事務通常需要的那種管理開銷(比如密鑰管理和輪換)。
喜歡本文的朋友,歡迎關注“Go語言中文網”
文中鏈接
[1]Serdar Yegulalp:https://www.infoworld.com/author/Serdar-Yegulalp/
[2]10 open source projects proving the power of Google Go:https://www.infoworld.com/article/3442978/10-open-source-projects-proving-the-power-of-google-go.html
[3]Docker:https://github.com/docker/docker
[4]Kubernetes:https://github.com/kubernetes/kubernetes
[5]Fedora CoreOS:https://github.com/coreos
[6]Etcd:https://github.com/etcd-io/etcd
[7]Fleet:https://github.com/coreos/fleet
[8]InfluxDB:https://github.com/influxdb/influxdb
[9]Istio:https://istio.io/
[10]Traefik:https://github.com/containous/traefik
[11]Hugo:https://gohugo.io/
[12]Terraform:https://github.com/hashicorp/terraform
[13]CockroachDB:https://github.com/cockroachdb/cockroach
[14]Gravitational Teleport:https://github.com/gravitational/teleport
[15]Docker:https://github.com/docker/docker
[16]Docker 團隊之所以喜歡Go:http://www.slideshare.net/jpetazzo/docker-and-go-why-did-we-decide-to-write-docker-in-go
[17]Kubernetes:http://www.infoworld.com/article/2608021/paas/google-plunges-in-to-docker-management.html
[18]k3s:https://github.com/rancher/k3s
[19]Joe Beda 聲稱:https://blog.gopheracademy.com/birthday-bash-2014/kubernetes-go-crazy-delicious/
[20]CoreOS:http://www.infoworld.com/article/2608236/application-virtualization/coreos-uses-docker-to-put-linux-on-a-diet.html
[21]Fleet:https://coreos.com/using-coreos/clustering/
[22]Etcd:https://coreos.com/using-coreos/etcd/
[23]InfluxDB:https://github.com/influxdb/influxdb
[24]LinDB:https://github.com/lindb/lindb
[25]Istio:https://istio.io/
[26]Docker:https://www.docker.com/
[27]Swarm:https://docs.docker.com/swarm
[28]Kubernetes:https://kubernetes.io/
[29]Marathon:https://mesosphere.github.io/marathon/
[30]Mesos:https://github.com/apache/mesos
[31]Consul:https://www.consul.io/
[32]Etcd:https://coreos.com/etcd/
[33]Zookeeper:https://zookeeper.apache.org/
[34]BoltDB:https://github.com/boltdb/bolt
[35]Hugo:https://gohugo.io/
[36]Terraform:https://github.com/hashicorp/terraform
[37]CockroachDB:https://github.com/cockroachdb/cockroach
[38]Gravitational Teleport:https://github.com/gravitational/teleport
閱讀更多 Go語言中文網 的文章