dubbo+zookeeper总结

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

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

  • dubbo RPC使用
  • RPC 过程
  • dubbo 使用
  • zookeeper 应用场景
  • zookeeper 做分布式🔒

dubbo

dubbo 服务注册与发现机制

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

过程如下图:

image.png

核心角色:

  • 提供者(Provider)提供具体的服务
  • 消费者(Consumer)调用具体的服务
  • 注册中心(Registry)记录服务的地方,通常记录服务(API的URL)
  • 监控中心(Monitor)监控状态

工作流程:

  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提供了树型目录,目录上可以直接存放数据,zookeeper作为服务注册中心是,服务提供者的服务地址就是存储在树型目录上的
  • 分布式管理、集群管理
    • 服务注册于发现(基于监听器)
    • 分布式锁🔒

zookeeper树型目录

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

image.png

zookeeper做分布式锁

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

  • 保证资源互斥:多个实例同一时刻只有一个能获取到
  • 避免死锁:客户端进程挂掉或由于网络原因(延迟、丢包等)保证锁被释放
  • 高效获取/释放锁:尽量不阻塞获取锁🔒,获取不到锁及时返回失败等
  • 可重入:看应用场景,如果需要可以设计可重入

zookeeper做分布式锁的原理:

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

实现步骤:

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

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×