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