典型数据系统架构

数据系统的核心组件包含数据管道、分布式存储和分布式计算。

数据系统架构

常用的核心组件:

关系数据库:用于主业务数据存储,提供事务型数据处理,是应用系统的核心数据存储。

高速缓存:对复杂或操作代价昂贵的结果进行缓存,加速访问。

搜索引擎:提供复杂条件查询和全文检索。

队列:用于将数据处理流程异步化,衔接上下游对数据进行实时交换。异构数据存储之间进行上下游对接的核心组件,例如数据库系统与缓存系统或搜索系统间的数据对接。也用于数据的实时提取,在线存储到离线存储的实时归档。

非结构化大数据存储:用于海量图片或视频等非结构化数据的存储,同时支持在线查询或离线计算的数据访问需求。

结构化大数据存储:在线数据库也可作为结构化数据存储,但这里提到的结构化数据存储模块,更偏在线到离线的衔接,特征是能支持高吞吐数据写入以及大规模数据存储,存储和查询性能可线性扩展。可存储面向在线查询的非关系型数据,或者是用于关系数据库的历史数据归档,满足大规模和线性扩展的需求,也可存储面向离线分析的实时写入数据。

批量计算:对非结构化数据和结构化数据进行数据分析,批量计算中又分为交互式分析和离线计算两类,离线计算需要满足对大规模数据集进行复杂分析的能力,交互式分析需要满足对中等规模数据集实时分析的能力。

流计算:对非结构化数据和结构化数据进行流式数据分析,低延迟产出实时视图。

派生数据体系 

在数据系统架构中,我们可以看到会存在多套存储组件。对于这些存储组件中的数据,有些是来自应用的直写,有些是来自其他存储组件的数据复制。例如业务关系数据库的数据通常是来自业务,而高速缓存和搜索引擎的数据,通常是来自业务数据库的数据同步与复制。不同用途的存储组件有不同类型的上下游数据链路,我们可以大概将其归类为主存储和辅存储两类,这两类存储有不同的设计目标,主要特征为:

  • 主存储:数据产生自业务或者是计算,通常为数据首先落地的存储。ACID等事务特性可能是强需求,提供在线应用所需的低延迟业务数据查询。

  • 辅存储:数据主要来自主存储的数据同步与复制,辅存储是主存储的某个视图,通常面向数据查询、检索和分析做优化

为何会有主存储和辅存储的存在?能不能统一存储统一读写,满足所有场景的需求呢?目前看还没有,存储引擎的实现技术有多种,选择行存还是列存,选择B+tree还是LSM-tree,存储的是不可变数据、频繁更新数据还是时间分区数据,是为高速随机查询还是高吞吐扫描设计等等。数据库产品目前也是分两类,TP和AP,虽然在往HTAP方向走,但实现方式仍然是底层存储分为行存和列存。

再来看主辅存储在实际架构中的例子,例如关系数据库中主表和二级索引表也可以看做是主与辅的关系,索引表数据会随着主表数据而变化,强一致同步并且为某些特定条件组合查询而优化。关系数据库与高速缓存和搜索引擎也是主与辅的关系,采用满足最终一致的数据同步方式,提供高速查询和检索。在线数据库与数仓也是主与辅的关系,在线数据库内数据集中复制到数仓来提供高效的BI分析。

 这种主与辅的存储组件相辅相成的架构设计,我们称之为『派生数据体系』。在这个体系下,最大的技术挑战是数据如何在主与辅之间进行同步与复制。

  • 应用层多写:这是实现最简单、依赖最少的一种实现方式,通常采取的方式是在应用代码中先向主存储写数据,后向辅存储写数据。这种方式不是很严谨,通常用在对数据可靠性要求不是很高的场景。因为存在的问题有很多,一是很难保证主与辅之间的数据一致性,无法处理数据写入失效问题;二是数据写入的消耗堆积在应用层,加重应用层的代码复杂度和计算负担,不是一种解耦很好的架构;三是扩展性较差,数据同步逻辑固化在代码中,比较难灵活添加辅存储。

  • 异步队列复制:这是目前被应用比较广的架构,应用层将派生数据的写入通过队列来异步化和解耦。这种架构下可将主存储和辅存储的数据写入都异步化,也可仅将辅存储的数据写入异步化。第一种方式必须接受主存储可异步写入,否则只能采取第二种方式。而如果采用第二种方式的话,也会遇到和上一种『应用层多写』方案类似的问题,应用层也是多写,只不过是写主存储与队列,队列来解决多个辅存储的写入和扩展性问题。

  • CDC(Change Data Capture)技术:这种架构下数据写入主存储后会由主存储再向辅存储进行同步,对应用层是最友好的,只需要与主存储打交道。主存储到辅存储的数据同步,则可以再利用异步队列复制技术来做。不过这种方案对主存储的能力有很高的要求,必须要求主存储能支持CDC技术。一个典型的例子就是MySQL+Elasticsearch的组合架构,Elasticsearch的数据通过MySQL的binlog来同步,binlog就是MySQL的CDC技术。

  •  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值