国际网络环境对库的影响

Posted Math & Code & Wave

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了国际网络环境对库的影响相关的知识,希望对你有一定的参考价值。

 

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

 

以上是关于国际网络环境对库的影响的主要内容,如果未能解决你的问题,请参考以下文章

数字货币的崛起:对国际货币体系和金融系统的挑战

国际软件设计文档——测试分析报告

2021年网络空间安全国际学术研究交流会(上)参会小计

怎么访问国际网络?怎么才能访问国际网站?

国际专线主要是能解决用户什么问题呢?

使库的方法对外部访问不可见,但对库可见