欢迎关注微信公众号:ApacheHudi 1. 引入
Drop是一个智能的奖励平台,旨在通过奖励会员在他们喜爱的品牌购物时获得的Drop积分来提升会员的生活,同时帮助他们发现与他们生活方式产生共鸣的新品牌。实现这一体验的核心是Drop致力于在整个公司内推广以数据为基础的文化,Drop的数据用于多种形式,包括但不限于商业智能、测量实验和构建机器学习模型。
为了确保有效地利用数据,工程团队一直在寻找可以改善基础架构以适应当前和未来的需求的方法,与许多其他高成长型初创公司的经验类似,我们对数据的需求规模超过了基础架构的能力,因此需要将以商业智能为中心的数据基础架构演变为可以释放大数据需求和能力的基础架构。
2. 动机Drop在成立之初就着力构建数据基础架构,以便利用自动报告和仪表板来观察关键业务的指标。我们的第一代数据基础架构使用以AWS Redshift数据仓库为中心的架构,使用Apache Airflow调度自定义批处理ETL作业,使用Looker构建自动化仪表板和报告。
该架构实现了我们的早期目标,但是利用数据的需求已经超出了商业智能的范围。为向会员提供更个性化的体验,我们需要一个支持高级功能的数据平台,例如更深入的分析、全面的实验测量以及机器学习模型的开发,我们也意识到原来架构的技术限制可能会阻止我们解锁那些所需的功能,一些最突出的限制包括:
随着数据规模的扩大,关键的ETL作业的运行时间猛增,一些作业无法在24小时内运行。
AWS Redshift将计算与存储混合在一起,限制了提取数据到仓库的扩展能力,在Redshift中提供的数据选择非常有限,从而偏离了其作为“中心”的位置。
在Redshift集群之上构建机器学习架构效果并不理想,因为Redshift仅能处理结构化数据,并且用于填充仓库的批处理ETL作业延迟较高。
为解决这些不足并考虑到后续的扩展性,我们需要继续构建数据基础架构。数据湖是一个集中式存储库,能够存储任何规模的非结构化和结构化数据,构建数据湖将使我们能够解决第一代数据基础架构的局限性,同时允许我们保留原始架构的关键组件,这些组件仍然满足后续的长期数据基础架构计划。
3. 构建数据湖当开始构建Drop的数据湖时,我们遵循以下指导原则:
技术堆栈保持简单:作为Drop Engineering的核心理念之一,我们旨在利用现有的和经过验证的AWS技术来简化我们的技术栈,已有AWS经验能够让我们快速制作新功能原型以及利用AWS生态系统中其他服务的集成优势,因此继续使用AWS技术意义重大。我们在整个数据团队中继续保留Python和SQL,因此无需学习用于数据提取或处理的新语言,而是使用PySpark来构建所有Apache Spark作业。
避免重复造轮子:在开源和技术社区中寻找成功的数据湖实施案例和经验,并向Uber和Airbnb寻求有关顶层设计的思路和灵感,有关更多特定技术的知识,我们依赖于已发布的AWS re:Invent的演讲,通过参加2018年的AWS re:Invent并听取Robinhood关于他们如何实现数据湖的故事,一切都得以实现,Robinhood的故事与我们技术栈非常相似,对要解决的问题以及解决问题的理念产生了深深的共鸣,所有这些故事和资源组成了我们数据湖的最初蓝图。
确保可扩展性:随着我们的组织从早期的初创企业过渡到高速增长的企业,数据的规模以及利用数据的复杂性迅速增长,这意味着需要在指数增长方案中有效执行的技术,同时最小化相关技术的复杂性开销。
4. 总体架构 5. 数据湖 5.1 调度层调度层负责管理和执行数据湖中所有工作流程,调度程序会协调数据湖中所有数据的大部分移动,利用Airflow使我们能够通过Airflow有向无环图(DAG)构建所有工作流和基础架构,这也简化了我们的工程开发和部署流程,同时为我们的数据基础架构提供了版本控制,Apache Airflow项目还包含大量支持AWS的集成库和示例DAG,使我们能够快速集成和评估新技术。
5.2 摄入层当从多个不同的数据源(例如服务器日志,增长营销平台和业务运营服务)拉取数据时,数据主要是从RDS Postgres数据库,以批处理和流处理两种形式提取到数据湖。我们选择AWS Database Migration Services(DMS)来摄取这些表单,因为它与RDS Postgres进行了原生集成,并且能够以批和流形式将数据提取到S3中,DMS复制Postgres“预写日志(WAL)”的数据,以“变更数据捕获(CDC)”任务进入数据湖,并在S3上生成一分钟分区的Apache Parquet文件,此为流处理方式。批处理使用DMS的“全量迁移”任务以将Postgres库表的快照导入S3数据湖,批处理管道由调度层通过Airflow以自定义DAG的形式进行管理,这允许我们控制批快照到S3的调度,并在批运行结束时关闭未使用的DMS资源以降低服务成本。