證明谷歌Go魅力的10個開源項目
譯文【51CTO.com快譯】谷歌的Go編程語言問世已有10年,無疑已揚名立萬。由于豐富的庫和抽象機制簡化了開發(fā)并發(fā)分布式(即云)應(yīng)用程序的工作,輕巧且易于編譯的Go備受關(guān)注。
但是真正衡量任何一種編程語言成功的標準是開發(fā)人員用它創(chuàng)建的項目。 Go已證明它是快速開發(fā)網(wǎng)絡(luò)服務(wù)、軟件基礎(chǔ)結(jié)構(gòu)項目以及各種功能強大的緊湊工具的首選。
本文介紹了10個用Go語言編寫的值得關(guān)注的項目,許多項目已經(jīng)比用來編寫的這種語言更出名。所有這些項目都在各自的領(lǐng)域發(fā)揮了重要作用。本文介紹的所有項目都托管在GitHub上,因此對Go好奇的人可以輕松查看讓這些項目取得成功的Go代碼。
Docker
你很難找到比Docker更適合的Go成功案例了。在一年多點的時間里,這種軟件容器化技術(shù)成為了Go適用于大規(guī)模分布式軟件項目的典范。Docker團隊之所以喜歡Go,是由于它有很多優(yōu)點:無需依賴項的靜態(tài)編譯、強大的標準庫、完整的開發(fā)環(huán)境,以及能夠在最省力的情況下針對多種架構(gòu)進行構(gòu)建。
Kubernetes
如果Docker是用Go編寫的,按理說其他重要的面向云的容器項目也將用Go編寫。 谷歌的容器編排項目Kubernetes是Go項目,大部分Kubernetes子組件和生態(tài)系統(tǒng)也是如此。一個典型例子是:超輕量級的Kubernetes衍生品k3適用于只需要Kubernetes基礎(chǔ)組件的人群。
谷歌考慮過使用其他語言(包括C/C++、Java和Python)編寫Kubernetes。但是據(jù)Kubernetes的聯(lián)合創(chuàng)始人、前技術(shù)負責(zé)人,目前是VMware首席工程師的Joe Beda聲稱,這些語言沒有一個像Go那樣“稱心如意”。正如Beda所說,“Go既不太高級,又不太低級。”
Fedora CoreOS
CoreOS(現(xiàn)在是Red Hat的項目)使用Docker將Linux變成一堆松散耦合的容器,有可能擺脫一系列混亂的依賴項,依賴項已成為Linux軟件包管理的基本對象。因此,CoreOS利用Docker來實現(xiàn)這一魔力也就不足為奇了;CoreOS的兩個基本服務(wù)Etcd和Fleet都是用Go編寫的。Fleet讓你可以“就像CoreOS集群共享單一的初始化系統(tǒng)那樣對待它。”Etcd是一個分布式鍵值存儲系統(tǒng),處理Docker應(yīng)用程序與CoreOS實例之間的設(shè)置同步。兩者都是用Go編寫的,Go擁有“出色的跨平臺支持、小巧的二進制文件及強大的社區(qū)。”
InfluxDB
InfluxDB是“沒有外部依賴項的分布式時間序列數(shù)據(jù)庫”。“時間序列”這個術(shù)語是指InfluxDB主要負責(zé)獲取度量指標或事件,允許對它們進行實時分析。“沒有外部依賴項”意味著你不需要其他軟件即可使用InfluxDB。它完全是獨立自主的(Go應(yīng)用程序往往如此)??梢酝ㄟ^提交JSON的REST調(diào)用將數(shù)據(jù)寫入數(shù)據(jù)庫或從數(shù)據(jù)庫讀取數(shù)據(jù),并可以通過甚至允許使用正則表達式的簡單SQL語言進行查詢。InfluxDB具有高度彈性和橫向可擴展性,選擇Go這種語言可能是為了使那些功能變得可行和容易。
Istio
Istio項目是Kubernetes生態(tài)系統(tǒng)的一部分,它解決許多企業(yè)應(yīng)用環(huán)境中一個沒有深入了解又沒有處理好的問題:如何處理將服務(wù)彼此連接并與外界連接的網(wǎng)絡(luò)結(jié)構(gòu)?Istio在Kubernetes集群中的每個容器之間以及那些容器與外界之間提供了一個可編程的“服務(wù)網(wǎng)格”,或網(wǎng)絡(luò)代理層,那樣可以通過共享控制平面以編程方式對該網(wǎng)絡(luò)進行任何更改。鑒于Kubernetes也是用Go編寫的,因此Go非常適合此任務(wù),另一個原因是Go適用于去中心化的分布式網(wǎng)絡(luò)項目。
Traefik
用Go語言編寫的另一個與網(wǎng)絡(luò)有關(guān)的項目是Traefik,它是面向網(wǎng)絡(luò)服務(wù)的反向代理和負載均衡系統(tǒng)。Traefik旨在與一系列廣泛的編排選項一起使用,從Kubernetes和Docker Swarm到Amazon ECS和Azure Service Fabric,不一而足。Traefik自動創(chuàng)建在那些編排器下運行的微服務(wù)所需的路由,以便與外界進行對話。它還生成適合編排器的跟蹤數(shù)據(jù)和統(tǒng)計信息。
Hugo
靜態(tài)網(wǎng)站生成器現(xiàn)在大行其道。畢竟,它們?yōu)閮H使用靜態(tài)HTML、CSS和JavaScript來創(chuàng)建快速安全的網(wǎng)站提供了一種簡便的方法。Hugo是一個靜態(tài)網(wǎng)站生成器,它利用了Go的許多功能來快速順暢地工作——即Go用于渲染HTML的工具、網(wǎng)絡(luò)庫、國際化功能以及作為單個可以再分發(fā)的平臺原生二進制文件加以部署的功能。Go的所有這些功能使Hugo易于拆包、運行、用于快速構(gòu)建網(wǎng)站。
Terraform
HashiCorp由Vagrant(基于Ruby的開發(fā)環(huán)境管理工具)的開發(fā)者創(chuàng)辦,它充分利用Go的速度和功能來構(gòu)建更龐大更宏偉的項目:Terraform,該系統(tǒng)用于通過定義文件變成代碼在本地或云端構(gòu)建IT基礎(chǔ)架構(gòu)。你所做的任何更改可以前滾或后滾,而且在調(diào)用代碼之前可以獲得到底會發(fā)生什么情況的完整摘要(即執(zhí)行計劃)。
CockroachDB
Go用于構(gòu)建多種分布式云原生應(yīng)用程序。CockroachDB以彈性聞名,這種分布式數(shù)據(jù)庫旨在承受各種各樣的災(zāi)難(甚至是數(shù)據(jù)中心故障),又繼續(xù)響應(yīng)你的SQL查詢。 CockroachDB完全是用Go編寫的,只針對源自前一個項目RocksDB的性能密集型核心功能使用了一小部分C ++代碼。
Gravitational Teleport
Go已成為許多網(wǎng)絡(luò)項目以及基于它們的下游項目的默認語言。一個典型的例子是:用Go實現(xiàn)的SSH本身很有用,充當(dāng)Gravitational Teleport等項目的基礎(chǔ)。Gravitational Teleport讓用戶可以通過外殼(shell)安全地訪問服務(wù)器。它通過單點登錄來執(zhí)行安全,但又不需要這種事務(wù)通常需要的那種管理開銷(比如密鑰管理和輪換)。
原文標題:10 open source projects proving the power of Google Go,作者:Serdar Yegulalp
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】