分布式介绍

来源:互联网 发布:淘宝云栈菜鸟打印组件 编辑:程序博客网 时间:2024/05/16 10:54

计算需求越来越大,又不能完全放弃以往的机器进行,这就产生了多机器协作的问题.机器协作是语言的协作, 程序之间的相互调用

产生了 corba, dcom , rmi ,soap分布式协作环境, 也就是程序调用底层实现..

 

现在流行最广的是corba 和soap  ,corba复杂, 但性能高, soap看起来比较简单, 但性能比较低下.

rmi以前使用纯粹的jrmp协议, 使用的是序列化技术, 但是只能在纯粹java环境中使用

现在跟corba整合了 使用iiop协议, 也就是高层编程开发使用以前的rmi方式,  底层实现使用的是corba

dcom已经是过眼云烟. 现在ms主打变成了soap协议.

 

事实上的分布式协作就是远程参数之间的相互编解组:  计算环境中,我们需要和传递的只是数据, 在函数或者方法中, 调用方提供数据, 经过函数或者方法的运行流程后, 返回给我们新的数据. 

corba逻辑

这是大概的流程, 但是其中涉及到很多细节方面(以corba的java实现为例):

 

1双方之间对参数的定义是怎么样的??

  程序调用的时候,传递的可能是基类, 然而大部分时候都是对象,  所以无论定义多少类型都是不够用的, 这就需要一套对象扩展的功能 :只定义基类型和扩展所需要的类型,  org.omg.corba.TCKind(类型代码种类), 这些只是定义了基本的类型, 其他的使用jidl里用到的类型或者组合类型就是生成的xxxHelper

 

2双方之间如果解释不同函数调用之间的区别?

 各种语言都有不同的参数使用方法, 比如c++,d 就有in out inout定义, 虽说是空的 但corba的目的是包容万象,所以也就有这样定义, 但java里没有, 这就有了Holder之说: 所有的包装类型都封装起来, 这样所有的对象都可以进行inout进行改变了(对象在java中并不需要进行holder的,因为引用本身就可以修改自身, 但作为规范, 所以所有的对象, 基本对象, 等都进行了holder..)

 

3调用方如何知道被调用方实施了哪些类?

所有双方涉及到的helper类型和实现里包含的基本类型

 

大体流程:

 

 

 所以 如果单纯使用corba的话,步骤应该是:

服务器:

1 编写接口定义的idl文件.

2 使用idlj 来产生相关的: 接口定义类, 参数持有holder类, 参数定义helper类, 调用端的stub代理类. 当然还有个意义不是很大的Operations接口..

3 编写服务器端类,实现自 接口定义类. 实现接口定义文件中的相关方法.

4 开发服务器端注册程序, 把这个服务器端类对象 注册进行cosnaming中....

客户端:

 通过NamingContext 得到stub对象的实现. 然后调用stub里的被代理的方法..

 

这是分布式的大概步骤, 还有其他的比如说NameService, TransactionService 等

 

 

原创粉丝点击