-
什么是rpc
- RPC,即 Remote Procedure Call(远程过程调用),采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答通知。在服务端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务端获得进程参数,进行业务操作,发送答复信息,等待下一个调用信息。最后,客户端调用进程接受答复信息,获得答复结果,然后继续业务操作。
- 通俗一点就是,调用远程计算机上的服务,就像调用本地服务一样。
- RPC可基于HTTP或TCP协议实现,Web Service是基于HTTP 协议的RPC,它具有良好的跨平台性,但其性能却不如基于TCP 协议的 RPC。会两方面会直接影响 RPC 的性能,一是传输方式,二是序列化。
- TCP是传输层协议,HTTP是应用层协议,传输层较应用层更为底层,在数据传输方面越底层越快。就序列化而言,Java提供了默认的序列化方式,但是在高并发场景下会带来瓶颈, 现在也出现了好多优秀的序列化框架,从而提供更高效的性能,如protobuf、hessian、jackson等。
-
RPC的简易结构
-
框架中使用的技术
Spring:它是最强大的依赖注入框架,也是业界的权威标准。
Netty:它使 NIO 编程更加容易,屏蔽了 Java 底层的 NIO 细节。
Protostuff:它基于 Protobuf 序列化框架,序列化更高效。
ZooKeeper:提供服务注册与发现功能,开发分布式系统的必备选择,同时它也具备天生的集群能力。 -
工程目录结构
-
目录结构结构说明
rpc-client:创建netty客户端,通过动态代理调用对象,服务发现。
rpc-common:序列化、编码、解码
rpc-registry:服务注册、服务发现
rpc-sample-app:模拟远程调用的应用端
rpc-sample-interfaces:服务接口
rpc-sample-service:服务实现,具体业务逻辑编写
rpc-server:netty服务端,将业务实现发布为远程服务 -
源码
转载于:https://my.oschina.net/riseee/blog/1586122