RPC和WebService的关系
RPC(Remote Procedure Call)— 远程过程调用,是一个很大的概念, 它是一种通过网络从远程计算机程序上跨语言跨平台的请求服务,rpc能省略部分接口代码的开发,可以跨机器之间访问对象(java rmi),可以有更方便的加密和更高效的数据传输性能, 而不需要了解底层网络技术的协议, RPC不仅可以走HTTP/HTTPS, 也可以自定义 tcp 协议, 从而省略HTTP繁杂的规则和冗余信息。
web service接口实际上就是RPC调用的一种实现,只考虑RPC的stub层实现, soap restfull都是固定走HTTP/HTTPS, 都有定义了自己的规则和实现(xmll和json等), 规定了server能够提供的服务(web service),也是跨语言跨平台的。参考WebService的概诉
图片.png
可以看到RPC模型中多了一个stub的组件,这个是约定的接口,也就是server提供的服务, web service就是基于这一层考虑了实现的, 至于调用的协议都是固定的, 注意这里的“接口”,不是指JAVA中的interface,因为RPC是跨平台跨语言的,用JAVA写的客户端,应该能够调用用C语言提供的过程。
目前常用的RPC框架:参考
dubbo --阿常用, 虽然现在都是 HSL
RMI
grpc
Hessian
HTTP2发布了, RPC什么时候需要实现自定义 tcp 协议呢?
HTTP1版本的Http(TCP)本身的三次握手协议,就会带来大概1MS的延迟(emmm,这个数据其实我有点不确定了,也可能是几微秒,很早之前做过测试)。 每发送一次请求,都会有一次建立连接的过程,加上Http 1报文本身的庞大,以及Json的庞大,业务量一大, 都需要作一些优化。
http2.0协议已经优化编码效率问题,像grpc这种rpc库使用的就是http2.0协议。
http容器的性能测试单位通常是kqps,RPC自定义tpc协议则通常是以10kqps到100kqps为基准,不仅比HTTPS相比有些优势, 还可以根据具体业务具体实现, 良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。
RPC主要的作用是:
解决分布式系统中,服务之间的调用问题。
远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
RPC主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了。
由于小型企业一般业务简单,不需要进行分布式架构, 小型企业主要还是使用webservicer中的restfull webservic , 部分特殊业务会使用soap sercice