简述分布式RPC框架

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可以解决这个问题。

应用、服务、服务注册表之间的关系见下图:





猜你喜欢

转载自blog.csdn.net/JameBing/article/details/79610994