Overview
分布式本质论: 高吞吐(high throughput), 高可用(high available), 低延迟(low latency), 可扩展(high scalability).
整合一下个人对于大数据平台, 数据中台, 数据仓库的技术栈, 这里有一个它们之间差异的回答,
- 数据库阶段, 主要是OLTP(联机事务处理)的需求
- 数据仓库阶段, OLAP(联机分析处理)成为主要需求
- 数据平台阶段, 主要解决BI和报表需求的技术问题
- 数据中台阶段, 通过系统来对接OLTP和OLAP的需求, 强调数据业务化的能力
当然, 主要看具体业务需求, 一切脱离业务的架构都是耍流氓. 业务开展到哪里, 架构也要跟着并延展些.
另外, 有些框架经过多年的发展, 已经脱离了单一的技术范畴, 向着多元化的生态圈发展. 当然这也是围城和壁垒.
Structure
下面是一个不大完善的数据栈图, 中台可以在此之上做扩展.
data collection
flume(2011): 采用事务来确保event可靠性, 由sink来确认是否remove channel里的event, via apache
libbeat(2015): 通过Scan()来确认新增file, 然后为其new一个harvester发送到libbeat做聚合, via elastic
Reference
data storage(raw)
batch
hdfs(2006): 分布式文件系统, 通过master-slave和replica机制来低成本高可靠地存储数据. via bigintellects
stream
kafka(2011): file system cache, zero copy(内核态), 顺序写磁盘. via dataflair
pulsar(2016): 将
无状态的消息服务层broker
和有状态的消息持久层bookkeeper
分离, 无状态可以随时增删, 而有状态却通过replica segment来做HA;当然还有scale out. via streamthoughts
Reference
- 技术架构及选型
- Dynamo: Amazon’s Highly Available Key-value Store
- Pulsar(新一代高性能消息系统)核心总结
- BookKeeper 原理浅谈
- Comparing Pulsar and Kafka
- Understanding How Apache Pulsar Works
data compute
batch
spark(2014): lambda(batch-stream分离), master-slave, rdd, lineage, persist, via 0x0fff
airflow(2015): high scalability, HA, UI manage, via clairvoyantsoft
oozie(2011): server与compute分离, multilayer(bundle), HA, via devstacks
这里scheduler都是通过多server来避免SPOF, 而多server之间的状态同步是通过DB(ZK)来传递.
有别于常规的多server leader-standby模式(eg., kafka broker, DB主从复制)
stream
flink(2011): kappa, master-slave, state, window, cp, via apache
Reference
- Making Apache Airflow Highly Available
- Oozie Architecture and Job Scheduling
- Lambda架构 vs Kappa架构
- Flink–Checkpoint机制原理
- 一文搞懂Flink内部的Exactly Once和At Least Once
data storage
in-memory
redis(2009): mem-base, 非阻塞多路IO复用, 事务, proactive expire, HA(sentinel), throughput(cluster), via redislabs
ignite(2015): 分布式, KV, mem-disk SQL, 2PC事务, 数据本地性, via apache
timeseries
influxdb(2013): TSM, TSI, WAL/cache, rp, via hbasefly
full-text
es(2010): master-data, zen discovery , replica, LSM, full text
MOLAP
kylin(2013): 预计算cube, SQL, high scalability, MR, via apache
druid(2011), role separate(master-query-data), LSM, via apache
ROLAP
clickhouse(2016): russia, column oriented, SQL, 主备复制, index(primary key sort), table engine, via altinity
greenplum(2015): master-slave, append-optimized, SQL, resource queue, via researchgate
tidb(2017): 分布式, SQL, raft, LSM, mysql alternative, via pingcap
query engine
presto(2013): master-slave, mem-base MPP, SQL, connector, via slideshare
sparksql(2014): catalyst, cost base, rdd, via dataflair
hive(2010): SQL, MR, metadata, via andr83
pig(2008): pig latin, MR, via dezyre
graph
neo4j(2007): 定长记录结构, cypher, HA, via slideshare
Reference
- IO多路复用技术(multiplexing)是什么?
- 为什么IO多路复用要搭配非阻塞 IO?
- Ignite(二): 架构及工具
- 数据库如何用 WAL 保证事务一致性?
- Every shard deserves a home
- Guide to Refresh and Flush Operations in Elasticsearch
- Apache Kylin 入门 2 - 原理与架构
- apache druid架构、原理、执行流程
- 数据结构篇—-B+树与LSM树浅析
- ClickHouse表引擎到底怎么选
- TiDB整体架构
- Presto: SQL on Everything
- Presto架构及原理、安装及部署
- Spark SQL Catalyst优化器
- What is Hive Metastore?
- Neo4j_高层架构和应用
data analytics
BI
TODO
TODO