• 分布式系统阅读笔记(四)-----进程间通信


    介绍)

    进程间通信的方式里包含了非常多的内容,比如用于实现进程间通信需要用到许多协议提供的API,在进程间的远程方法的调用上需要的约定一定的数据格式,这就衍生出了数据集中编组的一种方式。还有多播网络技术和对于特定应用的虚拟网络技术。

    协议的相关API

    为了实现进程间通信中,根据不同类型的通信方式,系统有不同的API和类。进程间通信,离不开send process,receive process 2个主要的角色。在进程间通信中,有几个特征。

    1.有同步通信和异步通信的方式,同步通信相对异步操作设计上会简单许多,但是有的时候效率不是太好,因为会被阻塞住。

    2.目的消息的传达有2个非常重要的要求,1是消息传递的可靠性,还有一个是消息传递的有序性。

    3.关于进程间通信的API实现比如说可以通过Socket方式实现,在java里有提供了专门的类,还有专门的用于UDP包传播的Datagram数据报,TCP采用的是流模式的传播,与UDP的形式不同。TCP流的传输有不同于UDP的几个特征,1个因为没有数据边界,所以在传输前要确定传多大的数据,2.因为TCP是可靠传输,每个包收到后会用ack相应回复,不然会重传的,对出错控制比较好,3.会有流传输控制,会根据接收之间的快慢,做一些改变。当然在TCP的流传输中存在有些问题:1.数据匹配问题,如果数据的读取要事先约定好顺序才行。2.阻塞问题。3.多线程问题,服务端为每一个客户端创建一个新的连接,放在不同的线程中,负载巨大。

    数据集成)

    在远程调用的数据传输的时候,需要对数据进行集成和规约化,比如说声明好数据的存储形式,数据的类型等等。这里举4个例子

    1.CORBA,公共请求对象代理。这是一种比较早的适用于多语言的框架。在CORBA中,他对于数据的形式进行了事先的确定,所以发送者和接受者只负责接收value值的传输,在CORBA中,一个对象的标示是以连续的字节来存储的,通过{长度:值, 长度:值...}类似这样的形式。

    2.Serialization,序列化技术,与上面这个方法有少许的不同之处,他不仅把值存入,还会把他的类型,包名等一系列的可能的信息都存入,如果一个类是子类,那么他的父类的信息也会被序列化到信息中,因为最后一个对象的信息会被序列化成二进制文件,所以分成方便对象的传输,具体的序列化的机制原理可以阅读我博文中的某篇文章。

    3.XML,扩展标记语言。Xml的出现使得数据的可能性变得更强了,典型的被用的地方是SOAP使用的就是这个进行传输的,XML有标签有属性,有命名空间还有xml模式的说法。

    4.Remote Object Reference,远程对象的引用。进程间通信往往都是以对象的形式在服务端中调用,所以一个引用的设计是至关重要的,首先他必须是唯一的,这个毋庸置疑,省得对象已经被删除了,作用在你另外一个对象上,那后果不堪设想。这里提到了一种这样的做法,reference = Internet Address + port number + time  +object number(这是第几个createobject) + object interfaces,足够能有唯一性了吧。

    多播通信)

    要与一个进程组进行通信,如果是发送者采用一个个成对的与接收者进行信息的交换,那样的效率实在是很低的,所以这里就出现了多播的概念。

    1.多播的一些特征和适用的场景。1.发送多播信心,去搜索服务。2.可以去做数据备份,当数据改变的时候。3.做一个事件的通知,发布订阅模式就是这样作用的一个实现。

    2.同样的在,在java中也有提供对于ip多播的支持,叫MulitycastSocket

    3.在多播中,同样有2个问题非常重要的,可靠性,和传输的有序性,后者在多播的过程显得非常重要,因为你的接收者是一组一组的。

    覆盖网络)

    随着信息技术的发展越来越快,越来越多的基于网络的分布式应用开始兴起,比如peer-to-peer的文件共享应用。但是由于网络本身设计的局限性和网络协议的固定性,不能很好的支持一些特定需求的应用,所以这里就出现了一个网络虚拟化的概念。

    1.网络虚拟化旨在几月当前存在的网络条件,在不改变其中核心的结构,在上面在构建特有的层次去支持所需的应用,这就叫做网络虚拟化,比如支持做一个多媒体的分布式流音乐。

    2.这里我们提到一个典型虚拟网络实例是叫Overlay networks,覆盖网络,它是一个虚拟网络由一些节点和虚拟连接,搭建在底层网络上的一个设施。

    3.覆盖网络目前已经出现了很多的类型,有分布式哈希表,存储了大量的键值对的映射,又或者是一个多播的网络环境,在这个环境里没有多播路由器的存在。

    学习例子)

    这里提到了一个MPI的概念 ,俗称消息传递接口,由于高性能计算领域产生,在这个里面有许多特别的设计之处。


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

  • 相关阅读:
    mysql中删除表
    js上传文件获取客户端地址
    form表单普通提交预览显示,读取显示tmp文件
    PHP中获取中英文混合字符串长度[主要是指个数,而不是字符串长度](转)
    离开页面提醒功能 (实现博客园离开编辑页面时的提醒功能)(转)
    Google maps API开发(一)(转)
    Python的getattr(),setattr(),delattr(),hasattr()
    Python读写文件
    Python命令行解析argparse常用语法使用简介
    面向对象设计与分析实例
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184098.html
Copyright © 2020-2023  润新知