一篇文章弄懂RPC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qsbbl/article/details/82979215
是什么

Remote Procedure Call,远程过程调用,一种通过网络从远程计算机程序上请求服务来得到计算服务或者数据服务,而不需要了解底层网络技术的协议和框架。
Dubbo、HSF、gRPC、Thrift等都是RPC框架。而Spring Cloud不是,具体在后面会讲到。

微服务

RPC和微服务的关系是什么?
我们知道,我们使用微服务时,需要考虑API网关,服务间调用、发现、部署、容错等几个问题,而RPC就是负责服务间调用的。

架构演进历程
  • 单体应用程序——SSH
  • 垂直应用架构——RESTful
  • SOA——Dubbo
  • 微服务——Spring Cloud
为什么用

当单体应用改进为微服务架构后,各分服务之间怎么互相交流和互相调用?RPC就是解决的这个问题。

原理

RPC=本地方法调用+Socket网络通信技术
Socket是用来实现不同计算机之间的通信的技术,我们可以使用它的收发消息功能来实现RPC。
在这里插入图片描述
1.客户端(client functions)调用本地的客户端存根方法(client stub)。
2.客户端存根使用Socket套接字接口来向远程服务发送编码的网络消息。
3.网络消息由内核通过某种协议(UDP/TCP)传输到远程服务端。
4.服务端存根(server stub)接收消息,并对参数进行解码,将参数由标准的网络格式转换为特定的语言格式。
5.服务端存根调用服务端的方法,并将参数传递给该方法。该方法运行具体的功能并返回。这部分的执行体现了“远程调用”。
6.服务端的方式执行完后,将结果返回给服务端存根中。
7.服务端存根将该返回值进行编码并序列化后,通过N个网络消息发送给客户端。
8.消息通过网络被发送到客户端存根中。
9.客户端存根从本地Socket接口中读取结果消息。
10.客户端存根将结果返回给客户端函数,并将消息从网络二进制转换为本地语言格式。至此,远程服务调用完成。

和 HTTP服务 的区别

HTTP RESTful是利用现成的http协议进行传输,调用端使用HttpClient设置参数,再去解析状态和返回值。像Springcloud就是使用的这种调用方式。
RPC服务和HTTP 服务的区别是:RPC是基于TCP/IP协议的,而HTTP服务是基于HTTP协议的,又因为HTTP协议是在传输层协议TCP之上的,所以从执行效率来看,RPC更胜一筹。
总体来说,如果各分服务的交互较少的情况下,建议选择HTTP服务方式,如果较复杂,建议选择RPC服务。

和 消息队列 的区别

RPC和消息队列(MQ)是用于分布式系统的两个关键技术,里面都有服务提供者和消费者的概念,都是用于两个东西之间的通信。
而不同的是,RPC是指两个分服务之间的通信,比如ITOO系统中的基础和教务之间的通信;而MQ是指两个应用程序之间的通信,比如ITOO系统中教务服务中学生抢课请求程序和数据库的存储业务处理程序之间的通信。如此看来,RPC是MQ的上一层。

本博客参考资料:
《可伸缩服务架构:框架与中间件》

猜你喜欢

转载自blog.csdn.net/qsbbl/article/details/82979215