低復(fù)雜度?-?服務(wù)網(wǎng)格的下一站
時(shí)間:2021-11-03 14:17:29
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]譯者:作為一個(gè)曾經(jīng)在新造車公司的基礎(chǔ)架構(gòu)團(tuán)隊(duì)任職,為支持公司的“互聯(lián)網(wǎng)基因”和“數(shù)字化轉(zhuǎn)型”落地了云原生基礎(chǔ)設(shè)施平臺,并在嘗試采用服務(wù)網(wǎng)格未成的我來說,看到這篇文章深有感觸。尤其是文中所說的“人少,問題多,需要快速輸出價(jià)值”,直戳到了痛處。有限的人手有限的時(shí)間,我們需要將大部分精...
譯者:
關(guān)鍵要點(diǎn)
?采用服務(wù)網(wǎng)格有巨大的價(jià)值,但必須以輕量級的方式進(jìn)行,以避免不必要的復(fù)雜性。?在實(shí)施服務(wù)網(wǎng)時(shí),要采取務(wù)實(shí)的方法,與技術(shù)的核心功能保持一致,并小心干擾(譯者:注意力的分散)。?服務(wù)網(wǎng)格的一些核心特性包括標(biāo)準(zhǔn)化監(jiān)控、自動(dòng)加密和身份識別、智能路由、可靠的重試和網(wǎng)絡(luò)可擴(kuò)展性。?服務(wù)網(wǎng)格可以提供強(qiáng)大的功能,但這些功能會(huì)分散本應(yīng)對核心優(yōu)勢的關(guān)注,并且這些功能也不是實(shí)施服務(wù)網(wǎng)格的主要原因。?在初始實(shí)施服務(wù)網(wǎng)格時(shí)沒有必要去關(guān)注那些明顯會(huì)分散注意力的功能,比如復(fù)雜的控制平面、多集群支持、Envoy、WASM 和 A/B 測試。
在工作中學(xué)習(xí)
我進(jìn)入服務(wù)網(wǎng)格的世界始于我在一家老牌的財(cái)富 500 強(qiáng)技術(shù)公司擔(dān)任云計(jì)算架構(gòu)師的角色。在開始我們的服務(wù)網(wǎng)格之旅時(shí),我身邊有許多強(qiáng)大的工程師,但大多數(shù)人幾乎沒有云計(jì)算開發(fā)經(jīng)驗(yàn)。我們的組織誕生于云計(jì)算之前,完全實(shí)現(xiàn)云計(jì)算的價(jià)值需要時(shí)間。我們的傳統(tǒng)業(yè)務(wù)線主要集中在技術(shù)棧的硬件元素上,云計(jì)算的決策最初是由為運(yùn)送硬件或?yàn)樵撚布峁┕碳万?qū)動(dòng)程序而開發(fā)的流程驅(qū)動(dòng)的。
服務(wù)網(wǎng)格的援救
我第一次聽說服務(wù)網(wǎng)格是在 2015 年,當(dāng)時(shí)我正在研究服務(wù)發(fā)現(xiàn)工具并尋找與 Consul 集成的簡單方法。我喜歡將應(yīng)用程序職責(zé)卸載到“sidecar”容器的想法,并找到了一些可以幫助做到這一點(diǎn)的工具。大約在這個(gè)時(shí)候,Docker 有一個(gè)叫做“鏈接”的功能,讓你可以將兩個(gè)應(yīng)用程序放在一個(gè)共享的網(wǎng)絡(luò)空間中,這樣它們就可以通過 localhost 進(jìn)行通信。此功能提供了類似于我們現(xiàn)在在 Kubernetes pod 中所擁有的體驗(yàn):兩個(gè)獨(dú)立構(gòu)建的服務(wù)可以在部署時(shí)進(jìn)行組合以實(shí)現(xiàn)一些附加功能。
核心功能
服務(wù)網(wǎng)格可以提供的核心功能分為四個(gè)關(guān)鍵責(zé)任領(lǐng)域:可觀察性、安全性、連接性和可靠性。這些功能包括:
標(biāo)準(zhǔn)化監(jiān)控
我們?nèi)〉玫淖畲髣倮唬彩亲钊菀撞捎玫?,是?biāo)準(zhǔn)化監(jiān)控。它的運(yùn)營成本非常低,可以適應(yīng)你使用的任何監(jiān)控系統(tǒng)。它使組織能夠捕獲所有 HTTP 或 gRPC 指標(biāo),并以標(biāo)準(zhǔn)方式在整個(gè)系統(tǒng)中存儲它們。這控制了復(fù)雜性并減輕了應(yīng)用程序團(tuán)隊(duì)的負(fù)擔(dān),他們不再需要實(shí)現(xiàn) Prometheus 指標(biāo)端點(diǎn)或標(biāo)準(zhǔn)化日志格式。它還使用戶能夠公正地了解其應(yīng)用程序的黃金信號[2]。
自動(dòng)加密和身份識別
證書管理很難做好。如果一個(gè)組織還沒有在這方面進(jìn)行投入,他們應(yīng)該找到一個(gè)網(wǎng)格來為他們做這件事。證書管理需要維護(hù)具有巨大安全隱患的復(fù)雜基礎(chǔ)設(shè)施代碼。相比之下,網(wǎng)格將能夠與編排系統(tǒng)集成,以了解工作負(fù)載的身份,在需要時(shí)可以用來執(zhí)行策略。這允許提供與 Calico 或 Cilium 等功能強(qiáng)大的 CNI 提供的安全態(tài)勢相當(dāng)或更好的安全態(tài)勢。
智能路由
智能路由是另一個(gè)特性,它使網(wǎng)格能夠在發(fā)送請求時(shí)“做正確的事”。場景包括:
可靠的重試
在分布式系統(tǒng)中重試請求可能很麻煩,但是它幾乎總是需要實(shí)現(xiàn)的。分布式系統(tǒng)通常會(huì)將一個(gè)客戶端請求轉(zhuǎn)換為更多下游請求,這意味著“尾巴”場景的可能性會(huì)大大增加,例如發(fā)生異常失敗的請求。對此最簡單的緩解措施是重試失敗的請求。
網(wǎng)絡(luò)可擴(kuò)展性
也許服務(wù)網(wǎng)格的最佳屬性是它的可擴(kuò)展性。它提供了額外的適應(yīng)性層,以應(yīng)對 IT 下一步投入的任何事情。Sidecar 代理的設(shè)計(jì)模式是另一個(gè)令人興奮和強(qiáng)大的功能,即使它有時(shí)會(huì)被過度宣傳和過度設(shè)計(jì)來做用戶和技術(shù)人員還沒有準(zhǔn)備好的事情。雖然社區(qū)在等著看哪個(gè)服務(wù)網(wǎng)格“生出”,這反映了之前過度炒作的編排戰(zhàn)爭,但未來我們將不可避免地看到更多專門構(gòu)建的網(wǎng)格,并且可能會(huì)有更多的最終用戶構(gòu)建自己的控制平面和代理以滿足他們的場景。
服務(wù)網(wǎng)格干擾
平臺或基礎(chǔ)設(shè)施控制層的價(jià)值怎么強(qiáng)調(diào)都不為過。然而,在服務(wù)網(wǎng)格世界中,我了解到入門的一個(gè)主要的挑戰(zhàn)是,服務(wù)網(wǎng)格解決的核心問題通常甚至不是大多數(shù)服務(wù)網(wǎng)格項(xiàng)目交流的焦點(diǎn)!
強(qiáng)(復(fù))大(雜)的控制平面
要很好地運(yùn)行復(fù)雜的軟件是非常困難的。這就是為什么如此多的組織使用云計(jì)算來使用完全托管的服務(wù)來減輕這一點(diǎn)的原因。那么為什么服務(wù)網(wǎng)格項(xiàng)目會(huì)讓我們負(fù)責(zé)操作如此復(fù)雜的系統(tǒng)呢?系統(tǒng)的復(fù)雜性不是資產(chǎn),而是負(fù)債,但大多數(shù)項(xiàng)目都在吹捧它們的功能集和可配置性。
多集群支持
多集群現(xiàn)在是一個(gè)熱門話題。最終,大多數(shù)團(tuán)隊(duì)將運(yùn)行多個(gè) Kubernetes 集群。但是多集群的主要痛點(diǎn)是你的 Kubernetes 管理的網(wǎng)絡(luò)被切分。服務(wù)網(wǎng)格有助于解決這個(gè) Kubernetes 橫向擴(kuò)展問題,但它最終并沒有帶來任何新的東西。是的,多集群支持是必要的,但它對服務(wù)網(wǎng)格的承諾被過度宣傳了。
Envoy
Envoy 是一個(gè)很棒的工具,但它被作為某種標(biāo)準(zhǔn)介紹,這是有問題的。Envoy 是眾多開箱即用的代理之一,你可以將其作為服務(wù)網(wǎng)格平臺的基礎(chǔ)。但是 Envoy 并沒有什么內(nèi)在的特別之處,使其成為正確的選擇。采用 Envoy 會(huì)給你的組織帶來一系列重要問題,包括:
WASM
我是 Web Assembly (WASM) 的忠實(shí)擁躉,已經(jīng)成功地使用它在 Blazor[3] 中構(gòu)建前端應(yīng)用程序。然而,WASM 作為定制服務(wù)網(wǎng)格代理行為的工具,讓你處于獲得一個(gè)全新的軟件生命周期開銷的境地,這與你現(xiàn)有的軟件生命周期完全正交!如果你的組織還沒有準(zhǔn)備好構(gòu)建、測試、部署、維護(hù)、監(jiān)控、回滾和版本代碼(影響通過其系統(tǒng)運(yùn)行的每個(gè)請求),那么你還沒有準(zhǔn)備好使用 WASM。
A/B 測試
直到為時(shí)已晚,我才意識到 A/B 測試實(shí)際上是一個(gè)應(yīng)用程序級別的問題。在基礎(chǔ)設(shè)施層提供原語來實(shí)現(xiàn)它是很好的,但是沒有簡單的方法來完全自動(dòng)化大多數(shù)組織需要的 A/B 測試水平。通常,應(yīng)用程序需要定義獨(dú)特的指標(biāo)來定義測試的積極信號。如果組織想要在服務(wù)網(wǎng)格級別投入 A/B 測試,那么解決方案需要支持以下內(nèi)容:
我們在哪里結(jié)束
最終,我們面臨的挑戰(zhàn)并不是服務(wù)網(wǎng)格獨(dú)有的。我們工作的組織有一系列限制條件,要求我們對解決的問題以及如何解決問題采取務(wù)實(shí)的態(tài)度。我們面臨的問題包括: