RPC远程invoke为什么这么快?

RPC,为什么可以实现像本地一样调用?说到微服务,很多小伙伴一定会想到dubbo,Spring Cloud两个比较主流的微服务的框架,服务与服务之间的调用,都是通过RPC的方式来实现的,实现方式也很简单,就是通过远程服务类,然后通过方法直接invoke,看起来跟本地服务不能说一模一样吧,差不多百分之八九十的样子。调用的速度也很快,跟本地没什么区别,当然越平静的水面,可能底下都是暗流涌动,RPC其实也一样,虽然表面看起来非常简单,实际上底层还是比较复杂的,总结下来我认为有两个比较重要的关键点,跟小伙伴分享一下。

一个是网络通信,dubbo的通信方式是tcp socket长连接,每次调用不需要重新建立连接,有需要直接调用就可以了,而且服务之间一般走的是内网,速度足够快,这个是dubbo。接下来是Spring Cloud,你可能会有疑问,Spring Cloud不是用的HTTP吗?这个是短连接,不是长链接,怎么解释?这个其实是feign内部做了优化,在HTTP调用的底层,其实也是通过tcp socket长连接来处理的,它的HTTP Client,其实是可以复用的,所以说到底还是长连接,不需要重复的去创建这个连接,这个是网络通信方面,可以做到很快。而另一方面则是代理,微服务的框架,都是通过代理的模式把调用远程服务封装起来,包括对出参入参的序列化,线程池的调用,还有负载均衡的选择等等,使得开发人员不需要过度的去关注底层的原理,底层的一些业务直接拿来用就可以了,所以要说RPC为什么可以实现像本地一样调用,总结下来,其实也就两个点,一个是网络通信,一个就是代理

ps: 如果有任何疑问,欢迎评论区给我留言


已有 0 条评论

    感谢参与互动!