构建分布式程序的8个步骤(rpcgen)
一、构建常规应用程序
要构建这个字典应用例子的分布式版本,第一步要求程序员构造解决问题的常规程序。
最初这个字典应用的过程组织情况
二、将程序划分为两个部分。
在考虑哪一个过程可以转移到远程机器上时,程序员必须考虑每一个过程所需要的设施,比如过程nextin在每一次被调用时要读取下一输入行,并对它进行分析,因为它要访问程序的标准输入文件,所以nextin必须放在主程序中。程序员还必须考虑每个过程所要访问的数据所处的位置。
执行I/0或者访问文件描述符的过程不能轻易地转移到远程机器中。
执行过程的机器应当与放置过程所要访问数据的机器是同一台。将巨大的数据结构传递给远程过程的效率很低。(可是是远程机器,也可是客户主机器)
在考虑了最初的字典应用程序以及每个过程要访问的数据之后,很明显应当把过程insertw,deletew,initw,lookupw和字典本身放在同一台机器中。下图表示了应用程序的划分。
在这个划分的基础上,将程序分解为本地和远程两个构建。
Dict1.c含有主程序和过程nextin
Dict2.c包含了来自最初的应用程序的一些过程,他们将成为远程程序的一部分。另外,它还包含对各个过程要共享的全局数据的声明。
分别编译这两个文件,产生两个构件的目标文件,这些构件必须连接到一起以产生可执行的程序。
三、创建rpcgen规约
程序员一旦为某个分布式程序选择了一种结构,就可以准备rpc规约了,从本质上说,rpcgen规约文件包含了对远程程序的声明以及它所使用的数据结构。
规约文件包含:
声明在客户或者服务器中共享使用的常量
声明客户和服务器之间要共享使用的数据类型
声明远程程序,每个程序中所包含的过程以及它们的参数类型
Rpc使用一些数字来标识远程程序以及在这些程序中的远程过程。在规约文件中的程序声明定义了诸如程序的