【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解

2023-11-02

1 Zookeeper工作原理

1.1 Zookeeper的角色

  » 领导者(leader),负责进行投票的发起和决议,更新系统状态

  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票

  » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

  » 客户端(client),请求发起方

        Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

        为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

  每个Server在工作过程中有三种状态:

  • LOOKING:当前Server不知道leader是谁,正在搜寻
  • LEADING:当前Server即为选举出来的leader
  • FOLLOWING:leader已经选举出来,当前Server与之同步

1.2 Zookeeper工作原理简述

  Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。

  当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server端完成了和leader的状态同步以后,恢复模式就结束了。

  状态同步保证了leader和server具有相同的系统状态。

  一旦leader已经和多数的follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个server加入zookeeper服务中,它会在恢复模式下启动,

  发现leader,并和leader进行状态同步。待到同步结束,它也参与消息广播。Zookeeper服务一直维持在Broadcast状态,直到leader崩溃了或者leader失去了大部分的followers支持。

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

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

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

  每个Server启动以后都询问其它的Server它要投票给谁。

  对于其他server的询问,server每次根据自己的状态都回复自己推荐的leader的id和上一次处理事务的zxid(系统启动时每个server都会推荐自己)。

  收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server。

  计算这过程中获得票数最多的的sever为获胜者,如果获胜者的票数超过半数,则该server被选为leader。否则,继续这个过程,直到leader被选举出来。

  » leader就会开始等待server连接

  » Follower连接leader,将最大的zxid发送给leader

  » Leader根据follower的zxid确定同步点

  » 完成同步后通知follower 已经成为uptodate状态

  » Follower收到uptodate消息后,又可以重新接受client的请求进行服务了

1.3 zxid

        Zookeeper是如何保证消息的顺序?答案是通过zxid。

        可以简单的把zxid理解成Zookeeper中消息的唯一ID,节点之间会通过发送Proposal(事务提议)来进行通信、数据同步,proposal中就会带上zxid和具体的数据(Message)。而zxid由两部分组成:

  • epoch 可以理解成朝代,或者说Leader迭代的版本,每个Leader的epoch都不一样;
  • counter 计数器,来一条消息就会自增;

        这也是唯一zxid生成算法的底层实现,由于每个Leader所使用的epoch都是唯一的,而不同的消息在相同的epoch中,counter的值是不同的,这样一来所有的proposal在Zookeeper集群中都有唯一的zxid。

1.4 数据一致性与paxos 算法  

   Paxos 算法是莱斯利•兰伯特(英语:Leslie Lamport)于 1990 年提出的一种基于消息传递且具有高度容错特性的一致性算法。

  分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会 慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础 Paxos 场景中,先不考虑可能 出现消息篡改即拜占庭错误(Byzantine failure,即虽然有可能一个消息被传递了两次,但是 绝对不会出现错误的消息)的情况。Paxos 算法解决的问题是在一个可能发生上述异常的分 布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议一致性。

  Paxos 算法使用一个希腊故事来描述,在 Paxos 中,存在三种角色,分别为:

  • Proposer(提议者,用来发出提案 proposal)
  • Acceptor(接受者,可以接受或拒绝提案)
  • Learner(学习者,学习被选定的提案,当提案被超过半数的 Acceptor 接受后为被批准)

  下面更精确的定义 Paxos 要解决的问题:

  1. 决议(value)只有在被 proposer 提出后才能被批准
  2. 在一次 Paxos 算法的执行实例中,只批准(chose)一个 value
  3. learner 只能获得被批准(chosen)的 value

  ZooKeeper 的选举算法有两种:一种是基于 Basic Paxos(Google Chubby 采用)实现的,另外 一种是基于 Fast Paxos(ZooKeeper 采用)算法实现的。系统默认的选举算法为 Fast Paxos。 并且 ZooKeeper 在 3.4.0 版本后只保留了 FastLeaderElection 算法。

  ZooKeeper 的核心是原子广播,这个机制保证了各个 Server 之间的同步。实现这个机制的协 议叫做 ZAB 协议(Zookeeper Atomic BrodCast)。 ZAB 协议有两种模式,它们分别是崩溃恢复模式(选主)和原子广播模式(同步)。

  1、当服务启动或者在领导者崩溃后,ZAB 就进入了恢复模式,当领导者被选举出来,且大 多数 Server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 follower 之间具有相同的系统状态。

     2、当 ZooKeeper 集群选举出 leader 同步完状态退出恢复模式之后,便进入了原子广播模式。 所有的写请求都被转发给 leader,再由 leader 将更新 proposal 广播给 follower

   为了保证事务的顺序一致性,zookeeper 采用了递增的事务 id 号(zxid)来标识事务。所有 的提议(proposal)都在被提出的时候加上了 zxid。实现中 zxid 是一个 64 位的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新 的 epoch,标识当前属于那个 leader 的统治时期。低 32 位用于递增计数。  

   这里给大家介绍以下 Basic Paxos 流程:

1、选举线程由当前 Server 发起选举的线程担任,其主要功能是对投票结果进行统计,并选 出推荐的 Server2、选举线程首先向所有 Server 发起一次询问(包括自己)3、选举线程收到回复后,验证是否是自己发起的询问(验证 zxid 是否一致),然后获取对方 的 serverid(myid),并存储到当前询问对象列表中,最后获取对方提议的 leader 相关信息 (serverid,zxid),并将这些信息存储到当次选举的投票记录表中4、收到所有 Server 回复以后,就计算出 id 最大的那个 Server,并将这个 Server 相关信息设 置成下一次要投票的 Server5、线程将当前 id 最大的 Server 设置为当前 Server 要推荐的 Leader,如果此时获胜的 Server 获得 n/2 + 1 的 Server 票数, 设置当前推荐的 leader 为获胜的 Server,将根据获胜的 Server 相关信息设置自己的状态,否则,继续这个过程,直到 leader 被选举出来。

   通过流程分析我们可以得出:要使 Leader 获得多数 Server 的支持,则 Server 总数必须是奇 数 2n+1,且存活的 Server 的数目不得少于 n+1。 每个 Server 启动后都会重复以上流程。在恢复模式下,如果是刚从崩溃状态恢复的或者刚 启动的 server 还会从磁盘快照中恢复数据和会话信息,zk 会记录事务日志并定期进行快照, 方便在恢复时进行状态恢复。 Fast Paxos 流程是在选举过程中,某 Server 首先向所有 Server 提议自己要成为 leader,当其 它 Server 收到提议以后,解决 epoch 和 zxid 的冲突,并接受对方的提议,然后向对方发送 接受提议完成的消息,重复这个流程,最后一定能选举出 Leader

1.5 Observer  

  • Zookeeper需保证高可用和强一致性;

  • 为了支持更多的客户端,需要增加更多Server;

  • Server增多,投票阶段延迟增大,影响性能;

  • 权衡伸缩性和高吞吐率,引入Observer

  • Observer不参与投票;

  • Observers接受客户端的连接,并将写请求转发给leader节点;

  • 加入更多Observer节点,提高伸缩性,同时不影响吞吐率

1.6 Zookeeper 的节点

1.6.1 节点有哪些类型?

Znode两种类型:

  1. 持久的(persistent):客户端和服务器端断开连接后,创建的节点不删除(默认)。
  2. 短暂的(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除。

Znode有四种目录节点形式:

  1. 持久化目录节点(PERSISTENT):客户端与Zookeeper断开连接后,该节点依旧存在持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
  2. 客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号:临时目录节点(EPHEMERAL)
  3. 客户端与Zookeeper断开连接后,该节点被删除:临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)
  4. 客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

「注意」:创建ZNode时设置顺序标识,ZNode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。

1.6.2 节点属性有哪些

        一个znode节点不仅可以存储数据,还有一些其他特别的属性。接下来我们创建一个/test节点分析一下它各个属性的含义。

[zk: localhost:2181(CONNECTED) 6] get /test 456 cZxid = 0x59ac // ctime = Mon Mar 30 15:20:08 CST 2020 mZxid = 0x59ad mtime = Mon Mar 30 15:22:25 CST 2020 pZxid = 0x59ac cversion = 0 dataVersion = 2 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 0 复制代码

属性说明

1.7 Zookeeper 的数据模型 

  » 层次化的目录结构,命名符合常规文件系统规范

  » 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识

  » 节点Znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点

  » Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本

  » 客户端应用可以在节点上设置监视器

  » 节点不支持部分读写,而是一次性完整读写

1.8 Zookeeper leader 选举    

1.8.1 Leader选举概述

        Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举。

(1) 服务器初始化启动。

(2) 服务器运行期间无法和Leader保持连接。

        下面就两种情况进行分析讲解。

1.8.2 服务器启动时期的Leader选举

        若进行Leader选举,则至少需要两台机器,这里选取3台机器组成的服务器集群为例。在集群初始化阶段,当有一台服务器Server1启动时,其单独无法进行和完成Leader选举,当第二台服务器Server2启动时,此时两台机器可以相互通信,每台机器都试图找到Leader,于是进入Leader选举过程。选举过程如下:

(1) 每个Server发出一个投票。由于是初始情况,Server1和Server2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,此时Server1的投票为(1, 0),Server2的投票为(2, 0),然后各自将这个投票发给集群中其他机器。

(2) 接受来自各个服务器的投票。集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。

(3) 处理投票。针对每一个投票,服务器都需要将别人的投票和自己的投票进行PK,PK规则如下:

  • 优先检查ZXID。ZXID比较大的服务器优先作为Leader。
  • 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器。

        对于Server1而言,它的投票是(1, 0),接收Server2的投票为(2, 0),首先会比较两者的ZXID,均为0,再比较myid,此时Server2的myid最大,于是更新自己的投票为(2, 0),然后重新投票,对于Server2而言,其无须更新自己的投票,只是再次向集群中所有机器发出上一次投票信息即可。

(4) 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票信息,对于Server1、Server2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时便认为已经选出了Leader。

(5) 改变服务器状态。一旦确定了Leader,每个服务器就会更新自己的状态,如果是Follower,那么就变更为FOLLOWING,如果是Leader,就变更为LEADING。

1.8.3 服务器运行时期的Leader选举

        在Zookeeper运行期间,Leader与非Leader服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致。假设正在运行的有Server1、Server2、Server3三台服务器,当前Leader是Server2,若某一时刻Leader挂了,此时便开始Leader选举。选举过程如下

(1) 变更状态。Leader挂后,余下的非Observer服务器都会讲自己的服务器状态变更为LOOKING,然后开始进入Leader选举过程。

(2) 每个Server会发出一个投票。在运行期间,每个服务器上的ZXID可能不同,此时假定Server1的ZXID为123,Server3的ZXID为122;在第一轮投票中,Server1和Server3都会投自己,产生投票(1, 123),(3, 122),然后各自将投票发送给集群中所有机器。

(3) 接收来自各个服务器的投票。与启动时过程相同。

(4) 处理投票。与启动时过程相同,此时,Server1将会成为Leader。

(5) 统计投票。与启动时过程相同。

(6) 改变服务器的状态。与启动时过程相同。

  

1.9 Zookeeper 的读写机制

1.9.1 读写流程

        下图就是集群模式下一个Zookeeper Server节点提供读写服务的一个流程。

        如上图所示,每个Zookeeper Server节点除了包含一个请求处理器来处理请求以外,都会有一个内存数据库(ReplicatedDatabase)用于持久化数据。ReplicatedDatabase 包含了整个Data Tree。

        来自于Client的读服务(Read Requst),是直接由对应Server的本地副本来进行服务的。

        至于来自于Client的写服务(Write Requst),因为Zookeeper要保证每台Server的本地副本是一致的(单一系统映像),需要通过一致性协议(后文提到的ZAB协议)来处理,成功处理的写请求(数据更新)会先序列化到每个Server节点的本地磁盘(为了再次启动的数据恢复)再保存到内存数据库中。

        集群模式下,Zookeeper使用简单的同步策略,通过以下三条基本保证来实现数据的一致性:

  • 全局串行化所有的写操作

        串行化可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据。

  • 保证同一客户端的指令被FIFO执行(以及消息通知的FIFO)

FIFO -先入先出

  • 自定义的原子性消息协议

        简单来说,对数据的写请求,都会被转发到Leader节点来处理,Leader节点会对这次的更新发起投票,并且发送提议消息给集群中的其他节点,当半数以上的Follower节点将本次修改持久化之后,Leader 节点会认为这次写请求处理成功了,提交本次的事务。

1.9.2 乐观锁

        Zookeeper 的核心思想就是,提供一个非锁机制的Wait Free 的用于分布式系统同步的核心服务。其核心对于文件、数据的读写服务,并不提供加锁互斥的服务。

        但是由于Zookeeper的每次更新操作都会更新ZNode的版本(详见第一章),也就是客户端可以自己基于版本的对比,来实现更新数据时的加锁逻辑。例如下图。

        就像我们更新数据库时,会新增一个version字段,通过更新前后的版本对比来实现乐观锁。

1.10 Zookeeper节点数据操作流程

   

  1. 在Client向Follwer发出一个写的请求
  2. Follwer把请求发送给Leader
  3. Leader接收到以后开始发起投票并通知Follwer进行投票
  4. Follwer把投票结果发送给Leader
  5. Leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给  Leader,然后commit;
  6. Follwer把请求结果返回给Client 

1.10.1 Follower主要有四个功能

  1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
  2. 接收Leader消息并进行处理;
  3. 接收Client的请求,如果为写请求,发送给Leader进行投票;
  4. 返回Client结果。

1.10.2 Leader消息类型

        Follower的消息循环处理如下几种来自Leader的消息:

  1. PING消息:心跳消息;
  2. PROPOSAL消息:Leader发起的提案,要求Follower投票;
  3. COMMIT消息:服务器端最新一次提案的信息;
  4. UPTODATE消息:表明同步完成;
  5. REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的  session还是允许其接受消息;
  6. SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。

1.11 为什么zookeeper集群的数目,一般为奇数个?

  •Leader选举算法采用了Paxos协议;

  •Paxos核心思想:当多数Server写成功,则任务数据写成功如果有3个Server,则两个写成功即可;如果有4或5个Server,则三个写成功即可。

  •Server数目一般为奇数(3、5、7)如果有3个Server,则最多允许1个Server挂掉;如果有4个Server,则同样最多允许1个Server挂掉由此,

    我们看出3台服务器和4台服务器的的容灾能力是一样的,所以为了节省服务器资源,一般我们采用奇数个数,作为服务器部署个数。

参考链接

ZooKeeper学习之路 (八)ZooKeeper原理解析

Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务 

随笔分类 -  Zookeeper专题系列

Zookeeper简介及核心概念_Cynicism_Kevin的博客-CSDN博客

zookeeper安装以及使用_燕少༒江湖的博客-CSDN博客

Zookeeper工作原理(详细)_zookeeper原理_笔墨登场说说的博客-CSDN博客

Zookeeper的功能以及工作原理_zookeeper的主要功能_空白格的空白的博客-CSDN博客

ZooKeeper基本原理

深入了解Zookeeper核心原理

Zookeeper原理解析 - 简书

zookeeper的领导者选举和原子广播 - lpshou - 博客园

Zookeeper原理详解_百里度的博客-CSDN博客

Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议) - 掘金

从背景到原理,到架构体系,粉碎Zookeeper面试连环炮 - 掘金

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解 的相关文章

  • 如何实现一个分布锁?

    基本概念 为何需要分布式锁 传统环境中的情况 在程序开发过程中不得不考虑的就是并发问题 在java中对于同一个jvm而言 jdk已经提供了lock和同步等 但是在分布式情况下 往往存在多个进程对一些资源产生竞争关系 而这些进程往往在不同的机
  • 云原生之使用Docker部署Firefox浏览器

    云原生之使用Docker部署Firefox浏览器 一 Firefox浏览器介绍 1 1 Firefox简介 1 2 Firefox特点 二 本次实践介绍 2 1 本地环境规划 2 2 本次实践简介 三 本地环境检查 3 1 检查Docker
  • Django

    HTTP无状态协议 是指协议对于交互性场景没有记忆能力 每次客户端检索网页时 客户端打开一个单独的连接到 Web 服务器 服务器会自动不保留之前客户端请求的任何记录 创建用户对象的三种方法 create 创建一个普通用户 密码是明文的 cr
  • 将 Google Kubernetes Engine (GKE) 上稳定扩散的启动时间缩短 4 倍

    Cloud Ace 是 Google Cloud 全球战略合作伙伴 在亚太地区 欧洲 南北美洲和非洲拥有二十多个办公室 Cloud Ace 在谷歌专业领域认证及专业知识目前排名全球第一位 并连续多次获得 Google Cloud 各类奖项
  • 服务攻防-中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现

    目录 一 导图 二 ISS漏洞 中间件介绍 gt 1 短文件 2 文件解析 3 HTTP SYS 4 cve 2017 7269 三 Nignx漏洞 中间件介绍 gt 1 后缀解析漏洞 2 cve 2013 4547 3 cve 2021
  • vagrant启动openshift

    1 Install Vagrant 2 Install VirtualBox Ex yum install VirtualBox from the RPM Fusion repository 3 In your bashrc file or
  • Zookeeper(三)—分布式锁实现

    一 独占锁原理 独占锁是利用zk同一目录下不能创建多个相同名称的节点这个特性 来实现分布式锁的功能 竞争锁的分布式系统 都在zk根目录下创建一个名为lock的节点 创建节点成功的系统 说明抢到了这把锁 没有创建成功的系统 说明这个节点已经被
  • SpringCloud使用Zookeeper作为服务注册发现中心

    本篇文章主要记录SpringCloud使用Zookeeper作为服务注册发现中心 通过服务提供者和消费者为例 来真正掌握zk注册中心 目录 一 搭建服务提供者 1 创建cloud provider payment8004项目 2 修改配置
  • 一站式体验涂鸦云开发

    涂鸦智能近些年通过深耕物联网领域 沉淀了强大的IoT底层技术 稳定全面的平台能力 持续的创新能力和深厚的行业落地经验 成为更多企业实现智能化建设及应用能力打造的最佳合作伙伴 正在携手开发者共同推动万物互联时代的到来 为满足各类软硬件厂商 个
  • 与 Azure Postgres 的连接时间较长

    我有 Azure Database for PostgreSQL 服务 PaaS 当我尝试查询它时psql然后甚至简单SELECT从一张表查询大约需要 1 5 秒 当我在 postgres 控制台中时 没有问题 查询执行时间不到 100 毫
  • k8s集群内部署nexus

    一 前言 在k8s集群中部署nexus服务需要使用到pv pvc服务来存储nexus的数据 需要使用service服务来提供对外访问nexus服务的端口 需要使用deployment服务来管理nexus服务 接下来就是用这些服务来在k8s集
  • 消息队列选型:Kafka 如何实现高性能?

    在分布式消息模块中 我将对消息队列中应用最广泛的 Kafka 和 RocketMQ 进行梳理 以便于你在应用中可以更好地进行消息队列选型 另外 这两款消息队列也是面试的高频考点 所以 本文我们就一起来看一下 Kafka 是如何实现高性能的
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • 消息队列选型:Kafka 如何实现高性能?

    在分布式消息模块中 我将对消息队列中应用最广泛的 Kafka 和 RocketMQ 进行梳理 以便于你在应用中可以更好地进行消息队列选型 另外 这两款消息队列也是面试的高频考点 所以 本文我们就一起来看一下 Kafka 是如何实现高性能的
  • 如何利用 Kubernetes 的新 CronJob API 进行高效的任务调度

    Kubernetes 的 CronJob API 是在云原生环境中自动执行常规任务的关键功能 本指南不仅引导您完成使用此 API 的步骤 还说明了它非常有用的实际用例 先决条件 正在运行的 Kubernetes 集群 版本 1 21 或更高
  • k8s集群使用calico网络组件

    一 前言 k8s的网络组件可以使用flannel或者calico两种 flannel的配置比较简单 但是性能还是calico会更高一点 所以现在来介绍以下calico网络组件的部署 二 部署 k8s集群版本对calico的版本也有对应要求
  • ASP.NET Core路由中间件[1]: 终结点与URL的映射

    一 路由注册 我们演示的这个ASP NET Core应用是一个简易版的天气预报站点 如果用户希望获取某个城市在未来 N 天之内的天气信息 他可以直接利用浏览器发送一个GET请求并将对应城市 采用电话区号表示 和天数设置在URL中 如下图所示
  • 拓数派加入 OpenCloudOS 操作系统开源社区,作为成员单位参与社区共建

    近日 拓数派签署 CLA Contributor License Agreement 贡献者许可协议 正式加入 OpenCloudOS 操作系统开源社区 拓数派 英文名称 OpenPie 是国内基础数据计算领域的高科技创新企业 作为国内云上
  • Kubernetes (十一) 存储——Secret配置管理

    一 简介 从文件创建 echo n admin gt username txt echo n westos gt password txt kubectl create secret generic db user pass from fi
  • Cloud Foundry 解释

    所以我一直在阅读 Cloud Foundry 但我仍然对它是什么感到困惑 无论如何 这是我对 CF 上的 PaaS 的看法 希望你们能告诉我我是否错了 并更好地解释一下 Microsoft Azure 或 Google AppEngine

随机推荐

  • 花上厕所的时间搞懂一些前端基础知识

    深入到pc端网站布局 品优购静态网站 精通网页布局 前端人员的必备技能 初步认识前端 我们上网这些网页 网站是谁做出来的啊 前端程序员 浏览器的杰作 掌握 html gt css gt H5C3提高 什么是网页 html文件 浏览器 阅读
  • QuartusII 9.0安装破解教程详解及例程测试

    https blog csdn net qq 36243942 article details 83033391
  • Java 初级其它类学习笔记(基础)

    外部类和内部类 外部类的封装等级只有以下两种形式 1 public class 外部类名 有public修饰符的外部类属于对外公开的 文件类 即 java文件名与此类名保持一致 2 class 外部类名 缺省 修饰的外部类属于普通类 而非
  • linux下终止用户会话二法

    http www 2cto com os 201110 109331 html 或许你也遇到这种情况 在管理或者别的时候 需要将某些用户的会话强制关闭 一般大家可能熟知的方法是查找该用户会话的所有进程 然后kill掉 这种方法大部分情况下是
  • RocketMQ 安装

    镜像方式安装 首先再把上一接中提到的 RocketMQ 部署架构图看一下 从图中可以看出 RocketMQ的服务端分为两块 Name Server 和 Broker Name Server 是一个几乎无状态节点 可集群部署 在消息队列Roc
  • AI绘图原理:让机器也拥有绘画的灵魂

    前言 在人工智能技术的发展过程中 计算机视觉是其中最为重要的一个方向 而图像生成作为计算机视觉的一个分支 也逐渐成为人们关注的焦点之一 近年来 随着神经网络技术的发展 人工智能在图像生成领域的研究也取得了显著进展 本文将围绕AI绘图原理进行
  • elasticsearch 修改索引名称

    先创建一个新的索引 依据原有索引的属性 这样可以避免reindex的时候 丢失数据 PUT your new index name mappings properties your field name type text 使用 reind
  • 二叉树进阶--二叉搜索树

    目录 1 二叉搜索树 1 1 二叉搜索树概念 1 2 二叉搜索树操作 1 3 二叉搜索树的实现 1 4 二叉搜索树的应用 1 5 二叉搜索树的性能分析 2 二叉树进阶经典题 1 二叉搜索树 1 1 二叉搜索树概念 二叉搜索树又称二叉排序树
  • SpringCloud微服务架构

    什么是微服务 微服务架构的基础是将的那个应用程序开发为一组小型独立服务 这些独立服务在自己的进程中运行 独立开发和部署 SpringCloud Alibaba微服务 Spring Cloud Alibaba 是Spring Cloud的一个
  • 四大含金量高的算法证书考试

    证书考试推荐 一 PAT 计算机程序设计能力测试 二 CCF CSP认证 三 团体程序设计天梯赛 四 蓝桥杯大赛 一 PAT 计算机程序设计能力测试 官网 PAT 计算机程序设计能力测试 PAT为浙江大学出的一款程序设计的测试网站 分为乙级
  • 憨批的语义分割5——DeeplabV3+模型解析以及训练自己的DeeplabV3+模型(划分斑马线)

    憨批的语义分割5 DeeplabV3 模型解析以及训练自己的DeeplabV3 模型 划分斑马线 学习前言 模型部分 什么是DeeplabV3 模型 DeeplabV3 模型的代码实现 1 主干模型Xception 2 DeeplabV3
  • C++学习(二八七)获取Android手机各种路径

    data app 存放用户安装的APK的目录 安装时 把APK拷贝于此 data data 应用安装完成后 在 data data目录下自动生成和APK包名 packagename 一样的文件夹 用于存放应用程序的数据 data dalvi
  • yolov5训练自己的数据(详细)

    已经说过了yolov3的编译 训练的流程了 那今天就来说说yolov5的训练过程了 1 环境准备 centos 7 9 2009 python 3 7 0 cuda 10 2 89 cudnn 7 6 5 torch 1 6 0 torch
  • 修改缓存服务器文件,演练:更改服务器上的工作簿中的缓存数据

    演练 更改服务器上的工作簿中的缓存数据 02 24 2013 本文内容 此演练演示如何通过使用 ServerDocument 类在不启动 Excel 的情况下修改 Microsoft Office Excel 工作簿中缓存的数据集 适用于
  • Tcp/Ip四层模型---应用层、传输层、网络层和链路层以及他们的各自的主要工作

    Tcp Ip四层模型 TCP IP 协议栈是一系列网络协议的总和 是构成网络通信的核心骨架 它定义了电子设备如何连入因特网 以及数据如何在它们之间进行传输 TCP IP 协议采用4层结构 分别是应用层 传输层 网络层和链路层 每一层都呼叫它
  • The value of the local variable total is not used报错解决

    变量未输出 加上System out print 变量
  • 比找女朋友还难的技术点,Python 面向对象

    有人整个 Python 学习生涯都没有搞明白的技术之一 面向对象 先放美图调整下心情 欢迎关注 点赞 评论 Python 面向对象的编程 Python 准确地说也是一门面向对象编程的语言 简称 OOP 咱已经知道在 Python 中所有的数
  • Node.js简介,记录Node.js入门基础概念

    有必要整理一下Node js基础知识啦 Node js是什么 Node js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node js 使用了一个事件驱动 非阻塞式 I O 的模型 使其轻量又高效 Node j
  • 算法的三种练习

    除了具体写代码 做这些练习 1 循环不变式 用循环不变式去解释算法 2 递归 动归的 递推式 3 搜索问题的隐式图构造 隐式树还是图 一个前驱 多个前驱 点是什么 边是什么 怎么扩展
  • 【云原生进阶之PaaS中间件】第二章Zookeeper-3.2架构详解

    1 Zookeeper工作原理 1 1 Zookeeper的角色 领导者 leader 负责进行投票的发起和决议 更新系统状态 学习者 learner 包括跟随者 follower 和观察者 observer follower用于接受客户端