1点25

其他

Tomcat是一个Servlet容器?

“Tomcat是一个Servlet容器”,这句话对于2019年的程序员应该是耳熟能详的。单纯的思考一下这句话,我们可以抽象出来这么一段代码:class
2019年11月11日
其他

Mysql8中降序索引的底层实现

t1(b,c,d);上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引。但是大家不知道的是,上面这个sql实际上和下面的这个sql是等价的:create
2019年6月25日
其他

为什么现代系统需要新的编程模型Akka

Hewitt提出了actor模型,以作为在高性能网络下并行处理的一种方式。但是在当时并没有这样的环境,如今硬件和基础设施能力已经赶上并超越了Carl
2019年6月20日
其他

Zookeeper快速领导者选举原理

本文略长,更适合在电脑端观看,可以收藏或直接关注微信公众号:1点25人类选举的基本原理正常情况下,选举是一定要投票的。我们应该都经历过投票,在投票时我们可能会将票投给和我们关系比较好的人,如果你和几个候选人都比较熟,这种情况下你会将选票投给你认为能力比较强的人,如果你和几个候选人都不熟,并且你自己也是候选人的话,这时你应该会认为你是这些候选人里面最厉害的那个人,大家都应该选你,这时你就会去和别人交流以获得别人的投票,但是很有可能在交流的过程中,你发现了比你更厉害的人,这时你如果脸皮不是那么厚的话,你应该会改变你的决定,去投你觉得更厉害的人,最终你将得到在你心中认为最厉害的人,且将票投给他,选票将会放在投票中,最后从投票箱中进行统计,获得票数最多的人当选。在这样一个选举过程中我们提炼出四个基本概念:个人能力:投我认为能力最强的人,这是投票的基本规则改票:能力最强的人是逐渐和其他人沟通之后的结果,类似改票,先投给A,但是后来发现B更厉害,则改为投B投票箱:所有人公用一个投票箱领导者:获得投票数最多的人为领导者Zookeeper选举的基本原理Zookeeper集群模式下才需要选举。Zookeeper的选举和人类的选举逻辑类似,Zookeeper需要实现上面人类选举的四个基本概念;个人能力:Zookeeper是一个数据库,集群中节点的数据越新就代表此节点能力越强,而在Zookeeper中可以通事务id(zxid)来表示数据的新旧,一个节点最新的zxid越大则该节点的数据越新。所以Zookeeper选举时会根据zxid的大小来作为投票的基本规则。改票:Zookeeper集群中的某一个节点在开始进行选举时,首先认为自己的数据是最新的,会先投自己一票,并且把这张选票发送给其他服务器,这张选票里包含了两个重要信息:zxid和**sid**,sid表示这张选票投的服务器id,zxid表示这张选票投的服务器上最大的事务id,同时也会接收到其他服务器的选票,接收到其他服务器的选票后,可以根据选票信息中的zxid来与自己当前所投的服务器上的最大zxid来进行比较,如果其他服务器的选票中的zxid较大,则表示自己当前所投的机器数据没有接收到的选票所投的服务器上的数据新,所以本节点需要改票,改成投给和刚刚接收到的选票一样。投票箱:Zookeeper集群中会有很多节点,和人类选举不一样,Zookeeper集群并不会单独去维护一个投票箱应用,而是在每个节点内存里利用一个数组来作为投票箱。每个节点里都有一个投票箱,节点会将自己的选票以及从其他服务器接收到的选票放在这个投票箱中。因为集群节点是相互交互的,并且选票的PK规则是一致的,所以每个节点里的这个投票箱所存储的选票都会是一样的,这样也可以达到公用一个投票箱的目的。领导者:Zookeeper集群中的每个节点,开始进行领导选举后,会不断的接收其他节点的选票,然后进行选票PK,将自己的选票修改为投给数据最新的节点,这样就保证了,每个节点自己的选票代表的都是自己暂时所认为的数据最新的节点,再因为其他服务器的选票都会存储在投票箱内,所以可以根据投票箱里去统计是否有超过一半的选票和自己选择的是同一个节点,都认为这个节点的数据最新,一旦整个集群里超过一半的节点都认为某一个节点上的数据最新,则该节点就是领导者。通过对四个概念的在Zookeeper中的解析,也同时介绍了一下Zookeeper领导者选举的基本原理,只是说选举过程中还有更多的细节需要我们了解,下面我结合源码来给大家详细的分析一下Zookeeper的快速领导者选举原理。领导者选举入口ZooKeeperServer表示单机模式中的一个zkServer。QuoruPeer表示集群模式中的一个zkServer。QuoruPeer类定义如下:public
2019年6月17日
其他

程序要一定要明白的架构-三地五中心(2)

首先对于上面列出来的两点中的第一点,如果我们能够让灾备中心不再仅仅只能用来做灾备,还能和生产数据中心一样正常的对外提供服务呢?如下图:可以看到上面的架构图:
2019年6月14日