rpc笔记

RPC在各个顶级项目都用到,如hadoop、spark、dubbo等,它和socket的关系?和http的关系?和rest的关系?

一个完整的RPC架构包含四个核心组件,分别是Client,Server,Client Stub(打包)以及Server Stub(解包)

rpc有开源框架,如gRPC(Google的基于HTTP2.0协议、底层使用Netty框架)、Thrift(Facebook的跨语言、支持代码自动生成)等
rpc是一种‘协议’或风格或编程模型,依赖其他协议如TCP/IP、http、socket或RMI;

消息队列属于rpc吗?
http能不能说是在socket之上?

SerDe序列化反序列化是应用层的?不是socket传输的?
http的json也是应用层;

Netty介绍:

  1. Netty支持blocking and non-blocking socket,以及udp等;
  2. 不依赖其他框架,只要java即可;
    https://netty.io/
    https://ifeve.com/tag/netty/
    https://netty.io/wiki/user-guide-for-5.x.html

Socket只是java的吗?不是,各个语言都能实现;
socket本质是编程接口(API),对TCP/IP的封装;(也支持基于udp、STCP等协议,或者说,协议是socket的一个参数)

Thrift用的什么协议?不同语言用不同协议?二进制协议TBinaryProtocol?
1,可以是socket(TSocket和TServerSocket)
2. 可以是http(THttpClient和THttpServer)

RPC vs Socket

  1. Socket是更基础的通信工具
  2. RPC在socket之上,利用它完成远程过程调用(当然也可以用别的如httpclient;RPC没有规定必须用何种协议进行通讯)

RPC vs http
RPC很少用到http协议来进行数据传输,但也有,比如微软的RPC OVER HTTP、谷歌的gRPC、webservice等(这些是不是B/S架构?)

RPC vs Restful(有平级的意思,也有人认为rest也是一种rpc)

  1. 风格上不同,rpc是/queryOrder?orderId=123,Restful是Get /order?orderId=123
  2. RPC是面向过程,Restful是面向资源
  3. rpc是C/S架构,rest是B/S架构
  4. rpc可以基于多种协议实现,包括http,但rest只能基于http实现;

RPC vs RMI(通用的RMI和java RMI之分)

  1. RMI是Java提供的一种访问远程对象的协议
  2. RPC更高层,是一种编程模型,没有规定要怎样实现,可以使用RMI来实现数据的传输
  3. In the object-oriented programming paradigm, RPC calls are represented by remote method invocation (RMI).

RPC要解决的两个问题:

  1. 解决分布式系统中,服务之间的调用问题。
  2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。

https://www.jianshu.com/p/2accc2840a1b
https://www.jianshu.com/p/5b90a4e70783
https://en.wikipedia.org/wiki/Remote_procedure_call

spark中的rpc:

  1. Spark 1.6前(也有说2.0),spark的RPC是基于Akka来实现的;(Akka is the implementation of the Actor Model on the JVM)
  2. Spark1.6后,spark借鉴Akka的设计自己实现了一个基于Netty的rpc框架(看来Netty在rpc界很重要!!!gRPC也是基于Netty实现)
  3. RpcEndpoint代表一个节点(如master,worker,driver),RpcEndpointRef是对远程RpcEndpoint的一个引用,
    RpcAddress表示远程RpcEndpointRef的地址,即Host+Port,等等;
  4. worker给master发送心跳就属于rpc;
  5. 简单说,spark的rpc基于Netty,而Netty的rpc使用socket实现;
    (屏蔽了Socket I/O模型、线程模型、序列化/反序列化过程、使用netty做了包识别,长连接,网络重连重试等机制)
    https://blog.youkuaiyun.com/imgxr/article/details/80131262)
    https://www.cnblogs.com/superhedantou/p/7570692.html

hadoop中的rpc(有两种):

  1. 一种是hadoop-common下的ipc.RPC类,另一种是hadoop-yarn-common下的ipc.YarnRPC类,后者是对前者的封装;
  2. 可以选择Rpc引擎,如WritableRpcEngine和ProtobufRpcEngine,分别对应不同序列化方式;
  3. hadoop rpc使用socket直接自己实现(如SocketFactory、InetSocketAddress);并且使用了java的动态代理(如ProtocolProxy、getProxy、Invoker等)
    https://blog.youkuaiyun.com/rj08zhou/article/details/80647296
    https://www.cnblogs.com/qq503665965/p/6708644.html 好!
    https://blog.youkuaiyun.com/lemonzhaotao/article/details/77587917
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值