亲 , Zookeeper了解一下 : 概述

news/2024/7/3 15:13:21

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在学习的过程中,我们总需要一个来自灵魂的拷问: 为什么?

为什么会产生Zookeeper

这个问题有深度,那要从五百万年说起,在遥远的塞伯坦星球.....

扯远了...

在遥远在单机单服务的时代 , 想要扩展服务 , 只能增加硬件配置 . 现在看来 ,有以下问题:

  1. 硬件贵 (有钱的老板也能接受)
  2. 扩展麻烦 (在还没有实时扩展的云服务时,加硬件就意味着宕机)
  3. 没有容错 (一旦生产异常,服务就挂了,灾难)

这时候,分布式应运而生,将业务拆分开来,比如:仓库,订单,支付等等,各管各的 , 风险拆分, 比如: 订单服务挂了,不影响仓库和支付.

这是分布式的初始模式, 风险少了, 再用个Nginx做个代理,集群化.然后似乎大概也许Mybe可以 浪里个浪了 ~~

当项目越来越大,模块越来越多.又来问题了.

一开始的服务拆分并不一定很理想, 再加后期业务迭代, 可能产生很多个模块,各模块间的调用混乱 , 一条业务线中不知道串了多少个模块.

下图参考下: T_T

当你想了解一条线的时候,心里可不止一万个那啥...

那么急需,迫切的需要一个可以把这个东西治理一下的工具.

buling~ buling ~ zookeeper来啦

zookeeper解决了哪些问题

先来感受下使用zookeeper后的赶脚

啊.kimoji...

概念

Zookeeper是一个高性能的分布式系统的协调服务

Zookeeper特性

  1. 最终一致性

    保证各个节点服务器数据能够最终达成一致,zk的招牌功能

  2. 顺序性

    从同一客户端发起的事务请求,都会最终被严格的按照其发送顺序被应用到zk中,这也是zk选举leader的依据之一

  3. 可靠性

    凡是服务器成功的使用一个事务,并完成了客户端的响应,那么这个事务所引起的服务端状态变更会被一直保留下去

  4. 实时性

    zk不能保证多个客户端能同时得到刚更新的数据,所以如果要最新数据,需要在读数据之前强制调用sync接口来保证数据的实时性

  5. 原子性

    数据更新要么成功要么失败

  6. 单一视图

    无论客户端连的是哪个节点,看到的数据模型对外一致

Zookeeper中的四种角色

  1. Leader

    更新系统状态,处理事务请求,负责进行投票的发起和决议

  2. Leaner

    1. Follower

    处理客户端非事务请求,并向客户端返回结果. 将写事务请求转发给Leader,同步Leadker的状态. 选举过程中参与投票.可被选举.

    1. Observer

    接收客户端读请求,将客户端写请求转发给Leader,不参与投票过程,只同步Leader状态.目的是为了扩展系统,提高读取速度.

  3. Client

    请求发起方

Zookeeper的写入流程

数据写入最终一致性ZAB算法 .

Leader负责处理写事务请求,Follower负责向Leader转发写请求,响应Leader提出的提议.

Zookeeper选举机制

先了解几个关键字:

状态

  • looking : 寻找Leader状态,处于该状态需要进入选举过程.或正在进行选举.
  • Leading : Leader的状态,表示当前服务的角色为Leader
  • Following : 从节点 , Leader已经选出,当前为从节点
  • Observer : 观察者状态

事务ID

  • zxid : 64位数字,Leader分配,全局唯一且递增.值越大,表示操作越新.

流程

  1. 每个节点发出一个投票,内容是(myid,zxid)
  2. 接收来自各个节点的投票,
  3. 进行投票处理和统计
    1. zxid对比,选取较大的
    2. zxid一样的,选取myid较大的
    3. 当有一半以上的服务器选出同一个节点.选举结束.
  4. 被选举的Leader节点更新状态

Zookeeper的数据模型:znode

znode是zk特有的数据模型,是zk中数据最小单元,znode上能保存数据,通过挂载子节点形成一个树状的层次结构。根由/斜杠开始。

节点类型

  • 持久节点
  • 临时节点
  • 顺序节点
  • 不同节点类型的组合。

Zookeeper版本

  1. 当前数据节点的版本号
  2. 当前数据子节点版本号
  3. acl权限变更版本号

主要用来通过版本号来实现分布式锁的一些控制

Zookeeper : znode watch机制

znode watch机制也是zk的核心功能之一,是配置管理功能的基石。client端通过注册watch对象后,只要相应的znode触发更改,watch管理器就会向客户端发起回调,可借此机制实现配置管理的分布式更新和同步队列等场景。

参考

[1]洛神独舞:Zookeeper架构原理和使用场景总结

转载于:https://my.oschina.net/ElEGenT/blog/2875083


http://lihuaxi.xjx100.cn/news/236801.html

相关文章

Java归去来第2集:利用Eclipse创建Maven Web项目

一、前言 如果还不了解剧情,请返回第一集的剧情 Java归去来第1集:手动给Eclipse配置Maven环境 二、利用Eclipse创建Maven Web项目 选择File-New-Project 然后选择Maven-Maven Project 选择项目所在的工作空间目录,然后下一步 选择模…

区块链+能源,能擦出什么样的火花?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链从闯入能源行业的那一天起,就引起了行业内外人群的高度关注,关于能源区块链的争论与质疑不断搅动人们的神经。区块链能…

pandas 100题

文章目录1.将下面字典创建为DataFrame2.提取含有字符串“python”的行3.输出df所有列名4.修改第列名5.统计grame列中每种编程语言出现的次数6 将空值用上下值的平均值填充7 列值大于3的数8 去重列9 计算列平均值10 将列转换列表11 保存到excel12 查询行列13 列值大于3小月7的值…

mysql主从配置读写分离笔记

第二次回头看了,第一次学完后感觉都会了,回头再看才发现什么都想不起来了。还得查资料再学习,虽然很简单。还是做个笔记吧!笔记有点糙 就是自己看的因为主要是测试主从和读写分离 所以直接 yum install -y mariadb mariadb-server…

vue---进行post和get请求

参考文档&#xff1a; https://www.jb51.net/article/125717.htm 使用axios <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 基本使用方法&#xff1a; get请求&#xff1a; // Make a request for a user with a given ID axios.ge…

迅雷CEO陈磊 | 迅雷的区块链生态梦

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 迅雷正在区块链的道路上越走越远。 5月16日&#xff0c;迅雷(NASDAQ:XNET)召开区块链生态及新品发布会。会上&#xff0c;迅雷CEO陈磊提出了在迅雷…

新闻网站个人中心(查询用户的关注信息)流程分析

1.获取当前用户登录状态 2.获取参数 用户的id user_id 3.获取新闻作者的id 4.如果新闻作者id和用户id 5.返回内容给前端转载于:https://www.cnblogs.com/zxt-cn/p/9158860.html

输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和

题目描述&#xff1a; 输入字符串&#xff0c;包含数字&#xff0c;大小写字母&#xff0c;编程输出出现做多的数字的和。 思路&#xff1a; 1.创建输入对象2.输入字符串3.利用正则将字母分离出&#xff0c;剩余的每一个字符串即为待统计的每一个数字&#xff0c;存入字符串数组…