feign是rpc协议吗 微服务调用为啥用RPC框架,http不更简单吗?
微服务调用为啥用RPC框架,http不更简单吗?
简单点,HTTP是协议,RPC是概念!实现RPC可以基于HTTP协议(Feign),TCP协议(Netty),RMI协议(Soap),WebService(XML—RPC)框架。传输过程中,也因为序列化方式的不同,又有一些框架和协议,比如Dubbo中的Dubbo协议,gRpc—Protobuf序列化协议等等。其实,都是基于远程调用的概念,何为远程调用?
重点是,RPC就是远程调用,远程调用就是客户端把调用的接口,参数,参数类型,方法,返回值,返回值类型等(这些称为方法签名),通过如上的协议,发送给服务端,告知服务端需要调用的接口方法,这个过程就是RPC的实现过程!HTTP和RPC是不同层面的两个东西!
性能方面,HTTP本身是基于TCP协议的,属于应用层协议,所以HTTP协议本身在实现过程中就会占用大量的资源(内存,带宽等),性能上肯定没有通过TCP直接实现RPC协议快,不管HTTP如何优化肯定的是不如TCP的!而TCP则是依靠字节码,现在普遍采用的是将客户端调用的接口信息,序列化的方式发送给服务端,序列化框架又包含很多(Hession,Protobuf,Kryo等等,序列化性能最高的是Kryo,序列化后字节码最小的是Protobuf),序列化后的字节码越小,占用带宽越少,序列化时间越短,线程IO等待时间就会越小。所以,在具体应用层面有很多可探讨的技术,可以根据自己的硬件能力来选择相应的技术就可以了!
欢迎热爱技术的人来探讨!
Service层和Dao层真的有必要每个类都加上接口吗?
简单来说就是看情況。
主要看你项目:
- 变动情况
- 以及架构
- 人员
- 项目情况
比如,项目原来使用的hibernate,后续可能要切换为mybatis,那么dao就需要使用接口。这就不会影响上层代码的修改。
再比如,项目是个单体应用,任何代码的修改都需要重新编译整个项目,那可以不用接口。而如果项目是分模块编译部署的,那就可以使用接口解耦,假设dao有修改,只需要重新编译部署dao模块即可,不影响上层模块。
再来,如果项目组新手较多,可能简单的代码结构更适合。复杂项目结构的学习成本要高。
假如,项目进度很急,可以使用简单粗暴的方式先撸~
可以用经济学上的成本来解释原因。
经济学上的成本定义是:你做一件事,所放弃的其它事情中,价值最大的那件事的价值就是你做这件事的成本。
你使用接口的成本就是你不使用接口所花费的成本(包括后续的维护成本)。
如果项目变动多、模块部署、项目不急,那使用接口的成本就低于不使用接口的成本,虽然早期可能不用接口看起来更简单;反之,则不用接口的成本低,甚至框架都可以不使用~
毕竟工具是为了提高效率的,何必和自己过不去呢!
RPC和Socket的区别?
RPC(远程过程调用)采用客户机/服务器模式实现两个进程之间相互通信。SOCKET是RPC经常采用的通信手段之一。除了SOCKET,RPC还有其他的通信方法,比如,微软的Windows系统中,RPC也会采用命名管道进行通信。
feign是rpc协议吗 dubbo和feign的区别 springcloud为什么不用rpc
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。