欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神奇的RPC其实并不神奇

程序员文章站 2022-03-03 19:49:13
...

RPC,是Remote Procedure Call的简称,中文翻译是远程过程调用。伴随着分布式系统的诞生,RPC也就应运而生了。那么,远程过程调用在实际业务环境中是怎么体现的呢,我们如果仅仅只是知道概念那是完全不够的。

一、普通的接口调用

例如,我有一个Weather接口的rain()方法,只要一调用就能查到目前正在下雨的城市信息,在WeatherImpl实现类中则具体实现了过程。

public interface Weather{
	List<City> rain();
}

public class WeatherImpl implement Weather{
	List<City> rain(){
		// 此处省略实现过程
		xxx;
		return list
	}
}

普通调用过程自然是new一个实现类,并且用该实现类对象的引用再去调用对应的方法,即:

WeatherImpl w = new WeatherImpl();
w.rain();

这就是基本的本地调用。

二、远程的接口调用

这个时候,我要将这个接口开放给外界使用,让他们也能调用到Weather接口中的rain()方法。抛开本文的主角RPC,其实我们知道通过Restful风格的调用入口,例如我将该实现方法同样封装进Controller层,并将调用地址设为:/weather/rain。部署完成之后,我们就能够通过:ip:+port/weather/rain的方式访问到我们本地的方法。
那么问题来了,我们在A系统中有Weather接口,而在B系统中没有Weather接口,我们每次都要通过发送http请求来互相调用的话,那就太劳神了。
这个时候我们就想,要是在另一个提供也能像本地调用接口一样直接new一个对象的形式来进行调用就好了。
我们的主角就此登场。如果不借助RPC,那么我们绝对是不可能实现的,因为Weather对象的地址在A系统,而我们想在B系统new一个Weather地址引用是根本做不到的,而RPC其实就是讲Restful风格的api接口进行进一步的封装,使得调用者感知不到远程调用。
我们进行总结:

  • RPC主要为了应对分布式服务之间的调用
  • 远程调用要与本地调用一样方便,且让调用者感觉不到远程调用

三、实现一个简单的RPC

// TODO

参考资料:

相关标签: RPC 分布式