亚马逊AWS官方博客

开发应用程序迁移方法以使用 Amazon Redshift 使您的数据仓库现代化

Original URL: https://aws.amazon.com/cn/blogs/big-data/develop-an-application-migration-methodology-to-modernize-your-data-warehouse-with-amazon-redshift/

时至今日,各类组织都面对着前所未有的数据量增长与数据复杂性提升。但是,如此宝贵的资产中只有一小部分可被实际用于分析。传统的本地MPP数据仓库(例如Teradata、IBM Netezza、Greenplum以及Vertica等)都采用严格的架构设定,无法适应现代大数据分析用例。这类传统数据仓库的部署与运营成本也更高,需要在软件及硬件层面进行大量前期投资。另外,它们也无法支持需要高级机器学习与个性化体验的现代用例,例如实时或预测式分析与应用程序。

Amazon Redshift是一项快速、全托管、云原生且极具成本效益的数据仓库,能够将您的分析管道从这些限制中解放出来。大家可以在您的Amazon Redshift集群当中面向PB级别的庞大数据执行查询,甚至可以直接对接数据湖中高达EB级别的数据集合。大家还可以在几分钟之内建立一套云数据仓库,每小时起步使用成本仅为0.25美元,而后以每TB每年1000美元的低廉价格将数据体量扩展至PB水平——这一成本甚至不足其他竞争对手解决方案的十分之一。

面对当前数以万计的全球部署与快速增长,Amazon Redshift也迎来了无数希望从传统MPP数据仓库迁移至这一新型云端数据仓库解决方案的客户,以及由他们带来的巨大需求。AWS Schema Conversion Tool (SCT) 能够自动将源数据库schema与大多数数据库代码对象(包括视图、存储过程与函数)转换为Amazon Redshift中的等效功能,极大提升此类MPP迁移效果的可预测性。SCT还可以使用内置数据迁移代理,帮助客户将数据从多个数据仓库处统一迁移至Amazon Redshift。

大规模MPP数据仓库迁移不仅伴随着极高的项目复杂性,同时也在资源、时间与成本方面带来一系列风险挑战。但通过以主题及对象层级为基础的数据仓库迁移路线图,大家可以极大降低陈旧数据仓库与工作负载迁移所带来的复杂度水平。

AWS Professional Services结合我们过去几年中参与的一系列大型MPP数据仓库迁移项目,设计并开发出这款工具。相关方法充分汲取来自ETL与报告工作负载中的分析经验,全面考量其间涉及的高复杂度依赖关系。以多个维度为基础,其将复杂的数据仓库迁移项目拆分成多个逻辑与系统波次,包括业务优先级、数据依赖关系、工作负载概况以及现有服务水平协议(SLA)等。

基于消费的迁移方法

基于消费的迁移模式已经被证明是一种行之有效且效率极高的MPP数据仓库迁移方法。该模式通过一系列操作将工作负载从源MPP数据仓库迁移至Amazon Redshift。在完全淘汰源MPP数据仓库之前,大家应并行运行源MPP数据仓库与Amazon Redshift并保持一段时间。关于更多详细信息,请参阅如何在无停机情况下将大型数据仓库从IBM Netezza迁移至Amazon Redshift

数据仓库拥有以下两大逻辑组件:

  • 主题域——数据源与数据域的组合,其通常与业务功能(例如销售或支付)相关联。
  • 应用程序——一种分析方法,通过消费一个或者多个主题域为客户提供价值。

以下示意图,展示了数据主题域与信息消耗的具体工作流。

图一:消费应用程序(报告/分析)与主题域(数据源/域)。

这种方法有助于促进客户建立数据驱动型企业(D2E)。具体优势包括:1)帮助深入理解客户的业务环境与用例;2)有助于制定企业数据迁移路线图。

主题域与应用程序之间的亲和度映射

要确定应该将哪些应用程序及其相关主题域纳入哪些波次,我们需要在应用程序与主题域之间做出详细映射。下表所示,为此类映射的相关示例。

图二:应用程序(分析)与主题域之初是的亲和度映射。

这种映射的基础,在于查询执行元数据——元数据通常存储在传统数据仓库的系统表当中。这种映射关系也将成为各个波次(即应用程序对象与相关主题域的单步迁移)的创建基础。您可以通过相同的方式得出下一步迁移操作,以更详尽的方式(下探至表层级)建立数据源与主题域间的映射,并据此制定出更详尽的迁移项目规划。

上表中使用的排序方法非常重要。最右侧的列,为主题域在应用程序中出现的总次数(自上而下,为最常见的主题域到出现频率最低的主题域)。最下行则为应用程序中出现的主题域数量(从左至右,为包含主题域最多的应用程序到包含主题域最少的应用程序)。

在其他条件完全相同的情况下,我们的第一波迁移应该从哪些应用程序与分析开始?最佳实践是选择其中的某个中间位置(例如上表中的Analytic 8或者9位置)。如果从最左侧的列(Analytic 1)开始,那么该波次中会包含大量对象(源与表、视图、ETL脚本、数据格式、清理以及公开例程等),这将导致操作强度过大且完成周期过长。或者,如果您从最右侧的列(Analytic 19)开始,则涵盖的主题域过少,并导致完成整体迁移所需要的波次更多、总体迁移周期更长。另外,从最右侧开始也无法帮助我们了解整体项目的复杂度水平。

迁移波次与对象域集成

下表所示,为以上亲和度图的分波次迁移方案(阶梯步进)。在每个波次中(可能包含一个或者多个应用程序或分析)总是存在新的主题域(绿色框体)以及在先前波次中已经迁移完成的主题域(蓝色框体)。基于波次的最佳迁移方法,在于将迁移波次的设计中保证每个后续波次中包含的新build越来越少。在以下示例中,随着最初几个波次的完成,我们需要集成至后续波次中的新主题域越来越少——也正因为如此,我们才建议从亲和度表的中间位置向左移动。最终,这种方式能够加快迁移项目的整体执行速度。

图三:阶梯步进模式与对象域集成。

第0波通常包含各应用程序使用的共享或基础维度数据或表(例如Time以及Organization)。每一波至少应该包含一个锚应用,且该锚应用需要包含新的主题域或数据源。那么,我们在各波次中选择锚应用时,又该考虑哪些具体因素?首先,该波次内的锚应用与其他波次中的锚应用应尽可能保持较低的依赖度,而且从业务角度来看,锚应用本身应该具有较高的重要性。所有波次中的锚应用组合还应该涵盖所有主题域。

在以上示例中,我们设置了六个不同的迁移波次。下表总结了其中使用的对应锚应用:

迁移波次 锚应用
第1波 Analytic 9
第2波 Analytic 8
第3波 Analytic 7
第4波 Analytic 6
第5波 Analytic 4与Analytic 5
第6波 Analytic 3

其他所有应用程序(分析)将进行自动处理,因为它们所依赖的主题域已经在上述各波次中构建完成。

关于各波次中应用程序选择的最佳实践

要确定总迁移波次数量,以及每个波次中应包含哪些应用程序,请考虑以下因素:

  • 业务优先级——即应用程序在客户数据驱动型企业(D2E)旅程中的具体价值。
  • 工作负载概况——工作负载主要属于ETL(写入密集型)还是查询(只读取)。
  • 数据共享要求——不同应用程序可能使用同一表中的数据。
  • 应用程序SLA——各应用程序为最终用户做出的性能承诺指标。
  • 依赖关系——不同应用程序之间的功能依赖关系。

最佳波次数量将根据以上标准核算得出,最佳实践建议在单一迁移项目当中最多包含10个波次,保证您能够有效对迁移进行规划、执行与监控。

关于哪些应用程序应该被纳入哪个波次以及对应理由,由于应用程序之间的交互与性能影响往往非常复杂,因此很难通过第一原理快速做出判断。以下是一些相关最佳实践:

  • 通过实验与测试加深对应用程序间交互方式以及相关性能影响的理解。
  • 根据相通的数据共享要求对应用程序进行分组。
  • 请注意,并不是所有工作负载都能随着集群规模的扩大获得更佳性能。例如,简单的仪表板查询可能反而在小型集群上运行得更快,而只有足够复杂的查询才能充分利用大规模Amazon Redshift集群中的所有分片。
  • 考虑对具有不同工作负载与访问模式的应用程序进行分组。
  • 考虑为不同应用程序波次提供专用集群。
  • 为每款应用程序建立工作负载概况。

Amazon Redshift集群大小调整指南

Amazon Redshift节点类型将直接决定节点中配备的CPU、内存、存储容量以及存储驱动器类型。RA3节点类型允许您独立扩展计算与存储资源,大家也需要为实际使用的计算量与Amazon Redshift托管存储(RMS)单独付费。DS2节点类型则经过优化,能够存储大量数据并使用磁盘驱动器(HDD)存储形式。如果您目前正在使用DS2节点,请考虑升级至RA3集群,从而以相同的成本获得2倍的性能与存储资源。密集型计算(DC)节点类型则针对计算类工作负载进行优化。由于DC2节点类型使用固态存储(SSD)驱动器,因此相当于对性能密集型工作负载进行了优化。

各Amazon Redshift节点类型还提供不同的节点大小选项。节点大小与节点数量决定了集群中的总体存储容量。我们建议:1)如果压缩后的数据大小小于1 TB,则应选择DC2节点类型;2)如果压缩后的数据大小超过1 TB,请选择RA3节点类型(RA3.4xlarge或者RA3.16xlarge)。关于更多详细信息,请参阅Amazon Redshift中的集群与节点

您在节点类型的选择当中,应考虑以下几项影响因素:

  • 下游系统为了满足服务水平协议(SLA)所提出的实际计算资源需求。
  • 您需要在数据库中支持的查询与并发操作复杂度。
  • 在实现工作负载最佳性能与保障预算之间做出权衡。
  • 您希望存储在集群中的数据量。

关于Amazon Redshift集群节点类型与集群大小的更多详细信息,请参阅Amazon Redshift中的集群与节点

随着数据与性能需求的不断变化,您还可以轻松调整集群大小,以充分利用Amazon Redshift提供的计算与存储选项。您可以使用Elastic Resize在几分钟之内实现对Amazon Redshift集群的规模伸缩调整,处理可预测的峰值工作负载,并通过自动并发扩展功能提高即席查询工作负载的性能表现。

除了将传统MPP数据仓库内的数据迁移至Amazon Redshift托管存储中之外,将这类数据迁移至其他目的地的场景也相当常见。您可以将冷数据或历史数据发送至Amazon S3数据湖以节约成本,也可以将温数据或热数据发送至Amazon Redshift集群以实现最佳性能。Amazon Redshift Spectrum可帮助您轻松查询并联接各Amazon Redshift数据仓库与Amazon S3数据湖之间的数据。使用AWS Glue与AWS Lambda函数带来的强大无服务器数据湖架构以及“湖边小屋”架构功能,您可以进一步简化ETL数据管道并将Amazon S3数据湖中的数据与云端数据仓库相结合,最大限度减少需要加载至Amazon Redshift的数据量。关于更多详细信息,请参阅使用Amazon Redshift时的湖边小屋架构ETL与ETL设计:第一部分,以及使用AWS Glue触发器为数据目录及ETL作业构建并自动化操作无服务器数据湖

总结

本文演示了如何为复杂项目开发出基于波次的完整应用程序迁移方法,使用Amazon Redshift实现传统MPP数据仓库的现代化转型。此外,本文还立足业务优先级、数据依赖关系、工作负载概况以及现有服务水平协议(SLA)等多个层面分享了最佳实践与经验心得。

这里要感谢AWS同事Corina Radovanovich, Jackie Jiang, Hunter Grider, Srinath Madabushi, Matt Scaer, Dilip Kikla, Vinay Shukla, Eugene Kawamoto, Maor Kleider, Himanshu Raja, Britt Johnston以及Jason Berkowitz为本文撰写提供的宝贵反馈与建议。

如果您对本文还有任何疑问或建议,请在评论区中与我们交流。关于面向Amazon Redshift的迁移操作,以及寻找可依赖的AWS合作伙伴以协助您完成本地数据仓库现代化的更多详细信息,请参阅数据仓库现代化

本篇作者

Po Hong

Po Hong 博士是 AWS 专业服务 Global Data & Analytics Specialty Practice 方面的高级数据架构师。

Anand Rajaram

AWS公司Amazon Redshift专业服务实践全球负责人。