Zookeeper分布式与Dubbo微服务 ,分布式系统概念与ZooKeeper简介

zookeeper简介

顾名思义,zoo动物,keeper管理员,合称动物园管理员

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在
某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。

主要作用

  • 中间件,提供协调服务
  • 作用于分布式系统,发挥其优势,可以为大数据服务
  • 支持java,提供java和c语言的客户端api

什么是分布式系统

  • 很多计算机组成一个整体,一个整体一致对外并且处理同一请求
  • 内部的每台计算机都可以相互通信(rest/rpc远程调用)
  • 客户端到服务端的一次请求到响应结束会经历多台计算机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTioFjHR-1574037815060)(assets/1569209106613.png)]

订单系统的案例…

分布式系统的瓶颈

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mwFypFpQ-1574037815062)(assets/timg.jpg)]

zookeeper的特性(面试的高频题 事务…)

**一致性:**数据一致性,数据按照顺序分批入库。

**原子性:**事务要么成功要么失败,不会局部化。

**单一视图:**客户端连接集群中任一zk节点,数据都是一致的。

**可靠性:**每次对zk的操作状态都会保存在服务端。

**实时性:**客户端可以读取到zk服务器的最新数据。

ZooKeeper安装

JDK的安装

  • 下载Linux的jdk1.8.tar,上传至Linux的服务器
  • 解压缩jdk,配置jdk
  • 测试:java -version 显示版本号

zookeeper下载、安装以及配置环境变量

JAVA_HOME=/usr/jdk8(java的安装位置)
ZOOKEEPER_HOME=/usr/local/zookeeper(zookeeper的安装位置)
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH= P A T H : PATH: PATH:JAVA_HOME/bin: J A V A H O M E / j r e / b i n : JAVA_HOME/jre/bin: JAVAHOME/jre/bin:ZOOKEEPER_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME ZOOKEEPER_HOME

zookeeper文件夹主要目录介绍

bin:主要的一些运行命令,

conf:存放配置文件,其中我们需要修改zk.cfg(zoo_sample.cfg主配置文件)

contrib:附加的一些功能(能够使用python操作zk,能够实现远程rest调用)

dist-maven:mvn编译后的目录

docs:文档

lib:平时依赖的jar包

recipes:案例demo代码

src:源码

zookeeper配置文件介绍,运行zk

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

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

syncLimit:用于集群,master主节点与从节点之间发送消息,请求和应答的时间长度(心跳机制)

dataDir:必须配置(存储相关数据,事务文件…数据)

dataDir=/usr/local/zookeeper/dataDir(必须手动创建)

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

dataLogDir=/usr/local/zookeeper/dataLogDir(必须手动创建)

clientPort:连接服务器的端口,默认2181(在伪分布式的环境下是要变的)

ZooKeeper基本数据模型

zk数据模型介绍(面试可能会问)

  • 是一个树形结构,类似于前端开发中的tree.js组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1cXBSXTW-1574037815063)(D:\TinkingCat\assets\timg.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lsHtcuuv-1574037815064)(D:\TinkingCat\assets\u=4013918334,1685086787&fm=15&gp=0.jpg)]

  • zk的数据模型可以理解为linux/unix的文件目录:/usr/local
  • 每一个节点都称之为znode,它可以有子节点,也可以有数据
  • 每个节点分为临时节点和永久节点,临时节点在客户端断开之后消失
  • 每个zk节点都有各自的版本号,可以通过命令行来显示节点的信息
  • 每个节点数据发生变化,那么该节点的版本号会累加(乐观锁),类似于svn的版本号
  • 删除或者修改过时的节点,版本号不匹配则会报错
  • 每个zk节点存储的数据不宜过大,几k即可,最大1M
  • 节点可以设置权限acl(权限控制列表),可以通过权限来限制用户的访问

zk客户端连接关闭服务端查看znode

客户端连接

./zkServer.sh restart 先要启动zk服务器

./zkCli.sh 启动客户端

查看znode结构

help 查看所有的命令

关闭客户端连接

ctrl+c

zookeeper的作用体现

节点选举

Master节点,主节点挂了之后,从节点就会接手工作
并且,保证这个节点是唯一的,这就是首脑模式,从而保证集群的高可用

统一配置文件管理

只需要部署一台服务器则可以把相同的配置文件,同步更新到其他所有服务器,

此操作在云计算中,用的特别多。比如,修改了redis统一配置

发布与订阅

类似消息队列MQ、amq、rmq,dubbo发布者把数据存在znode节点上,订阅者会读取这个数据

提供分布式锁

分布式环境中,不同进程之间争夺资源类似于多线程中的的锁

集群管理

集群中,保证数据的一致性

ZK基本特性与基于Linux的ZK客户端命令行学习

zookeeper常用命令行操作

  • 通过./zkCli.sh打开zk的客户端进行命令行后台

  • ls与ls2命令

  • get与stat命令

  • create命令的使用

    create /ddm ange 创建持久节点

    create -e /ddm/temp pika 创建临时节点

    create -s /ddm/sort sort 创建顺序节点

  • set命令(乐观锁)

  • delete命令(乐观锁)

watcher事件

特性说明
一次性Watcher是一次性的,一旦被触发就会移除,再次使用时需要重新注册
客户端顺序回调Watcher回调是顺序串行化执行的,只有回调后客户端才能看到最新的数据状态。一个Watcher回调逻辑不应该太多,以免影响别的watcher执行
轻量级WatchEvent是最小的通信单元,结构上只包含通知状态、事件类型和节点路径,并不会告诉数据节点变化前后的具体内容;
时效性Watcher只有在当前session彻底失效时才会无效,若在session有效期内快速重连成功,则watcher依然存在,仍可接收到通知;
  • 创建父节点触发:NodeCreated

    stat /ddm watch ------> create /ddm

  • 修改父节点数据触发:NodeDataChanged

    get /ddm watch -----> set /ddm 123

  • 删除父节点触发:NodeDeleted

    get /ddm watch -----> delete /ddm

  • 创建和删除子节点触发:NodeChildrenChanged(修改子节点不会触发事件,需要把子节点当作父节点)

    ls /ddm watch —> create /ddm/temp 123

    ls /ddm watch —> delete /ddm/temp

watcher的使用场景

  • 统一资源配置

ACL(access control lists)权限控制

  • 针对不同的节点可以设置相关的读写等权限,目的为了保障数据安全性
  • 权限permissions可以指定不同的权限范围以及角色

ACL命令行

getAcl:获取某个节点的acl权限信息

setAcl:设置某个节点的acl权限信息

addauth:输入认证权限信息,注册时输入明文密码(登录),但在zk系统中,密码是以加密的形式存在的

ACL的构成

zk的acl通过[scheme🆔permissions]来构成权限列表

scheme:代表采用的某种权限机制

id: 代表允许访问的用户

permissions: 权限组合字符串

身份的认证有4种方式(scheme):

world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证

super:超级管理员权限

auth与digest的区别

前者是明文,后者是密文

setAcl /path auth:lee:lee:cdrwd与

setAcl /path digest:lee:BASE64(SHA1(password))cdrwa

是等价的,在通过addauth digest lee:lee 后都能操作指定节点的权限

权限字符串缩写 crdwa

create: 创建节点

read: 获取节点/子节点

write: 设置节点数据

delete: 删除子节点

admin: 设置权限

getAcl /ddm
setAcl /ddm world:anyone:crwa
delete /ddm/abc
通过auth设置
create /names ange
getAcl /names
setAcl /names auth:ange:ange:cdrwa
addauth digest ange:ange
setAcl /names auth:ange:ange:cdrwa
setAcl /names auth:rock:rock:cdrwa
getAcl /names
通过digest设置
setAcl /names digest:ange:密文:cdrwa
通过ip设置
setAcl /names/ip ip:127.0.0.1:cdrwa

ACL的应用场景

  • 开发/测试环境分离,开发者无权操作测试库的节点,只能看
  • 生产环境上控制指定的IP的服务可以访问相关节点,防止混乱

ZK四字命令

选举模式和ZooKeeper的集群安装

单机分布式安装zookeeper伪集群

41 w.commands.whitelist=*

server.1=192.168.192.134:2888:3888
server.2=192.168.192.134:2889:3889
server.3=192.168.192.134:2890:3890

使用ZooKeeper原生Java API进行客户端开发

Apache Curator客户端的使用

Dubbo入门到重构服务

分布式锁

课程总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Dubbo是一个高性能的Java RPC框架,它提供了分布式服务框架的支持,可以让开发者轻松地构建分布式应用。而Zookeeper是一个分布式的协调服务,它可以用来管理和协调分布式系统中的各种资源,如配置信息、命名服务、分布式锁等。 当使用Dubbo框架时,我们可以将服务注册到Zookeeper中,这样其他的服务消费者就可以通过Zookeeper来发现和调用这些服务。同时,Zookeeper还可以用来监控服务的状态,当服务出现故障时,Zookeeper可以及时地通知其他服务消费者,从而保证整个分布式系统的稳定性和可靠性。 因此,DubboZookeeper的结合可以为分布式系统的开发和运维提供很好的支持,让开发者可以更加轻松地构建高性能、可靠的分布式应用。 ### 回答2: DubboZookeeper是两个分布式框架,结合起来可以帮助开发者构建高性能、高可用性的分布式应用。Dubbo提供了RPC远程过程调用框架,可以实现跨进程、跨语言的方法调用,支持负载均衡、容错、限流等特性。而Zookeeper是一个开源的分布式协调服务框架,可以协调和管理分布式应用的节点之间的通信。下面详细介绍DubboZookeeper分布式基础。 1、Dubbo Dubbo是一款高性能、轻量级的RPC框架,采用Java编写,支持多种协议(Dubbo协议、HTTP、Hessian、RMI等),通过注册中心连接提供者和消费者。Dubbo可以做到请求耗时的优化、负载均衡、集群容错、异步调用等特性,让开发者可以轻松地构建分布式应用。 Dubbo的工作流程如下:服务提供者(Provider)将服务注册到注册中心,服务消费者(Consumer)从注册中心订阅服务,当服务消费者需要调用服务时,会通过代理对象来远程调用服务提供者,完成方法调用并将结果返回。Dubbo自带了多种注册中心的实现,例如Zookeeper、Redis等。 2、Zookeeper Zookeeper是一个开源的分布式协调服务框架,可以用来协调和管理分布式应用的节点之间的通信。Zookeeper的主要作用是提供一个分布式的协调服务,例如分布式锁、配置管理、分布式队列等。Zookeeper可以减轻分布式应用的复杂性,让开发者可以专注于业务逻辑。 Zookeeper通过基于目录树结构的数据模型来保存数据,并提供了一套完整的API用于操作这些数据。Zookeeper的工作原理是基于主从架构,当Zookeeper集群中的节点出现故障时,可以自动选举出新的Leader节点以继续提供服务。 DubboZookeeper结合起来可以构建一个高可用性的分布式应用。Dubbo将服务注册到Zookeeper,服务消费者从Zookeeper订阅服务,同时Zookeeper提供了注册中心的高可用性和负载均衡等特性。当服务提供者出现故障时,Zookeeper可以自动重新分配服务提供者的角色,从而保证服务的高可用性。 ### 回答3: DubboZookeeper是目前流行的分布式系统基础组件,它们常常被一起使用来构建可靠的分布式服务。在现代复杂的分布式系统中使用基础组件可以极大地简化开发和部署工作,而测试和维护都变得更容易。 Dubbo是一种高性能的分布式服务框架,它提供了统一的服务管理和RPC调用机制。Dubbo的核心在于将服务提供方和服务消费方解耦,同时提供了动态负载均衡和服务治理等功能。Dubbo具有高性能、可靠、易扩展等优点,广泛应用于大型分布式系统中。 Zookeeper是一种开源的分布式配置管理和协调解决方案,可以实现分布式配置管理、命名服务、分布式锁、集群选主和消息队列等功能。Zookeeper具有高可用性、可靠性和易扩展性,可以轻松管理大型分布式系统的配置和状态信息。Zookeeper还提供了建立分布式协调基础设施的基础组件。 在实际应用中,Dubbo通常和Zookeeper一起使用。服务提供方将服务注册到Zookeeper中心,服务消费方从Zookeeper中获取服务地址,并进行RPC调用,通过Dubbo提供的高性能、高可靠性的RPC调用机制实现分布式服务的调用和管理。 总之,DubboZookeeper分布式系统基础构件,通常会共同使用来实现高性能、高可靠性的分布式服务。对于分布式开发者来说,掌握这些基础组件的使用和原理,可以对分布式开发和维护提供很大帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值