zookeeper系列(一)—概要和基本特点

zookeeper系列(一)—基础知识

前言

大家好,牧码心今天给大家推荐一篇zookeeper系列(一)—概要和基本特点的文章,在实际工作中有很多应用场景,希望对你有所帮助。内容如下:

  • 背景
  • 特点
  • 数据模型
  • 会话

背景

在分布式场景中,往往会产生多个节点之间协同的问题。如:

  1. 每天的定时任务由谁哪个节点来执行?
  2. RPC调用时的服务发现?
  3. 如何保证并发请求的幂等

这些问题可以统一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能上也不可取。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。
ZooKeeper则是用于分布式应用程序的协调服务。它公开了一组简单的API,分布式应用程序可以基于这些API用于同步,节点状态、配置等信息、服务注册等信息。其由JAVA编写,支持JAVA 和C两种语言的客户端。
图片

特点

  • 共享空间
    zookeeper允许分布式程序之间通过一个共享的命名空间进行协调-这个命名空间被组织成类似linux文件系统的方式,这个空间由多个数据寄存器(data registry)组成,这个在zk中叫做znode,他们类似文件和目录。但与典型的文件系统不同,zk的数据保存在内存中,这意味着zk可以获得高吞吐量和低延迟。
  • 可复制
    zk服务(zk service)的服务器们必须相互之间能够感知,它们在内存中维护状态的映像,同时持久化事务日志以及内容快照。客户端连接到单个ZooKeeper服务器。客户端维护一个TCP连接,通过它发送请求、获取响应、获取监视事件和发送心跳。如果到服务器的TCP连接中断,客户端将连接到另一个服务器。
  • 读多写少的工作模式中很快

数据模型

zookeeper 中数据基本单元叫节点,节点之下可包含子节点,最后以树级方式程现。每个节点拥有唯一的路径path。客户端基于l路径上传节点数据,zookeeper 收到后会实时通知对该路径进行监听的客户端。结构如图:
在这里插入图片描述

会话

Session 指的是 ZooKeeper 服务器与客户端会话。在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接。客户端启动的时候,首先会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向Zookeeper服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的Watch事件通知。

Session的sessionTimeout值用来设置一个客户端会话的超时时间。当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。

在为客户端创建会话之前,服务端首先会为每个客户端都分配一个sessionID。由于 sessionID 是 Zookeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 sessionID 的,因此,无论是哪台服务器为客户端分配的 sessionID,都务必保证全局唯一。

发布了91 篇原创文章 · 获赞 27 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/xhwwc110/article/details/105038897
今日推荐