如何管理海量数据,是很多企业都需要解决的问题。要高效管理数据并充分发挥数据信息应有的价值,前提是要对大数据进行有效存储。
京东大数据存储跨域及分层实践
下图是京东数据平台架构图。
京东数据平台的整体架构主要由六部分组成,其中数据存储作为计算存储层的底层组件支撑着上游的计算引擎调度,以及更高层的工具层、服务层和应用层。在整个数据平台架构中,底层数据存储起到了基建的作用,是整个大数据平台的基础。
1. 跨域存储面临的问题与解决方案
在跨域存储架构应用之前,跨机房数据的同步主要通过业务方在不同机房之间进行Distcp实现,这种方式便会存在一些隐患问题:
第一个问题:元数据一致性由业务方保证,数据迁移需要业务介入,成本高时间长。
第二个问题:跨机房的流量不受控,影响同步任务,需要借助外部调度系统和存储。
第三个问题:产生多份冗余数据,数据共享和同步成本高,比如在不同机房不同数据节点间载入了多份相同数据,导致冗余。
第四个问题:不具备多机房集群的容灾系统,未充分利用多机房优势。
(1)跨越存储的架构
基于以上,京东大数据平台在底层存储模块设计了一个跨域数据同步功能来解决历史数据存储同步带来的问题。选择在底层解决该问题不仅可以把控跨域数据的一致性,还提供了业务无感知的跨域数据同步与分享功能,以减少业务方重复工作,使存储系统具备跨域迁移和跨域容灾的能力。
京东该跨域存储架构的主要思路是通过“全量存储+全网拓扑”,实现跨机房故障域,最终实现大数据关键数据异地容灾及跨机房存储能力。
(2)跨域存储——跨域数据流
在实现跨域存储过程中,采用了两种数据流方式:
- 异步数据流
将数据先写到本地机房,再通过namenode(NN)自动进行跨域同步。该数据传输方式写入性能与现有未跨域场景一致,同步时延优于 distcp 方案。
- 同步数据流
建立pipeline数据管道,串联机房全部datanode(DN),一次将数据同步。该种传输方式针对数据一致性和可靠性要求高的业务。
(3)跨域存储——拓扑与机房感知
拓扑与机房感知是解决“节点定位”这一跨域存储核心问题的关键模块。基于该模块可控制数据块分布和控制客户端流量。该模块主要从两个方面解决问题:
- 拓扑管理
通过改造节点的拓扑方式,在拓扑管理中增加一个机房维度,同时选块逻辑要基于全网拓扑模块进行适配,以兼容多机房。
- 机房感知
针对跨域版本的客户端,可通过在RPC头部携带机房信息,以便识别和检索;针对不支持跨域版本的客户端,可通过京东网络服务团队提供的ip映射到机房的服务, 实现客户端对应机房的检索和查询。
(4)跨域存储——跨域标识
跨域标识模块是解决“数据跨机房存放”问题的关键设计,我们采用一个支持副本和EC的属性标签来描述数据的跨域属性。EC包含数据块和校验块两种类型,相对于副本模式其跨域同步的支持更加复杂,需要支持在同机房内的数据重构和重构条件不具备时的跨域数据拷贝,以减少 EC 数据在跨域场景下的跨域同步流量。
加快整体跨域数据处理的速度,采用了三种方法:
- 将元数据固化在XATTR上
- 在内存上构建了Inode Proto
- 在每个数据块上,创建块属性标识
(5)跨域存储——跨域补块及流控
针对跨域补块和流控,采用了三种方法保证了性能:
- 在处理跨域补块时遵从的原理是跨域处理与原有流程隔离,保证新增的跨域处理流程不影响原先同机房的补块处理,在遇到机房网络中断等极端情况可以保障单机房元数据服务可用。
- 新增异步跨域更新器,结合跨域标签属性,实现HA切换接续补块,解决存量数据问题。
- 采用CR-Checker程序替代原有的DistCopy任务,可以将原先的跨集群同步任务平滑升级成跨域同步任务,最大限度减少跨域架构升级对原有存量任务的冲击。
2. 分层存储面临的问题与解决方案
京东的数据分层存储是为了解决原有框架所存在的问题,主要是:冷热数据未区分对待的问题、不同硬件类型未区分对待的问题,以及数据治理工作推进困难的问题。
(1)分层存储的架构
京东分层存储的架构,整个框架主要是在NN内部实现的:
- 分层策略配置:提供外部API下发及内部配置。
- 分层配置API:提供分层策略下发接口,外部可通过离线数据分析及业务侧下发分层逻辑。
- 内置分层策略:可配置和动态刷新的分层策略,默认通过访问监控器统计数据进行LRU分层策略配置。
- 标签管理器:实现目录标签和节点标签管理,指导选块模块及分布校验器等模块进行数据迁移。
- 数据分布校验器:实现对新增数据的分布校验,指导数据按照标签进行分布。
- 存量数据满足器:对存量数据进行扫描验证,指导存量数据块迁移;实现数据生命周期管理功能。
(2)分层存储——核心设计
分层存储的核心设计,可以分为两个模块,一个是元数据上根据目录树进行标签管理,对数据进行冷热数据分配;另一块是节点拓扑树,采用虚拟多拓扑树在逻辑上将不同标签的节点进行区分,不同标签类型会有自己独立的拓扑树,实现更高效的选节点性能。虚拟拓扑树有两种更新方式,分别为根据节点权重进行异步更新和上下线数据进行同步更新。
增量数据和存量数据在处理流程上有以下差异:
- 增量数据:对于写入请求,先判断标签,然后根据匹配对应节点,写入数据。
- 存量数据:后台数据分布校验会扫描数据的标签,基于虚拟拓扑树匹配对应的节点,然后完成数据迁移或转换。
以上内容节选自吴维伟老师的《京东大数据存储跨域及分层实践》。