- 浏览: 2253350 次
- 性别:
- 来自: 北京
最新评论
-
yidongnan:
跟 spring boot 配合的例子可以使用这个库https ...
GRPC原理解析 -
kyo472083100:
写得很好,感谢楼主解释得很清晰
Mongodb中Mapreduce特性与原理 -
lanhz:
对于三个节点:1、2、3,如果2向1广播投给2(即2自己),1 ...
Zookeeper选举过程描述与状态迁移 -
Bll:
厉害了
GRPC原理解析 -
QING____:
xiatiandebaofengyu 写道有个问题:发布者在发 ...
Redis编程实践【pub/sub】
文章列表
Zookeeper Server端对接收到的Client端请求,以及Leader接收到的Follower/Observer请求,都会以"处理链"的方式"分工/逐步"处理,这是一种良好的设计模式..不过事实上Zookeeper源码中,这部分代码写的确实比较"纠结"..
一. Folower端:
Follower与Client的通讯入口为ServerCnxn.doIO()方法,Follower与Leader的通讯操作入口Follower.followLeader()方法.下文中提到的请求,即为"Request&quo ...
[引导,选举过程]
1. 选举开始,当前server整理出自己的serverId,zxid(事务id,来自ZKDatabase),peerEpoch(此值来自文件,每一轮选举成功后都会导致epoch值改动,此值会被存储在文件中,此值用来标记leader,zxid由"epoch + 自增id"组成,zxid ...
Watcher机制:目的是为ZK客户端操作提供一种类似于异步获得数据的操作.
1)在创建Zookeeper实例时,允许接收一个watcher参数,此参数将会赋值给watchMnanger.defaultWatcher,成为当前客户端的默认Watcher.需要注意此watcher和其他watcher不同,此w ...
Zookeeper服务端初始化过程(三):数据恢复与同步
server类型(ServerType)
client端服务类
server端服务类
Leader(new)
LeaderZookeeperServer
Zookeeper服务端初始化过程(二):Leader选举过程
Server具有如下几种状态:LOOKING:失去leader信号,选举中FOLLOWING:环境正常,对于follower而言,正在“跟随”leaderLEADING:环境正常,对于leader而言,正在“带领”OBSERVING:环境正常,对于observer而言,正在“观察”
选举的时机:Leader失效,或者Follower认为Leader"失效";比如Follower首次加入集群时无法确定Leader则尝试选举,比如Follower和Leader之间的网络问题,导致Follower离 ...
Zookeeper服务端初始化过程,引导类:QuorumPeerMain.java.
F1.Server端引导类执行过程
snapshot文件是ZKDatabase内存数据的”快照”,当server接收到一定量的write操作或者达到时间间隔阀值,将会对内存数据进行一次本地文件序列化存储,每次存储将会生成一个snapshot文件,同时也会伴随一个log文件的生成.log文件为server执行的txn操作的预操作日志,每个write操作,都会首先被写入log日志.
DatadirCleanupManager类,只负责定期清理那些相对”过时”的log/snapshot文件,只保留 ...
Zookeeper全参数构造函数:
public Zookeeper(String connectString,int sessionTimeout,Watcher watcher,long sessionId,byte[] sessionPWD,boolean canBeReadOnly)
F1 Zookeeper实例整体过程
F2 内部原理
如果server端开启了”readonlymode.enabled”,即允许当前server可以readonly方式运行,
当server端尚未加入集群(处于LOOING状态),或者集群处于”危险状态”(大多数机 ...
Zookeeper-Wathes简介
- 博客分类:
- Zookeeper
10.Zookeeper watches:
Zk中所有的read操作都可以指定watch—getData(),getChildren(),exists()。watch是一次性事件触发器,当其”watch”的数据发生变更是,把事件发送给client。定义一个watch有2个关键点。
1)一次触发:如果一个client在getData( ...
8. snapshot原理:
ZK Snapshot主要意义就是将当前Database + Memory中数据的状态,直接序列化到文件,以方便在故障时可以迅速恢复.snapshot是fuzzy的(非严格意义的snapshot),snapshot所涉及到的类有SyncRequestProcessor(同步请求处理器,处理 ...
Zookeeper简介(二)
- 博客分类:
- Zookeeper
二.ZK设计原理简述1. Zk数据模型和层级namespace: ZK的名称空间非常类似文件系统,名称为一系列的path,例如”/root/app/task”,ZK中每个node都是通过path来标识的。和文件系统不同的是,每个node可以有关联的data,字节点也是如 ...
Zookeeper配置参数与简介(1)
- 博客分类:
- Zookeeper
[前言:这是一次艰苦的旅行...]
一.初始ZK
1. 什么是ZK:ZK是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集团管理/leader选举等。关键词:分布式协调 高性能2. 设计目标:
简单:ZK中的namespace组织结构类似与标准的文件系统,通过这些共享的有层次的namespace来互相协调分布式中的多个进程,这些namespace由ZNodes组成,ZK数据被保存在内存中,这也意味着ZK将可以达到较高的吞吐量/较低的延迟。ZK的核心目标就是高性能,高可用,严格有序存取。高性能标志着ZK ...
Zookeeper构造器:
Zookeeper(connectString,sessionTimeout,watcher,canBeReadOnly)
Zookeeper(connectString,sessionTimeout,watcher,sessionId,byte[] sessionPwd,canBeReadOnly),
上述是创建ZK实例的2个构造方法,需要指定connectionString,sessionTimeout,canBeReadOnly是表示是否允许client链接只读节点,当client找不到R/W server时,是否允许链接那写只读serve ...
JAVA内存模型和线程安全
- 博客分类:
- JAVA
一.JAVA内存模型(JMM,JAVA Memory Model):
运行时涉及到两种内存,主内存和工作区内存,其中工作区内存通常为CPU的高速缓存区用来加快内存数据读取操作的(各线程独立).所有的变量内容都存在主内存中,当需要对内存数据进行操作时,数据将会从主存中load到工作区缓存并由CPU计算和赋值操作,然后再由工作区内存write到主存中,读取时如果工作区内存中已经有(loaded)则直接使用;工作区内存保存了线程使用的变量的副本,线程不可以直接操作主内存,只能操作工作区内存,对于需要变更的变量,需要通过一系列回写指令集同步到主内存中.且工作区内存是线程独占的,主内存是线程 ...
JVM类加载机制小结
- 博客分类:
- JAVA
一.类加载
虚拟机把class文件加载至内存之后,对字节码数据进行校验/解析/初始化等操作,最终形成可被VM直接使用的java类型,这就是虚拟机类加载机制.类的加载完全可以在运行时进行,这给VM提供了动态加载类提供了可行 ...
JVM内存分配与调优参数列表
- 博客分类:
- JAVA
一.运行时数据区:
程序计数器:它是一块较小的内存空间,主要作用是当前线程所执行的字节码的行号指示器.由于java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的(协作式/抢占式?!),即任何时刻,任一CPU只会正在处理一个线程的指令;为了确保线程切换后能够正确恢复执行的位置,每个线程都有一个独立的程序计数器,每个计数器为线程私有.如果线程正在执行java方法,那么此计数器记录的是正在执行的字节码指令地址;如果执行的是Native方法,那么它(计数器)的值则为undefined.
虚拟机栈:线程私有,每个线程在执行java方法时都会被创建虚拟机栈,它用来存储方法 ...