码迷,mamicode.com
首页 > 其他好文 > 详细

国际网络环境对库的影响

时间:2017-09-24 10:44:13      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:需要   问题   line   掉线   依次   space   bsp   机房   情况   

 

国际网络环境可以理解为延迟很大、经常掉线、丢包的环境,和跨机房环境是一样的,不过,前者掉线严重,延迟更大,比如德国来回一般有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机制。

 

国际网络环境对库的影响

标签:需要   问题   line   掉线   依次   space   bsp   机房   情况   

原文地址:http://www.cnblogs.com/dearplain/p/7586216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!