当前位置: 首页 > 编程日记 > 正文

亲 , Zookeeper了解一下 : 概述

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

相关文章:

wordpress jquery加载如何实现?

2019独角兽企业重金招聘Python工程师标准>>> 为什么写这篇文章? 因为之前在wordpress里面用jquery的时候没注意,这次因为要优化网站把没用的插件删了,结果发现有的jquery功能失效了,调试了许久才发现可能是jQuery没有定…

百度与华为重磅合作!李彦宏:技术是百度的信仰

导语:这是百度第三年举办AI开发者大会。一生二,二生三,三生万物。AI虽然不能产生万物,但是正在“唤醒万物”。 作者 | 阿司匹林 出品 | AI科技大本营(ID:rgznai100) 在今天上午举行的的百度AI开发者大…

已知空间一点到另外两点直线的距离

转自:http://www.cnblogs.com/clarkustb/archive/2008/11/04/1326500.html 已知空间一点到另外两点直线的距离设空间中的三点为M1,M2,M3,分别用矢量a,b表示方向向量M1M2和M1M3,则: 1. M3到M1,M2连线的距离为|axb|/|a|,这里|.|表示向量的…

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…

CxImage图像处理类库

转自&#xff1a;http://blog.csdn.net/byxdaz/archive/2009/04/10/4061324.aspx CxImage是一个可以用于MFC 的C图像处理类库类&#xff0c;它可以打开&#xff0c;保存&#xff0c;显示&#xff0c;转换各种常见格式的图像文件&#xff0c;比如BMP, JPEG, GIF, PNG, TIFF, MNG…

设计模式学习2 工厂模式

工厂模式其实就是简单模式的升级版本&#xff0c; 简单模式将界面与业务逻辑区分开&#xff0c;但是如果不停的增加计算器的运算方式&#xff0c;简单模式中的工厂Factory 中判断的业务逻辑会变非常复杂&#xff0c;这不符合封装的原则。 所以在此之上将Factory抽象了出来&…

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

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

优化思路千万种,基于下界函数的最优化效率如何?

作者丨stephenDC来源 | 大数据与人工智能&#xff08;ID:ai-big-data&#xff09;导读&#xff1a;生活中我们处处面临最优化的问题&#xff0c;比如&#xff0c;怎么样一个月减掉的体重最高&#xff1f;怎么样学习效率最高&#xff1f;怎么样可以最大化实现个人价值&#xff1…

Quintum 语音网关设置方法

Quintum 网关基本配置 Quintum 网关基本配置 登陆方式&#xff1a;方法一&#xff1a;串口登陆&#xff08;1&#xff09;&#xff0e;用配套的串口线连接网关的CONSOLE口和电脑的串口。 &#xff08;2&#xff09;&#xff0e;开启电脑的的超级终端&#xff0c;路径如下&#…

Activex test contact failed to create control 未指定的错误 控件无法加载的原因

转自&#xff1a;http://blog.csdn.net/phker/archive/2009/12/25/5073402.aspx 本文指的是vc项目的activex 出现这个问题, 我总结了总共有以下几点,可能还有其他原因: 1.中文问题:如果你的项目类型是多字节的,而不是unicode编码的,你可能要注意这个问题了,我就发生了这个问题…

人工智能技术在内容行业的应用:AI对中长尾内容平台还是奢侈品

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;随着人工智能技术的发展&#xff0c;媒体行业本身在不断地发生变化&#xff0c;从传统媒体到新媒体&#xff0c;改变的不仅是信息载体&#xff0c;更是一种新的逻辑&#xff0c;无论是内容…

QQ爬虫-爬取QQ空间

背景&#xff1a;在一篇个人博客看到了相关的爬虫的知识&#xff0c;个人比较有兴趣&#xff0c;就花了点时间研究了一下&#xff0c;主要通过好友空间的互动(相互访问量&#xff0c;点赞&#xff0c;评论&#xff0c;以及其他互动)&#xff0c;以及好友之间聊天的活跃度&#…

perl编程手册

2019独角兽企业重金招聘Python工程师标准>>> perl编程手册: -------------------------------手册-------------------------------- perl手册.chm http://vdisk.weibo.com/s/moN-p -------------------------------视频-------------------------------- 俺的…

VC使用ActiveX控件常见问题

转自&#xff1a;http://lingchuangsong.blog.163.com/blog/static/126932322008631104133309/ 一方面&#xff0c;它表示将你联系到Microsoft、Internet和业界的新技术的小型快速的可重用组件。它与开发语言无关&#xff0c;任何支持 ActiveX控件的软件开发平台&#xff08;如…

你绝没用过的一款高级空间可视化工具

作者 | Shan He转载自高级农民工&#xff08;ID: Mocun6&#xff09;说起 Python 中的可视化&#xff0c;我们一般用的最多的是 Matplotlib&#xff0c;绘制一般的图效果都很好。有时候也会用风格比较好看的 Pyecharts 库&#xff0c;尤其是在展示空间地图上的数据时。不过它的…

揭秘vue——vue-cli3全面配置

★ vue-cli3 全面配置 ★ Nuxt.js 全面配置 创建项目 配置环境变量 通过在package.json里的scripts配置项中添加--mode xxx来选择不同环境 在项目根目录中新建.env, .env.production, .env.analyz等文件 只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端…

周礼栋:现在是计算机系统和网络研究“最好的时代”

编者按&#xff1a;随时随地使用各种系统和工具&#xff0c;对现代人来说早已是司空见惯的事&#xff0c;但这一切完美工作的技术和服务并不是凭空出现的。正是因为微软亚洲研究院副院长周礼栋博士和他带领的团队这样从事系统和网络研究工作的研发人员在幕后不断的努力和创新&a…

ChaLearn Gesture Challenge_2:examples体验

前言&#xff1a; 在上一篇博文ChaLearn Gesture Challenge_1&#xff1a;CGD数据库简单介绍中已经简单介绍过CGD2011数据库&#xff0c;了解到该数据库可以作为公开的数据库来测试在深度信息和RGB信息上的手势识别。当然了&#xff0c;也可以通过参加这个挑战赛来对比自己的手…

vs2008 外部调用ActiveX控件接口方法

转自&#xff1a;http://topic.csdn.net/u/20090605/16/018e26e9-06e2-4e0d-8099-bc8eb326afde.html sndaxdrs: 初学activeX &#xff0c;我写的一个 activeX控件测试程序。 分别调用两个 自定义方法&#xff0c; 分别出现 “找不到成员”&#xff0c;和“非选择性的参数”的提…

设计模式之禅笔记

2019独角兽企业重金招聘Python工程师标准>>> 1.设计原则 1)单一职责原则 There should never be more than one reason for a class to change &#xff08;就一个类而言&#xff0c;应该只有一个引起它变化的原因&#xff09; 用于控制类的粒度大小,防止类过于复杂…

vs2008部署问题

转自&#xff1a;http://tangxingqt.blog.163.com/blog/static/2771087220098214755269/ 参考资料 1、VS2005解决"应用程序配置不正确&#xff0c;程序无法启动"问题 2、VS2005安装文件 "由于应用程序配置不正确&#xff0c;应用程序未能启动" 3、Micro…

expdp数据泵导出操作

数据泵需要在本地执行&#xff0c;不可以远程登录操作。 数据泵需要建立目录directory --sys下 create directory su as d:\xs 目录的数据字典是dba_directories SYSncbeta>select owner,directory_name,directory_path from dba_directories; 要求导出scott用户下的emp表…

slf4j 日志监控

问题描述 监控系统 新系统起步&#xff0c;旨在监控原有系统的各种问题。主要的一部分&#xff0c;就是监视原有系统的日志。 日志&#xff0c;是Java企业级应用开发必不可少的一部分&#xff0c;市场上有诸多日志框架。我们选用slf4j。 日志有以下级别&#xff1a; TRACE, DEB…

阿里90后科学家研发,达摩院开源新一代AI算法模型

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;AI科技大本营7月5日消息&#xff0c;阿里达摩院宣布开源新一代人机对话模型ESIM。该算法模型提出两年多&#xff0c;已被200多篇论文引用&#xff0c;更曾在国际顶级对话系统评测大赛&#xff08;DSTC7&…

在vs2008中配置OpenCV2.2

1、下载OpenCV2.2&#xff1a;http://www.opencv.org.cn/index.php/Download 2、下载后解压缩OpenCV-2.2.0-win.zip&#xff1b; 3、下载CMake&#xff1a;http://www.cmake.org/cmake/resources/software.html 4、安装CMake&#xff1b; 5、运行cmake-gui&#xff0c;在wh…

开发者,什么是你真正关心的问题?| AI ProCon 2019

2018 年&#xff0c;上千名开发者与上百名技术专家齐聚一堂&#xff0c;在 CSDN 2018 AI开发者大会上以“AI技术与应用”为核心&#xff0c;深度聚焦人工智能的技术创新与行业应用&#xff0c;真正做到了“只讲技术&#xff0c;拒绝空谈”。今年&#xff0c;在产业智能化的浪潮…

C语言程序的结构

1.一个程序由一个或多个源程序文件组成。 a.预处理指令 b.全局声明 c.函数定义 2.函数是C程序的主要组成部分。 3.一个函数包括两个部分。 a.函数首部 int 函数类型 max 函数名 (int 函数参数类型 x, 函数参数名 int 函数参数类型 y…

flask 核心 之 应用上下文 及 请求上下文

Werkzeugs 是 Flask 的底层WSGI库。什么是WSGI&#xff1f; 一段简单的app&#xff1a; def dispath_request(self, request):return Response(Hello World!)def wsgi_app(self, environ, start_response):request Request(environ)response self.dispath_request(request)re…

vs2008中常见错误解决方法汇总

1、error C2859 vc90.idb is not the idb file that was used when this precompiled header was created。 解决方法&#xff1a;选中工程-->点击右键属性-->Configuration Properties-->C/C-->Output Files-->Program Database File Name中的$(IntDir)/vc90.p…

加速AI应用落地,英特尔AI 2.0的进阶之道

人工智能模型的复杂度不断增加&#xff0c;对内存的需求也越来越大。深度学习的进一步发展需要解决内存限制问题&#xff0c;而当前的解决方案无法利用所有可用计算&#xff0c;业内人士逐渐意识到需要专用芯片来支持深度学习训练和推理。英特尔则在人工智能方面提供优越的硬件…