Linkerd 2:5 分種釐清 Service Mesh 相關術語

為少發表於2021-11-01

API Gateway(API 閘道器)

API gateway 位於應用程式的前面,旨在解決身份驗證和授權、速率限制以及為外部消費者提供公共訪問點等業務問題。
相比之下,service mesh 專注於提供應用程式元件之間的操作(而非業務)邏輯。

Cluster(叢集)

在雲原生環境中,cluster 是一組物理或虛擬機器器,它們構成了容器(container)編排器(如 Kubernetes)可以執行的硬體池。
叢集中的每臺機器通常被稱為一個 nodeclusternode 通常是統一的、可互換的和互連的。

Container(容器)

Container 是應用程式及其依賴項的輕量級包裝,旨在由主機作業系統 (OS) 以隔離方式執行,並嚴格限制資源消耗和對作業系統的訪問。
從這個意義上說,容器是一個原子可執行“單元”,可以由作業系統執行,無需特定於應用程式的設定或配置。

service mesh 環境中,containerDocker 推廣為虛擬機器 (VM) 的輕量級替代品,
虛擬機器 (VM) 具有相似的特徵,但重量要大得多。反過來,container 的興起又催生了 Kubernetescontainer 編排器,
它允許應用程式在打包為 container 時自動跨機器池(稱為 cluster)進行排程。
Kubernetes 的興起催生了 sidecar 部署模型,
它允許像 Linkerd 這樣的 service mesh 以與應用程式解耦的方式提供其功能,
並且不會給運營商帶來嚴重的運營成本。

Control Plane(控制平面)

Service Meshcontrol plane 提供 data plane 執行所需的命令和控制訊號。
control plane 控制 data plane 並提供 operator 用來配置、監控和操作 meshUIAPI

Data Plane(資料平面)

Service Meshdata plane 包括其 sidecar proxy 的部署,
這些代理攔截 mesh 內的應用程式流量。data plane 負責收集指標、觀測流量和應用策略。

Distributed tracing(分散式追蹤)

在基於微服務的系統中,來自客戶端的單個請求通常會觸發跨多個服務的一系列請求。
Distributed tracing 是一種 tracing 的實踐,當這些請求在分散式系統中移動時,
出於效能監視或除錯的原因,跟蹤這些請求。
它通常是通過修改服務以發出跟蹤資訊或“跨度(span)”,並將它們聚合到中央儲存中來實現的。

Egress(出口)

Kubernetes 叢集的上下文中,egress 是指離開叢集的流量。
ingress 流量不同,沒有明確的 Kubernetes 出口資源,預設情況下,egress 流量只是退出叢集。
當需要控制和監控 Kubernetes egress 流量時,它通常在 networking / CNI 層實現,
或者通過新增顯式 egress proxy 來實現。

Enterprise Service Bus(ESB 企業服務匯流排)

ESB 是一種工具和架構模式,它在很大程度上早於現代微服務架構。
ESB 用於管理面向服務架構 (SOA) 中的通訊,
處理從應用程式間通訊、資料轉換、訊息路由和訊息佇列功能的所有內容。
在現代微服務應用程式中,像 Linkerd 這樣的 service mesh 取代了對 ESB 的大部分需求,
並提供了改進的關注點分離和減少 SPOF

Golden Metrics(黃金指標)

Golden metricsGolden signals 是應用程式執行狀況的核心指標。
黃金指標集通常定義為延遲(latency)、流量(traffic volume)、
錯誤率(error rate)和飽和度(saturation)。Linkerd 的黃金指標忽略了飽和度。

Ingress(入口)

Ingress 是在 Kubernetes cluster 中執行並處理從叢集外源進入叢集的流量的特定應用程式。
此流量稱為入口(或偶爾為“北/南”流量)。與通常由 service mesh 中介的叢集內流量相比,
ingress 流量具有一組特定的關注點,因為它通常來自客戶、第三方或其他非應用程式來源。API gateway 通常用作入口。

Init Container(初始化容器)

Init Container 是在 pod 生命週期開始時執行的容器,在應用程式容器啟動之前。
init 容器的典型用例包括重寫網路規則;為應用程式收集 secrets;並從網路位置複製檔案。
例如,Linkerdinit 容器更新網路規則以通過 Linkerd proxy container 引導 pod 的所有 TCP 流量。
init 容器在應用程式容器啟動之前終止。

Latency(延遲)

Latency 是指應用程式做某事所花費的時間(例如,處理請求、填充資料等)。
service mesh 術語中,這是在響應級別上度量的,即通過對應用程式響應請求所花費的時間進行計時。
Latency 的典型特徵是由分佈的幾個百分比來表示,
通常包括 p50(或中位數)、p95(或第 95 個百分比)、p99(或第 99 個百分比),等等。

Linkerd

Linkerd 是第一個 service mesh 和定義術語 “service mesh” 本身的專案。
Linkerd2016 年首次釋出,旨在成為 Kubernetes 生態中最快的、最輕量級的服務網格。
Linkerd 是一個雲原生計算基金會 (CNCF) 畢業專案。

Load balancing(負載均衡)

Load balancing 是在多個等效端點之間分配工作的行為。與許多系統一樣,Kubernetes 在連線級別提供負載平衡。
Linkerd 這樣的 service mesh 通過在請求級別執行負載平衡來改進這一點,這使得它可以考慮各個端點的效能等因素。

請求級別的負載均衡還允許 Linkerd 有效地為使用 gRPC(以及更普遍的 HTTP/2)的系統負載均衡請求,
這些系統通過單個連線多路複用請求—Kubernetes 本身無法有效地對這些系統進行負載均衡,因為通常只有一個曾經建立的連線。

Load balancing 演算法決定哪個端點將為給定的請求提供服務。
最常見的是 “round-robin(迴圈)”,它只是在所有端點上進行迭代。
更高階的平衡演算法包括 “least loaded(最少負載)”,它根據每個端點的未完成請求數分配負載。
Linkerd 本身使用稱為 EWMA(exponentially-weighted moving average 指數加權移動平均)
的複雜延遲感知負載平衡演算法,根據端點延遲分配負載,同時響應各個端點延遲配置檔案的快速變化。

mTLS(雙向 TLS)

Mutual TLS (mTLS) 是一種對兩個端點之間的連線進行身份驗證和加密的方法。
Mutual TLS 只是標準的傳輸層安全 (TLS) 協議,附加限制是必須驗證連線雙方的身份。
(例如,在 Web 瀏覽器中使用 TLS 通常只驗證伺服器的身份,而不是客戶端。)

service mesh 上下文中,mTLS 是驗證連線任一端的服務身份並保持通訊機密的基本機制。
這種身份驗證是策略實施的基礎。

Multi-cluster(多叢集)

Kubernetes 的上下文中,multi-cluster 通常是指 “跨” 多個 Kubernetes 叢集執行應用程式。
Linkerdmulti-cluster 支援提供跨叢集的無縫和安全通訊,
以一種即使在公共 Internet 上也是安全的方式,並且對應用程式本身完全透明。

Observability(可觀測性)

Observability 是從系統生成的資料中瞭解系統執行狀況和效能的能力。
service mesh 的上下文中,可觀測性通常是指 service mesh 可以報告的有關係統的資料。
這包括 "黃金指標"、依賴關係的服務拓撲圖、流量取樣等。

Reliability(可靠性)

Reliability 是衡量系統對故障的響應程度的系統屬性。
系統越可靠,它就越能更好地處理出現故障或降級的單個元件。
對於多服務或微服務應用程式,service mesh 可用於通過將重試和超時等技術
應用於跨服務呼叫、以智慧方式進行負載平衡
在出現錯誤時轉移流量等來提高可靠性。

Service mesh(服務網格)

Service mesh 是一種工具,通過在平臺層而不是應用程式層插入這些功能,
為應用程式新增可觀測性安全性可靠性功能。
Service mesh 是通過新增 sidecar 代理來實現的,這些代理可以攔截應用程式之間的所有流量。
生成的代理集構成了服務網格資料平面,並由服務網格控制平面進行管理。
代理彙集了服務之間的所有通訊,並且是引入 service mesh 功能的載體。

Sidecar Proxy(邊車代理)

Sidecar Proxy 是與 mesh 中的應用程式一起部署的代理。
(在 Kubernetes 中,作為應用程式 pod 中的容器。)sidecar proxy 攔截進出應用程式的網路呼叫,
並負責實現任何控制平面的邏輯或規則。sidecar proxy 共同構成了服務網格的資料平面
Linkerd 使用一個名為 Linkerd2-proxy 的基於 Rustmicro-proxy,該代理專為 service mesh 用例而設計。
Linkerd2-proxyEnvoyNGINX 等通用代理更輕巧且更易於操作。

Success rate(成功率)

Success rate 是指我們的應用程式成功響應請求的百分比。
例如,對於 HTTP 流量,這被衡量為 2xx4xx 響應占總響應的比例。
(請注意,在這種情況下,4xx 被認為是成功的響應—應用程式執行了它的工作—而 5xx 響應被認為是不成功的——應用程式未能響應請求)。
高成功率表明應用程式執行正常。

相關文章