直接入正题吧,经过收罗文章,个人理解大概有以下几点:
1.本质区别
http是协议,rpc是方法,rpc的实现可能也会用到http
http在应用层,rpc在传输层(长连接,少了三次握手,不过http2.0也可以链接复用了)
http中所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。而rpc仅通过序列化发送有效数据,省去了很多无效的数据,提高传输效率。
http需要可读性强,包括输入、输出,解析等。rpc就像调用方法一样调用,很简单。
2.其他区别
rpc一般都是和服务相关的
简单来说成熟的rpc库相对http容器,更多的是封装了“服务发现”,"负载均衡",“熔断降级”一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个http servlet容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。
所以为什么要用rpc调用?
因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。
分布式系统以及在一个大系统内服务较多的情况下,服务间的调用当然是越简单越好,而rpc的调用仅涉及到传输协议+序列化协议,而不用考虑一些类似接口可读性等。可以更方便的调用。
本文总结均参考:https://www.zhihu.com/question/41609070