程序员:面试官,ELK原来这么简单

广播模式需要保证 proposal 被按顺序处理,因此 zk 采用了递增的事务 id 号(zxid)来保证。所有的提议(proposal)都在被提出的时候加上了 zxid。

实现中 zxid 是一个 64 为的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch。低 32 位是个递增计数。

当 leader 崩溃或者 leader 失去大多数的 follower,这时候 zk 进入恢复模式,恢复模式需要重新选举出一个新的 leader,让所有的 server 都恢复到一个正确的状态。

如果往多了来讲,它内部原理具体分为以下十项:

  1. 请求、事务和标识符
  2. 群首选举
  3. Zab:状态更新的广播协议
  4. 观察者
  5. 服务器的构成
  6. 本地存储
  7. 服务器与会话
  8. 服务器与监视点
  9. 客户端
  10. 序列化

**面试官:**怎么样小伙子?知道了吗?

**程序员Y:**虽然听了半天我也没有听懂你说的什么,但是感觉很有道理的样子,告辞!

程序员Y头也没回的走出了面试房间…

**面试官赶忙擦了一把汗:**还好是我知道的zk,要是前面几个什么kafka、RabbitMQ,就出丑大了

**面试官(拿出手机,拨出一个电话):**喂,是人事吗?你们怎么回事?我这里招的是中高级程序员,给出的薪资是24K,你们是不是把隔壁部门的初级岗位应聘者丢我这里来了?

看完上面的小故事,小on就来给大家分享Zookeeper的相关知识了。

注意:以下内容摘自一份283页的pdf,《Java核心技术点》↓
还有一些大厂面试真题↓

Zookeeper 概念

Zookeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。Zookeeper 提供了一个类似于 Linux 文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。

Zookeeper 角色

Zookeeper 集群是一个基于主从复制的高可用集群,每个服务器承担如下三种角色中的一种

Leader

    一个 Zookeeper 集群同一时间只会有一个实际工作的 Leader,它会发起并维护与各 Follwer及Observer间的心跳。 所有的写操作必须要通过 Leader 完成再由 Leader 将写操作广播给其它服务器。只要有超过半数节点(不包括 observeer 节点)写入成功,该写请求就会被提交(类 2PC 协议)。

Follower

言尽于此,完结

无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。

    第一,设计模式能让专业人之间交流方便,如下:

程序员A:这里我用了XXX设计模式

程序员B:那我大致了解你程序的设计思路了

    第二,易维护

项目经理:今天客户有这样一个需求…

程序员:明白了,这里我使用了XXX设计模式,所以改起来很快

    第三,设计模式是编程经验的总结

程序员A:B,你怎么想到要这样去构建你的代码

程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题

    第四,学习设计模式并不是必须的

程序员A:B,你这段代码使用的是XXX设计模式对吗?

程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的

从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!

资料领取方式:点击这里下载](https://gitee.com/vip204888/java-p7)

[外链图片转存中…(img-7no8gpi6-1628633146733)]

搜集费时费力,能看到此处的都是真爱!

经验分享 程序员 微信小程序 职场和发展