首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

Raft查看全文
简化的共识算法Raft.jpg
CAP模型指出分布式系统不能同时满足分区容忍性,可用性,一致性这三个特性,而最多只能满足其中的两个特性。

一致性是指分布式系统在跨节点场景下数据达成一致性的过程,一致性可以分为线性一致性,顺序一致性等 Raft是一种一致性算法,也称为共识算法。但相比于Paxos而言,Raft的工程实现更加简单,容易理解。 Paxos是无主的共识算法,无主算法对容灾的处理更加复杂,而且因为每个节点都可以发起请求,所以需要复杂的机制从并发的请求中选择一个作为选中的值写入集群。 Raft的角色除了Paxos中的Candidate和Follow之外,还有Leader角色。 在运行过程中,Raft只允许Leader节点提交数据,所以Raft第一个步骤是Leader的选举。在Leader宕机的时候会重新进行Leader选举。 有了Leader之后,Leader会提交数据,进行日志同步。 除了Leader之外,集群中其他成员的变更也需要处理。 Raft将共识算法分为几个环节,Leader的选举,日志同步,日志压缩,成员变更等。 Leader选举 raft算法把时间轴分为不同的任期(term),每个Term拥有唯一的ID,termId,该ID全局唯一单调递增。如果选举成功,则进入维持任务term阶段,此时leader负责接收客户端请求并负责复制日志,同时Leader和所有的follower都保持通信,如果follower发现通信超时,TermId递增并发起新的选举。如果选举成功,则进入新的任期。如果选举失败,termId递增,然后重新发起选举直到成功。

Leader在任期内会向其他follower节点发送心跳来维持地位,follower如果发现心跳超时…
Final【Java】查看全文
Final是Java的关键字,Final可以用于修饰类、方法、变量(包括成员变量和局部变量)。

Java类使用Final修饰之后,该类不可以再被继承,这样做通常处于安全考虑。 使用final方法的原因有两个。 第一个原因是把方法锁定,以防任何继承类修改它的含义; 第二个原因是出于效率考虑,早期的 Java 实现版本中,会将 final 方法转为内嵌调用,内嵌调用在方法体较小时候会因为减少了方法调用成本而得到一定的效率提升。最近的Java版本中,已经不需要使用final方法进行这些优化。 Java类的 private 方法模式是Final方法。 被Final修饰的Java类中所有的成员方法默认都是Final方法。 Final修饰变量时候的语义是该变量的值不可被修改。 内存屏障 通过 Final 关键词修饰的变量,必须初始化之后才可以使用。 为了避免重排序,Final 的变量在构造方法中加入了内存屏障。构造函数结束之前 Final 变量增加了StoreStore内存屏障,在初次读取 final 变量之前加上了 LoadLoad 内存屏障。 加入内存屏障可以避免未被初始化的变量被其他线程使用。 语法检验 Java类的使用需要经历加载,链接,初始化之后才能使用。 在链接阶段又分为校验、准备以及解析的过程。 在校验阶段Java 虚拟机会对字节码进行语义检查,对于不符合JVM规范的指令,Java虚拟机会返回校验失败的错误。 被定义为Final的类或者成员方法禁止被继承或者重写会在这个阶段进行校验。 Final类

当final修饰类的时候表明该类不能被继承,并且类中所有的属性和方法都默认是final类型,如String…
门面模式查看全文
门面模式.png
门面模式(Facade)是常用的设计模式之一,内部功能统一封装在门面层,可以收敛外部系统的访问入口,屏蔽异构的内部系统,从而提升系统的安全性,易用性等。

门面模式将系统分为两种角色: Facade(门面系统),客户端调用其他系统功能的入口,它将代理所有客户端的请求,并且委托给相应的子系统处理; SubSystem(子系统),子系统可能是一个类或者一组类,也可能是几个或者多个的组件/系统,子系统不被客户端直接调用,而通过Facade系统被客户端使用。 门店模式的特点如下: 因为门面模式屏蔽了外部系统和内部子系统的交互,子系统可以有选择性的暴露方法。 模块/子系统中定义的方法可以分成两部分,一部分是给外部系统(Facade)使用的,一部分是子系统内部模块之间相互调用时使用的。Facade可以避免内部方法的暴露。 门面模式可以有很多个门面类 在门面模式中,对门面类的数量没有限制。如果有多个子系统提供多个模块的功能,可以将这些功能进行分类,对每一类的功能提供单独的门面类。 门面模式隔离了子系统和外部系统,所以可以实现安全机制 门面模式可以实现安全机制,避免外部系统和子系统的交互,从而可以保护子系统内部的数据以及方法。 门面模式实现了系统之间的松耦合 客户端与子系统解耦,可以提高子系统的独立性,客户端也不需要知道子系统的内部构造。

门面模式和代理模式都引入了中介,而且中介都起到代理功能。但是代理模式只代理一个类,而且代理类与实现类都有同样的抽象,对外提供统一的接口。门面类代理的是一系列子系统的功能,和子系统可以提供不同的对外接口。

热门分类

算法题库

精选内容