RPC就是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
一个完整的RPC主要包括三部分:
1.服务注册中心(Registry):负责将本地服务发布成远程服务,并进行管理,提供给消费者使用
2.服务提供者(RPC Server):负责提供接口定义和服务实现类
3.服务消费者(RPC Client):通过远程代理调用远程服务
过程:
1.服务提供者启动后向注册中心注册机器i、端口以及提供的服务列表
2.服务消费者启动后向注册中心获取服务提供者的服务列表
3.服务注册中心可实现负载均衡和故障切换
1.客户端调用服务
2.客户端存根(Client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体
3.客户端将消息发送到服务端
4.服务端存根(Server stub)收到消息后进行反序列化
5.服务端存根(Server stub)根据结果调用服务
6.执行服务并将结果返回给服务端存根(Server stub)
7.服务端存根(Server stub)将返回结果进行序列化
8.服务端将信息发送给客户端
9.客户端存根(Client stub)接收到结果后,进行反序列化
10.客户端得到结果
RPC 就是要把 2、3、4、7、8、9 这些步骤都封装起来。
1.rpc基于tcp协议,也可以基于http协议;http基于http协议
2.rpc可以让请求报文体积更小,提高传输效率;http请求中会包含很多无用的信息
3.rpc可以基于thrift实现高效的二进制传输,http大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能
4.rpc自带负载均衡,http需要配置nginx来实现
5.rpc内部的服务调用,性能消耗低,传输效率高,服务治理方便,http用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等
主要包括五个节点:Provider、Consumer、Container、Register、Monitor
dubbo工作过程:
1.服务容器负责启动,加载,运行服务提供者。
2.服务提供者在启动时,向注册中心注册自己提供的服务。
3.服务消费者在启动时,向注册中心订阅自己所需的服务。
4.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
架构原理
dubbo架构有10层:
service层(接口层):给服务提供者和消费者实现的(留给开发人员实现)
config层(配置层):针对dubbo进行各种配置。
proxy层(服务代理层):服务提供者调用的是接口,需要实现类,所以先生成动态代理类。
registry层(服务注册层):负责服务的注册与发现
cluster层(集群层):封装多个服务提供者的路由及负载均衡,将多个实例组合成一个服务。
monitor层(监控层):对rpc接口的调用次数和调用时间进行监控。
protocol层(协议层)(远程调用层):封装rpc调用,使用不同协议,如:dubbo、rest、……等。
exchange层(信息交换层):封装请求响应模式,同步转异步。
transport层(网络传输层):封装netty和mina为统一接口。
serialize层:(数据序列化层):用于序列化数据