1. 摘要

数据平台已经彻底改变了公司存储、分析和使用数据的方式——但为了更有效地使用它们,它们需要可靠、高性能和透明。数据在制定业务决策和评估产品或 Halodoc 功能的性能方面发挥着重要作用。作为印度尼西亚最大的在线医疗保健公司的数据工程师,我们面临的主要挑战之一是在整个组织内实现数据民主化。 Halodoc 的数据工程 (DE) 团队自成立以来一直使用现有的工具和服务来维护和处理大量且多样的数据,但随着业务的增长,我们的数据量也呈指数级增长,需要更多的处理资源。

由于现代数据平台从不同的、多样化的系统中收集数据,很容易出现重复记录、错过更新等数据收集问题。为了解决这些问题,我们对数据平台进行了重新评估,并意识到架构债务随着时间的推移积累会导致大多数数据问题。我们数据平台的所有主要功能——提取、转换和存储都存在问题,导致整个数据平台存在质量问题。

我们现有的数据平台在过去几年中为我们提供了很好的服务,但它的扩展性满足不了不断增长的业务需求。

2. 平台演进

在旧的数据平台中,大部分数据都是定期从各种数据源迁移到 Redshift。 将数据加载到 Redshift 后,执行 ELT 以构建服务于各种业务用例的 DWH 或数据集市表。

数据平台能够满足我们的大部分需求,但随着数据用例的增加,我们看到业务和数据量增长,为满足业务需求数据平台面临多重挑战。

问题如下:

  • 存储和计算紧密耦合。我们主要依赖基于 ELT 的方法,其中 Redshift 计算层被大量用于任何数据转换。我们的 Redshift 集群包含多个 dc2.large 实例,其存储和计算紧密耦合,扩容时存储与计算一起扩容导致成本增加。
  • 数据高延迟。当前管道中的数据延迟几乎超过 3-4 小时,因为数据首先在 Redshift 中加载,然后每隔几个时间间隔执行 ELT 操作。我们的业务和产品团队希望以更低的延迟分析数据,以便他们能够更快地做出关键业务决策。
  • 缺乏数据治理。现有数据平台没有实施适当的数据治理。在 Redshift 中创建Group,并且根据用户的角色将用户分配到每个Group,该方法可以控制数据集访问,但缺乏列或行级别粒度的访问控制。
  • 仪表板基于哪些数据集构建缺乏可见性。由于所有数据集市表都是根据用例创建,并且当用户向 DE 团队请求时,有多个表包含重复数据。由于我们没有遵循数据模型(星型或雪花模式),因此在 Redshift 中维护表之间的关系变得非常困难。
  • 缺少 SCD 管理。SCD 代表缓慢变化维,当有人想知道数据点的历史价值时,SCD 非常重要。在当前的数据集市中,没有实施适当的 SCD,在我们的案例中,像药品价格、医生类别等都是要跟踪的重要特征。
  • 通过 Airflow 内存移动数据。在 Halodoc,大部分数据流通过 Airflow 发生,所有批处理数据处理作业都安排在 Airflow 上,其中数据移动通过 Airflow 内存进行,这为处理不断增加的数据量带来了另一个瓶颈。由于 Airflow 不是分布式数据处理框架,因此更适合工作流管理。相当多的 ETL 作业是用 Python 编写的,以服务于间隔 15 分钟的微批处理管道,并在 Airflow 中调度。
  • 缺少数据目录。数据目录对于任何数据平台提供数据的元信息都非常重要。直接迁移到 Redshift 的表在现有平台中缺少数据目录。仅为存储在 S3 中的数据创建数据目录,这让终端用户检索有关 Redshift 中表的信息成为问题。
  • 没有集成的数据血缘。如果有人有兴趣了解目标数据表的来源和转换阶段,我们没有数据血缘来展示它们。数据血缘对于理解数据流、数据转换很重要,并且如果在目标处生成错误信息,则可以轻松调试数据。
  • 缺少框架驱动的平台。对于每个用例,我们主要构建端到端的数据管道。大多数代码在多个数据管道中重复。数据工程任务中缺少软件工程原则。因此,很难将每一层上的组件解耦并创建一个抽象层来使整个框架端到端自动化。
  • 没有自动模式演进。处理关系数据时模式演进非常重要。源系统中会发生变化,需要在目标系统中反映出来,而管道不会出现任何故障,当前我们手动执行此操作,我们已经建立了一个流程,DBA 将架构更改通知 DE,DE 负责在目标系统中进行更改。我们想要一种自动化的方式来执行这些操作。

由于数据平台的这些限制,我们意识到第一代数据平台已经走到了尽头。正是在这一点上,我们决定退后一步,想想我们需要从我们的数据平台中得到什么。如果必须的话我们并不害怕从头开始构建一个系统。

数据工程团队开始使用支持或减轻上述大部分限制的新数据平台来评估和改进现有架构。我们调研到了 LakeHouse 架构,它在通过具有成本效益的解决方案实现可扩展性以及处理大量数据方面发挥着至关重要的作用。因此我们开始围绕 LakeHouse 架构来构建我们改进后的 Data Platform 2.0。

3. 为什么我们采用 LakeHouse 架构?

LakeHouse 架构基本上是 Datalake 和数据仓库的组合,可以在其中无缝地跨湖和仓库移动数据,并遵循对所有数据集的访问权限的安全合规性。

在 Halodoc,我们希望构建一个可扩展的解决方案,我们可以根据需要独立扩展存储和计算。我们将以下内容列为我们希望数据基础设施具备的核心功能:

  • 解耦存储和计算(高度可扩展)。
  • 可以存储所有类型的数据,如结构化、半结构化和非结构化。
  • 可以作为整个组织中数据的单一事实。
  • 存储/查询可变和不可变数据的能力。
  • 可与 Spark 或 Hive 等分布式处理引擎集成。

在新架构中,我们利用 S3 作为数据湖,因为它可以无限扩展存储。由于我们计划将可变数据也存储在 S3 中,因此下一个挑战是保持可变 S3 数据的更新。我们评估了几个框架,如 Iceberg、Delta Lake 和 Apache Hudi,它们提供了更新可变数据的能力。由于 Apache Hudi 与 EMR 集成度很好,因此我们开始在 Hudi 之上构建数据湖。

4. 为什么选择Apache Hudi

  • 对文件执行 Upsert 操作。
  • 使用各种更新捕获更新历史记录。
  • 支持ACID。
  • 支持不同的存储类型(CoW 和 MoR)
  • 支持多种数据查询方式(实时优化查询、快照查询、增量查询)
  • 数据集的时间旅行。
  • 预装 EMR,开箱即用。

搭建平台的挑战

  • 新架构中使用的大多数组件对团队来说都是新的,因此需要一些学习曲线来动手操作和生产系统。
  • 构建中心化的日志记录、监控和警报系统。
  • 在改进架构的同时支持常规业务用例。

5. 总结

在本博客中,我们介绍了现有数据平台中面临的一些挑战/限制,以及一些缺失的功能。 在接下来的博客中,我们将更多地讨论 LakeHouse 架构,以及我们如何使用 Apache Hudi 以及在发布新平台时面临的一些挑战。随着不断迭代,我们将继续在新平台中添加新功能,以打造更加强大和可靠的数据平台。

印尼医疗龙头企业Halodoc的数据平台转型之数据平台V2.0的更多相关文章

  1. 印尼医疗龙头企业Halodoc的数据平台转型之路:数据平台V1.0

    1. 摘要 数据是每项技术业务的支柱,作为一个健康医疗技术平台,Halodoc 更是如此,用户可以通过以下方式与 Halodoc 交互: 送药 与医生交谈 实验室测试 医院预约和药物 所有这些交互都会 ...

  2. 印尼医疗龙头企业Halodoc的数据平台转型之Lakehouse架构

    1. 摘要 在 Halodoc,我们始终致力于为最终用户简化医疗保健服务,随着公司的发展,我们不断构建和提供新功能. 我们两年前建立的可能无法支持我们今天管理的数据量,以解决我们决定改进数据平台架构的 ...

  3. BAT推荐免费下载JAVA转型大数据开发全链路教程(视频+源码)价值19880元

    如今随着环境的改变,物联网.AI.大数据.人工智能等,是未来的大趋势,而大数据是这些基石,万物互联,机器学习都是大数据应用场景! 为什么要学习大数据?我们JAVA到底要不要转型大数据? 好比问一个程序 ...

  4. 奇点云 x 阿里云 | 联合发布综合体数字化转型与数据创新解决方案

    2019年7月25日下午,在阿里云峰会上海站,奇点云入选阿里云首批联合解决方案合作伙伴,并联合发布了“综合体数字化转型与数据创新解决方案”,共同探索综合体的智能服务. 关于综合体的数字化转型,奇点云联 ...

  5. 谈B2B电商平台与大数据

    数据为王,服务为本——谈B2B电商平台与大数据 2013-06-27 11:10:41 作者:B2B行业资讯 标签:                             大数据           ...

  6. NodeMCU透传数据到TcpServer和Yeelink平台

    准备工作 1. NodeMCU  LUA ESP8266 CP2102  WIFI Internet Development Board,仔细看背面可以看出自带cp2102模块,可以通过普通的手机充电 ...

  7. php 品牌全车零件订购平台( 带采集数据 及 账号自动登陆【已绕过https证书加密】,php源码 ,QQ: 876635409 )

    php捷豹路虎 品牌全车零件订购平台  ( 带采集数据 及 账号自动登陆[已绕过https证书加密],php源码 ,QQ: 876635409 [由于咨询用户太多,请备注:汽车配件]) 一.php+m ...

  8. DOIS 2018 — OneAPM 蓝海讯通以数据为中心的 AIOps 平台亮相

    AIOps 近两年开始在运维圈子里面火了起来.一夜间传统和新兴的运维管理软件供应商,IT 运维系统开发商,大数据厂商,人工智能算法提供商,还有 BAT,大家都在谈论这个话题.在短短的不到 1 年时间中 ...

  9. 2018年,Java程序员转型大数据开发,是不是一个好选择?

    近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议. 2017年,Java 程序员面临更加激烈的竞争. 不得 ...

随机推荐

  1. log4J——在Spring中的使用

    log4J简介 1.通过 log4j 可以看到程序运行过程中更详细的信息 (1)经常使用 log4j 查看日志 2.使用 (1)导入 log4j 的jar包 (2)复制 log4j 的配置文件,复制到 ...

  2. 学习openstack(六)

    VIII openstack(1) 传统的数据中心面临的问题:成本.效率(要快).管理方面(物理机.云主机): 云计算:对运维需求总体量是减少了,尤其是硬件工程师,对运维的技术要求提高了: 云计算是个 ...

  3. C语言函数中的3个点 ...有什么作用

    标准库提供的一些参数的数目可以有变化的函数.例如我们很熟悉的printf,它需要有一个格式串,还应根据需要为它提供任意多个"其他参数".这种函数被称作"具有变长度参数表的 ...

  4. css写作建议和性能优化小结

    1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...

  5. 百度开放云 BOS Uploader

    百度开放云 BOS Uploader bce-bos-uploader 是基于 bce-sdk-js 开发的一个 ui 组件,易用性更好.DEMO地址是:http://leeight.github.i ...

  6. ps基础总结

    1.复制图层:首先选中移动工具(V),鼠标右键选中需要复制的图层(快捷方式:上面勾选自动选择),接着一只手按住Alt键,另一只手点击鼠标左键(不松开),往左往右移动即可.若是对多个图层起作用,就可将需 ...

  7. 【Android开发】控件外边框自定义

    1.在drawable里面新建自定义的资源文件shape <?xml version="1.0" encoding="utf-8"?> <sh ...

  8. java中接口和抽象类有什么区别,举例!

    2)接口和抽象类有什么区别?答:马克-to-win:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度).另外:类可以实现多个接口.反过来说,也正是抽象类一个致命伤 ...

  9. java1.7之后的比较器特别之处

    在jdk1.7环境下使用Collectons.sort()方法: 比如:Collections.sort(list, new Comparator<Integer>()); 就可能会出现异 ...

  10. Android Studio项目导入方法+问题+解决办法

    我从一个大神的GitHub那下载了一个安全卫士软件 https://github.com/kotlindev/MobileSafe 1.下载到自己Android的项目文件夹,解压. 2.用AS打开这个 ...