dubbo和rpc解析

参考 :

https://www.cnblogs.com/twinhead/p/9900605.html (rpc的调用流程)

https://www.jianshu.com/p/1facbe4a35cf (dubbo解析)

https://www.jianshu.com/p/2ad7c7e8bdb1 (dubbo解析)

https://segmentfault.com/a/1190000019896723 (dubbo多种方式代码实现)

1. RPC

什么是RPC ? 

 rpc的全称是 Remote Procedure Call是一种进程间通信方式 , 他允许程序调用另一个地址空间的过程或函数 , 而不用程序员显示编码这个远程调用的细节 , 即无论是调用本地接口/服务 , 还是远程的接口/服务 , 本质上编写的调用代码基本相同

举例说明 :

有两台服务器A , B , 一个应用部署在A服务器上, 想要调用B服务器上应用提供的函数或方法 , 由于不在一个内存空间 , 不能直接调用 , 这时候就需要通过RPC框架的实现解决 , 像是调用本地函数或方法一样去调用远程的函数或方法

RPC框架实现原理 :

在RPC框架中主要有三个角色 : provider , consumer和Registry

RPC框架面试总结-RPC原理及实现

服务提供者启动后主动向注册中心注册机器ip , port以及提供的服务列表

服务消费者启动时向注册中心获取服务提供方地址列表, 可实现软负载均衡和Failover

节点角色说明 : 

  • Server : 暴露服务的服务提供方
  • Client : 调用远程服务的服务消费方
  • Registry : 服务注册与发现的注册中心

RPC调用流程 : 

RPC框架面试总结-RPC原理及实现

一次完整的RPC调用流程(同步调用) :

  1. 服务消费方 (client) 以本地调用方式调用服务
  2. client stub接收到调用后, 负责将方法 , 参数等组装成能够进行网络传输的消息体(序列化)
  3. client stub找到服务地址 , 并将消息发送到服务端
  4. server stub收到消息后进行解码
  5. server stub根据解码结果调用本地服务
  6. 本地服务执行并将结果返回给server stub
  7. server stub将返回结果打包成消息并发送给消费方
  8. client stub接受到消息进行解码
  9. 服务消费方得到最终结果

2.Dubbo

为什么使用dubbo ?

1

Dubbo技术框架

首先看一张图(摘自官网)

摘自官网

节点角色说明 :

节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

整个发布-订阅的过程非常的简单 :

  • 启动容器 加载 运行服务提供者
  • 服务提供者在启动时 , 在注册中心发布注册自己提供的服务
  • 服务消费者在启动时 , 在注册中心订阅自己所需的服务

如果考虑失败或变更的情况 , 就需要考虑下面的过程 :

  • 注册中心返回服务提供者地址列表给消费者 , 如果有变更 , 注册中心将基于长链接推送变更数据给消费者
  • 服务消费者 , 从提供者地址列表中 , 基于软负载均衡算法, 选一台提供者进行调用 , 如果调用失败, 在选另一台调用
  • 服务消费者和提供者 , 在内存中累计调用次数和调用时间 , 定时每分钟发送一次统计数据到监控中心

具体代码实现 : https://segmentfault.com/a/1190000019896723

发布了58 篇原创文章 · 获赞 3 · 访问量 5681

猜你喜欢

转载自blog.csdn.net/hc1428090104/article/details/103816882