分布式共识
什么是分布式共识
共识 (distributed consensus) 是分布式系统中最基本的问题,用来保证一个分布式系统的可靠性以及容错能力。简单来说,分布式共识性是指多个服务器的保持状态一致。
共识问题通常形式化如下:一个或多个节点可以提议(propose) 某些值,而集群中的所有有效节点根据共识算法进行协商,最终决议(decides) 采纳某个节点的提议。
而共识算法必须满足以下性质:
共识 (distributed consensus) 是分布式系统中最基本的问题,用来保证一个分布式系统的可靠性以及容错能力。简单来说,分布式共识性是指多个服务器的保持状态一致。
共识问题通常形式化如下:一个或多个节点可以提议(propose) 某些值,而集群中的所有有效节点根据共识算法进行协商,最终决议(decides) 采纳某个节点的提议。
而共识算法必须满足以下性质:
1978 年,Lamport 在 Time, Clocks, and the Ordering of Events in a Distributed System 中提出了逻辑时钟的概念,来解决分布式系统中区分事件发生的时序问题。
逻辑时钟指的是分布式系统中用于区分事件的发生顺序的时间机制。
ZooKeeper 并没有直接采用 Paxos 算法,而是采用了名为 ZAB 的一致性协议。ZAB 协议不是 Paxos 算法,只是比较类似,二者在操作上并不相同。Multi-Paxos 实现的是一系列值的共识,不关心最终达成共识的值是什么,不关心各值的顺序。而 ZooKeeper 需要确保操作的顺序性。
ZAB 协议是 Zookeeper 专门设计的一种支持崩溃恢复的原子广播协议。
ZAB 协议是 ZooKeeper 的数据一致性和高可用解决方案。
Python 是一种广泛使用的解释型、高级和通用的编程语言。Python 支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。
1991 年,Python 的第一个解释器诞生。
1994 年,Python 1.0 版本发布。它包含了异常处理、函数和模块等基本特性。
2000 年,Python 2.0 版本发布。它引入了新的特性,如列表推导式、垃圾回收机制等。
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:
# -*- coding: cp-1252 -*-
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
Python 基本赋值
a = 1
b = 2.0
c = "test"
print(f'a={a}')
print(f'b={b}')
print(f'c={c}')
# 输出
# a=1
# b=2.0
# c=test
Python 语言支持以下类型的运算符:
假设变量: a=10,b=20
运算符 | 描述 | 实例 |
---|---|---|
+ |
加 - 两个对象相加 | a + b 输出结果 30 |
- |
减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
* |
乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ |
除 - x 除以 y | b / a 输出结果 2 |
% |
取模 - 返回除法的余数 | b % a 输出结果 0 |
** |
幂 - 返回 x 的 y 次幂 | a**b 为 10 的 20 次方, 输出结果 100000000000000000000 |
// |
取整除 - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
Python 的选择语句的语法格式为:if...elif...else
语句。
if
语句至多有 1 个 else
语句,else
语句在所有的 elif
语句之后。if
语句可以有若干个 elif
语句,它们必须在 else
语句之前。elif
语句检测为 true
,其他的 elif
以及 else
语句都将跳过执行。