数据库基础

ACID

  1. 原子性(Atomicity)
    事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。

回滚可以用回滚日志来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。

  1. 一致性(Consistency)
    数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。

  2. 隔离性(Isolation)
    一个事务所做的修改在最终提交以前,对其它事务是不可见的。

  3. 持久性(Durability)
    一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。

使用重做日志来保证持久性。

阅读全文

网络基础

对一些简单内容的总结,详细阅读参考内的文章。

阅读全文

zk解析(13):关键点总结

选主时期

选主逻辑

阅读全文

zk解析(12):zk存储

ZKDatabase: zk内存数据存储的核心类,维护了DataTree。

DataTree:zk存储的数据结构,以树的形式保存,代表了内存中一份完整的数据

DataNode: 叶子节点,存储节点数据。

阅读全文

zk解析(11):watch实现

DataTree

设置Watcher

设置watcher请求最终的处理方法。

参数中的Watcher可以查看NIOServerCnxn的解析,NIOServerCnxn负责了与客户端的链接,所以可以通过NIOServerCnxn发送响应。

watcher是设置在WatchManager中,由WatchManager管理Watcher。

阅读全文

zk解析(10):ObserverZooKeeperServer

前言

ZookeeperServer类是非常关键的类,客户端发起的请求和服务间的请求都是处理都是交由ZookeeperServer来处理。

阅读全文

zk解析(9):FollowerZookeeperServer

前言

ZookeeperServer类是非常关键的类,客户端发起的请求和服务间的请求都是处理都是交由ZookeeperServer来处理。

阅读全文

zk解析(8):NIOServerCnxnFactory

前言

ServerCnxnFactory负责与客户端的连接。

阅读全文

zk解析(7):ServerCnxnFactory

前言

ServerCnxnFactory负责与客户端的连接。

初始化

org.apache.zookeeper.server.quorum.QuorumPeerMain#runFromConfig

启动

org.apache.zookeeper.server.quorum.QuorumPeer#start

阅读全文

zk解析(5):Follower

前言

节点未成为主节点且未设置为observer,此时该节点就处于Follower状态。

代码参考zk解析(1)-zk集群启动及选主:

org.apache.zookeeper.server.quorum.QuorumPeer#run
org.apache.zookeeper.server.quorum.Follower#followLeader
QuorumPeer#run处于FOLLOWING状态时执行follower.followLeader();

1
2
3
4
5
6
7
8
9
10
11
12
13
case FOLLOWING:
try {
LOG.info("FOLLOWING");
setFollower(makeFollower(logFactory));
follower.followLeader();
} catch (Exception e) {
LOG.warn("Unexpected exception",e);
} finally {
follower.shutdown();
setFollower(null);
setPeerState(ServerState.LOOKING);
}
break;

阅读全文