1. 程式人生 > >【譯】gRPC的服務配置

【譯】gRPC的服務配置

false IT load 用戶 com 大於 例如 相關 dev

原文地址:https://github.com/grpc/grpc/blob/master/doc/service_config.md

gRPC的服務配置


目標


服務配置是一種允許服務擁有者去發布參數以自動的被所有對應的客戶端使用的機制。

格式


服務配置是一個如下格式的JSON字符串:

{
  // 負載均衡策略名 (不區分大小寫).
  // 目前,客戶端側gRPC提供的唯一可用的是‘輪詢調度‘,但是第三方可能會添加他們自己的策略。
  // 這個字段是可選的;如果沒設置,默認的行為是獲取第一個可用的後臺服務。
  // 如果已經通過客戶端的API設置了策略名,那麽那個值會覆蓋此值。
  //
  // 註意如果解析器返回至少一個均衡器地址(與後臺地址相反),gRPC會使用grpclb(查看這裏),
// 而不管這裏或通過客戶端API請求的負載均衡策略。
‘loadBalancingPolicy‘: string, // 單方法配置。可選。 ‘methodConfig‘: [ { // 當前方法配置應用的方法名。必須至少有一個方法名。
// 每個名稱必須在整個服務配置中是獨一無二的。如果方法字段為空,
// 那麽這個方法配置指定指定服務的所有方法的默認值。
// // 例如,加入服務配置包含如下方法配置: // // ‘methodConfig‘: [ // { ‘name‘: [ { ‘service‘: ‘MyService‘ } ] ... }, //
{ ‘name‘: [ { ‘service‘: ‘MyService‘, ‘method‘: ‘Foo‘ } ] ... } // ] // // 對於一個MyService/Foo的請求,我們將使用第二個配置,因為它最匹配服務和方法名。 // 對於一個MyService/Bar的請求,我們將使用第一個配置,因為它提供對於MyServer的額所有方法的默認值。 ‘name‘: [ { // RPC服務名。必須。 // 如果使用包含protobuf的gRPC作為接口描述語言(IDL),
// 那麽這將是一種"pkg.service_name"的格式,其中"pkg"是包名。
// 定義在proto文件中。 ‘service‘: string, // RPC方法名。可選(查看上面)。 ‘method‘: string, } ], // RPCs發送到此方法時是否等待直到連接準備好的默認值。
// 如果為false,RPC會在連接服務器失敗的瞬間立即中止。
// 否則,gRPC將會嘗試連接直到達到最後期限。
// // 通過gRPC客戶端API指定的這個值將會覆蓋在此配置的值。
    // 然而,註意在客戶端API配置的值同樣會在名稱解析過程中遇到瞬間的錯誤。
‘waitForReady‘: bool, // PRCs發送到此方法的默認超時時間(秒)。這個可以在代碼中重寫。
// 如果在指定的這段時間內沒有收到回復,
// 請求中止並且一個到達最後期限的錯誤狀態碼返回給調用者。
// // 使用的實際的最後期限值會是在這裏指定的值和通過gRPC客戶端API設置給應用程序的值的最小值。
// 如果其中一個沒設置,那麽將會使用另外一個。
// 如果都沒設置,那麽請求將沒有最後期限。
// // 這個值的格式是定義在 // https://developers.google.com/protocol-buffers/docs/proto3#json
// 的‘Duration‘類型
‘timeout‘: string, // 對於一個單獨的請求最大允許的有效載荷或對象流的字節大小(客戶端->服務端)。
// 這個大小是以序列化非壓縮的有效載荷的字節數度量。這個應用於流和非流的請求。
// // 使用的實際值是在此指定的值和通過gRPC客戶端API設置給應用程序的值的最小值。 // 如果其中一個沒設置,那麽將會使用另外一個。 // 如果都沒設置,那麽請求將沒有最後期限。 // // 如果一個客戶端嘗試發送一個大於當前值的對象,
// 它將不會發送並且客戶端會看到一個錯誤。
// 註意0是一個有效值,意味著請求消息必須為空。 ‘maxRequestMessageBytes‘: number, // 對於一個單獨的響應最大允許的有效載荷或對象流的字節大小(客戶端->服務端)。 // 這個大小是以序列化費壓縮的有效載荷的字節數度量,這個應用與流和非流的請求。 // // 使用的實際值是在此指定的值和通過gRPC客戶端API設置給應用程序的值的最小值。 // 如果其中一個沒設置,那麽將會使用另外一個。
// 如果都沒設置,那麽內置的默認值將會被使用。
// // 服務一個服務器嘗試發送一個大於當前值的對象,
// 它將不會被發送並且客戶端將會看到一個錯誤。
// 註意0是一個有效值,意味著響應消息必須為空。 ‘maxResponseMessageBytes‘: number } ] }

註意新的每個方法的參數可能會在新的功能介紹時被添加。

架構


一個服務配置與服務名相關。名稱解析插件,當被請求解析一個部分的服務名,將會返回解析的地址列表和服務配置。

TODO(roth): 設計服務配置將會如何在DNS裏編碼。

APIs


服務配置用於如下的API:

  • 在解析API,被解析器插件用於返回服務配置給gRPC客戶端。
  • 在gRPC客戶端API,用戶可以通過查詢通道來獲得和這個通道關聯的配置(用於調試目的)。
  • 在gRPC客戶端API,用戶可以顯式的設置服務配置。意在使用於單元測試。

【譯】gRPC的服務配置