二叉查找树是二叉树最常用的一种类型,也叫二叉搜索树(BST)。顾名思义,二叉查找树是为了实现快速查找而生的。不过,它不仅仅支持快速查找数据,还支持快速插入、删除数据。它是如何实现这些的呢?
这些都依赖于二叉查找树的特殊结构。二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值。
Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport)于1990年提出的一种基于消息传递且具有高度容错特性的共识(consensus)算法。
注意:Paxos常被误称为“一致性算法”。但是“一致性算法”和“共识算法”并非同一个概念,详见:
分布式系统的一致性和共识性
分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程运行缓慢、被杀死或者重启,消息可能会出现延迟、丢失、重复。在基础 Paxos 场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致(注意:值并不只是狭义上的某个数,它可以是一条日志,也可以是一条命令(command)。根据应用场景不同,值有不同的含义),保证不论发生以上任何异常,都不会破坏决议的共识。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“共识算法”以保证每个节点看到的指令一致。
现在来看第一个问题:为什么需要 Pod?我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单位,但是为什么我们会需要这样一个概念呢?我们在使用容器 Docker 的时候,也没有这个说法。其实如果要理解 Pod,我们首先要理解容器,所以首先来回顾一下容器的概念:
容器的本质实际上是一个进程,是一个视图被隔离,资源受限的进程。
容器里面 PID=1 的进程就是应用本身,这意味着管理虚拟机等于管理基础设施,因为我们是在管理机器;但管理容器却等于直接管理应用本身。这也是之前说过的不可变基础设施的一个最佳体现。这个时候,你的应用就等于你的基础设施,它一定是不可变的。