【譯】gRPC的服務配置

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

gRPC的服務配置


目標


服務配置是一種容許服務擁有者去發佈參數以自動的被全部對應的客戶端使用的機制。git

格式


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

{
  // 負載均衡策略名 (不區分大小寫).
  // 目前,客戶端側gRPC提供的惟一可用的是'round_robin'(輪詢調度),可是第三方可能會添加他們本身的策略。
  // 這個字段是可選的;若是沒設置,默認的行爲是獲取第一個可用的後臺服務。
  // 若是已經經過客戶端的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 } ] }

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

架構


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

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

APIs


服務配置用於以下的API:負載均衡

  • 在解析API,被解析器插件用於返回服務配置給gRPC客戶端。
  • 在gRPC客戶端API,用戶能夠經過查詢通道來得到和這個通道關聯的配置(用於調試目的)。
  • 在gRPC客戶端API,用戶能夠顯式的設置服務配置。意在使用於單元測試。
相關文章
相關標籤/搜索