性能对比
性能对比
既然有 HTTP 请求可以解决系统间调用的问题了,为什么还会有人使用 RPC 调用?题主明显是只看到现状,而忽略了两种远程请求调用的历史进程。RPC 在 1984 年就被人用来做分布式系统的通信,Java 在 1.1 版本提供了 Java 版本的 RPC 框架(RMI),而 HTTP 协议在 1990 年才开始作为主流协议出现,而且 HTTP 发明的场景是用于 web 架构,而不是分布式系统间通信,这导致了在很长一段时间内,HTTP 都是浏览器程序和后端 web 系统通信用的东西,上面的文档格式都是 HTML(非常啰嗦),没有人会把 HTTP 作为分布式系统通信的协议。在很长一段时间内,RPC 才是正统。随着前端技术的发展,AJAX 技术和 JSON 文档在前端界逐渐成为主流,HTTP 调用才摆脱 HTML,开始使用 JSON 这一相对简洁的文档格式,为后面用于系统间调用定下基础。最后随着 RESTFUL 思潮的兴起,越来越多系统考虑用 HTTP 来提供服务,但这时候,RPC 已经是各种大型分布式调用的标配了。所以题主的问题真正应该要反过来问,既然有 RPC 了,为什么还要有 HTTP 请求?这个问题不难回答,因为现在大部分的系统都是给浏览器使用的,因此 HTTP 协议必不可少,而这大部分系统中的绝大部分,对于后端系统间调用的性能都是要求不高的,毕竟走的都是内网,它们关心的是前端和后端的性能,因此后端系统间调用如果能够采用和前端一样的技术栈,那无疑是维护成本最低的,而这时 HTTP 的技术生态也刚好满足这个条件,所以就星星之火可以燎原了。那么对于少数的部分系统,他们需要使用 RPC,一可能是老架构,也不敢动这块,二是性能要求可能只有 RPC 可以满足。就我个人而言,我所任职的公司的云平台也早就统一要求走 HTTP 了,性能,有别的路可以想办法,而且 HTTP2 也有了很大改进了。