服務配置
服務擁有者如何使用服務配置來控制客戶端行為。
服務配置
服務擁有者如何使用服務配置來控制客戶端行為。
概述
服務配置指定 gRPC 客戶端在與 gRPC 伺服器互動時應如何運作。服務擁有者可以提供服務配置,其中包含所有服務客戶端的預期行為。服務配置中的設定始終適用於特定目標字串(例如「api.myapp.com」),而不是全域。
由服務配置控制的行為
服務配置中的設定會影響客戶端負載平衡、呼叫行為和健康檢查。
此頁面概述服務配置中的選項,但完整的服務配置資料結構已透過 protobuf 定義記錄。
負載平衡
一個服務可以由多個伺服器組成,而負載平衡配置指定來自客戶端的呼叫應如何在這些伺服器之間分佈。預設情況下,使用 pick_first
負載平衡策略,但可以在服務配置中指定其他策略。例如,指定 round_robin
策略將使客戶端輪流使用伺服器,而不是重複使用第一個伺服器。
呼叫行為
RPC 可以透過多種方式配置
- 啟用 wait-for-ready 後,如果客戶端無法連線到後端,RPC 將會延遲,而不是立即失敗。
- 可以提供呼叫逾時,指示客戶端在放棄 RPC 之前應等待的最長時間。
- 以下其中一項
注意
這些呼叫行為設定可以限制為單個服務或方法。
重試和對沖策略可以透過設定重試節流策略進一步調整,但它將適用於所有服務和方法。
健康檢查
可以透過提供健康檢查名稱,將客戶端設定為執行健康檢查。然後,客戶端將使用標準 gRPC 健康檢查服務。
取得服務配置
可以透過名稱解析或由客戶端應用程式以程式設計方式將服務配置提供給客戶端。
名稱解析
gRPC 名稱解析機制允許可插拔的名稱解析器實作。這些實作會傳回與名稱相關聯的位址以及相關聯的服務配置。這是服務擁有者可以將其服務配置分發到大量 gRPC 客戶端機群的機制。
- xDS 名稱解析器會將其從控制平面接收的 xDS 配置轉換為對應的服務配置。
- Go 實作中的標準 DNS 名稱解析器支援儲存在名稱伺服器上的 TXT 記錄中的服務配置。
注意
即使服務配置結構已透過 protobuf 定義記錄,客戶端中的內部表示方式也是 JSON。只要名稱解析器實作在名稱解析時以 JSON 格式提供服務配置資訊,它們就可以自由地以任何他們喜歡的方式儲存服務配置資訊。以程式設計方式
gRPC 客戶端 API 提供了一種以 JSON 格式指定服務配置的方法。這用於提供預設服務配置,該配置將用於名稱解析器未提供服務配置的情況下。在某些測試情況下也可能很有用。
服務配置範例
以下範例執行以下操作
- 啟用
round_robin
負載平衡策略。 - 設定適用於所有服務中所有方法的 1 秒預設呼叫逾時。
- 將該逾時覆寫為
foo
服務中的bar
方法以及baz
服務中的所有方法的 2 秒。
{
"loadBalancingConfig": [ { "round_robin": {} } ],
"methodConfig": [
{
"name": [{}],
"timeout": "1s"
},
{
"name": [
{ "service": "foo", "method": "bar" },
{ "service": "baz" }
],
"timeout": "2s"
}
]
}
上次修改時間為 2024 年 2 月 29 日:使用絕對路徑取代絕對 URL (#1268) (4f733b4)