这篇文章主要讲解了“如何使用Raft组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Raft组件”吧!一、编译github下载 Ratis 直接 mvn clean package 即可,如果编译过程中出错,可以先clean install ratis-proto二、示例Ratis 自带的示例有三个:arithmeticcounterfilestore在 ratis-examples 模块中,对于 arithmetic 和 filestore比较方便,可以通过main/bi免费云主机、域名n目录下的 shell 脚本快速启动 Server 和 Client 来进行测试。对于Raft,咱们都知道是需要多实例组成集群才能测试,你启动一个实例没啥用,连选主都成问题。Bin 目录下的 start-all 支持 example 的名称以及对应的命令。比如 filestore server 代表是启动 filestore 这个应用的server。对应的命令参数会在相应example里的 cli 中解析。同时会一次性启动三个server,组成一个集群并在周期内完成选举。而对于 counter 这个示例,并没有相应的脚本来快速启动三个server,这个我们可以通过命令行或者在IDE里以参数的形式启动。三、分析下面我们来示例里看下 Raft Server 是怎样工作的。对于 counter 示例来说,我们启动的时候,需要传入一个参数,代表当前的server是第几个,目的在于,要从 peers 列表中得知该用哪个IP + 端口去启动它。这里我们能发现,这个 peers 列表,是在代码内提前设置好的。当然你说动态配置啥的,也没啥问题,另外两个示例是通过shell 脚本里common 中的配置传入的。所以,第一步我们看到, Raft Server 在启动的时候,会通过「配置」的形式,来知道 peer 之间的存在,这样才能彼此通信,让别人给自己投票或者给别人投票,完成 Term 内的选举。另外,才能接收到 Leader 传过来的 Log ,并且应用到本地。第二步,我们来看下 Client 和 集群之间是如何通信的。整个 Raft 集群可能有多个实例,我们知道必须通过 Leader 来完成写操作。那怎样知道谁是Leader?有什么办法?一般常见的思路有:在写之前,先去集群内查一下,谁是 Leader,然后再写随机拿一个写,不行再换一个,不停的试,总会有一个成功。当然方式二这样试下去效率不太高。所以会在这个随机试一次之后,集群会将当前的 Leader 信息返回给 Client,然后 Client 直接通过这个建立连接进行通信即可。在 Ratis 里, Client 调用非 Leader 节点会收到 Server 抛出的一个异常,异常中会包含一个称为 suggestLeader 的信息,表示当前正确的 Leader,按这个连上去就行。当然,如果如果在此过程中发生的 Leader 的变更,那就会有一个新的suggestLeader 返回来,再次重试。我们来看 Counter 这个示例中的实现。Server 和 Client 的共用的Common 代码中,包含 peers 的声明这里声明了三个节点。通过命令行启动时,会直接把index 传进来, index 取值1-3。然后在Server 启动的时候,拿到对应的配置信息。再设置存储目录重点看这里,每个 Server 都会有一个状态机「CounterStateMachine」,平时我们的「业务逻辑」都放到这里客户端发送的命令,会在这个状态机中被执行,同时这些命令又以Log 的形式复制给其它节点,各个节点的Log 又会在它自己的状态机里执行,从而保证各个节点状态的一致。最后根据这些配置,生成 Raft Server 实例并启动。CounterStateMachine 里,应用计数的这一小段代码,我们看先检查了命令是否合法,然后执行命令我们再来看 Client 的实现。和 Server 类似,通过配置属性,创建一个实例然后就可以向Server发送命令开工了。Counter 的状态机支持INCREMENT 和 GET 两个命令。所以example 最后执行了一个 GET 的命令来获取最终的计数结果四、内部部分实现RaftClientImpl 里,初期会从peers列表中选一个,当成leader 去请求。之后,会根据server 返回的不同异常分别处理。比如在 handleLeaderException 中,又分几种情况,因为通过Client 来和 Server 进行通讯的时候,会随机从peers里选择一个,做为leader去请求,如果 Server 返回异常,说它不是leader,就用下面的代码,随机从另外的peer里选择一个再去请求。是不是感觉很低效。如果这个时候,server 返回的信息里,告诉client 谁是 leader,那client 直接连上去就可以了是吧。我们会看到,在异常的信息中,如果能够提取出一个 suggestedLeader,这时候就会做为新的leaderId来使用,下次直接连接了。感谢各位的阅读,以上就是“如何使用Raft组件”的内容了,经过本文的学习后,相信大家对如何使用Raft组件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云技术,小编将为大家推送更多相关知识点的文章,欢迎关注!
这篇文章主要介绍“什么是近似算法”,在日常操作中,相信很多人在什么是近似算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是近似算法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!什么是近似算法?近似算法是一种处理优化问题…