最近有同学在问:"微服务用的HTTP的接口是很好用的,为什么还要用RPC呢?"
然后,大拿老师看到网上有些人的解答,但好像都没有答在点上。
其实这个问题很简单,核心就在大家学的计算机网络上。我们一般学理论,会学OSI的7层模型,但在工作上经常会讲7层和4层。
那7层是什么?7层就是应用层,应用层一般来说是东西封装得很好,直接去使用就好了,一般它的使用承受度很高,但其定制化和扩展性是很差的。
四层就是传输层,那基本上像我们常说的socket就在这个维度上。它是可以不断得去进行扩展和开放,灵活性很高,但使用程度上可能会稍微差一些。
很多同学可能听说过负载均衡,就是一个业务有很多的服务器。负载均衡实际上有7层的、有4层的,你可以在业务端去转发,也可以在传输层去转发,各有各的好处。
但就拿这个微服务来讲,如果走的是7层,就是一个HTTP的返回。它实际上就是一串文本,不管是Json串或者什么,它是一个序列化的。你需要反序列化,然后再转化成对象才能去使用。
那四层是传输层,如果整个环境中的JAVA,最后可以实现类似于JAVA本身的接口调用,那你调完之后,可以直接给你返回一个JAVA对象。虽然底层也是有序列化的过程,但实际上这个过程很少。
这个道理就很简单,如果服务层的费用度很高时,我们不太希望它不断得去做封包解包。
尤其在Spring体系里面,表现就是HTTP层,需要通过Web层的容器注入,才能去取得最终的一些值。虽然这个性能的影响是有的,但是在大部分的场景下都能满足。
但是刚讲,如果有些service能用,也不能说一个service有10个方法, 都要封装成control里面的10个方法接口去调用,这是很累人的。
因为调的时候要包装一层,然后返回的字符串还要自己解封装一层。
那如果在性能要求比较高,或者是这个服务的重用性很高的情况下,一般来说,我们直接用RPC,用四层协议可能会更灵活。
帖子还没人回复快来抢沙发