• 国际网络环境对库的影响


    国际网络环境可以理解为延迟很大、经常掉线、丢包的环境,和跨机房环境是一样的,不过,前者掉线严重,延迟更大,比如德国来回一般有300ms,美国有200ms,新加坡一般是90ms。国际网络环境掉包非常严重,有时候可能达到60%以上。

     

    golang标准库RPC

    虽然是表面看是block调用,但是内部的实现不是一应一答,发送一次请求之后并不会等待结果再发送下一次请求,所以效率也是很高的。而且,如果发生网络出错,一定会通知到调用端,调用端只要做多次请求即可。

    问题在于缺少timeout机制,容易在异常断开情况下,产生阻塞很久的错觉。 这个问题可以加个timeout判断,或者进行内部改造:http://daizuozhuo.github.io/golang-rpc-practice/ 。总的来看加个timeout判断更简洁,不需要大改。

    另外应该建立多个rpc连接,一个不行,迅速切换到另一个。

    redis

    redis本身不是阻塞的,你依次发送的请求,redis会依次返回给你,不需要等redis返回才发下一个请求。所以网络延迟很大,效率也不会太低,自己加上处理断开的问题即可。

    不过,很多库的实现是阻塞的,尤其是go的库,写阻塞太容易,结果几乎所有redis库都是阻塞的。这时候在国际网络下要慎用,比如做消息队列。

    rabbitmq

    考虑到异常断开,写到系统缓冲的包可能会发不出去,所以必须开ack和confirm机制。

  • 相关阅读:
    java 类的关系
    Oracle lock table
    shell 标准输出重定向
    pygame 安装
    进程检查机制
    oracle pivot unpivot
    qt paintEvent
    centos7.5+Ambari2.7.3部署安装
    Linux机器间配置ssh互信
    普通视图和物化视图的区别
  • 原文地址:https://www.cnblogs.com/dearplain/p/7586216.html
Copyright © 2020-2023  润新知