chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

java-zookeeper

zookeeper 简介

什么是分布式

  • 多台计算机组成一个整体,且一致对外并且处理同一个请求
  • 内部的每台计算机都可以互相通信(rest/rpc)
  • 客户端到服务短的一次请求到相应结束会经历多台计算机(比如下了一个订单之后,通过多个计算机计算后得到最终的结果)
    mark

怎么拆:对用户不透明,对自己是透明的。根据业务去拆,把业务细分、模块化,服务治理服务化,搞个分布式集群系统。系统负载会大大增加。

分布式系统的瓶颈以及zk的相关特性

瓶颈:
流量特别多的情况下,协调。 特喵的没讲清。

特性:
一致性:数一致性,数据按照顺序分批入库
原子性:事务要么成功,要么失败,不会局部化
单一视图:客户端连接集群中的任一zk节点,数据都是一致的(某个服务挂掉也没大事)
可靠性:每次都zk的操作状态都会保存在服务端(状态回滚?你特喵的在说啥?)
实时性:客户端可以读取到zk服务端的最新数据(高并发七年概况啥,状态抽取???又没讲清)

目录结构

bin:常用命令
conf:配置文件 zk.cfg
contrib: 一些附加功能 (????????)
dist-maven: mvn编译目录(打包、编译、pom、测试类jar包)
docs: 文档帮助 pdf、html
lib: 需要的依赖 jar 包
recipes:案例 demo
src: 源码

zoo.cfg 配置

tickTime: 用于计算的实践单元。比如session超时:N*tickTime

initLimit:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示

syncLimit:用于集群,master主节点与从节点之间发布消息,请求合应答时间长度。(心跳机制) 超过一定的时间数,就是超时。 又没说清

dataDir: 必须配置

dataLogDir: 日志目录,如果不配置会和dataDir公用。

clientPort:连接服务器的端口 默认2181 (伪分布的话需要变化)

Zookeeper 基本数据模型

数据模型介绍

  • 一:
    mark

  • 二:
    mark

  • 三:
    zk的数据模型也可以理解为linux/unix的文件目录:/usr/local/.
    每一个节点都称之为znode,它可以有子节点,也可以有数据
    每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
    临时节点:
    永久节点:

  • 四:
    每个zk节点都各自的版本号,可以通过命令行来显示节点信息
    每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)
    删除/修改过时节点,版本号不匹配则会报错

  • 五:
    每个zk节点存储的数据不宜过大,几K即可
    节点可以设置权限acl,可以通过权限来限制用户的访问

数据模型基本操作

客户端链接
查看znode结构
关部客户端连接

作用体现

  • 一:
    master节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证我们的集群是高可用的
  • 二:
    统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多(假设修改了redis统一配置)
  • 三:
    发布与订阅,类似消息队列MQ(amq,rmq…),dubbo发布者把数据存在znode上,订阅者会读取这个数据
  • 四:
    提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁
  • 五:
    集群管理,集群中保证数据的强一致性
喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道