从 Snowflake 迁移到 BigQuery
本文档提供了有关如何将数据从 Snowflake 迁移到 BigQuery 的技术信息。文中介绍了 Snowflake 与 BigQuery 之间的基本差异,还提供了成功迁移的指导,例如:
- 需要进行哪些架构更改
- 可以使用哪些迁移工具和选项
- 如何迁移数据(使用示例导出过程)
您还可以使用批量 SQL 转换来批量迁移 SQL 脚本,或使用交互式 SQL 转换来转换临时查询。两个预览版的工具都支持 Snowflake SQL。
术语
本文档使用 Snowflake 和 BigQuery 术语来描述每个产品提供的功能。下表将 Snowflake 术语与等价的 BigQuery 术语一一对应:
Snowflake | BigQuery |
---|---|
数据库 | 数据集 |
架构 | 架构 |
特定于会话的临时或暂时表 | 匿名表或临时表 |
视图 | 视图 |
安全视图 | 已获授权的视图 |
虚拟仓库 | 预订 |
物化视图 | 物化视图 |
没有分区的等价术语(因为使用微分区 [micro-partitioning]) | 分区 |
聚簇 | 聚簇 |
安全增强型用户定义函数 (UDF) | 已获授权的 UDF |
架构比较
Snowflake 和 BigQuery 都是分析数据仓库,但它们在架构方面存在一些主要差异。
Snowflake 的架构是共享磁盘数据库架构和无共享数据库架构的混合。就无共享架构来说,Snowflake 中的数据会在单独的云对象存储服务中进行管理;而就共享磁盘架构来说,Snowflake 中的查询会使用专用的计算集群。在 Snowflake 中,每个集群都会管理整个数据集的一些缓存部分,以加快查询速度。如需了解详情,请参阅 Snowflake 架构。
BigQuery 的架构与基于节点的云数据仓库解决方案或 MPP 系统截然不同。它将存储和计算分离,使两者可以独立地按需扩缩。如需了解详情,请参阅 BigQuery 概览。
界面比较
Snowflake 网页界面与 Snowflake 命令行界面 (CLI) 对应。这两个界面都允许您执行以下操作:
- 管理数据库
- 管理仓库
- 管理查询和工作表
- 查看历史查询
在网页界面中,您还可以管理 Snowflake 密码和用户偏好设置。
Snowflake CLI 客户端使用 SnowSQL 连接到 Snowflake 以运行 SQL 查询和其他操作。
BigQuery 界面内置在 Google Cloud 控制台中并包含您可以查看的 BigQuery 资源的列表:
- BigQuery Studio 部分会显示您的数据集、表、视图和其他 BigQuery 资源。您可以在此处创建和运行查询、使用表和视图、查看 BigQuery 作业记录,以及执行其他常见的 BigQuery 任务。
- 点击数据传输部分会打开 BigQuery Data Transfer Service 页面。
- 计划查询部分显示您已计划的查询。
- 容量管理部分显示槽承诺、预留和预留分配。
- 点击 BI Engine 部分会打开 BigQuery BI Engine 页面。
BigQuery 还具有一个基于 Python 的命令行工具。如需了解详情,请参阅使用 bq 命令行工具。
安全
从 Snowflake 迁移到 BigQuery 时,您必须考虑 Google Cloud 处理安全性的一般方式以及 BigQuery 处理安全性的特殊方式与 Snowflake 的不同之处。
Snowflake 具有各种安全相关功能,包括:
- 网络和网站访问
- 账号和用户身份验证
- 对象安全
- 数据安全
- 安全验证
Snowflake 的安全性基于您的云服务商的功能。它允许您精细控制对象访问权限、对象操作以及谁可以创建或更改访问权限控制政策。
与 Snowflake 中的访问权限控制相同的 BigQuery 机制是 Google Cloud 中的 Identity and Access Management (IAM) 角色。这些权限决定了可以对资源执行的操作。权限在 Google Cloud 级层强制执行。
加密
在 Snowflake 中,Enterprise 版本支持列级安全性,Business Critical 版本支持客户管理的加密密钥。这些版本的价格不同。在 BigQuery 中,所有功能和增强型安全措施均作为标准功能提供,无需额外付费。
Snowflake 提供端到端加密功能,可自动加密所有存储的数据。Google Cloud 默认加密所有静态数据和传输中的数据,这提供了相同功能。
与 Snowflake Business Critical 版本类似,对于想要在 Cloud Key Management Service 中控制和管理密钥加密密钥的用户,BigQuery 支持客户管理的加密密钥。BigQuery 还允许使用列级加密。如需详细了解 Google Cloud 中的加密,请参阅 Google Cloud 中的静态加密和 Google Cloud 中的传输加密。
角色
角色是可以向其授予和撤消可保护对象权限的实体。
Snowflake 支持两种类型的角色:
- 系统定义的角色:这些角色由系统和安全相关权限组成,使用与账号管理相关的权限创建。
- 自定义角色:您可以使用
SECURITYADMIN
角色或具有CREATE ROLE
权限的任何角色来创建这些角色。Snowflake 中的每个自定义角色都由权限组成。
在 IAM 中,权限分组为角色。IAM 提供三种类型的角色:
- 基本角色:包括 Owner、Editor 和 Viewer 角色。您可以使用 Google Cloud 控制台、Identity and Access Management API 或
gcloud CLI
在项目或服务资源级应用这些角色。通常,为了获得最强的安全性,我们建议您使用特定于 BigQuery 的角色,以遵循最小权限原则。 - 预定义角色:这些角色提供对产品(例如 BigQuery)中功能的更精细的访问权限,旨在支持常见使用场景和访问权限控制模式。
- 自定义角色:这些角色由用户指定的权限组成。
访问权限控制
Snowflake 允许您向角色授予其他角色,从而创建角色层次结构。IAM 不支持角色层次结构,但实现了资源层次结构。IAM 层次结构包括组织级层、文件夹级层、项目级层和资源级层。您可以在层次结构的任何级层设置 IAM 角色,资源会继承其父级资源的所有政策。
Snowflake 和 BigQuery 都支持表级访问权限控制。表级权限决定了可以访问表或视图的用户、群组和服务账号。您可以在无需向用户提供完整的数据集访问权限的情况下授权用户访问特定的表或视图。
在 BigQuery 中,IAM 提供表级访问权限控制。如需提供更精细的访问权限,您还可以使用列级访问权限控制或行级安全性。这种控制类型通过使用政策标记或基于类型的数据分类,提供针对敏感列的细化访问权限。
您还可以创建授权视图来限制数据访问以实现更精细的访问权限控制,这样,只有指定用户可以查询视图,并且他们没有底层表的读取权限。
迁移时的注意事项
Snowfake 有几项功能无法直接移植到 BigQuery。例如,BigQuery 不提供对以下场景的内置支持。在这些场景下,您可能需要使用 Google Cloud 中的其他服务。
时间旅行:在 BigQuery 中,您可以使用时间旅行功能访问过去 7 天内任何时间点的数据。如果您需要访问超过 7 天的数据,请考虑导出定期计划的快照。Snowfake 支持访问所定义时间段内任何时间点的历史数据(已更改或删除的数据)。您可以将此时间段设置为从 0 到 90 天的任何值。
数据流:BigQuery 支持使用 Datastream 进行变更数据捕获 (CDC)。您还可以使用 Debezium 等 CDC 软件,通过 Dataflow 将记录写入 BigQuery。如需详细了解如何使用 BigQuery 手动设计 CDC 流水线,请参阅将数据仓库迁移到 BigQuery:变更数据捕获 (CDC)。在 Snowflake 中,流对象会记录对表进行的数据操纵语言更改以及关于每项更改的元数据,以便您对更改的数据执行操作。
任务:BigQuery 允许您使用 Datastream 计划查询和数据流或将集成流式传输到查询中。Snowflake 可将任务与表流相结合,持续提取、加载和转移工作流以处理最近更改的表行。
外部函数:BigQuery 支持通过 Cloud Run functions 调用外部函数。不过,您也可以使用用户定义的函数 (UDF),例如 SQL UDF。但这些函数不会在 BigQuery 之外执行。在 Snowflake 中,外部函数会调用在 Snowflake 外部运行的代码。例如,发送到远程服务的信息通常通过代理服务进行中继。
将数据从 Snowflake 迁移到 BigQuery
本部分介绍如何根据将数据仓库迁移到 BigQuery:迁移的内容和方式中说明的框架,配置并启动从 Snowflake 到 BigQuery 的迁移。
架构
要开始迁移,您需要同时运行 Snowflake 和 BigQuery。下图展示了对现有操作影响最小的架构。通过转移干净且质量可控的数据,您可以在将工作负载分流到 BigQuery 时重复利用现有的工具和流程。您还可以根据旧版本验证报告和信息中心。不过,由于 OLAP 数据保留在冗余位置,因此此操作不具备成本效益。这也会延长处理时间。
- 点 1 显示数据从 Snowflake 移动到 Cloud Storage。
- 点 2 显示将数据持久保存到 BigQuery 中。
- 点 3 显示如何向最终用户发送数据。
您可以根据旧版迭代验证报告和信息中心。如需了解详情,请参阅将数据仓库迁移到 BigQuery:验证和确认。
数据仓库迁移的最终架构将来自源系统的所有数据直接保留在 Google Cloud 中。根据源系统的数量和复杂性,可以根据优先级、相互依赖性、集成风险或其他业务因素,以一次一个的速度处理源系统以进一步分阶段交付此架构。
下图展示了数据流水线的迁移和注入 Google Cloud。
- 点 1 显示同步集成点和异步集成点。例如,在处理流程中需要显式用户操作的使用场景时,数据源与 App Engine 之间是同步集成。
- 点 2 显示使用 Pub/Sub 处理大量并发事件数据。
- 点 3 显示使用一个或多个 Google Cloud 产品持久保存数据(具体取决于数据的性质)。
- 点 4 显示到 BigQuery 的提取、转换和加载 (ETL) 流程。
准备 Cloud Storage 环境
Google Cloud 提供了几种使用其他 ETL 工具将数据转移到 BigQuery 的方法。模式如下:
从来源提取数据:将从来源提取的文件复制到本地环境中的暂存存储空间。如需了解详情,请参阅将数据仓库迁移到 BigQuery:提取源数据。
将数据转移到暂存 Cloud Storage 存储桶:从来源提取完数据后,将数据转移到 Cloud Storage 中的临时存储桶。根据要转移的数据量和可用的网络带宽,您有几个选项。
请务必确保 BigQuery 数据集的位置和外部数据源,或 Cloud Storage 存储桶位于相同区域。如需详细了解从 Cloud Storage 加载数据的地理位置注意事项,请参阅批量加载数据。
将数据从 Cloud Storage 存储桶加载到 BigQuery:您的数据现在位于 Cloud Storage 存储桶中,更靠近其目标。将数据上传到 BigQuery 有多个选项可用。这些选项取决于需要的数据转换程度。或者,您可以按照 ETL 方法在 BigQuery 中转换数据。
当您从 JSON 文件、Avro 文件或 CSV 文件批量导入数据时,BigQuery 会自动检测架构,您无需预定义架构。如需详细了解 EDW 工作负载的架构迁移过程,请参阅架构和数据迁移过程。
支持的数据类型、属性和文件格式
Snowflake 和 BigQuery 支持的数据类型大部分相同,但有时使用不同的名称。如需查看 Snowflake 和 BigQuery 中支持的数据类型的完整列表,请参阅 Snowflake SQL 转换参考的数据类型部分。您还可以使用批量 SQL 转换器进行转换。如需详细了解 BigQuery 支持的数据类型,请参阅 GoogleSQL 数据类型。
Snowflake 可以导出以下文件格式的数据。您可以将格式直接加载到 BigQuery 中:
- CSV:请参阅从 Cloud Storage 加载 CSV 数据。
- Parquet:请参阅从 Cloud Storage 加载 Parquet 数据。
- JSON(以换行符分隔):请参阅从 Cloud Storage 加载 JSON 数据。
架构更改
如果您计划在迁移到 BigQuery 时更改架构,我们建议您先按原样迁移架构。BigQuery 支持各种数据模型设计模式,例如星型架构或雪花型架构。由于有这样的支持,您无需更新上游数据流水线以获得新架构,并且可以使用自动化迁移工具转移数据和架构。
更新架构
数据进入 BigQuery 后,您可以随时更新架构,例如在架构定义中添加列或将列的模式从 REQUIRED
放宽到 NULLABLE
。
请注意,对于表名称,BigQuery 使用区分大小写的命名惯例,而 Snowflake 使用不区分大小写的命名模式。这意味着您可能需要重新检查 Snowflake 中是否有不一致的表命名惯例,并在迁移到 BigQuery 期间纠正出现的所有不一致问题。如需详细了解架构修改,请参阅修改表架构。
某些架构修改在 BigQuery 中不受直接支持,需要手动解决方法,包括:
- 更改列的名称。
- 更改列的数据类型。
- 更改列的模式(将
REQUIRED
列放宽为NULLABLE
除外)。
如需了解手动更改架构的具体说明,请参阅手动更改表架构。
优化
架构迁移后,您可以测试性能并根据结果进行优化。例如,您可以引入分区来提高数据的管理和查询效率。BigQuery 中的分区是指一种特殊的表,它分成多个区段(称为分区)。分区与 Snowflake 中的微分区不同,后者在加载数据时自动进行。在 BigQuery 中,您可以按注入时间、时间戳或整数范围进行分区,从而改善查询性能和费用控制。如需了解详情,请参阅分区表简介。
聚簇表
聚簇表是另一项架构优化。与 Snowflake 一样,BigQuery 允许您对表进行聚簇,从而根据表架构中一个或多个列的内容自动组织表数据。BigQuery 使用您指定的列来共置相关数据。聚簇可以提高某些类型的查询的性能,例如,使用过滤条件子句的查询或汇总数据的查询。如需详细了解聚簇表在 BigQuery 中的工作原理,请参阅聚簇表简介。
迁移工具
以下列表介绍了可用于将数据从 Snowflake 迁移到 BigQuery 的工具。使用流水线进行迁移的示例部分将组合使用这些工具来构建端到端迁移流水线。
COPY INTO <location>
命令:在 Snowflake 中使用此命令,将数据从 Snowflake 表直接卸载到指定的 Cloud Storage 存储桶中。如需查看端到端示例,请参阅 GitHub 上的 Snowflake to BigQuery (snowflake2bq)。- Apache Sqoop:如需将数据从 Snowflake 提取到 HDFS 或 Cloud Storage 中,请使用 Sqoop 和 Snowflake 的 JDBC 驱动程序提交 Hadoop 作业。Sqoop 在 Dataproc 环境中运行。
- Snowflake JDBC:将此驱动程序与大多数支持 JDBC 的客户端工具或应用搭配使用。
您可以使用以下通用工具将数据从 Snowflake 迁移到 BigQuery:
- BigQuery Data Transfer Service:使用此全代管式服务将 Cloud Storage 数据自动批量转移到 BigQuery。要使用此工具,您需要先将 Snowflake 数据导出到 Cloud Storage。
- The Google Cloud CLI:使用此命令行工具将下载的 Snowflake 文件复制到 Cloud Storage 中。
- bq 命令行工具:使用此命令行工具与 BigQuery 进行交互。常见用例包括创建 BigQuery 表架构、将 Cloud Storage 数据加载到表中以及运行查询。
- Cloud Storage 客户端库:通过使用 Cloud Storage 客户端库的自定义工具将下载的 Snowflake 文件复制到 Cloud Storage。
- BigQuery 客户端库:使用基于 BigQuery 客户端库构建的自定义工具与 BigQuery 进行交互。
- BigQuery 查询调度器:使用此内置 BigQuery 功能安排周期性 SQL 查询。
- Cloud Composer:使用此全代管式 Apache Airflow 环境编排 BigQuery 加载作业和转换。
如需详细了解如何将数据加载到 BigQuery 中,请参阅将数据加载到 BigQuery 中。
使用流水线进行迁移的示例
以下部分展示了如何使用三种不同的技术将数据从 Snowflake 迁移到 BigQuery:提取和加载、ETL 以及合作伙伴工具。
提取和加载
提取和加载技术提供两种方法:
- 使用流水线从 Snowflake 卸载数据
- 使用流水线和 JDBC 驱动程序从 Snowflake 导出数据
使用流水线从 Snowflake 卸载数据
如需将数据从 Snowflake 直接卸载到 Cloud Storage(推荐),或者下载数据并使用 gcloud CLI 或 Cloud Storage 客户端库将数据复制到 Cloud Storage,请使用 snowflake2bq 工具通过 Snowflake COPY INTO <location>
命令迁移数据。
然后,您可以使用以下任一工具将 Cloud Storage 数据加载到 BigQuery 中:
- BigQuery Data Transfer Service
bq
命令行工具- BigQuery API 客户端库
使用流水线和 JDBC 驱动程序从 Snowflake 导出数据
使用以下任意产品通过 Snowflake 的 JDBC 驱动程序导出 Snowflake 数据:
- Dataflow
- Cloud Data Fusion
- Dataproc
- BigQuery 和 Apache Spark
- 适用于 Spark 的 Snowflake 连接器
- 适用于 Spark 和 Hadoop 的 BigQuery 连接器
- Snowflake 和 Sqoop 的 JDBC 驱动程序,用于将数据从 Snowflake 提取到 Cloud Storage 中:
提取、转换和加载
如果您希望在将数据加载到 BigQuery 之前转换数据,则可以在上文提取和加载部分所述的流水线中添加一个转换步骤。
转换 Snowflake 数据
如需在将数据加载到 BigQuery 之前转换数据,您可以将数据直接从 Snowflake 卸载到 Cloud Storage,也可以使用 gcloud CLI 复制数据,如上文提取和加载部分所述。
加载 Snowflake 数据
转换数据后,您可以使用以下方法之一将数据加载到 BigQuery 中:
- Dataproc
- 使用 Apache Spark 从 Cloud Storage 读取数据
- 使用 Apache Spark 写入 BigQuery
- Hadoop Cloud Storage 连接器
- Hadoop BigQuery 连接器
- Dataflow
- Cloud Data Fusion
- Dataprep by Trifacta
使用流水线和 JDBC 驱动程序转换数据并从 Snowflake 导出
如上文提取和加载部分所述,在下面的流水线选项中添加一个转换步骤。
- Dataflow
- 克隆 Google 提供的 JDBC-to-BigQuery 模板代码,并修改模板以添加 Apache Beam 转换。
- Cloud Data Fusion
- Dataproc
- 使用 Spark SQL 或任何受支持的 Spark 语言(Scala、Java、Python 或 R)的自定义代码来转换数据。
您可能有一个提取、加载和转换用例,用于将数据从 Snowflake 加载到 BigQuery,然后对其进行转换。如需执行此任务,请使用上文提取和加载部分所述方法之一,将数据从 Snowflake 加载到 BigQuery 暂存表中。然后,在暂存表上运行 SQL 查询,并将输出写入 BigQuery 中的最终生产表。
用于迁移的合作伙伴工具
有许多供应商专门提供 EDW 迁移空间。如需查看主要合作伙伴及其提供的解决方案的列表,请参阅 BigQuery 合作伙伴。
导出过程示例
以下部分展示了使用 COPY INTO <location>
Snowflake 命令将数据从 Snowflake 导出到 BigQuery 的示例。如需查看包含代码示例的详细分步过程,请参阅 Google Cloud 专业服务 Snowflake to BigQuery 工具。
准备导出
对于卸载,请使用 Snowflake SQL 语句创建一个命名的文件格式规范。
本教程使用 my_parquet_unload_format
作为文件格式,但您可以使用其他名称。
create or replace file format my_parquet_unload_format
type = 'PARQUET'
field_delimiter = '|'
导出 Snowflake 数据
准备好数据后,您需要将数据移动到 Google Cloud。您可以通过以下两种方式之一执行此步骤:
- 将数据从 Snowflake 直接导出到 Cloud Storage。
- 将 Snowflake 数据暂存在 Amazon Simple Storage Service (Amazon S3) 存储桶或 Azure Blob Storage 中。
要避免额外的数据跃迁,请直接导出数据。
将 Snowflake 数据直接导出到 Cloud Storage
以下说明展示了如何使用 Snowflake COPY
命令将数据从 Snowflake 卸载到 Cloud Storage:
在 Snowflake 中配置存储集成对象,以允许 Snowflake 写入外部 Cloud Storage 暂存区中引用的 Cloud Storage 存储桶。
此步骤涉及多个子步骤。
使用
CREATE STORAGE INTEGRATION
命令创建一个集成:create storage integration gcs_int type = external_stage storage_provider = gcs enabled = true storage_allowed_locations = ('gcs://mybucket/unload/')
使用
DESCRIBE INTEGRATION
命令检索 Snowflake 的 Cloud Storage 服务账号,并授权该服务账号访问被选为暂存区域的 Cloud Storage 存储桶:desc storage integration gcs_int;
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+ | property | property_type | property_value | property_default | +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | gcs://mybucket1/path1/,gcs://mybucket2/path2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/ | [] | | STORAGE_GCP_SERVICE_ACCOUNT | String | service-account-id@project1-123456.iam.gserviceaccount.com | | +-----------------------------+---------------+--------------------------------------------------------- --------------------+------------------+
创建一个外部 Cloud Storage 暂存区,该暂存区引用您使用
CREATE STAGE
命令创建的集成:create or replace stage my_ext_unload_stage url='gcs://mybucket/unload' storage_integration = gcs_int file_format = my_parquet_unload_format;
使用
COPY INTO <location>
命令并指定您在上一步中创建的外部暂存区对象,以将数据从 Snowflake 数据库表复制到 Cloud Storage 存储桶:copy into @my_ext_unload_stage/d1 from mytable;
通过 Storage Transfer Service 将 Snowflake 数据从 Amazon S3 导出到 Cloud Storage
以下示例展示了如何使用 COPY
命令将 Snowflake 表中的数据卸载到 Amazon S3 存储桶:
在 Snowflake 中配置存储集成对象,以允许 Snowflake 写入外部 Cloud Storage 暂存区中引用的 Amazon S3 存储桶。
此步骤涉及配置对 Amazon S3 存储桶的访问权限、创建 AWS IAM 角色以及使用
CREATE STORAGE INTEGRATION
命令在 Snowflow 中创建存储集成:create storage integration s3_int type = external_stage storage_provider = s3 enabled = true storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole' storage_allowed_locations = ('s3://unload/files/')
使用
DESCRIBE INTEGRATION
命令检索 AWS IAM 用户:desc integration s3_int;
+---------------------------+---------------+================================================================================+------------------+ | property | property_type | property_value | property_default | +---------------------------+---------------+================================================================================+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/ | [] | | STORAGE_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/abc1-b-self1234 | | | STORAGE_AWS_ROLE_ARN | String | arn:aws:iam::001234567890:role/myrole | | | STORAGE_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=
| | +---------------------------+---------------+================================================================================+------------------+ 向 AWS IAM 用户授予 Amazon S3 存储桶的访问权限,并使用
CREATE STAGE
命令创建外部暂存区。create or replace stage my_ext_unload_stage url='s3://unload/files/' storage_integration = s3_int file_format = my_parquet_unload_format;
使用
COPY INTO <location>
命令并指定您之前创建的外部暂存区对象,以将数据从 Snowflake 数据库复制到 Amazon S3 存储桶:copy into @my_ext_unload_stage/d1 from mytable;
使用 Storage Transfer Service 将导出的文件转移到 Cloud Storage。
通过其他云服务商将 Snowflake 数据导出到 Cloud Storage:
Azure Blob Storage。按照卸载到 Microsoft Azure 中详细介绍的步骤操作。然后,使用 Storage Transfer Service 将导出的文件转移到 Cloud Storage。
Amazon S3 存储桶。按照卸载到 Amazon S3 中详细介绍的步骤操作。然后,使用 Storage Transfer Service 将导出的文件转移到 Cloud Storage。
后续步骤
- 迁移后的性能和优化。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。查看我们的 Cloud 架构中心。