分布式共识
什么是分布式共识
共识 (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 的数据一致性和高可用解决方案。
HBase 是一种 NoSQL 数据库,它是Java版本的 Google’s Big Table 实现,它原本是 Hadoop 的子项目,现在已独立出来,并成为 apache 的顶级项目。
HBase 的设计目标是用于存储大规模数据集。HBase 是列式数据库,与传统行式数据库相比,其非常适合用于存储稀疏性的数据。
HBase 是基于 HDFS 实现的。
HBase 关键特性:
LSM 被广泛应用于很多以文件结构存储数据的数据库,如:HBase, Cassandra, LevelDB, SQLite。
LSM 的设计目标:通过顺序写来提高写操作吞吐量,替代传统的 B+ 树或 ISAM。
略
数据分片
水平分片:按行进行数据分割,数据被切割为一个个数据组,分散到不同节点上。
垂直分片:按列进行数据切割,一个数据表的模式(Schema)被切割为多个小的模式。
数据同步
数据库同步用于帮助数据库恢复一致性。
分布式数据库发展就是一个由合到分,再到合的过程:
Apache Dubbo是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:
Dubbo 是一个分布式服务框架,致力于提供高性能、透明化的 RPC 远程服务调用方案以及服务治理方案,以帮助我们解决微服务架构落地时的问题。
broker
:broker 模块(broker 启动进程) 。client
:消息客户端,包含生产者、消息消费者相关类。common
:公共包。dev
:开发者信息(非源代码) 。distribution
:部署实例文件夹(非源代码) 。example
:RocketMQ 示例代码。filter
:消息过滤相关基础类。filter
:消息过滤服务器实现相关类(Filter 启动进程) 。logappender
:日志实现相关类。namesrv
:N ameServer 实现相关类(Names 巳 rver 启动进程) 。openmessaging
:消息开放标准,正在制定中。remoting
:远程通信模块,基于 Netty 。srvutil
:服务器工具类。store
:消息存储实现相关类。style
:checkstyle 相关实现。test
:测试相关类。tools
:工具类,监控命令相关实现类。