華為雲的Go語言編程的眾多乾貨

2020-12-20 電子發燒友

華為雲的Go語言編程的眾多乾貨

華為云云原生 發表於 2020-12-17 17:59:11

 

近日,國內較權威的Go大會——Gopher China召開,眾多一線網際網路公司的大神們匯聚一堂,深入探討了Go語言並產生了諸多乾貨。其中,華為雲微服務首席架構師田曉亮老師也受邀參與本次大會,以《華為雲的Go語言云原生實戰經驗》為題進行了分享,今天小編整理匯總了田曉亮老師分享中的技術乾貨。

有理論、有實操、有深度、需細品!

2016年華為成立Cloud BU以來,就引入了Go語言編寫的Kubernetes,Prometheus等CNCF項目,華為雲研發團隊也開始用Go語言來構建雲服務。不過,當時Go的生態並不完善,所以要自己從頭到尾編寫基礎能力模塊。那麼,如何用Go構建雲服務並將基礎能力慢慢建立起來,有哪些經驗和方法?且聽我們慢慢道來……

從一個簡單雲應用看如何構築一個雲服務

和Eureka一樣,一個簡單的註冊發現服務Service Center可以通過多種手段來增強。

1.靜態與動態信息定義

減少數據信息量,抽出公共部分統一管理,通過靜態信息來劃分實例組。這樣微服務與微服務實例為1對n的映射,將微服務名、版本、數據中心等信息都抽到了公共部分,通過降低冗餘度,來減少網絡的開銷,同時也規範化了微服務模型。

2.契約化微服務

上一張圖我們看到微服務靜態信息裡面包含了多個Schemas,裡面關聯了微服務所關聯的契約文檔,同樣是1對n的映射關係。通過手動上傳或者代碼自動生成文檔上傳,可以在註冊中心中查看微服務文檔,且文檔與微服務版本綁定,不允許更改。

對比客戶端開發團隊等待後端的服務編寫完成後,才開始進行集成開發的方式。高效方式是以文檔為基準,客戶端與服務端同時開發,客戶端通過Mock去除對服務端的依賴。

為何要保證文檔先行?如果文檔不及時審視,那麼將會出現非常糟糕的情況。比如不一致的命名規範,定義相似的API,擴展能力差,任何一點都會大大增加研發成本。及早審視並規避十分重要,這就是為何註冊中心加入文檔上傳與查詢能力。

3.服務間依賴管理

調用層級過高將引起定位困難、性能下降的問題,合理的層級是3個服務:a->b->c的調用就可以完成一次調用。彼此互相依賴的兩個服務在功能升級或者變更時要花費更多時間來分析影響,比如ab互相依賴,一個新功能涉及2個都要更改,那怎麼一起上線?

簡單的依賴有助於系統測試和分析,這給架構師一個很好的審視方式,可以及時看到微服務間的依賴關係,以及時對架構調整。

4.緩存機制

由於Service Center內部本身是不存數據的,一旦etcd出現網絡故障的時候,就會導致Service Center不可用。所以Service Center引入了異步緩存機制,啟動之初,Service Center會與etcd建立一個長連接,也就是watch。為了防止建立watch時間窗發生變化,又做了一層保護,在watch之前做全量的查詢。運行過程中查詢所得到的資源變化會緩存到Service Center本地,然後進行異步的循環。

總的來說,我們通過了多種手段來提升微服務研發效率,減少網絡開銷,並通過異步緩存提升性能。這是華為雲積累的能力,但交付一個雲服務遠遠不止交付業務功能這麼簡單,還要考慮微服務的安全、韌性、隱私、可運維等能力。

我們剛才看到的只是水面之上的冰山,水面之下還隱藏著大量的基礎能力需要編寫。真的要達成微服務架構模式的願景,需要繁重的工作量。就像冰山那樣,我們要將通用能力沉澱下去,能夠復用。如果讓各個業務團隊同時照顧冰山上下,各自開發各自的,那結果將是災難性的,企業用人成本極高,下面讓我們展開Service Center的架構看看。

立足Service Center架構,

「冰山下」的基礎能力庫編寫很重要

下面這個組件主要負責微服務的註冊發現,提供Restful API。

它有四個主要的模塊:

服務註冊發現:通過註冊發現完成服務拓撲的感知;

契約發現:每個服務具備一個契約記錄,支持多種格式如Open API,gRPC proto;

RBAC:基於角色的訪問控制,管理員可以管理帳號,將帳號分發給微服務或者不同人員;

服務治理:針對微服務下發治理規則,比如重試,限流,熔斷,路由策略等。

交付一個雲服務遠遠不止交付業務功能,而是要去全方面的考慮安全,韌性,隱私,可運維等能力,當然我們將部分的能力可以交給一些中間件來完成,比如網關。然而仍有大量功能需要自己編寫,且可以復用在每個微服務中,這就是基礎能力庫編寫的初衷。

配額管理:雲資源按照租戶進行配額管理,租戶所能使用的資源受到嚴格限制

告警:當微服務發生關鍵問題時要直接上報告警系統,而非通過雲服務設置閾值等告警策略

安全:加解密證書,密碼

ID生成:ID的生成算法,用於生成微服務ID,實例ID等

多種中間件:調用過程需要被審計,調用鏈追蹤,生成指標監控等

該項目已經開源並捐獻給Apache,項目地址:

https://github.com/apache/servicecomb-service-center 

對於這些能力,抽取普通的庫函數也是完全不夠用的,所以要做到如下能力:

可插拔:也就是按需在編譯期引入(受限於Go語言能力),例如配額系統的具體實現在社區是不需要的。

異構系統:也就是一個功能要有多種具體實現,比如審計,公有雲存在一套審計系統需要對接,而社區則是本地日誌列印。

不同的算法:解密工具、ID生成器……面對不同的交付場景或安全要求,都要通過不同實現來替換算法。比如ID生成可以是snowflake、UUID;加解密算法使用AES或者其他公開算法。

如何通過Go Chassis加速雲服務開發?

為了滿足上面提到的需求多樣性,並且讓所有新規劃的組件受益、快速進行開發,我們需要統一的框架和標準來加速開發,這就是華為雲用Go語言編寫的開發框架Go Chassis誕生的原因。所以大家看可以看到go chassis的源碼和設計有著service center代碼的影子。

責任編輯:xj

原文標題:掀開華為雲的Go語言編程底座!有深度、有點難、需細品

文章出處:【微信公眾號:華為開發者社區】歡迎添加關注!文章轉載請註明出處。

 

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 華為雲的Go語言云原生實戰經驗:建立雲原生應用開發基礎能力
    摘要:華為雲的Go語言編程底座是如何煉成的?Gopher China作為國內最權威和最實力乾貨的Go大會,致力於為廣大的Gopher提供一線分享交流機會,也為眾多一線網際網路公司大咖深入探討Go語言的應用發展提供契機。
  • 華為在開發自主程式語言嗎?
    華為疑似正在研發自主程式語言「倉頡」,傳言領頭人是曾獲得2019PLDI最佳論文獎的南京大學的計算機科學與技術系博士生導師馮新宇,馮新宇教授畢業於南京大學計算機科學專業,此後去耶魯大學攻讀計算機科學博士,在AT&T實驗室實習過一段時間。
  • 為什麼很多公司轉型 Go 語言開發?Go 語言能做什麼
    2、Go語言能做什麼Go 語言從發布 1.0 版本以來備受眾多開發者關注並得到廣泛使用,Go 語言的簡單、高效、並發特性吸引了眾多傳統語言開發者的加入,而且人數越來越多。鑑於Go語言的特點和設計的初衷,Go語言作為伺服器程式語言,很適合處理日誌、數據打包、虛擬機處理、文件系統、分布式系統、資料庫代理等;網絡編程方面,Go語言廣泛應用於Web 應用、API應用、下載應用等;除此之外,Go語言還適用於內存資料庫和雲平臺領域,目前國外很多雲平臺都是採用Go開發。
  • 華為自主研發程式語言,對IT行業意味著什麼?
    所以在華為發布鴻蒙2.0的時候,餘承東就說「中國科技行業枝繁葉茂,但是沒有根……鴻蒙邁出了第一步,讓中國科技的未來繁榮可持續,真正的枝繁葉茂。」而網傳華為自研程式語言「倉頡」的曝光,正是國內科技紮根的表現,因為一旦有屬於自研的程式語言,就意味著中國在軟體方面有了真正意義上的根。
  • 百校聯動,華為雲舉辦首屆HERO高校聯盟學生知識峰會
    近日,華為雲舉辦首屆HERO高校聯盟學生知識峰會,百餘所高校近二十萬高校開發者,通過華為雲直播間、B站、虎牙等渠道在線觀看,參與線上互動,體驗華為雲產品,學習乾貨課程,參與技術實踐。
  • 大話go 語言:談談 go 語言的類型系統
    引言:最近地鐵上沒事,準備花一點時間研究下 go 語言,分兩節來分享,這節首選『類型系統』因為我覺得類型系統是一門語言之核心。五年前,曾被面試官面試到 C 和 C++的區別。其中有被問到如何用 C 語言實現面向對象編程。
  • [GO語言基礎] 一.為什麼我要學習Golang以及GO語言入門普及
    後續會結合網絡安全進行GO語言實戰深入,加油~這些年我學過各種程式語言,從最早的C語言到C++,再到VB、C#、PHP、JAVA,再到IOS開發、Python,到最新的GO語言,學得是真的雜。有時候覺得程式語言恰恰是最簡單的,而通過一門程式語言能夠解決實際問題或深入底層才是其價值所在,並且當我們學好一門程式語言後,其他程式語言都非常類似,殊途同歸,學起來也很迅速。
  • 乾貨 | Go/Python/Erlang程式語言對比分析及示例
    Go/Python/Erlang語言特性對比 如《 程式語言與範式 》一文所說,不管語言如何層出不窮,所有語言的設計離不開2個基本面:控制流和數據類型。Go語言中面向對象編程的核心是組合和方法(function)。組合很類似於C語言的struct結構體的組合方式,方法類似於Java的接口(Interface),但是使用方法上與對象更加解耦,減少了對對象內部的侵入。Erlang 則不支持面對對象編程範式,相比而言,Python對面對對象範式的支持最為全面。
  • 哪種程式語言好?大神為你分析 Go、Java、C、C++ 等主流程式語言
    在論述的過程中會結合華為各語言編程專家和華為電信軟體內部的骨幹開發人員的交流,摒棄語言偏好或者語言教派之爭,儘量以客觀公正的角度來論述下各個語言的特點和不足,對語言選型作為一個客觀的參考。把這些寫出來,期望得到大家的指正與反饋,讓整個分析更客觀,性能方面,著重對 Go 做深入剖析參考。內容很多,期望不會讓你望而卻步。
  • 快速轉型golang(go語言)web開發 01系列概覽
    為什麼要出這個快速轉型go語言的系列?因為現在go語言在國內實在是太火了……火,就意味著有錢途^_^(是的你沒看錯,就是你想的那個錢途)Go在國內到底有多火?現在市面上的大廠:華為、阿里巴巴、騰訊、百度、拼多多、京東、字節跳動、小米、美團、滴滴、360……已經沒有不用go語言的了……但是……go火爆速度遠大於市場上go工程師的供給速度,面對市面上大量go語言的崗位需求和明朗的就業前景,必定會有很多朋友有快速轉型的需求……而且……現在市面上好多go語言的視頻教程都是時長動不動就幾十個小時
  • 最理想的語言之一:GO為何如此與眾不同?
    · Go是獨立運行的,卻又是眾多實例。· Go是一種語言,但也是一種理念。現在我們就來深入探討一下這些觀點。創建背景要想充分理解Golang的本質,需要深入了解其創建背景。該語言是由編寫、閱讀、調試和維護大型軟體系統的人所設計,這也是為他們自己所設計的。」這就是說,設計Go時,有一系列特殊的問題要解決,最初擁有C、Pascal、Modula和Oberon等高級程式語言的最佳特性的堅實基礎。它還牢記了Python、C++、Java等語言的有用特性,這些就是Go要解決的問題。
  • GO語言入門(第一個go程序)
    語言的特性Go 語言從本質上(程序和結構方面)來實現並發編程。因為 Go 語言沒有類和繼承的概念,所以它和 Java 或 C++ 看起來並不相同。但是它通過接口(interface)的概念來實現多態性。
  • 大神為你分析 Go、Java、C 等主流程式語言
    在論述的過程中會結合華為各語言編程專家和華為電信軟體內部的骨幹開發人員的交流,摒棄語言偏好或者語言教派之爭,儘量以客觀公正的角度來論述下各個語言的特點和不足,對語言選型作為一個客觀的參考。把這些寫出來,期望得到大家的指正與反饋,讓整個分析更客觀,性能方面,著重對 Go 做深入剖析參考。內容很多,期望不會讓你望而卻步。
  • 【SDCC 2015現場】程式語言論壇(上):C++、PHP、Go熱點和新玩法
    今年是第七屆,大會為期三天,除了陣容強大的全體大會外,主辦方還精心籌備了九大技術專場論壇,包括:架構實踐論壇、前端開發論壇、資料庫實戰論壇、研發管理論壇、安全技術論壇、算法實戰論壇、程式語言論壇、產品與設計論壇、微信開發論壇。此外,還有五場特色活動及展覽展示。
  • 2017年1月程式語言排行榜:Go是年度程式語言
    (點擊上方藍字,可快速關注我們)TIOBE 最近公布了2017年1月程式語言指數排行榜,排名前三的還是 Java、C、C++, C# 和 Python
  • 解讀Go語言的2020:變革前夜
    Go 語言可謂是經歷了諸多風風雨雨,持續地在各種好評和詬病之間砥礪前行,既得意過也失意過。 下圖展現了 TIOBE Index(著名程式語言排行榜)對 Go 語言使用情況的最新統計。
  • 中文自然語言處理雲平臺 訊飛語言云
    2014年11月28日,由科大訊飛和哈爾濱工業大學聯合推出的全球首個中文自然語言處理雲服務平臺「哈工大訊飛語言云」正式發布。作為科大訊飛現有智能語音交互技術服務平臺--「訊飛語音雲」的重要拓展,該「語言云」將與「語音雲」一起為廣大網際網路及移動網際網路的開發者提供從語音到語言的全面的、頂級的、一站式的核心技術服務支撐。
  • 華為雲DevCloud為開發者提供全雲化的開發體驗
    在HUAWEI CONNECT 2019期間,在華為云云服務開發者分論壇上,華為雲布道師做了《CloudIDE:開發者的高效、智能的可信開發環境》專題演講,主要介紹了華為雲DevCloud的CloudIDE服務,雲端集成開發的環境作為華為雲的開發者入口
  • 2021年程式語言趨勢預測:Python和JavaScript仍火熱,Go不可小覷
    程式語言及框架似乎總是被人拿來比較,這裡我們只談語言。作為開發人員,在當今這個技術更迭飛快的時代要連年吃香並非易事,很多十年開發經驗以上的開發人員不知道經歷了多少語言的變化,今年還在用C語言,下一年就是D了。「PHP是世界上最好的程式語言」已被人忘卻,但「青春飯」和35歲「金龍躍魚門」的傳說確真實發生。
  • 計算機程式語言的發展簡史,人工智慧與雲計算程式語言!
    學習一兩門計算機程式語言也如當初學習英文一樣的火熱,隨著人工智慧AI和雲計算的不斷發展,Python語言和Scala語言已經成為這兩個領域裡面最為火熱的程式語言了,可以預知未來學習計算機程式語言的人也一樣會如同學習英文一樣的成為一種新常態,並且成為一種穩定的常態。以下筆者將以自己的學習認知,簡單的闡述一下計算機程式語言的發展。