2017-04-19 71 views
1

我對(g)rpc有點新,而且我不太瞭解這個概念。我們在一個Kubernetes集羣中有一組NodeJS服務器,通過grpc相互通信。 rpc接口針對客戶端新貴上的每臺服務器進行設置。gRPC在服務器重啓時丟失連接

我們最近發現,重新啓動服務器後,其客戶端失去與該服務器的連接。也就是說,在該服務器重新啓動之後,以前工作的rpc對服務器的調用不再起作用。直到我們以正確的順序重新啓動服務器,它纔會重新啓動。

我雖然是通過一個地址(主機+端口)告訴客戶端,這裏是一個你可以調用的過程。並且在調用該過程時,地址被調用,在服務器上處理並返回。如果這樣工作,客戶端不會在乎rpc調用之間服務器是否重新啓動了0次或100次。

但是通過上面對客戶端rpc調用失敗/超時的描述,似乎有一個類似於套接字的連接,其中在兩個部分都在運行時建立和維護連接。

它是如何工作的,是否需要對我的客戶端上的rpc服務器執行健康檢查,以便在服務器重新啓動時重新建立接口?

感謝您的時間。

+0

你使用的是什麼版本的gRPC? – murgatroid99

+0

你看到什麼錯誤讓你認爲是這種情況?有時gRPC記錄警告,但保持正常工作。請在問題中更具描述性和具體性,以便人們可以提供幫助。 –

回答

0

https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md表明通道從「transient_failure」進入「連接」(再回到「準備就緒」)最終,但由於指數退避的,這可能需要很長的時間。

https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md描述了一種叫做MAX_BACKOFF的東西,但看起來並不像它已經實現。

如果您使用的gRPC版本包含https://github.com/aisotton/grpc/commit/24e69bf02afb0f4abdd637d1513e93e5aa227e7e,那麼grpc.max_reconnect_backoff_ms可能會限制重新連接嘗試之間的時間。

相關問題