当前位置: 代码网 > it编程>编程语言>Java > ZooKeeper-定位:能解决什么问题?不能解决什么问题?(1)

ZooKeeper-定位:能解决什么问题?不能解决什么问题?(1)

2024年08月06日 Java 我要评论
一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可获取个前端开发者是什么水平,就是他解决问题的能力有多强。分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可获取[外链图片转存中…(img-Y7QxX9q8-1712991547167)]

zookeeper 的特点

zookeeper 有几个简单特点:

  • zookeeper 的 api:从 文件系统 api 得到的启发,提供简单的 api
  • zookeeper 运行在专用服务器上,跟业务逻辑分离,保证了高容错性可扩展性

zookeeper 是存储设施,但特别注意

  • zk上存储的数据聚焦为:协作数据元数据),而不是应用数据,应用数据有自己的存储方案,例如 hdfs 等
  • zk 本质上,可以看作一种特殊的 fs

特别说明:

zookeeper 的使命

zk 要解决的核心问题:

zk 目标:简化分布式应用开发中,多进程协作问题。为分布式应用,提供高效可靠的分布式协调服务(基础服务),例如:

  • 统一的命名服务
  • 分布式锁
  • 进程崩溃检测
  • leader 选举
  • 配置管理:配置变更时,及时下发到各个 client。

一个简单的问题:多进程的协作是什么?尼玛呀,有完没完,啥问题你都有,面对这个掉咋天的脑壳,还是回答一下。

多进程协作,整体分为 2 类:

  1. 协作:多进程需要一同处理某些事情,一些进程采取行动是的其他进程能够正常工作,例如:主从结构,m 向 s 分配任务,s 才会执行,否则 s 就保持空闲状态
  2. 竞争:两个进程不能同时工作,一个进程必须等待另个进程执行完毕,例如:主从结构,m 节点失效后,很多 s 都想成为 m,这时,就需要互斥锁,只有第一个获得锁的 s 成为 m

特别说明:

  1. 不跨网络协作:多进程,可以在同一台物理主机上,同步原语很方便(比如?管道、共享内存、消息队列、信号量)
  2. 跨网络协作:多进程,分布在不同的物理主机上,zk 关注这一类

跨网络多进程协作,进程通信,基本思路有 2 个:

  1. 消息机制:通过网络,直接信息交换,多消息传递算法,实现同步原语
  2. 共享存储:利用外部共享存储,实现多进程协作,要求共享存储提供有序访问,zk 采用这种方式

真实系统中,跨网络通信,有几个共性问题:

  1. 消息延迟:由于网络原因,后发送先到达
  2. 处理器性能:由于系统调度原因,消息到达后,延迟处理
  3. 时钟偏移:不同物理主机,时钟发生偏移

zookeeper 特性

zookeeper 解决的本质问题

分布式系统的一致性问题:

  1. 消息传递:延迟性,先发送的消息,不一定先到达;
  2. 消息传递:丢失性,发送的消息,可能丢失;
  3. 节点崩溃:分布式系统内,任何一个节点都可能崩溃;

在这种情况下,如何保证数据的一致性?

  1. 提案投票:基于投票策略,2pc
  2. 选举投票:基于投票策略,投出优先级最高的节点(包含最新数据的节点)

paxos 目标:解决分布式一致性问题,提高分布式系统容错性的一致性算法。

paxos 本质:基于消息传递高度容错一致性算法

zookeeper 定位

zookeeper 是:

  1. 分布式协调服务
  2. 高效、可靠
  3. 方便应用程序,聚焦业务逻辑开发,而不需要过多关注分布式进程间协作细节

zookeeper 不直接暴露原语,而是,暴露一部分调用方法组成的 api,类似文件系统的 api,支持应用程序实现自己的原语

zookeeper 特性

zookeeper 可以保证如下分布式一致性特性:

  • 顺序一致性:同一个 client 发起的事务请求,严格按照发起顺序执行
  • 原子性:事务请求,要么应用到所有节点,要么一个节点都没有应用
  • 单一视图:client 无论连接到哪个节点,看到的服务端数据都是一致的(note:不准确,其实是最终一致性
  • 可靠性:事务一旦执行成功,状态永久保留
  • 实时性:事务一旦执行成功,client 并不能立即看到最新数据,但 zookeeper 保证最终一致性
zookeeper 设计目标

zookeeper 致力于提供高性能高可用顺序一致性的分布式协调服务,保证数据最终一致性

目标一:高性能(简单的数据模型)
  1. 采用树形结构组织数据节点;
  2. 全量数据节点,都存储在内存中;
  3. follower 和 observer 直接处理非事务请求;
目标二:高可用(构建集群)
  1. 半数以上机器存活,服务就能正常运行
  2. 自动进行 leader 选举
目标三:顺序一致性(事务操作的顺序)
  1. 每个事务请求,都会转发给 leader 处理
  2. 每个事务,会分配全局唯一的递增id(zxid,64位:epoch + 自增 id)
目标四:最终一致性
  1. 通过提议投票方式,保证事务提交的可靠性
  2. 提议投票方式,只能保证 client 收到事务提交成功后,半数以上节点能够看到最新数据

zookeeper 出现之前

zk 出现之前,分布式系统常用两种方式,实现多进程协作:

  1. 分布式锁管理器
  2. 分布式数据库

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

分享一些简单的前端面试题以及学习路线给大家,

个前端开发者是什么水平,就是他解决问题的能力有多强。

分享一些简单的前端面试题以及学习路线给大家,

[外链图片转存中…(img-y7qxx9q8-1712991547167)]

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com