Liuqichun's Blog

Dubbo、Zookeeper 学习总结

Dubbo、Zookeeper 是常用的分布式服务治理与服务协调框架。Dubbo 是常用 RPC 框架,使用简单易上手;Dubbo 除了具有 RPC 功能外还有服务注册、服务发现的功能(尽管用的不多)。Zookeeper 是 Hadoop 开源项目下的一个子项目,常用来作为服务的注册中心,另外 Zookeeper 也可以用来做分布式锁。

这篇文章的主要内容如下:

dubbo

dubbo 服务注册与发现机制

dubbo 是常用的 RPC 框架,在使用 RPC 功能前,Provider 需要把提供的服务(API)注册到一个地方,然后 Consumer 进行调用。

过程如下图:

image.png

核心角色:

工作流程:

  1. 服务提供者向注册中心登记服务信息(API URL)
  2. 服务消费者订阅注册中心的数据变更
  3. 每当注册中心的服务的地址发生变化,注册中心向消费者推送变更信息
  4. 消费者拿到服务地址后进行 RPC 调用

RPC 过程

RPC(Remote Procedure Call)远程过程调用,是一种可以跨机器、跨进程的方法/函数调用。RPC 技术使得传统单体应用得以拆分,以一个个的模块呈现,模块之间通过 RPC 进行协调通信,形成整个系统。

RPC 离不开网络,如 TCP 连接、套接字、编解码等。

RPC过程图

RPC 调用过程:消费方从注册中心获取地址,调用具体的接口地址;服务提供方接收到消费方调用接口的信息(接口地址、参数等),然后主动调本地接口并传入消费方给的参数,得到结果后把数据传输给消费方。

dubbo 使用

dubbo 使用 demo 地址:https://github.com/elltor/dubbo-demo

  1. 生产者消费者都引用相同的 API 接口(Provider 主动暴露的)

  2. 暴露 API 的 API 接口通常单独是一个模块

  3. Provider 如何使用

image.png

  1. Consumer 如何使用

image.png

zookeeper

zookeeper 应用场景

zookeeper 树型目录

类似 Unix/Linux 系统的目录系统,zookeeper 有着相似的功能,zookeeper 的目录还能存储数据。

image.png

zookeeper 做分布式锁

分布式锁需要满足几个条件:

zookeeper 做分布式锁的原理:

利用 zookeeper 的临时有序节点,其节点在客户端断开连接后自动删除。

实现步骤:

  1. 当一个客户端要申请锁,要在目录下(如/lock)创建临时节点
  2. 客户端获取该目录下的所有创建的节点,把自己创建的节点与最小的节点进行比较
    1. 如果该客户端创建的节点是最小的,则该客户端可认为获取到了锁
    2. 否则,客户端未获取到锁,则监听比自己小(序号小)的节点删除事件
  3. 此时,竞争锁的客户端由于"得不到锁就监听比自己小的节点“机制就形成了一个线性的获取锁的序列
  4. 当监听事件到来时,重复步骤 2

<< Previous Post

|

Next Post >>

#Dubbo #RPC #Zookeeper