大数据生态圈中,保证一致性的方式举不胜举

他们各有什么区别,为什么会如此选型?

Paxos 选举算法

 Paxos 是最先解决拜占庭将军问题的算法,利用过半选举的机制,保证了集群数据副本的一致性(微服务中服务注册与发现的场景,其实已经不再适用了)

Raft 选举算法

 Redis 使用 Raft 实现了自己的分布式一致性。Raft 本身和 Paxos 并没有场景上的区别。更多的是,协议上的简化、Term 概念的强化、Log 只会从 Leader 到 Follower 单向同步,使得实现起来会很方便

Zab 原子广播协议

 Hadoop 偏向于离线的海量数据处理,利用 ZooKeeper 来保证数据副本的一致性,是最为合适的

Hash 路由算法

 ElasticSearch 集群接收到为文档创建索引的请求时,需要选择在哪一个 shard(完整且独立的 Lucene 索引实例)上对文档进行索引。ElasticSearch 采用的是 djb2 哈希算法(俗称 times33),对要索引文档默认或指定的 key 进行哈希 hash(key),然后再对 ElasticSearch 集群中 shard 的数量 n 进行取模,即 $hash(key) \, mod \, n$

一致性 Hash

 用于对数据存储进行负载均衡的算法。最新的进展,是在去年 Google 发表的一篇 有界负载的一致性 Hash 算法的论文。该算法保证了负载均衡一致性稳定性的同时,在均匀性方面做出了实质性地改进。同时,Consistent Hashing with Bounded Loads 算法 也在 HaProxy 开源项目中得以应用,有效减少了其 8 倍的缓存带宽

Gossip 闲话算法

 Gossip 主要被 Cassandra 用于实现其分布式一致性。因为 Cassandra 框架,更看重 去中心化容错 的特性,在不违背 CAP 定理的情况下,能够接受 最终一致性

阅读全文 »

ZooKeeper 是什么?

 ZooKeeper 是一个基于 Google Chubby 论文实现的一款解决分布式数据一致性问题的开源实现,方便了依赖 ZooKeeper 的应用实现 数据发布 / 订阅负载均衡服务注册与发现分布式协调事件通知集群管理Leader 选举分布式锁和队列 等功能

基本概念

集群角色

 一般的,在分布式系统中,构成集群的每一台机器都有自己的角色,最为典型的集群模式就是 Master / Slave 主备模式。在该模式中,我们把能够处理所有写操作的机器称为 Master 节点,并把所有通过异步复制方式获取最新数据、提供读服务的机器称为 Slave 节点

(利用 Axure™ 绘制而成)

 而 ZooKeeper 中,则是引入了 领导者(Leader)跟随者(Follower)观察者(Observer) 三种角色 和 领导(Leading)跟随(Following)观察(Observing)寻找(Looking) 等相应的状态。在 ZooKeeper 集群中的通过一种 Leader 选举的过程,来选定某个节点作为 Leader 节点,该节点为客户端提供服务。而 FollowerObserver 节点,则都能提供服务,唯一的区别在于,Observer 机器不参与 Leader 选举过程 和 写操作"过半写成功"策略,Observer 只会被告知已经 commit 的 proposal。因此 Observer 可以在不影响写性能的情况下提升集群的读性能(详见下文 “性能优化 - 优化策略 - Observer 模式” 部分)

(利用 Axure™ 绘制而成)
阅读全文 »

介绍 Apache HBase 的基本概念、环境部署、常用命令、实战技巧、架构设计和性能优化,并记录了一些踩过的坑,及其解决方案。

阅读全文 »

Apache Calcite 是什么?

Apache Calcite™ is a dynamic data management framework.

Calcite Mountain

(图片来源:Pixabay™ 官网,已确认无版权)

基本概念

Catelog

 用于定义 SQL 语义相关的元数据与命名空间

SQL Parser

 负责将 SQL 转化成 AST(Abstract Syntax Tree)

SQL Validator

 负责通过 Catalog 对 AST 进行校证

Query Optimizer

 负责将 AST 转化成物理执行计划、优化物理执行计划

SQL Generator

 负责将物理执行计划反向转化成 SQL 语句

特性

  • 支持标准 SQL 语言
  • 通过适配器(Adapter)可以支持连接任何数据源
  • 支持丰富的关系代数(并集、交集、连接、笛卡尔积等)
  • 支持对逻辑规划规则进行定制(例如 Filter 下推)
  • 支持成本模型优化(CBO, Cost-Based Optimizer 和 RBO, Rule-Based Optimizer)
  • 支持管理物化视图(Materialized view
  • 支持查询流式数据
  • 稳定可靠(开发迭代 10 年以上)
  • 已贡献给 Apache 基金会(于 2013 年)
  • 开源社区活跃(Apache Druid、Apache Hive、Apache Drill、Apache FlinkApache Phoenix 等项目均在使用)
Apache Calcite 借助开源的 JavaCC 完成 SQL 解析,将 SQL 语句转化为 Java 代码
Apache Calcite 还使用了轻量级 Janino 编译运行时 Java 代码,以便灵活地管理元数据
阅读全文 »