RPC
Remote Procedure Call,希望远程调用可以像本地函数调用一样简单,不需要了解底层网络技术。
和 HTTP 协议的区别
RPC的概念在HTTP之前,RPC是一种思想、一种解决远程过程调用的技术,而HTTP是一种应用层的传输协议。
RPC | HTTP | |
---|---|---|
传输效率 | 使用自定义的TCP或HTTP2协议,可以让请求报文体积更小,提高传输效率 | 如果是基于HTTP1.1的协议,请求中会包含很多无用的内容 |
性能消耗 | 可以基于thrift实现高效的二进制传输。 | 大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能 |
负载均衡 | 自带负载均衡策略 | 需要配置Nginx,HAProxy来实现 |
服务治理 | 能做到自动通知,不影响上游。 | 需要事先通知,修改Nginx/HAProxy配置 |
应用
RPC的诞生早于HTTP,在多年以前,RPC更多用于C/S架构,客户端通过RPC协议访问自家的服务器。HTTP更多用于B/S架构,浏览器还需要访问其他家的服务器。不过现在已经不怎么区分了,网页、客户端都采用HTTP协议,这样服务器开发维护起来也比较容易。RPC更多用于公司内部集群里,各个微服务之间的通信,同时也不需要像HTTP1.1协议那样需要去考虑浏览器的各种行为,比如302重定向啥的,所以性能更好一些。HTTP2对HTTP1.1进行了很多改进,所以性能可能比很多RPC协议还好,gRPC的底层直接用的HTTP2。
总之,RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。
思考
微服务之间通信为什么用RPC而不用HTTP?
HTTP1.1传输的内容以字符串为主,header和body都是如此。body使用Json来序列化结构体数据。RPC协议定制化成都更高,可以采用体积更小的protobuf或者其他序列化协议去保存结构体数据。
常见的RPC框架:Thrift