爲何不少公司都轉型go語言開發?Go語言能作什麼

1、咱們爲何選擇Go語言

選擇Go語言的緣由可能會有不少,關於Go語言的特性、優點等,咱們在以前的文檔中也已經介紹了不少了。可是最主要的緣由,應該是基於如下兩方面的考慮:前端

  1. 執行性能git

    縮短API的響應時長,解決批量請求訪問超時的問題。在Uwork的業務場景下,一次API批量請求,每每會涉及對另外接口服務的屢次調用,而在以前的PHP實現模式下,要作到並行調用是很是困難的,串行處理卻不能從根本上提升處理性能。而GO語言不同,經過協程能夠方便的實現API的並行處理,達處處理效率的最大化。 依賴Golang的高性能HTTP Server,提高系統吞吐能力,由PHP的數百級別提高到數千裏甚至過萬級別。github

  2. 開發效率golang

    GO語言使用起來簡單、代碼描述效率高、編碼規範統1、上手快。 經過少許的代碼,便可實現框架的標準化,並以統一的規範快速構建API業務邏輯。 能快速的構建各類通用組件和公共類庫,進一步提高開發效率,實現特定場景下的功能量產。redis

2、Go語言能作什麼

Go 語言從發佈 1.0 版本以來備受衆多開發者關注並獲得普遍使用,Go 語言的簡單、高效、併發特性吸引了衆多傳統語言開發者的加入,並且人數愈來愈多。docker

鑑於Go語言的特色和設計的初衷,Go語言做爲服務器編程語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分佈式系統、數據庫代理等;網絡編程方面,Go語言普遍應用於Web 應用、API應用、下載應用等;除此以外,Go語言還適用於內存數據庫和雲平臺領域,目前國外不少雲平臺都是採用Go開發。數據庫

  • 服務器編程,之前你若是使用C或者C++作的那些事情,用Go來作很合適,例如處理日誌、數據打包、虛擬機處理、文件系統等。編程

  • 分佈式系統、數據庫代理器、中間件等,例如Etcd。後端

  • 網絡編程,這一塊目前應用最廣,包括Web應用、API應用、下載應用,並且Go內置的net/http包基本上把咱們日常用到的網絡功能都實現了。七牛雲存儲

  • 數據庫操做

  • 開發雲平臺,目前國外不少雲平臺在採用Go開發

3、國內外有哪些企業或項目使用Go語言

Go發佈以後,不少公司特別是雲計算公司開始用Go重構他們的基礎架構,不少都是直接採用Go進行了開發,最近熱火朝天的Docker就是採用Go開發的。

使用 Go 語言開發的開源項目很是多。早期的 Go 語言開源項目只是經過 Go 語言與傳統項目進行C語言庫綁定實現,例如 Qt、Sqlite 等;後期的不少項目都使用 Go 語言進行從新原生實現,這個過程相對於其餘語言要簡單一些,這也促成了大量使用 Go 語言原生開發項目的出現。

採用Go的一些國外公司,如Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、Dropbox、MongoDB、AWS等公司;

採用Go開發的國內企業:如阿里雲CDN、百度、小米、七牛、PingCAP、華爲、金山軟件、獵豹移動、餓了麼等公司。

Docker

Docker 是一種操做系統層面的虛擬化技術,能夠在操做系統和應用程序之間進行隔離,也能夠稱之爲容器。Docker 能夠在一臺物理服務器上快速運行一個或多個實例。基於lxc的一個虛擬打包工具,可以實現PAAS平臺的組建。例如,啓動一個 CentOS 操做系統,並在其內部命令行執行指令後結束,整個過程就像本身在操做系統同樣高效。

項目連接:

https://github.com/docker/docker

go語言

Go 語言本身的早期源碼使用C語言和彙編語言寫成。從 Go 1.5 版本後,徹底使用 Go 語言自身進行編寫。Go 語言的源碼對了解 Go 語言的底層調度有極大的參考意義,建議但願對 Go 語言有深刻了解的讀者讀一讀。

項目連接:

https://github.com/golang/go

Kubernetes

Google 公司開發的構建於 Docker 之上的容器調度服務,用戶能夠經過 Kubernetes 集羣進行雲端容器集羣管理。

項目連接:

https://github.com/kubernetes/kubernetes

etcd

一款分佈式、可靠的 KV 存儲系統,能夠快速進行雲配置。

項目連接:

https://github.com/coreos/etcd

beego

beego 是一個相似 Python的 Tornado 框架,採用了 RESTFul 的設計思路,使用 Go 語言編寫的一個極輕量級、高可伸縮性和高性能的 Web 應用框架。

項目連接:

https://github.com/astaxie/beego

martini

一款快速構建模塊化的 Web 應用的 Web 框架。

項目連接:

https://github.com/go-martini/martini

codis

國產的優秀分佈式 Redis 解決方案。

項目連接:

https://github.com/CodisLabs/codis

delve

Go語言

強大的調試器,被不少集成環境和編輯器整合。

項目連接:

https://github.com/derekparker/delve

Facebook

Facebook也在用,爲此他們還專門在Github上創建了一個開源組織facebookgo,你們能夠經過https://github.com/facebookgo訪問查看facebook開源的項目,好比著名的是平滑升級的grace。

Uber

騰訊

騰訊做爲國內的大公司,仍是勇於嘗試的,尤爲是Docker容器化這一塊,他們在15年已經作了docker萬臺規模的實踐,具體能夠參考http://www.infoq.com/cn/articles/tencent-millions-scale-docker-application-practice

百度

目前所知的百度的使用是在運維這邊,是百度運維的一個BFE項目,負責前端流量的接入。他們的負責人在2016年有分享,你們能夠看下這個 http://www.infoq.com/cn/presentations/application-of-golang-in-baidu-frontend

其次就是百度的消息系統。負責公司手百消息通信系統服務器端開發及維護。

京東

京東雲消息推送系統、雲存儲,以及京東商城等都有使用Go作開發。

小米

小米對Golang的支持,莫過於運維監控系統的開源,也就是 http://open-falcon.com/

此外,小米互娛、小米商城、小米視頻、小米生態鏈等團隊都在使用Golang。

360

360對Golang的使用也很多,一個是開源的日誌搜索系統Poseidon,託管在Github上,https://github.com/Qihoo360/poseidon.

還有360的推送團隊也在使用,他們還寫了篇博文在Golang的官方博客上 https://blog.golang.org/qihoo

七牛雲

七牛雲用了近50萬行代碼,來實現整個產品。七牛雲存儲產品網址:http://qiniu.com/。上線時間:2011-9-1。應用範圍:整個產品(包括基礎服務、Web端、統計平臺、各種小工具等等)Go代碼行數佔比:99.9%日 PV:保密

美團

美團後臺流量支撐程序。應用範圍:支撐主站後臺流量(排序,推薦,搜索等),提供負載均衡,cache,容錯,按條件分流,統計運行指標(qps,latency)等功能。

滴滴

基礎服務平臺。

###金山微看

應用範圍:服務接口,後臺流程服務,消息系統,圖片系統

搜狗

搜狗推送系統。Push系統中用於維持與客戶端鏈接的部分。

QOR - 模塊化的電商系統

weico

產品名:weico 3.0, 服務端全部代碼都是用Go實現。

仙俠道

快玩遊戲

盛大雲CDN

  • 網址:盛大雲計算

  • 應用範圍:CDN的調度系統、分發系統、監控系統、短域名服務,CDN內部開放平臺、運營報表系統以及其餘一些小工具等

Bmob移動後端雲服務平臺

  • 產品網址:Bmob移動後端雲服務平臺

  • 應用範圍:Restful API(使用Beego)、統計分析平臺、經常使用服務如發郵件、隊列異步處理、統計用戶空間和接口請求

羣策

BiddingX DSP廣告投放系統

  • 網址:BiddingX_專業的DSP解決方案供應商

  • 應用範圍:競價投放、曝光統計、點擊跳轉

街坊四鄰

  • 網址:首頁 - 街坊四鄰

  • 應用範圍:後臺服務

Leanote

  • 網址:Leanote

Bearychat

  • 網址:BearyChat

宅豆

  • 網址:宅豆網 - 自築最美家,宅豆隨你搭

白板- 設計圖討論工具

  • 網址:白板

實驗樓

  • 網址:實驗樓 - 第一家以實驗爲核心的IT在線教育平臺

新浪微博

中間件和彈性調度用 Java 和 Go 編寫,微博視頻轉碼及存儲服務用 Go 編寫。

愛奇藝

VR 後臺系統中間件,VR 端的 HTTP 接口。

獵豹移動

消息推送

網易

網易蜂巢容器公有云。

嗶哩嗶哩

彈幕

巨人網絡

部分手機遊戲的服務端。

今日頭條

Nsq:Nsq 是由Go語言開發的高性能、高可用消息隊列系統,性能很是高,天天能處理數十億條的消息;

Packer:用來生成不一樣平臺的鏡像文件,例如VM、vbox、AWS等,做者是vagrant的做者

Skynet:分佈式調度框架

Doozer:分佈式同步工具,相似ZooKeeper

Heka:mazila開源的日誌處理系統

Cbfs:couchbase開源的分佈式文件系統

Tsuru:開源的PAAS平臺,和SAE實現的功能如出一轍

Groupcache:memcahe做者寫的用於Google下載系統的緩存系統

God:相似redis的緩存系統,可是支持分佈式和擴展性

Gor:網絡流量抓包和重放工具

還有不少,好比阿里中間件、聚美優品、高升控股、探探、鬥魚直播、人人車、亞信、Udesk、方付通、招財貓、三一集團、美餐網等。通常的選擇,都是選擇用於本身公司合適的產品系統來作,好比消息推送的、監控的、容器的等,Golang特別適合作網絡併發的服務,這是他的強項,因此也是被優先用於這些項目。Go語言做爲一門大型項目開發語言,在不少大公司相繼使用,甚至徹底轉向Go開發。

4、寫在最後

固然,一個技術能不能發展起來,關鍵還要看三點。

  • 有沒有一個比較好的社區。像 C、C++、Java、Python 和 JavaScript 的生態圈都是很是豐富和火爆的。尤爲是有不少商業機構參與的社區那就更爲人氣爆棚了,好比 Linux 的社區。

  • 有沒有一個工業化的標準。像 C、C++、Java 都是有標準化組織的。尤爲是 Java,其在架構上還搞出了像 J2EE 這樣的企業級標準。

  • 有沒有一個或多個殺手級應用。C、C++ 和 Java 的殺手級應用不用多說了,就算是對於 PHP 這樣還不能算是一個好的編程語言來講,由於是 Linux 時代的第一個殺手級解決方案 LAMP 中的關鍵技術,因此,也發展起來了。

上述的這三點是很是關鍵的,新的技術只須要佔到其中一到兩點就已經很不錯了,況且有的技術,好比 Java,是三點全佔到了,因此,Java 的發展是如此好。固然,除了上面這三點重要的,還有一些其它的影響因素,好比:

  • 學習曲線是否低,上手是否快。這點很是重要,C++ 在這點上越作越很差了。

  • 有沒有一個不錯的提升開發效率的開發框架。如:Java 的 Spring 框架,C++ 的 STL 等。

  • 是否有一個或多個巨型的技術公司做爲後盾。如:Java 和 Linux 後面的 IBM、Sun……

  • 有沒有解決軟件開發中的痛點。如:Java 解決了 C 和 C++ 的內存管理問題。

用這些標尺來量一下 Go 語言,咱們能夠清楚地看到:

  • Go 語言容易上手;

  • Go 語言解決了併發編程和寫底層應用開發效率的痛點;

  • Go 語言有 Google 這個世界一流的技術公司在後面;

  • Go 語言的殺手級應用是 Docker,而 Docker 的生態圈在這幾年徹底爆棚了。

因此,Go 語言的將來是不可限量的。固然,我我的以爲,Go 可能會吞食不少 C、C++、Java 的項目。不過,Go 語言所吞食主要的項目應該是中間層的項目,既不是很是底層也不會是業務層。

也就是說,Go 語言不會吞食底層到 C 和 C++ 那個級別的,也不會吞食到高層如 Java 業務層的項目。Go 語言能吞食的必定是 PaaS 上的項目,好比一些消息緩存中間件、服務發現、服務代理、控制系統、Agent、日誌收集等等,沒有複雜的業務場景,也到不了特別底層(如操做系統)的中間平臺層的軟件項目或工具。而 C 和 C++ 會被打到更底層,Java 會被打到更上層的業務層。

好了,咱們再用上面的標尺來量一下 Go 語言的殺手級應用 Docker,你會發現基本是同樣的。

  • Docker 上手很容易。

  • Docker 解決了運維中的環境問題以及服務調度的痛點。

  • Docker 的生態圈中有大公司在後面助力。好比 Google。

  • Docker 產出了工業界標準 OCI。

  • Docker 的社區和生態圈已經出現像 Java 和 Linux 那樣的態勢。

  • ……

因此,雖然幾年前的 Docker ,當時的坑兒還不少,可是,相對於這些大的因素來講,那些小坑兒都不是問題。只是須要一些時間,這些小坑兒在將來 5-10 年就能夠徹底被填平了。

一樣,咱們能夠看到 Kubernetes 做爲服務和容器調度的關鍵技術必定會是最後的贏家。

最後,我還要說一下,爲何要早一點地進入這些新技術,而不是等待這些技術成熟了後再進入。緣由有這麼幾個。

技術的發展過程很是重要。由於你能夠清楚地看到了這種新技術的生態圈發展過程。讓咱們收穫最大的並非這些技術自己,而是一個技術的變遷和行業的發展。

從中,咱們看到了很是具體的各類思潮和思路,這些東西比起 技術自己來講更有價值。由於,這不但讓咱們從新思考已經掌握的技術以及如何更好地解決已有的問題,並且還讓我看到了將來。不但有了技術優點,並且這些知識還讓咱們的技術生涯多了不少的可能性。

這些關鍵新技術,可讓你拿到技術的先機。這些對一個須要技術領導力的我的或公司來講都是很是重要的。

一個公司或是我的可以佔有技術先機,就會比其它公司或我的有更大的影響力。一旦將來行業需求引爆,那麼這個公司或是我的的影響力就會造成一個比較大的護城河,並能夠快速地產生經濟利益。

Go的應用範圍一直在擴大,雲計算,微服務,區塊鏈,哪裏都有用Go寫的重量級項目。docker/kubernetes生態圈,幾百/千萬行代碼,基本統治了雲原生應用市場。去年大熱的區塊鏈,以太坊的geth,比特幣的btcd,閃電網絡的lnd,都是Go語言開發。仍是那句話,多看看各類語言的生態,或許都並無你想象的那麼不堪。。。Go語言設計上確實不夠「先進」,但也是另外一種「務實」。其實go無論在國內仍是國外已經很受待見了,國外google用的不少,uber也在用,國內有著名的今日頭條,每日千億級的訪問妥妥的。多少語言終其一輩子都沒有這麼大的應用場景。

相關文章
相關標籤/搜索