Dubbo(RPC框架的实现)

今天来复习一下RPC(远程过程调用)框架的典型实现Dubbo
什么叫远程方法调用呢?顾名思义,在这里就是消费者远程调用服务器的方法
apache官网的Dubbo 框架已经很形象的展示了具体的调用过程:
在这里插入图片描述
简单分析主要分为三个部分:服务提供者、服务消费者、注册中心
整体的思路是:服务提供者启动后,会向注册中心注册提供者信息(包括IP地址,服务名,方法定义等),之后服务消费者启动后,会向注册中心订阅服务信息,一旦服务提供者的信息发生了变更,注册中心将会负责把这些变更通知给消费者吗,之后由消费者调用服务提供者提供的方法,无需经过注册中心,直接调用经过即可。

1.注册中心

注册中心的作用:
可以把服务提供者发生的变更通知给服务消费者。通过长连接将服务 提供者连接,如果服务提供者异常中断,注册中心将会从服务列表中移除该服务。这里选择的是zookeeper(分布式的协调框架),其中会存储服务提供者和服务消费者的相关信息。

2.服务提供者

服务提供者先向注册中心注册,需要将自身的服务名和服务地址发送给注册中心,以便于消费者从服务中心获得服务连接、进行服务调用。
服务提供者需要进行配置的有:

  • 端口信息
  • 应用程序的名字,需要唯一,不能和注册中心其他程序冲突
  • 注册中心的地址
  • 设置连接注册中心的超时时间
  • 指定导出服务的包名

3.服务消费者

服务消费者和提供者需要有公共的AIP接口将两者进行联接起来。
服务消费者需要配置的有:

  • 端口信息
  • 消费者应用程序的唯一名字
  • 注册中心的地址
  • 超时时间

4.调用流程

  • (1)浏览器中访问消费者的地址
  • (2)根据此地址找到控制器中相对应的方法,接下来代用userService
  • (3)但是由于userService是一个接口,具体的实现并不在消费者这边
  • (4)dubbo会根据这个userService生成一个代理对象
  • (5)代理对象会访问注册中心,把userService服务的信息下载至本地,把这些服务缓存在本地,后续的调用不会再依赖注册中心。(这里底层使用的是netty nio非阻塞io跟服务提供者之间进行通信)

Dubbo的特点

  • 其中dubbo中的消费者和提供专人都是java语言,数据格式使用的是二进制
  • 底层是基于TCP,没有跨语言,但因为使用可二进制作为数据传输,因此数据传输效率较高。
  • 基于长连接,适合连接较少,但是相对比较稳定的情况。

rest和dubbo的区别

dubbo:两个使用java 语言的程序之间进行调用,性能上字节服务应用程序之间规模上更适合长连接,规模较小,管理上支持服务治理。
rest:适合不同语言的应用程序之间的调用(任意语言),任意平台之间进行调用,规模较大,更适合短连接。

发布了120 篇原创文章 · 获赞 59 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/lr1916417519/article/details/93648889