首页 > 编程知识 正文

HashMap的底层实现原理,zset底层数据结构

时间:2023-05-04 04:43:15 阅读:40124 作者:4972

本文纯属个人笔记,通俗易懂,转载请附上原文链接! 有些资料摘自网络,有雷同,完全是巧合!

有关详细信息,请访问个人博客https://www.rabbitai.cn

Zookeeper到底是什么! 学一件事,不知道他是什么,为什么有学习的心情!

首先,Zookeeper是Apache的java项目,属于Hadoop系统并充当管理员。

而且一看到官方网站的专有名词,就无法理解。

Zookeeper主页包含zookeeperisacentralizedserviceformaintainingconfigurationinformation,naming,providingdistributedsynchon

###Zookeeper能干吗?

####1.配置管理

这个很容易理解。 分布式系统有很多机器。 例如,当我构建hadoop的HDFS时,需要在一个主计算机(主节点)上配置HDFS所需的各种配置文件,然后使用scp命令将这些配置文件复制到其他节点。 这样,每台计算机获得的配置信息都将匹配,以确保HDFS服务正常运行。 Zookeeper提供了一种集中管理配置的方法。 您可以在此集中位置更改配置,并更改对此配置感兴趣的任何内容。 这消除了手动拷贝配置,并确保了可靠性和一致性。

2 .命名服务可以很容易地理解为电话簿。 电话号码很难记,但人名很容易记。 要打某人的电话,直接查人名就可以了。

在分布式环境中,经常需要为APP应用程序/服务指定统一的名称,以便于识别不同的服务

与域名和ip的对应关系相似,容易记住域名;

从名称中获取资源、服务的地址、提供程序等信息

3 .分散锁碰到分布二字的话好像很难分辨,其实很简单。 独立程序中的每个进程访问互斥资源时都需要锁定,分布式程序分布在每个主机上的进程访问互斥资源时也需要锁定。 许多分布式系统都有多个可服务的窗口,但在某个时间点只让一个服务工作,在该服务出现问题时解锁,然后立即故障转移到另一个服务。 虽然这在许多分布式系统中进行,但这种设计有一个更好的名字叫leaderelection(leader选举)。 举个容易理解的例子,比如从银行取钱,就有多个窗口。 但是对你来说,只服务一个窗口。 如果为你服务的窗口柜员突然因为急事走了,你怎么办? 找大堂经理(zookeeper )! 大堂经理将指定另一个窗口继续为您服务!

####4.集群管理

在分布式群集中,节点经常由于多种原因出入,包括硬件故障、软件故障和网络问题。 新节点加入,旧节点退出集群。 此时,集群内的一些设备(如Master节点)需要感知该变化,并根据该变化做出相应的决策。 假设Zookeeper实际上也实现了类似于心率机制的功能,因为我们知道在HDFS中,namenode通过datanode的心率机制实现了上述感知。

###Zookeeper的特点1 最终一致性:让客户端看到相同的视图是zookeeper最重要的功能。2 可靠性:当一台服务器接收到消息时,所有服务器都会接收到该消息。3 实时性:Zookeeper并不保证两个客户端能够同时获得刚刚更新的数据。 如果需要最新数据,则必须在读取数据之前调用sync (接口)。 33558 www.Sina.com/(等待自由) :缓慢或失效的客户端不会干预快速客户端的请求。4 等待无关:更新只会成功或失败,没有中间状态。5 原子性:所有服务器具有相同的消息传递顺序。

使用Zookeeper的系统HDFS的HA方案

YARN的HA方案

h base :必须依赖zookeeper,它存储区域服务器的心率信息和其他重要信息。

Flume :负载均衡、单点故障

###Zookpeeper的基本架构

1各服务器在内存中存储数据;

2 Zookeeper启动时,将从实例中选出leader(PaxOS操作系统协议)。

3 Leader负责数据更新等操作(Zab协议);

4更新操作成功,大多数服务器在内存中成功更改

数据。

# # # #

zookeeper服务器的数量通常为奇数

Leader选举算法是采用Paxos协议的Paxos的核心思想:大多数服务器写入成功后,任务数据将被写入

成功。 也就是说:

如果有三个服务器,则两个写入成功即可;

如果有4个或5个服务器,则3个写入成功即可。

服务器的数量通常为奇数(3、5、7 )

如果有三个服务器

,则最多允许1个Server挂掉;
如果有4个Server,则同样最多允许1个Server挂掉
既然如此,为啥要用4个Server?
####Observer节点
3.3.0 以后 版本新增角色Observer
增加原因:
Zookeeper需保证高可用和强一致性;
当集群节点数目逐渐增大为了支持更多的客户端,需要增加更多Server,然而Server增多,投票阶段延迟增大,影响性能。为了权衡伸缩性和高吞吐率,引入Observer:
Observer不参与投票;
Observers接受客户端的连接,并将写请求转发给leader节点;
加入更多Observer节点,提高伸缩性,同时不影响吞吐率。
###Zookeeper写流程:

客户端首先和一个Server或者Observe(可以认为是一个Server的代理)通信,发起写请求,然后Server将写请求转发给Leader,Leader再将写请求转发给其他Server,Server在接收到写请求后写入数据并相应Leader,Leader在接收到大多数写成功回应后,认为数据写成功,相应Client。

###Zookeeper数据模型

zookeeper采用层次化的目录结构,命名符合常规文件系统规范;
每个目录在zookeeper中叫做znode,并且其有一个唯一的路径标识;
Znode可以包含数据和子znode(ephemeral类型的节点不能有子znode);
Znode中的数据可以有多个版本,比如某一个znode下存有多个数据版本,那么查询这个路径下的数据需带上版本;
客户端应用可以在znode上设置监视器(Watcher)
znode不支持部分读写,而是一次性完整读写
Znode有两种类型,短暂的(ephemeral)和持久的(persistent);
Znode的类型在创建时确定并且之后不能再修改;
ephemeralzn ode的客户端会话结束时,zookeeper会将该ephemeral znode删除,ephemeralzn ode不可以有子节点;
persistent znode不依赖于客户端会话,只有当客户端明确要删除该persistent znode时才会被删除;
Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、PHEMERAL_SEQUENTIAL。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。