Gluster源代码阅读1--RPC与NFS

Gluster本质上是一个NFS(网络文件系统),NFS解释如下(摘自网络)

Sun Microsystems公司于1984年推出了一个在整个计算机工业中被广泛接受的远程文件存取机制,它被称为Sun的网络文件系统(Network File System),或者简称为NFS。该机制允许在一台计算机上运行一个服务器,使对其上的某些或所有文件都可以进行远程存取,还允许其他计算机上的应用程序对这些文件进行存取。它使我们能够达到文件的共享。当使用者想用远端档案时只要用“mount”就可把remote档案系统挂接在自己的档案系统之下,使得远端的文件操作上和本地机器的文件没两样。一个应用程序可以打开(Open)一个远程文件以进行存取,可以从这个文件中读取(Read)数据,向该文件中写入(Write)数据,定位(Seek)到文件中的某个指定位置(开始、结尾或者其他地方),最后当使用完毕后关闭(Close)该文件。并且这些操作都是对编程者透明的,操作方法和对本地文件的操作方法完全一样。NFS是一个使用SunRPC构造的客户端/服务器应用程序,其客户端通过向一台NFS服务器发送RPC请求来访问其中的文件NFS是一个使用SunRPC构造的客户端/服务器应用程序,其客户端通过向一台NFS服务器发送RPC请求来访问其中的文件

图示如下


从上图可以看到RPC是基于内核的,基于内核的最明显的一个好处就是少了用户态和内核态之间的切换,因为切换是要拷贝数据的

但是Gluster这货,没有利用操作系统自带的NFS服务,而是基于NFS标准写了自己的RPC服务,并且利用NFS默认的监听端口2049来监听RPC服务,在后续章节将会介绍Gluster RPC与Gluster NFS

而在Gluster里,服务端利用RPC Server响应来自客户端的请求,客户端利用RPC Client来发送请求,所以一切的通信都是基于RPC的。

但是RPC和NFS又是2个独立的组件,但是它们同时又是密不可分的,所以在NFS启动之前,一定要保证RPC先启动,原因如下:(摘自网络http://vbird.dic.ksu.edu.tw/linux_server/0330nfs.php):

NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口是固定的,但如此一来又造成客户端想要连上服务器时的困扰,因为客户端得要知道服务器端的相关端口才能够联机吧!

此时我们就得需要远程过程调用 (RPC) 的服务啦!RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的端口。那 RPC 又是如何知道每个 NFS 的端口呢?这是因为当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个埠口对应的 NFS 功能,然后 RPC 又是固定使用 port111 来监听客户端的需求并回报客户端正确的端口。


当客户端有NFS文件要存取请求时,它如何向服务器端要求数据?

1、客户端会向服务器端的RPC(port 111)发出NFS文件存取功能的询问请求。

2、服务器端找到对应的已注册的NFSdaemon端口后会回报给客户端。

3、客户端了解正确的端口后,就可以直接与NFS守护进程来联机。


所以整个协议栈看起来如下:

NFS

XDR(备注1)

RPC

TCP,UDP

IP

DataLink 

Ethernet

备注1:XDR(eXternalData Representation,即外部数据表示法)提供一种方法,把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的计算机、操作系统及程序语言中,所有数据代表的意义都是相同的

 

可以使用rpcinfo 去获取注册的rpc




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值