1. 摘要

数据是每项技术业务的支柱,作为一个健康医疗技术平台,Halodoc 更是如此,用户可以通过以下方式与 Halodoc 交互:

  • 送药
  • 与医生交谈
  • 实验室测试
  • 医院预约和药物

所有这些交互都会产生高度敏感、多样化且通常是非结构化的数据。 因此随着公司的成长,必须拥有一个强大的数据平台,平台需要满足如下需求:

  • 确保数据的隐私和安全
  • 在处理结构化和半/非结构化数据时可靠、可扩展、快速且高可用
  • 促进为业务/运营团队生成报告和实时仪表板
  • 为数据科学团队提供一个平台来运行实验、模型和存储结果

2. 数据平台

Halodoc 基础设施托管在 AWS 上,公司的数据基础设施是 AWS 托管服务和自托管服务的组合,Amazon Redshift 是我们存储各类型数据的主要数据仓库。

该平台的关键组件如下所述

2.1 数据源

Halodoc 生成的数据属于以下类别:

  • 事务数据 - 各种后端服务生成的数据,如咨询、药房订单、约会等,这些数据主要来自关系数据库 (MySQL)。
  • 数字健康记录 - 医生预约、医疗账单、处方、保险索赔等的医疗报告。这些可能是图像或文件,具体取决于医院和商家合作伙伴。
  • 商户库存数据 - 我们商户药店的库存数据可以采用不同的格式(csv、xls),通过不同的工具(SFTP、定制软件)上传。
  • 来自后端服务的事件——我们的后端由微服务和一个事件生成/消费平台组成,用于这些服务之间的异步通信。因此跨不同后端服务生成的事件需要进行实时处理。
  • 保险索赔/医疗账单- Halodoc作为 TPA 还参与索赔解决、验证索赔和检测欺诈。这些文档可以以各种格式(csv、xls、PDF)获取,需要及时处理以便为患者和保险提供商提供更顺畅的理赔体验。

2.2 批处理管道

批处理管道是我们数据平台的核心,对后端服务和第三方分析工具生成的事务/临时数据进行处理并写入数据仓库。该管道的主要组成部分包括:

  • ETL 工具:ETL 代表提取、转换、加载,ETL 工具有多种选择。在 Halodoc ETL 主要使用 Airflow 和 Pentaho。
  • Pentaho:Pentaho 是一个提供数据提取、集成、转换、挖掘和加载功能的工具。Pentaho 很大程度上是由 UI 驱动,并且受限于软件提供的功能,在 Halodoc我们正在慢慢地从 Pentaho 转向 Airflow。
  • Airflow:Airflow 是一个非常灵活的工具,可以更好地控制转换,同时还可以在现有operator之上构建自己的框架,Airflow 还提供了一个很好的仪表板来监控和查看作业运行状态。

数据仓库和数据湖:数据仓库是经过优化的数据库,可以分析来自不同系统的关系型数据,数据结构和模式是预先定义的,以优化快速 SQL 查询,结果通常用于报告和分析。数据被清理、丰富和转换,以便它可以作为用户可以信任的“单一事实来源”。数据湖则是不同的,因为它存储来自业务线应用程序的关系数据以及来自移动应用程序、物联网设备和社交媒体的非关系数据,捕获数据时未定义数据结构或模式。

  • Amazon S3 数据湖:Amazon S3 是 Halodoc 的数据湖。 来自各种来源的所有数据首先转储到各种 S3 存储桶中,然后再加载到 Redshift(我们的数据仓库)中,S3 中的数据也充当备份,以防任何 ETL 作业失败。
  • Amazon Redshift:我们使用 Amazon 的 Redshift 作为集中式数据仓库,包含一个六节点 Redshift 集群,数据以有规律的节奏从各种来源流入,Amazon Redshift 针对批量加载和通过复制命令从 S3 加载进行了优化,我们所有的业务分析师、数据科学家和决策者都通过各种可视化工具(Looker/Metabase)、SQL 客户端和其他分析应用程序访问数据。

存储在 Redshift 中的数据被建模为星型模式,根据我们拥有的业务单位,由维度表包围中心事实表。

2.3 实时处理管道

实时数据处理管道作为 Halodoc 事件平台的底层基础设施,Halodoc 的所有后端服务在每次操作/状态更改后都会生成事件,并通过此管道进行处理,大多数基于流的系统由以下 4 个组件组成:

  • 基于日志的事件存储:分布式、可追加的基于日志的系统,它收集和存储来自不同来源的数据。例如:Kafka、AWS Kinesis Streams、Google PubSub 等。
  • 流计算系统:使用来自事件存储的数据并在其上运行聚合函数,然后将结果存储在服务层存储中,例如AWS Kinesis Data Analytics、Apache Flink、Apache Storm、Apache Spark 等。
  • 服务层存储:存储聚合数据并提供优化的查询响应,它也可以存储时间序列数据。例如InfluxDB、Elasticsearch、AWS DynamoDB 等。
  • 服务层:为聚合数据提供可视化表示,例如:Kibana、Grafana 等。

架构

  • Apache Kafka – Kafka 已成为大多数开源流处理存储层的事实标准,用于以低延迟的流方式存储大量数据。
  • Apache Flink:开源平台,为数据流上的分布式计算提供数据分发、通信、状态管理和容错。
  • Elasticsearch:开源数据存储,主要针对搜索进行了优化,但后来作为运营和业务指标的服务层存储变得非常流行。
  • Kibana/Grafana :一个连接到 Elasticsearch 数据存储并充当服务层的开源可视化框架。

2.4 数据可视化

有很多可用的数据可视化工具,其中大多数都支持用于构建仪表板的各种数据源。 我们对工具的选择主要受以下因素驱动:

  • 易用性:BI 开发人员/分析师必须很容易即可创建和维护报告和仪表板。
  • RBAC:我们应该能够为公司中的不同用户提供细粒度的访问。
  • 可维护性:工具必须易于维护,无论是在软件升级、部署和故障排除等方面。

考虑到所有这些因素,我们得出了以下工具:

Looker

  • Looker 是一款高级工具,可提供丰富的可视化效果,是我们所有 BI 报告的一站式平台。
  • 它提供了一种简单的方法来衡量 WoW / MoM 增长并跟踪我们的年度目标。
  • 在解决问题时Looker 的支持团队反应迅速,同时提供具有最新功能的软件升级。

Metabase

  • Metabase 是一个简单的开源工具,可供公司中的每个人提问和可视化数据。
  • 在 Halodoc,Metabase 用作自助服务工具,操作人员和 BI/后端开发人员可以在其中查询以创建自定义报告和仪表板。
  • 集成插件以发送有关某些关键业务指标的实时警报,警报渠道包括slack/电子邮件。

Kibana

  • 由于使用 Elasticsearch 作为数据源,Kibana 提供了方便的仪表板可视化。
  • 所有用于监控实时指标(如商家取消、医生取消等)的实时仪表板都在 Kibana 中创建。
  • 客户支持和运营团队依靠这些仪表板做出及时的决策。

2.5 监控数据基础设施

监控和警报对于检查系统和发现生产问题是不可或缺的,它还直接影响平台的可靠性。Halodoc 数据基础设施由各种工具组成,其中一些由 AWS 管理(Redshift、MSK),而另一些则由内部托管(Elasticsearch、Flink)并由我们的开发运营/数据团队维护,用于监控的工具包括:

Cloudwatch:它是 AWS 用于监控指标和警报的事实标准,所有 AWS 托管服务(Redshift、MSK、RDS、DynamoDB)都将其指标发布到 Cloudwatch,我们为以下各项设置了警报:

  • CPU 使用率和 Redshift 集群运行状况
  • RDS 上的慢查询
  • Lambda 错误
  • 数据库连接数等等

警报渠道包括通过 Lambda 发送的 slack/电子邮件。

Prometheus 与 Grafana:Prometheus 和 Grafana 的组合越来越流行,作为 DevOps 团队用于存储和可视化时间序列数据的监控,Prometheus 充当存储后端,Grafana 充当分析和可视化的界面。Prometheus 通过这些目标上的导出器从 HTTP 端点抓取指标,从受监控的目标收集指标。

我们已经自托管了一些平台组件,例如 Airflow、Elasticsearch、Flink 等,自托管这些工具的决定是考虑到成本、devops/数据团队的经验和监控成本。

我们为所有这些工具提供了 prometheus 指标导出器,并且使用了用于 Elasticsearch、Airflow 和 Flink 的开源 Grafana 仪表板,同时在 prometheus 上设置了基于多种可用指标的各种阈值的警报设置,以通过 slack/email 告警。

3. 总结

在这篇博客中总结了Halodoc的数据平台,从不同来源的数据到各种可视化工具,我们在选择这些工具时的思考过程,维护和运行此基础设施是一项艰巨的任务,我们不断挑战自己以保持基础设施简单并更有效地解决问题。

可扩展性、可靠性和可维护性是构建 Halodoc 技术平台的三大支柱。后续还将介绍数据平台架构到Lakehouse架构的演进,敬请期待。

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

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

    1. 摘要 数据平台已经彻底改变了公司存储.分析和使用数据的方式--但为了更有效地使用它们,它们需要可靠.高性能和透明.数据在制定业务决策和评估产品或 Halodoc 功能的性能方面发挥着重要作用.作 ...

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

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

  3. 数字化转型——医院数字化管理平台HDMP建设历程

    ​ 最近几年一直在做医疗行业的B端应用,在搭建医院数字化转型管理平台的过程中累积了一些知识,准备抽时间不断的把整个平台搭建过程及思想记录下来,帮助自己记忆,也希望对相应知识点有需要的伙伴能有一个启发. ...

  4. 8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路

    ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选)   大数据是一种规模大到在获取.存储.管理.分析方面大大超出了传统数据库软件工具能力范围的数据集合,而大数据作为企业运转的基础,只有经过提 ...

  5. 医院信息集成平台(ESB)数据集成建设方案

    一.数据资产目录建设 依据卫生部信息化工作领导小组办公室卫生部统计信息中心2011年3月发布的<基于电子病历的医院信息平台建设技术解决方案——业务部分>. 临床服务域 包含12个二级类目: ...

  6. winform快速开发平台 -> 快速绑定ComboBox数据控件

    通常我们在处理编辑窗体时.往往会遇到数据绑定.例如combobox控件绑定数据字典可能是我们经常用到的.然而在我的winform快速开发平台中我是如何处理这个频繁的操作呢? 首先,我们要绑定combo ...

  7. 使用腾讯开发平台获取QQ用户数据资料

    <今天是七夕:祝大家七夕嗨皮,前可么么哒,后可啪啪啪> Tips:本篇博客将教你如何使用腾讯开发平台获取QQ用户资料 ----------------------------------- ...

  8. 【原创】C#搭建足球赛事资料库与预测平台(6) 赔率数据表设计2

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...

  9. adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦

    adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦 1:mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目. 2:mdrill旨在帮助用户在几秒到几十秒的时间 ...

随机推荐

  1. 学习heartbeat-03t实现web服务的高可用案例及维护要点

    8.Heartbeat实现web服务的高可用案例 8.1部署准备 通过web服务高可用案例来熟悉heatbeat软件的使用,用上面的两台服务器机器名分别为heartbeat-1-130和heartbe ...

  2. IE中的编码位置

    进入设置 找到Editor 找到File Encodings

  3. Clickhouse 纯手工迁移表

    [应用场景] 由于一些未可知的原因,导致原表不可用,也不能恢复.通过手动迁移的方法来恢复业务 [解决办法] 新建一张 copy 表,把原表的 data 目录复制到新表的data 目录,并 attach ...

  4. web前端教程《每日一题》(1-99)完结

    第1期(2016年4月6日): (1)js中关闭当前窗口的方法是:window.close(); 第2期(2016年4月7日): (1)js中使字符串中的字符变为小写的方法是:toLowerCase方 ...

  5. 推荐一款强大的轻量级模块化WEB前端快速开发框架--UIkit

    前言 今天给大家分享一款强大的轻量级模块化WEB前端快速开发框架--UIkit 到目前(2016-06-20)为止,UIkit在github上的Forks已达到了1350个,而Stars更是达到了69 ...

  6. JavaScript 的Date构造函数太迷惑了。。。

    1 new Date(2021,0,1,0,0,0,0) ===> Fri Jan 01 2021 00:00:00 GMT+0800 (中国标准时间) 2 new Date(2021,1,1, ...

  7. php运用validate+ajax检测用户名是否已存在

    前提:如果还不知道什么是validate,请前往这里 一.remote rules: username:{ required:true, minlength:8, maxlength:8, remot ...

  8. Mongo实验

    MongoDB数据库操作 Student: { "name": "zhangsan", "score": { "English&q ...

  9. JDK安装和卸载

    安装:https://blog.csdn.net/Cassiel_Paris/article/details/98941767 卸载:https://www.cnblogs.com/WZ-BeiHan ...

  10. Git本地上传口令

    $ cd /d/GitProject  (进入要上传的文件的文件夹) $ git pull                 (更新本地库) $ git add .                (添加 ...