目录
1 RPC的由来
1,1 本地调用
以前我们多模块的本地调用通过注入的方式,打包的时候将所有模块的代码打成一个包部署到服务器,此模块间的调用我们称之为,进程内的本地调用
1.2 远程调用
此模式在分布式流行之后就变的不一样了
分布式的理念是将两个不同的模块,单独做成不同的服务(进程)服务是可以单独的打包和部署的,不同的包可以部署到不同的机器上部署层面我们的部署方式发生了改变但是在业务层面上我们的调用和依赖关系依然是存在的。
那么这时候用户服务该怎么调用订单服务?
此时我们需要将订单服务的接口升级为用户和定单服务都可以使用的公共代码这是我们就可以在用户这边注入订单的接口,来完成订单接口方法的调用即可但是在我们的用户模块下只有订单的这个接口,而没有订单方法的实现的实现在订单服务的模块下
此时我们要了解用户模块在对订单模块方法的调用他这个背后,是要通过网络调用到另外一台主机上的某个进程中的某个方法让他执行执行完毕,在通过网络让数据返回
那么谁来解决这个夸网络跨服务之间的远程调用的这个问题呢,RPC可以来解决这个问题。
2 RPC的概念
2.1: RPC的概念及特点
RPC:Remote Procedure Call,
远程过程调用,它定义了一台计算机上的程序去调用另一台计算机上
子程序的这一行为。
子程序可以理解为是调用者程序的一个执行过程,或者是一个方法,一个 函数
前提这两台计算机上的程序网络是通的
特点:
把远程实现搬到了本地,效果上远程调用和本地调用没有差别使用CS模式,客户端发起请求并传 递参数,服务端接收请求参数后执行,并 将执行结果返回底层网络通信细节对上层开发者屏蔽,上层开发者无需为这一交互过程做额 外的编码,做到应用无侵入。
2.2 RPC的作用
RPC的作用是什么呢?
屏蔽远程调用跟本地调用的区别,调用远程就像是在调用本地
屏蔽跨进程跨网络调用底层复杂性,让我们更专注于业务逻辑
3 常见的RPC框架
常见的RPC框架:
• dubbo(apache【Alibaba】,java/go)
• grpc(google,多语言)
• Thrift(Apache 【Facebook 】,多语言)
• Motan(微博内部,java)
• Tars(腾讯内部,c++ ->多语言)
• Spring Cloud openFeign
4 RPC的应用场景
1,分布式应用间调用的解决方案
2,常见的应用组件的sdk客户端工具,比如MQ,redis,mysql,grpc等等
我们一般在应用程序中使用这些组件的时候,一般都是通过他们提供sdk客 户端工具提供的API与他们的服务器取得连接,进行交互那么他们的客户端sdk工具与他们的服务器是怎么进行交互的呢,其实他们提供的客户端SDK工具与他们的服务器进行交互底层也是通过RPC网络调用的这种方式进行交互的
3,可以理解为但凡是两个服务或者两个程序间的网络交互都是RCP的一种场景
5 总结
可以理解为RPC就是远程过程调用,定义了一台计算机上的程序去调用另一台计算机上
子程序的这一行为
在下一章节中为大家介绍,rpc中设计的关键技术点