zoukankan      html  css  js  c++  java
  • 分布式系统阅读笔记(五)-----远程调用

    介绍)

    这篇笔记主要讲的是远程调用的主要2种形式,RPC(远程过程调用),RMI(远程方法调用),这2种方法作为远程调用的实现形式,对于我们理解他们的过程非常有用。

    请求回复协议)

    在远程调用中,一个很重要的概念是啊请求回复协议,由客户端发送Request到服务端,服务端执行好操作之后,把结果在回传到客户端上,就完成了一个基本的调用过程。这里有几点比较重要的概念:

    1.消息标识别。这里指的主要是请求的标识, 因为每个请求都确保要有唯一性,不同进程发送的请求也都可能会不一样。

    2.发送进程的标识,这里可以用网络地址+端口号的形式区分不同主机上的进程。

    请求回复协议中构建的失败模型:

    1.设置超时机制,如果发生了什么异常导致回复消息没有接受到。

    2.撤销重复的请求,因为有可能那个请求操作还没有执行完,如果此时再发送相同请求,会被过滤掉。

    3.会存在回复消息的历史记录表,避免同样的请求导致重复的操作,但是随着记录的变多,会占据越来越大的空间,所以在这里会有期限的限制。

    4.交换信息请求的类型,有3种,最简单的纯请求类型the request protocol,一般的请求回复类型the request-reply protocol,比较全面的the request-acknowledge-reply,额外添加了客户端给服务端的回复确认包的过程。

    5.HTTP就是一个基于TCP的典型的RR协议类型的协议。

    远程过程调用)

    远程过程调用隐藏了分布式系统中重要的方面,包括对于参数,结构值的编解码的过程,还有消息的传递过程。

    1.远程过程调用实现的核心是2个字,interface,接口,通过声明了共同的接口,所以能够被很好的调用。

    2.在RPC中,声明了几个call调用原语,主要3个at-least-one(最少被调用一次,在某次的RPC过程中),at-most-one(最多被调用一次,在某次的RPC的过程中),或者是Mayb(都有可能,针对不同的条件),像比如银行,金融的机构就只能被at-most-one这样的请求模式了,否则后果不堪设想,他是针对了失败情况措施而定的。

    3.RPC的具体实现,里面会包括一个stub程序,服务端和客户端中都存在这个模块,stub程序作为中间的一个中转处,可以让你调用远程方法像是调用本地方法一样的感觉。

    远程方法调用)

    远程方法调用(RMI)可有说是一种具体形式的RPC,非常接近于RPC,但是一个本质的不同在于他由于分布式对象扩展而来,他所有的调用都是基于Object的方式实现,充分利用了面向对象的思想去实现整个过程,比较易懂,所以这里要求对象的引用必须具有唯一性。

    1.在RMI的设计关键就在于对象模型的建立,一个号的对象中应该有许多的方法,而且这些方法应该是定义在接口中,只是让obj实现了这个方法,在对象里,要主要实现异常的处理。

    2.而分布式对象与上面的区别又是怎样的呢,一个就是权限认证的控制,不是所有的对象都是可以随便访问的。

    3.在分布式对象的调用中,再次强调了远程调用引用的重要性,因为你要调用远程对象,你必须已经包含了它的远程引用,才能实现调用,远程对象引用可以作为参数或者是结果进行进程间的传递的。

    4.在分布式系统模型中主要以引用计数法控制分布式对象的垃圾回收。

    5.RMI的实现主体模块包括:1.沟通通信模块。2.远程引用模块。3.服务模块4.服务端,客户端的程序实现模块。

    6.永恒对象存储,在RMI中为了对象的方便调用,有时会被对象进行永久存储,当他被再次调用的时候,就变为激活状态,对象可以保存在磁盘中或者是数据库中。这里有2个方法判断一个对象是不是永恒对象(1).根搜索法查找是否与永恒根对象有关(2)他是不是永恒的对象的子类如果是的话,他也将是永恒对象。

    7.在分布式服务中的定位服务功能在数据库或者是缓存中保存了远程对象引用和他所对应的当前位置的键值对关系,方便进行定位。如果数据不准确了,则会进程更新操作。

    8.分布式垃圾回收机制。这个机制主要通过对象的增加和减少对象的引用计数的方式实现,在每个服务进程中都包含了一系列的对象的引用。在每个客户端对一个对象在增加引用的时候,服务端会通过一个lease租约机制的形式将对象交给客户端使用,到期了需要客户端进行再次的远程调用一次。

    学习例子  Java RMI)

    这长中的一个远程例子的实现例子是java RMI的例子,很多东西与我们前面说过的都比较类似,通过接口的形式开放了各种方法,不过这里需要继承一个序列化接口,所有的参数和结果值都会通过序列化的形式进程传输,里面用到了非常多的反射的思想(reflection)。


    参考文献:<<Distributed Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair

  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184094.html
Copyright © 2011-2022 走看看