RPC定义:
远程过程调用,是实现分布式计算的基础。
实现方式:
1.基于TCP协议的RPC;
2.基于HTTP协议的RPC;
处理过程:
一个简单的RPC过程包括一个服务消费者和服务提供者,服务消费者需要使用服务提供者的提供的服务,就需要传给服务提供方相关的信息,这些信息包括服务名称(实际上是一个接口),方法名称,方法的参数类型,参数个数等参数列表信息以及对应的参数,服务提供者根据这些信息返回处理结果给服务消费者,一次RPC完成。
时序图:
1、 客户端(Client):服务调用方
2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方
3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务
4、 服务端(Server):真正的服务提供者。
搭建过程:
1、我们需要将服务部署在分布式环境下的不同节点上,通过服务注册的方式,让客户端来自动发现当前可用的服务,并调用这些服务。这需要一种服务注册表(Service Registry)的组件,让它来注册分布式环境下所有的服务地址(包括:主机名与端口号
)可以使用ZooKeeper技术。
2、序列号和反序列化, Java 提供了默认的序列化方式,但在高并发的情况下,这种方式将会带来一些性能上的瓶颈,使用市面比较优秀的序列化框架,比如:Protobuf、Kryo、Hessian、Jackson、fastJson 等,它们可以取代 Java 默认的序列化,从而提供更高效的性能。
3、支持高并发,传统的阻塞式 IO 显然不太合适,因此我们需要异步的 IO,即 NIO。Java 提供了 NIO 的解决方案,Java 7 也提供了更优秀的 NIO.2 支持,用 Java 实现 NIO 并不是遥不可及的事情,只是需要我们熟悉 NIO 的技术细节。现在市面常用的Netty可以解决这个问题。
应用、服务、服务注册表之间的关系见下图: