1. 程式人生 > >國際網絡環境對庫的影響

國際網絡環境對庫的影響

conf lang lock bsp 來看 cti http 消息隊列 影響

國際網絡環境可以理解為延遲很大、經常掉線、丟包的環境,和跨機房環境是一樣的,不過,前者掉線嚴重,延遲更大,比如德國來回一般有300ms,美國有200ms,新加坡一般是90ms。

golang標準庫RPC

雖然是表面看是block調用,但是內部的實現不是一應一答,發送一次請求之後並不會等待結果再發送下一次請求,所以效率也是很高的。而且,如果發生網絡出錯,一定會通知到調用端,調用端只要做多次請求即可。

問題在於缺少timeout機制,容易在異常斷開情況下,產生阻塞很久的錯覺。 這個問題可以加個timeout判斷,或者進行內部改造:http://daizuozhuo.github.io/golang-rpc-practice/ 。總的來看加個timeout判斷更簡潔,不需要大改。

另外應該建立多個rpc連接,一個不行,迅速切換到另一個。

redis

redis本身不是阻塞的,你依次發送的請求,redis會依次返回給你,不需要等redis返回才發下一個請求。所以網絡延遲很大,效率也不會太低,自己加上處理斷開的問題即可。

不過,很多庫的實現是阻塞的,尤其是go的庫,寫阻塞太容易,結果幾乎所有redis庫都是阻塞的。這時候在國際網絡下要慎用,比如做消息隊列。

rabbitmq

考慮到異常斷開,寫到系統緩沖的包可能會發不出去,所以必須開ack和confirm機制。

國際網絡環境對庫的影響