好的数据编排怎么做?平安壹钱包大数据重构实践
导读 本文将结合平安壹钱包的实际使用情况,分享对 Alluxio 的理解以及使用 Alluxio 进行大数据建设的实践经验。
主要内容包括以下几大方面:1. Alluxio介绍
2. Alluxio实践分享
3. 展望
分享嘉宾|罗开畅 平安壹钱包 高级数据分析师
编辑整理|林梦楠
内容校对|李瑶
出品社区|DataFun
👇扫码观看嘉宾演讲内容👇
Alluxio 介绍
1. 背景介绍
高耦合:计算引擎与存储系统已经形成了一个整体,任意一方的升级或者变更,都意味着需要重新考虑兼容性的问题。 难迭代:计算引擎需要使用不同 API 去访问不同的存储系统,数据的跨存储系统迁移往往需要兼顾计算机应用,甚至需要重新开发。 难迁移:从本地集群的部署方式平滑迁移为云部署的难度高,不仅维护成本高,还很难适应混合云环境。 持续性的迭代压力:任何方案都会过时,想要追逐技术前沿,就需要面对持续性的迭代压力。
2. 数据编排概览
标准 API
解耦计算与存储
缓存
云原生
3. Alluxio 架构设计
跨存储系统的数据读写:Alluxio Worker 主要负责与底层存储系统进行交互,它不仅实现了不同存储系统的 API,还可以自动转换,实现了跨存储系统的数据读写。 多级缓存:Alluxio Worker 维护了一个多级缓存,用以加速热数据的访问,减少读取底层存储的次数。而基于块注释的缓存设计,不仅可以为热数据提供最佳性能,还能在缓存空间不足时自动释放较冷的数据,以非常自然的方式实现了数据的冷热分离。 访问短路:当计算应用与 Alluxio Worker 处于同一节点时,还可以直接通过 NIO 进行短路交互,进一步优化数据的访问链路,减少响应时间。 弹性部署:Alluxio Worker 在启动时会主动向 AlluxioMaster 注册自己,并通过心跳机制维持存在,而基于数据易失性的设计,可以让用户根据需要,灵活的进行水平拓展或者缩容。
4. Alluxio 核心功能
灵活挂载 Alluxio 的根挂载点需要在启动时指定,绑定 Alluxio 的根目录。嵌套挂载点则可以在任意 Alluxio 子目录上通过命令行指定。嵌套挂载点的数量没有限制,可以分别挂载不同的存储系统,或者相同存储系统的不同版本。 访问控制 用户通过 Alluxio 访问底层存储时,只能访问挂载在 Alluxio 上的目录,同时 Alluxio 也可以将挂载点设定为 read-only,进一步限制用户对底层存储的访问。这是区别于用户权限管理的强制限制。 访问透明 用户通过 Alluxio 访问底层存储时,并不需要感知底层存储系统的类别、版本,也不需要关注挂载点(某些情况除外)。在大部分场景中,通过 Alluxio,用户可以无感知地访问挂载其上的底层存储。
缓存读写策略 读:NO_CACHE(Alluxio 仅作为代理,不做缓存),CACHE_PROMOTE(尽量放到缓存最上层),CACHE。 写:THROUGH(Alluxio 仅作为代理,不做缓存),CACHE_THROUGH(写入存储时备份到缓存空间中,适合于写入后还需要读的场景),ASYNC_THROUGH(异步写),MUST_CHACHE(仅写入缓存空间)。 缓存管理 块注释策略:根据块注释策略为数据块进行排序,位于序列尾部的数据块将作为优先的空间释放对象。 最少最近策略 基于权重的最少最近策略 缓存分层:数据块可能已配置存储层中,基于块注释策略,Alluxio 会在各存储层中移动数据块,包括块对齐、块升级、迁移任务退后等。 缓存驱逐:当 Alluxio 的存储空间不足时,无法接受新数据的写入,会基于注释策略释放存储空间,这个过程叫做缓存驱逐。它保证了 Alluxio 总是存储着热数据,但也会在某些场景下造成缓存命中率降低的问题。 缓存生命周期 数据操作:LOAD(加载数据到缓存空间),PERSIST(缓存空间中的数据回写到底层存储),FREE(只清除缓存空间中的数据,不动底层存储数据),DELETE(缓存空间和底层存储的数据都清除) TTL:Alluxio 可以为文件和目录设置生存时间,当生存时间到达时,执行一种数据操作,默认为 DELETE。这样可以对缓存空间进行策略化管理。 元数据同步:Alluxio 可以为文件和目录设置元数据检查周期,当缓存过期时,会自动从 UFS 重新加载。如果每次访问都同步底层存储,开销会比较大,因此可以根据应用场景进行定制。如果对数据时效性比较敏感,底层存储的任何更新,在通过 Alluxio 去访问时都希望能感知到,这时就可以设置每次读之前同步元数据。而大多数情况下,对数据时效性没有那么敏感,那么就可以根据需要设置同步的时间间隔。
Alluxio 实践分享
1. 长链计算任务的迁移需要兼顾上下游依赖关系
2. 利用高速的缓存空间加速数据的读写
将 Trino 和 Alluxio 混合部署在 SSD 集群上(混合部署时性能最佳),利用 Alluxio 缓存空间加速热数据的加载。 对于热度不高的数据也可以通过直连底层存储进行访问。 Spark shuffle 加速主要基于 Spark RSS 这边的接口,每个公司使用不同的产品,Alluxio 集群可以整合空闲的内存或是零散的 SSD 空间,把这些空间充分地利用起来。 利用 Alluxio 可以将 RSS 产生的 IO 占用限制在指定集群、节点或者磁盘上,减少集群的 IO 竞争带来的任务时长波动。
3. 提供数据本地性,将需要单点部署的应用与大数据存储直接连通
(1)痛点:
有些 AI 计算需要部署在装有 GPU 的特定机器上,与大数据集群环境天然隔离;
算法工程师需要学习并实现特定存储系统的 API 才能去读写数据;
部分计算应用需要将原始数据拉取到本地才能进行计算,但是本地节点的磁盘空间有限。
(2)优化:
Alluxio 支持 POSIX API,它可以直接 mount 到本地节点的目录上,连通大数据存储与本地节点。
算法工程师可以像读写本地文件一样读写大数据存储上的数据,而不必关注远端存储系统,从而节省学习和开发成本。
为本地节点提供集群级别的存储空间,并提供最高内存级别的数据读写速度。
4. 两种实现冷热分离的架构
5. 大数据架构演变
引入Alluxio,实现缓存加速。 Alluxio 挂载多个存储系统,助力存储升级和数据迁移,数据在逻辑层面实现存算分离。 将计算应用做容器化改造,与 Alluxio 一起迁移到 K8s 中,完全实现存算分离,具备上云的条件。 根据业务需求,为不同的计算应用单独定制 Alluxio 集群,满足个性化需要。
展望
1. 更轻:轻量部署无负重
更灵活的逻辑域名配置项,避免修改 core-site.xml 客户端级别的可配置化的访问映射,避免修改 HMS 集成度更高的服务端进程
2. 更快:让快变得更快
更丰富的缓存请求分配策略(例如给 LocalFirst 增加备选策略) 跨集群数据读写的 I/O 限流 基于客户端的 UFS 读写(例如客户端从 worker 获取挂载信息和配置后自己去读)
3. 更稳定:稳定可靠控风险
基于 tag 或者用户组的缓存配额 AlluxioWorkerJVM 与 RAM 缓存的内存统一 本地缓存数据的故障载入
分享嘉宾
INTRODUCTION
罗开畅
平安壹钱包
高级数据分析师
罗开畅,平安壹钱包大数据研发部高级数据分析师,主要负责壹钱包大数据集群的建设与运维,目前主要工作内容集中在用户画像平台、流量埋点、数据编排与湖仓一体建设。
往期推荐
点个在看你最好看