https://www.zhihu.com/question/278219228

    作者:杨奕宁链接:https://www.zhihu.com/question/278219228/answer/921486049来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    首先在传统的file system中,当存储介质和Application都在同一台机子上的时候,比如在自己的笔记本上读取文件, Application对于存储在disk(SSD,HDD等存储媒介)上的内容的访问是通过系统的调用完成的。如下图所示:
    nfs和rpcbind关系 - 图1
    所有对于文件的读(READ),写(WRITE),打开(OPEN)等操作都是由Application发起请求转交给file system,file system进行处理后转交给kernel,kernel在调取相应的系统调用完成的。(比如我们在Linux中用C写一个open file的程序,用strace运行后可以观察到open操作所调用的相应的system call)。
    那么对于DFS(分布式文件系统)来说呢,此时Application和存储介质往往是通过网络相连接的,如下图所示:
    nfs和rpcbind关系 - 图2
    Application对于file system的调用(也就是client和server通信)需要通过RPC完成,这就是为什么需要RPC参与到file system当中的原因。
    那NFS在哪儿呢?NFS实际上就是也是一种file system,当用户需要使用的时候,会将一个NFS mount在相应的directory下。
    简单来说,每当用户访问该NFS时,会发出一个RPC请求当相应的NFS server上,NFS server根据RPC请求,访问storage取得相应的文件内容返回给client。当然这其中还涉及到的cache, block等问题。但简单来说是这个流程。