聊聊 Go 語言與雲原生技術
theme: channing-cyan
持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第 23 天,點擊查看活動詳情
何為雲原生
雲原生(Cloud Native)概念是由 Pivotal 的 Matt Stine 在 2013 年首次提出的。
初探雲原生,總給人一種模稜兩可,不知所云的感覺。但實際上,雲原生有着官方的定義:
根據 雲原生計算基金會 (CNCF,著名的 Linux 基金會的一個子基金會)的説法:
雲原生技術有利於各組織在公有云、私有云和混合雲等新型動態環境中,構建和運行可彈性擴展的應用。雲原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和聲明式 API。
這些技術能夠構建容錯性好、易於管理和便於觀察的鬆耦合系統。結合可靠的自動化手段,雲原生技術使工程師能夠輕鬆地對系統作出頻繁和可預測的重大變更。
這裏我們精煉一下這個定義。
定義: 雲原生軟件是高度分佈式的,必須在不斷變化的環境中運行,並且本身也在不斷變化的應用程序。
也就是説,雲原生技術在面對環境的不確定性、需求的不斷變化下,它們是可擴展的。
雲原生的起源
這一切的根本原因可能都是來自網絡發展帶給的壓力。
- 早期的時候,1950 年代後期大型機計算機的引入。當時,每個程序和數據塊都存儲在一台巨型機器中,用户可以通過愚蠢的終端訪問,而沒有自己的計算能力。所有的邏輯和所有數據都作為一個大的快樂整體生活在一起。
- 隨着廉價網絡連接的 PC 的到來,一切都在 1980 年代發生了變化。與愚蠢的終端不同,PC 可以自己進行一些計算,從而可以將某些應用程序的邏輯卸載到它們上。這種新的多層體系結構(分開的演示邏輯,業務邏輯和數據(圖 1-1))首次可以將網絡應用程序的組件進行修改或替換為獨立於其他的網絡應用程序的組件。
- 在 1990 年代,萬維網的普及和隨後的“互聯網”淘金熱將世界介紹給軟件作為服務(SaaS)。整個行業都是建立在 SaaS 模型上的,推動了更復雜和渴望資源的應用程序的開發,這些應用程序反過來又更加努力地開發,維護和部署。突然間,經典的多層建築已經不夠了。作為迴應,業務邏輯開始分解為可以獨立開發,維護和部署的子組件,並迎來了微服務時代。
- 2006 年,亞馬遜推出了 Amazon Web Services(AWS),其中包括 Elastic Compute Cloud(EC2)服務。儘管 AWS 不是作為服務(IAAS)提供的第一個基礎架構,但它徹底改變了數據存儲和計算資源的按需可用性,從而使雲計算以及快速擴展的能力 - 促進了羣眾的大規模遷移資源進入”雲”。
雲原生軟件的設計是為了預測故障並保持穩定,即使它所運行的基礎設施正在經歷故障或正在發生其他變化。
雲原生目前已經包括了 DevOps(Development 和 Operations 的組合)、持續交付( Continuous Delivery,CD)、微服務( MicroServices )、敏捷基礎設施( Agile Infrastructure )和十二要素( The Twelve-Factor App )等幾大主題。
雲原生特性
雲原生應用程序的設計和構建是為了利用雲提供的規模(scale),彈性(resiliency),適用性(resiliency)和靈活性(flexibility)。
如今複雜應用程序的特點(用户期望連續創新以及無與倫比的響應能力)使業務系統更具戰略性和越來越靈活。雲原生就是要快速響應,同時還保持敏捷。
雲原生應用的好處
雲原生應用(Native cloud applications,NCAs)是為雲計算體系結構設計的程序。他們有很多好處:
- 獨立性:他們的架構使得可以彼此獨立地構建雲原生應用。這意味着您還可以單獨管理和部署它們。
- 彈性:精心設計的雲原生應用即使在基礎架構中斷也能夠生存和在線。
- 基於標準的:對於互操作性和工作負載可移植性,雲原生應用服務通常基於開源和標準技術。這有助於減少供應商的鎖定,並增加可移植性。
- 業務敏捷性:雲原生應用可在整個網絡上啟用靈活的部署選項,並且比傳統應用程序還小,這使得它們更易於開發,部署和迭代。
- 自動化:雲原生應用使用 DevOps 自動化功能,並啟用定期發佈的軟件更改的連續交付和部署。此外,開發人員可以使用諸如 Blue-green deployment 和 Canary Deployment 之類的方法來改進應用程序,而不會破壞用户體驗。
- 零停機時間:由於諸如 Kubernetes 之類的容器編排,您可以通過基本零停機時間部署軟件更新。
Go 在雲原生時代的優勢
Go 雲原生開發有着天然的優勢,雲原生系統需要可擴展、耦合、彈性可管理。Go 的設計就是為雲原生時代構建的語言,簡單高效 、快速編譯、支持現代網絡和多核計算、支持高併發、內存安全,幫助用户專注於解決問題而不是受限於語言的複雜性。
比如以下有名的應用全都是用 Go 實現:
- Docker 建立容器
- Kubernetes 編排
- Prometheus 事件監控
- Consul 服務發現
- Jaeger 端到端分佈式跟蹤
時至今日,Go 已經成為雲原生開發的通用語言,從 Docker 到 Harbor,從 Kubernetes 到 Consul,從 InfluxDB 到 CockroachDB 等大部分是用 Go 編寫的。而且每天都有更多的項目出現。
總結
總而言之,在傳統的應用系統開發過程中,軟件開發商喜歡聚焦在業務系統,專注於系統如何開發、如何閉源成一個獨立的整體系統。
雲原生技術的存在無非是為了能夠利用“雲”(數量)的好處,同時彌補其缺點(缺乏可靠性)。Go 語言很好地兼顧了開發效率和運行速度,不僅提供了高性能的運行時,也降低了大型項目的開發難度。
Go 語言發佈至今已經有十餘年,與雲原生共同發展,有着大量工具和技術支持,熟練掌握 Go 語言之後再學習這些雲原生工具,可能會有別樣的體會。
最後,學習和了解 Go 與雲原生技術,提升知識面,幫助我們更加能抓住行業的機會,時不我待。
參考鏈接:
- 一文帶你瞭解 Python 中的繼承知識點
- 如何使用 HTML 和 CSS 寫一個登錄界面
- 代碼之外:寫作是倒逼成長的最佳方式
- Redis 的快速介紹及其基本數據類型和操作
- 經久不衰的設計定律就是——不要讓我思考的設計
- 一文了解 Python 中的裝飾器
- 聊聊 Go 語言與雲原生技術
- Go Web 編程入門:驗證器
- Golang 的藝術、哲學和科學
- Django API 開發:視圖設置和路由
- Web 編程入門:什麼是Web API?
- Python 實現設計模式之工廠模式
- 好開心我進入了面試環節,那麼我該如何自我介紹?
- 鴻蒙學習筆記:利用鴻蒙JavaUI 框架的 WebView 加載在線網頁
- Go 語言入門很簡單:讀寫鎖