zoukankan      html  css  js  c++  java
  • SOFA 通信

    私有通信协议设计:

    我们的分布式架构,所需要的内部通信模块,采用了私有协议来设计和研发。

    • 可以有效地利用协议里的各个字段

    • 灵活满足各种通信功能需求:比如 CRC 校验,Server Fail-Fast 机制,自定义序列化器

    • 最大程度满足性能需求:IO 模型与线程模型的灵活运用。

    基础通信功能设计:

    选择一些基础网络编程框架。

    Netty===》把无锁化的设计理念放在第一位,然后针对内存分配,高效的 Queue 队列,高吞吐的超时机制等。

    连接管理:

    提高通信效率,需要考虑复用连接,减少 TCP 三次握手的次数,因此需要有连接管理的机制

    ========》通信,同步异步《======

    SOFARPC 以基于 Netty 实现的网络通信框架 SOFABolt 用作远程通信框架,使用者不用关心如何实现私有协议的细节,直接使用内置 RPC 通信协议,启动客户端与服务端,同时注册用户请求处理器即可完成远程调用。

         四种调用类型:

    SOFARPC 服务调用提供同步 Sync、异步 Future、回调 Callback 以及单向 Oneway 。

    Sync 同步调用

    同步调用是指的客户端发起调用后,当前线程会被阻塞,直到等待服务端返回结果或者出现了超时异常,再进行后续的操作,是绝大多数 RPC 的默认调用方式,无需进行任何设置即可。

    Future  异步调用

    客户端发起调用后不会同步等待服务端的结果,而是获取到 RPC 框架给到的一个 Future 对象,调用过程不会阻塞线程,然后继续执行后面的业务逻辑。服务端返回响应结果被 RPC 缓存,当客户端需要响应结果的时候需要主动获取结果,获取结果的过程阻塞线程。

    Callback 回调调用

    客户端提前设置回调实现类,在发起调用后不会等待结果,但是注意此时是通过上下文或者其他方式向 RPC 框架注册了一个 Callback 对象,结果处理是在新的线程里执行。RPC在获取到服务端的结果后会自动执行该回调实现。

     客户端代码段 2 发起 RPC 调用后,并不关心结果,此时也不会有结果。只是将自己的一个 Callback 对象传递给 RPC 框架,RPC 框架发起调用后,立即返回。之后自己等待调用结果,在有了调用结果,或者超过业务配置的超时时间后,将响应结果或者超时的异常,进行 callback 的回调。

    Oneway 单向调用

    客户端发送请求后不会等待服务端返回的结果,并且会忽略服务端的处理结果。

     当前线程发起调用后,用户并不关心调用结果,只要请求已经发出就完成本次调用。单向调用不关心响应结果,请求线程不会被阻塞,使用 Oneway 调用需要注意控制调用节奏防止压垮接收方。注意 Oneway 调用不保证成功,而且发起方无法知道调用结果。

    =====================================================================================================

  • 相关阅读:
    linux下启动和关闭网卡命令及DHCP上网
    python 编码问题
    paddlepaddle
    Convolutional Neural Network Architectures for Matching Natural Language Sentences
    deep learning RNN
    Learning Structured Representation for Text Classification via Reinforcement Learning 学习笔记
    Python IO密集型任务、计算密集型任务,以及多线程、多进程
    EM 算法最好的解释
    tensorflow 调参过程
    tensorflow 学习纪录(持续更新)
  • 原文地址:https://www.cnblogs.com/KL2016/p/14595616.html
Copyright © 2011-2022 走看看