rpc协议

NFS

社会主义新天地 提交于 2019-12-05 23:38:00
一、什么是 NFS ?   NFS 是 Network File System 的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由 Sun 公司开发,于 1984 年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类 Unix 系统间实现磁盘文件共享的一种方法   它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。 NFS 服务器可以允许 NFS 客户端将远端 NFS 服务器端的共享目录挂载到本地的 NFS 客户端中。在本地的 NFS 客户端的机器看来, NFS 服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。 NFS 一般用来存储共享视频,图片等静态数据。 二、 NFS 挂载原理   NFS 是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传 输。 NFS 服务器到底使用什么网络端口来传输数据的, NFS 服务器端其实是随机选择端口来进行数据传输。那 NFS 客户端又是如何知道 NFS 服务器端到底使用的是哪个端口呢?其实 NFS 服务器时通过远程过程调用( remote procedure call 简称 RPC )协议 / 服务来实现的

RPC协议

妖精的绣舞 提交于 2019-12-05 22:06:32
什么是 RPC? 初步印象   RPC的语义是远程过程调用,在一般的印象中,就是将一个服务调用封装在一个本地方法中,让调用者像使用本地方法一样调用服务。而具体的实现是通过调用方和服务方各自的 stub 基于TCP长连接进行数据交互达成。   上面的解释似云里雾里,仅仅了解到这种程度是远远不够的,还需要更进一步,以相对 底层 和 抽象 的视角来理解RPC。 三个特点   广义上来讲,所有本应用程序外的调用都可以归类为RPC,不管是分布式服务,第三方服务的HTTP接口,还是读写Redis的一次请求。从抽象的角度来讲,它们都一样是RPC,由于不在本地执行,都有三个特点:   需要事先约定调用的语义(接口语法)   需要网络传输   需要约定网络传输中的内容格式   以一次Redis调用为例,执行 redis.set("rpc", 1) 这个调用,其中:   set 及其参数 ("rpc", 1) ,就是对 调用语义 的约定,由redis的API给出   RedisServer会监听一个服务端口,通过TCP传输内容,用异步事件驱动实现高并发   底层库会约定数据如何进行编解码,如何标识命令和参数,如何表示结果,如何表示数据的结尾等等   这三个特点都是因为 调用不在本地 而不得不衍生出来的问题,也因此决定了RPC的形态。所有的RPC解决方案都是在解决这三个问题

聊聊微服务的服务注册与发现

别来无恙 提交于 2019-12-05 21:56:56
摘自: https://www.cnblogs.com/mayou18/p/9829876.html 聊聊微服务的服务注册与发现 来源:阿里中间件团队分享 更多文章请关注 MAYOU18 聊起微服务的服务注册与发现,很多人立马就会脱口而出 zk、etcd、consul、eureka 这些组件,进而聊到 CAP 如何取舍,性能如何,高可用和容灾是怎么实现的。 引言 聊起微服务的服务注册与发现,很多人立马就会脱口而出 zk、etcd、consul、eureka 这些组件,进而聊到 CAP 如何取舍,性能如何,高可用和容灾是怎么实现的。 在这之前,站在组件使用者的角度,我想先问这么几个问题: 注册的 IP 和端口怎么确定 ? 实现服务治理还需要注册哪些信息 ? 如何进行优雅的服务注册与服务下线 ? 注册服务的健康检查是如何做的 ? 当服务有节点退出或新的节点加入时,订阅者能不能及时收到通知 ? 我能方便地查看某个应用发布和订阅了哪些服务,以及所订阅的服务有哪些节点吗 ? 看完这些问题后,您也许会发现,对于服务注册与发现,首先应该关注的是服务注册发现本身的功能,然后才是性能和高可用。 一个好的服务注册发现中间件,应该是能完整地满足服务开发和治理的基础功能,然后才是性能和高可用。如果没有想清楚前面的功能,再高的可用性和性能都是浮云。最后,安全也同样重要。 服务端的性能如何 ?

深入浅出 RPC

亡梦爱人 提交于 2019-12-05 21:42:08
《深入篇》我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它? RPC 功能目标 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用,在前文《浅出篇》中给出了一种实现结构,基于 stub 的结构来实现。下面我们将具体细化 stub 结构的实现。 RPC 调用分类 RPC 调用分以下两种: 1. 同步调用 客户方等待调用执行完成并返回结果。 2. 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。 异步和同步的区分在于是否等待服务端执行完成并返回结果。 RPC 结构拆解 《浅出篇》给出了一个比较粗粒度的 RPC 实现概念结构,这里我们进一步细化它应该由哪些组件构成,如下图所示。 RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理 RpcProxy

RPC框架GPRC浅析

一个人想着一个人 提交于 2019-12-05 16:54:34
RPC框架中数据的传输通常有两种:二进制传输,和文本类传输 。 二进制传输的优点是:传输性能好,因为要写协议文件,所以更严谨。 缺点是:二进制难以跨语言, 文本类传输的优点是:可以跨语言,而且由于不用写协议文件,使用更灵活 。 缺点是:传输性能稍微要差一些。 GRPC的特点是不仅采用了二进制传输,保证了传输性能,还满足跨语言,保证了灵活性。 序列化 GPRC的二进制序列化协议是Protocol Buffers。 Protocol Bufers 是一款压缩效率极高的序列化协议,有很多设计精巧的序列化方法。 对于 int 类型 32 位的,一般都需要 4 个 Byte 进行存储。在 Protocol Bufers 中,使用的是变长整数的形式。对于每一个 Byte 的 8 位,最高位都有特殊的含义。 如果该位为 1 ,表示这个数字没完,后续的 Byte 也属于这个数字;如果该位为 0 ,则这个数字到此结束。其他的 7 个 Bit才是用来表示数字的内容。因此,小于 128 的数字都可以用一个 Byte 表示;大于 128 的数字,比如 130 ,会用两个字节来表示。 对于每一个字段,使用的是 TLV ( Tag , Length , Value )的存储办法。 其中 Tag = (feld_num << 3) | wire_type 。 feld_num 就是在 proto 文件中

Linux远程目录挂载

自古美人都是妖i 提交于 2019-12-05 11:35:44
原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接: https://app.yinxiang.com/shard/s17/nl/19391737/ad99ab1d-1040-45e0-aaf6-f5d69c247862 问题: 1、如何使A服务器的某个目录挂载到B服务器的某个目录下,使其达到B服务下的目录文件一旦变更,可以实时的在A服务的目录下体现出来; Lnux的解决方式 1、首先将B服务器的该目录,设置为共享文件夹(只有将其设置为共享文件夹后才能再另外的机器上进行该目录的远程连接访问,共享文件夹这个概念与windows 很有相似之处) 2、A服务器则通过 mount 的方式,指定对应的远程主机所抛出来的共享文件夹进行连接 linux如何实现共享文件夹的效果呢? 1、A服务器新创建的文件夹远程挂载到B服务器的某个 10G以上大小内容的文件夹下后,实际情况下A服务器的磁盘并没有因为挂载了10G的远程文件,而被消耗掉10G的磁盘空间,这说明实际情况下的挂载,并非将远程服务的文件实时Copy到目标文件夹中,当然这也不符合共享文件夹的特征; 那么既然是已经挂载了远程目录后,此时A服务访问自身文件夹时,是如何实时展示B服务的文件夹内容的呢? 原因是, A服务每次对于自身挂载文件夹的访问,实际上都是发送了一次新的RPC请求,请求目标服务器

NFS FTP SAMBA的区别

北城余情 提交于 2019-12-05 01:49:17
Samba 服务 samba 是一个网络服务器,用于 Linux 和 Windows 之间共享文件。 samba 端口号 samba (启动时会预设多个端口) 数据传输的 TCP端口 139、445 进行 NetBIOS名称解析之类工作的UDP端口就 137、138 Samba 的功能: ① 分享档案与打印机服务; ②  可以提供用户登入 SAMBA 主机时的身份认证,以提供不同身份者的个别数据; ③  可以进行 Windows 网络上的主机名解析 (NetBIOS name) ④  可以进行装置的分享 (例如 Zip, CDROM...) Samba 工作原理: Samba 服务功能强大,这与通信是基于 SMB 协议有大的关系。 SMB 协议不仅能够提供目录和打印机共享,还支持认证和权限设置等功能。在早期, SMB 运行于 NBT 协议( NetBIOS over TCP/IP )上,使用 UDP 协议的 137 、 138 及 TCP 协议的 139 端口,但随着后期开发,它可以直接运行于 TCP/IP 协议上,没有额外的 NBT 层,使用 TCP 协议的 445 端口。 通过 Samba 服务, Windows 用户可以通过【网上邻居】窗口查看到 Linux 服务器 中共享的资源,同时 Linux 用户也能够查看到服务器上的共享资源。 Samba 服务的具体工作过程如图 :

RPC 远程过程调用协议

主宰稳场 提交于 2019-12-05 00:40:34
远程过程调用协议 编辑 同义词 RPC 一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)—— 远程过程调用 协议,它是一种通过 网络 从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC协议 假定某些 传输协议 的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI 网络通信 模型中,RPC跨越了 传输层 和 应用层 。RPC使得开发包括网络 分布式 多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复 信息 ,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。 有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算 环境 (DCE)。 中文名 远程过程调用协议 外文名 Remote Procedure Call Protocol 核心思想 信息传输协议 研究方向 分布式

Go实战--golang中使用gRPC和Protobuf实现高性能api(golang/protobuf、google.golang.org/grpc)

跟風遠走 提交于 2019-12-05 00:32:19
生命不止,继续 go go go !!! 号外号外,插播一条广告,通过博客的uv可以看到周五,程序员是不怎么干活的: 本篇博客,使用gRPC和Protobuf,实现所谓的高性能api。 protobuf golang中的protobuf大家应该不会很陌生,之前也有博客介绍过: Go实战–go中使用google/protobuf(The way to go) Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data. You can find protobuf’s documentation on the Google Developers site. 获取: go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen- go Protobuf语法 下面简要介绍Protobuf语法: 参考: https://segmentfault.com/a/1190000007917576 官方: https://developers.google.com

JAVA RPC (十) nio服务端解析

不打扰是莪最后的温柔 提交于 2019-12-04 13:32:05
源码地址:https://gitee.com/a1234567891/koalas-rpc 企业生产级百亿日PV高可用可拓展的RPC框架。理论上并发数量接近服务器带宽,客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计,支持trace跟踪等,天然接入cat支持数据大盘展示等,持续为个人以及中小型公司提供可靠的RPC框架技术方案 ServerSocketChannel简单介绍: 上一篇文章我们讲了netty server服务端的使用方式,对于netty来说对nio层进行了全方位的封装,我们使用netty的使用可以当内部nio是黑盒处理即可,只需要处理netty的hander处理即可,但是koalas-rpc同时也实现了高性能的nio服务框架,给大家另外一种原生的选择,下面我们来简单看一下NIO相关的入门知识。 this.serverSocketChannel = ServerSocketChannel.open(); this.serverSocketChannel.configureBlocking(false); this.serverSocket_ = this.serverSocketChannel.socket(); this