远程过程调用 - RPC(remote process call )
consumer----->rpc---->provider
一. 相关概念:
1.本地函数调用: 系统是单体应用时,调用接口可以直接new对象,然后调用方法即可.因为在同一个内 存,即同一个地址空间,所以通过方法栈和参数就可实现.
2.远程过程调用:在分布式系统中,每个模块功能在不同的服务器上,再想调用某个方法,就不行了,因为本地没有那个类.
比如: 想收快递,自己在家时可以自己去接收, 这是本地方法调用; 自己不在家,可以让家中老婆接收,这就好比远程调用. 手机就好比一个代理,代理你发送通讯.进行远程通讯(远程调用).
也许你会说, 可以模仿B/S架构的调用方式,B服务暴露一个restful接口,然后A服务调用这个restful接口间接调用某个方法. 嗯, 这已经很接近RPC了. 不过,这样每次都需要写一串发送http请求的代码,比如:httpClient.sendRequest..之类的, 最好的方式:是像本地调用一样,让使用者感受不到远程调用的过程, 就像这样:
你会说,可以用代理模式呀, 而且最好和spring IOC一起用,通过注入calculator对象,如果扫描到对象加了一个@reference注解,就给他生成一个代理对象.将代理对象放进容器, 代理对象内部就是通过httpClient来实现RPC远程过程调用的.
二. RPC原理
上面这段就是很多RPC框架要解决的问题和解决的原理. 比如dubbo __↑
三 .RPC要解决的问题:
1.分布式系统中,服务之间的调用问题.
2.远程调用时,能像本地调用一样方便,让调用者感知不到远程调用的逻辑
四. RPC实现
实际上,RPC很少用到http协议进行数据传输,毕竟只想传输一下数据,何必动用一个文本传输