# architect 决策指南 (decision-guides) - Full Documentation ## 概览 企业通常会将数据同时存储在 Salesforce 和其他外部数据湖中,例如 Snowflake、Google BigQuery、数据块、Redshift 或 Amazon S3 等云存储。对于希望充分利用数据能力的公司来说,这种在不同源系统中的数据孤立构成了挑战。 致力于跨多个数据湖汇集数据的架构师面临着关于如何最好地集成这些数据的关键架构决策。Data 360 为数据集成提供了多个选项,其中每个选项都有不同的利弊。 本指南提供了一个框架来评估在集成数据时哪种模式最适合您对延迟、成本、可扩展性、治理和复杂性的要求,帮助您选择何时使用数据接收、零复制数据联合或混合方法。该指南还将帮助您在不同数据摄取和数据联合方法之间进行选择,每种方法都满足不同的需求。 将外部数据湖库与 Data 360 集成需要仔细考虑数据新鲜度、治理和漏斗效率之间的权衡。例如,使用 Zero Copy 数据联合实时查询可以最大限度地提高数据的新鲜度,但随着您通过网络移动更多数据,可能会降低漏斗效率。因此,对于大多数真实世界的实施,多云湖滨生态系统中的摄取和联合是最佳路径。这种混合方法确保了可扩展的、受管的、可互操作的架构,它无缝支持实时个性化和欺诈检测等低延迟操作工作负载,以及监管报告和历史趋势分析等分析工作负载。本决策指南将帮助您了解如何浏览这些权衡,并选择正确的策略。 ## 外卖 - **数据接收:**将数据复制到 Salesforce Data 360,创建受管的规范数据模型。当您需要: - **建立一个全面的 Customer 360:**将不同的源统一并转换为一个受信任的简档。 - **满足严格的监管合规性:**创建可审计的集中副本,其中数据访问和谱系可以严格控制。 - **零复制联盟:**无重复地实时查询外部源,实现实时个性化、实时仪表板和快速源入门。您必须权衡两个主要选项: - **实时和缓存(加速查询):**最适合对 Snowflake、Google BigQuery、Redshift 或数据块等外部数据平台中的数据进行交互式分析和实时仪表板。通过将处理推送到源系统,避免缓慢、昂贵的数据重复。 - **文件联合:**最适合云数据湖中数据的大规模批处理和 AI 模型训练 (S3、ADLS)。通过直接查询开放表格式的文件,解锁 ETL 和数据科学工作负载的海量数据集,避免代价高昂和接收缓慢。 - **混合模型:**将统一简档的接收与联合进行融合以获得新鲜感,支持全方位参与、Agentforce 驱动的操作和 AI/ML 培训。 ### 重要注意事项 - **混合架构:**通常需要混合数据摄取和数据联合。 - 将关键数据的数据摄取用于规范数据模型和核心治理。 - 通过 Zero Copy 聚合所有其他数据,以最大限度地减少构建和维护接收数据漏斗的操作开销。 - **数据摄取频率很重要:**根据业务价值、延迟需求和操作复杂性选择频率。 - 将实时用于对时间敏感的工作流(个性化、实时仪表板、Agentforce 操作)。 - 对于中等紧急流程(市场活动、运营报表),近乎实时。 - 历史或低速数据集的批次。 - **将联盟模式与延迟和性能匹配:**选择最适合您的访问模式以及对新鲜度、性能和成本的要求。 - 将实时查询用于低延迟至关重要的操作仪表板和实时个性化。 - 当查询频繁但稍微过时的结果可以接受时,使用缓存(加速查询),以平衡性能和成本。 - 将文件联合用于大规模、吞吐量繁重的分析或批处理工作负载,非常适合历史数据集或时间不太敏感的数据集。 - **将治理与数据驻留要求保持一致:** - 在集中治理至关重要的地方使用接收。 - 在可接受的分散治理时使用联合,同时在外部源强制执行严格的治理。Zero Copy 遵守源级策略,例如行级安全性 (RLS) 和数据屏蔽。 - **优先考虑高价值工作流的接收:**有选择地将摄取应用于关键流程,例如身份解析、监管报告和操作激活。 - **成本和复杂性推动决策:**实时摄取可能既昂贵又复杂。架构师应权衡加入、存储和转换数据的成本与直接通过 Zero Copy 查询数据的成本。 选择正确的集成模式 — 数据接收、零复制或混合方法 — 直接影响多云平台的延迟、治理、运营效率和成本。此决策决定了如何可靠、大规模地提供实时见解、AI 驱动的激活和个性化参与。 ## 产品比较 此表对 Salesforce Data 360 中的数据接收和零复制模式进行了技术比较,重点关注功能、权衡和好处,以及企业用例和结果。架构师可以将其作为参考,以设计平衡性能、成本和合规性的混合多云数据平台。
| 模式类型 | 模式/工具 | 好处 | 注意事项 | 结果 |
|---|---|---|---|---|
| 数据摄取 | 实时:通过 CDC 支持的摄取 API 进行亚秒级延迟摄取。连续流漏斗。 | - 即时见解 - 非常适合低延迟操作和个性化用例 - 支持事件驱动的工作流 |
- 成本高 - 复杂架构 - 需要低延迟源系统 - 高用量源会导致过多的流导致漏斗饱和 - I/O 密集型 - 考虑选择性字段和筛选以减少开销 |
Agentforce: - 实时欺诈警报、零售个性化、运营警报 Analytics: - 亚秒级仪表板、KPI 监控 合规性: - 持续更新受管工作流的客户记录 |
| 流:通过本机连接器每 1-3 分钟进行微批处理摄取 | - 平衡成本和新鲜度 - 架构比实时更简单 - 支持增量更新 |
- 略微延迟 - 可能不适合重要的次秒决策 - 批处理大小影响内存/计算 - I/O 中等 - 最适合可预测的重复更新模式 - 考虑窗口聚合以减少处理负载 |
Agentforce: - 及时的市场活动触发器,近乎实时的参与 Analytics: - 推荐引擎,近实时仪表板 合规性: - 具有可审计性的频繁更新 |
|
| 批次:通过连接器或 API 计划大批量加载。支持对象存储和 ETL/ELT 漏斗。 | - 经济高效地处理大规模数据集 - 易于实施 - 适用于历史分析 |
- 数据延迟 - 不适用于时间敏感的操作 - 在加载窗口期间 I/O 密集型 - 网络吞吐量可能成为大文件的瓶颈 - 最适合历史聚合或受监管的报表工作流 |
Agentforce: - IT 支持票证 (Jira/ServiceNow)、聚合工作流 Analytics: - 历史分析、趋势评估 投诉: - 监管报告、患者/索赔数据聚合 |
|
| 零复制 | 实时查询:对外部系统的直接查询;读取时的模式;没有数据重复 | - 最大新鲜度 - 最小的存储开销;支持实时操作见解 |
- 取决于源性能 - 高查询量会影响延迟 - 非常适合具有谓词下拉和聚合的查询,以最小化 I/O - 避免对大规模数据集进行未筛选的查询 |
Agentforce: - 适应实时活动的动态工作流 Analytics: - 操作仪表板、实时报告 合规性: - 在源位置遵守行级安全性和屏蔽 |
| 加速查询(缓存):为联合查询缓存本地副本。从 15 分钟到 7 天可配置。优化查询执行 | - 减少延迟 - 成本低于重复的实时查询 - 提高频繁访问模式的性能 |
- 需要缓存管理 - 过时取决于缓存间隔 - 最适合高频查询 - 不适合次秒决策 |
Agentforce: - 用于快速决策的预聚合参与度量 Analytics: - BI 仪表板、细分、分析报告 合规性: - 与审计日志一致的受管仪表板 |
|
| 文件联合:直接访问对象商店或湖泊中的大型历史数据集(S3、Iceberg、Google BigQuery、Redshift)。 | - 处理大规模数据集 - Data 360 中的最小存储 - 支持 AI/ML 工作负载 |
- 只读 - 查询性能取决于外部系统吞吐量 - 针对批量繁重、吞吐量密集型作业优化 - 不适用于实时仪表板 |
Agentforce: -(非典型 — 批量繁重) Analytics: - ML/AI 培训、历史分析、PB 级报告 合规性: - 对外部数据集的受管访问,没有重复 |
#### 数据摄取方法
数据接收方法因您使用的连接器接收数据而异。一些连接器提供多种接收方法,而其他连接器仅以批处理或流模式运行。请参阅[数据 360:Data 360 连接器及其可用方法的完整列表的集成和连接器](https://help.salesforce.com/s/articleView?id=data.c360_a_sources_targets.htm&type=5)。
- **实时**
- 使用流漏斗或变更数据捕获 (CDC) 进行亚秒级接收。
- 最适合对时间敏感的工作流(欺诈检测、个性化、操作仪表板)。
- 在 Data 360 中推送转换和聚合,以减少下游 I/O 并优化计算使用。使用增量 CDC,以最大限度地减少数据重组。
- **流**
- 每 1-3 分钟以较小的增量摄取一次。
- 平衡新鲜度和成本,适合市场活动编排、近乎实时的参与和运营报告。
- 使用微型批处理来控制 I/O 峰值。如果可能,在源位置聚合数据,以减少传输量并优化存储。
- **批次(计划加载)**
- 定期接收大型数据集(每小时、每天、每周)。
- 对于历史数据集、监管报告和合规用例,经济高效且可靠。
- 确保计算位置与源存储位于同一区域,以实现性能和成本优化。
#### 架构师行动手册
- **数据接收的用例**
- **生成 Customer 360 统一简档:**为客户身份和属性构建单一的真实来源。
- **维护监管合规数据集:**为敏感数据强制执行治理、谱系和可审计性。
- **集中市场活动编排:**确保市场营销、销售和服务全部从一致、可信的数据集运行。
- **设计实践**
- 支持批量接收,以满足历史或低延迟容忍的需求,例如归档报告或定期快照。
- 使用 CDC 或流 API 保持操作和个性化工作流的新鲜度,确保近乎实时的更新。
- 通过应用增量加载而不是重新加载整个数据集来控制存储和计算增长,以优化成本和效率。
- 将接收漏斗与计算位置和增量处理保持一致,以减少网络 I/O。在 Data 360 中应用转换,以避免不必要地移动原始数据。
- **成本注意事项**
- **实时摄取:**最高的计算和漏斗成本;适合高价值、时效性高的工作流,例如个性化、操作仪表板或 Agentforce 驱动的操作。
- **流接收:**适中计算和存储成本;适用于容忍轻微延迟的频繁更新,例如市场活动编排或运营报告。
- **批量摄取:**更低的计算成本、可预测的存储;最适合历史数据集或低频更新。使用特定连接器从 Salesforce 组织免费接收批处理数据。
- **刷新模式:**选择增量刷新模式可以减少总摄取和计算成本。我们建议尽可能使用增量刷新来优化所有摄取类型的效率。
- 从源到 Data 360 的 I/O 量也会影响成本。优化批次大小、分区和区域对齐降低了转移成本,并提高了性能。
- **行业场景**
- **财务:**引入了解客户 (KYC)、反洗钱 (AML) 和欺诈检测所需的数据集,其中可审计性和合规性是不容置疑的。
- **医疗保健:**将摄取用于患者身份解析和符合 HIPAA 的记录,实现安全、统一的视图。
- **零售:**将销售点 (POS)、电子商务和忠诚计划数据整合到统一简档中,以实现细分和个性化
- **电信:**使用规范、受管订阅者数据,支持流失预防和使用情况分析。
#### 数据摄取方法决策条件
| 功能 | 实时摄取 | 流摄取 | 批量摄取 |
|---|---|---|---|
| 延迟和新鲜度 | 通过支持变更数据捕获 (CDC) 的接收 API 进行亚秒级延迟接收。提供连续的流漏斗。最适合低延迟操作用例。 | 通过本机连接器,每 1-3 分钟进行一次微批量摄取。支持增量更新。预计会略有延迟。 | 预计数据延迟。计划的大批量加载。定期摄取(每小时、每天、每周)。不适合时间敏感的操作。 |
| 主要用例 | 非常适合低延迟操作和个性化用例。用于对时间敏感的工作流。支持事件驱动的工作流。用于实时欺诈警报和操作警报。 | 适用于中等紧急流程。用于市场活动编排、近乎实时的参与和运营报告。用于及时的市场活动触发器。 | 经济高效地处理大规模数据集。适用于历史分析。用于历史聚合或受监管的报表工作流。最适合历史或低速数据集。 |
| 架构复杂性和 I/O | 高成本和复杂的架构。需要低延迟源系统。I/O 密集型。高用量源会导致漏斗饱和。 | 架构比实时更简单。I/O 中等。最适合可预测的重复更新模式。批次大小会影响内存/计算。 | 易于实施。在加载窗口期间 I/O 密集型。网络吞吐量可能成为大批量的瓶颈。 |
| 成本注意事项 | 最高的计算和漏斗成本。仅适用于高价值、对时间敏感的工作流。 | 降低计算和存储成本。提供平衡的成本与新鲜度方法。适用于容忍轻微延迟的频繁更新。 | 降低计算成本和可预测的存储。建议用于历史数据集或低频更新。通过 Salesforce 内部漏斗接收是免费的。 |
| 设计实践 | 使用增量 CDC,以最大限度地减少数据重组。筛选并使用选择性字段以减少开销。 | 使用微型批处理来控制 I/O 峰值。考虑窗口聚合,以减少处理负载。 | 对于归档报告或定期快照,更喜欢这样做。确保计算位置与源存储位于同一区域,以实现成本优化。 |
#### 零复制方法
在使用 Zero Copy 时,架构师必须进一步决定三种可用的数据联合方法,其中每种方法在新鲜度、性能和成本之间都有其自己的权衡。
- **实时查询**
- 直接针对外部系统(Snowflake、Google BigQuery、Redshift、数据块等)运行查询,没有数据重复。
- 在谓词和聚合可以推送时最佳,最大限度地减少数据通过网络的移动,并减少 Salesforce Data 360 计算上的 I/O。
- 最适合实时见解和低延迟操作仪表板。取决于外部系统的性能。
- **缓存(加速查询)**
- 在 Salesforce Data 360 中临时存储聚合数据的缓存副本。
- 通过可配置的持续时间(几分钟到几天),降低频繁访问数据集的重复查询成本和延迟。
- 数据不会永久复制或完全管理;新鲜度通过源的定期刷新进行管理。
- **文件联合**
- 提供对对象存储中大规模数据集的直接、只读访问(例如,S3、带 Iceberg 的 GCS)。
- 最适合 AI/ML 工作负载、历史分析和 PB 级报表,无需移动数据。
- 查询性能在很大程度上取决于对象格式、分区和网络 I/O。如果不进行优化,大扫描可能会产生大量的 I/O。
#### 架构师行动手册
- **用例**
- **实时个性化和自适应工作流:**随着客户行为的变化,提供动态优惠、推荐和 Next Best Action。
- **实时仪表板和运营分析:**直接从外部仓库为关键业务仪表板和 KPI 提供支持。
- **使用大型外部数据集进行 AI/ML 模型训练:**使用文件联合利用来自数据湖和仓库的 PB 级数据,而无需移动它。
- **行业场景**
- **零售/媒体:**通过整合点击流或内容交互数据,启用个性化推荐和实时客户参与。
- **财务:**通过查询外部仓库,在不复制敏感数据的情况下,近乎实时地运行欺诈检测和风险评分。
- **技术/企业:**支持数据集驻留在多个系统中的跨云报表、IT 服务仪表板和运营分析。
- **设计实践**
- **实时查询**
- 当新鲜度至关重要时,用于高 QPS、低延迟查询。
- 将谓词和聚合推送到外部系统,以减少通过网络进行的数据重组。
- 避免不必要地扫描大量数据的查询;考虑分区修剪和筛选。
- **文件联合**
- 在不摄取的情况下访问对象存储中的 PB 级数据集。
- 将对象存储保持在与 Salesforce 计算相同的云区域中,以最大限度地减少延迟和出口成本。
- 使用分区域列格式 (Parquet/ORC) 和下拉筛选器,以减少 I/O 和网络传输。
- 利用查询和谓词下推在源位置筛选和聚合数据,减少数据移动。
- 除非必要,否则避免跨区域数据访问,因为这会增加 I/O、延迟和成本。
- **缓存(加速查询)**
- 缓存频繁访问的数据集,以平衡成本和性能。
- 配置刷新间隔,以平衡新鲜度和查询成本。
- **合规性:**通过直接在联盟系统中利用行级安全性 (RLS) 和屏蔽策略,在源头强制执行治理。以下是跨平台统一 RLS 和屏蔽的最佳实践。
- **使用集中企业 ID:**将 Salesforce Data 360 中的用户和实体映射到与外部系统中的身份相对应的唯一的集中企业标识符。
- **调整安全策略:**确保根据映射的身份应用联合系统中的行级安全性和屏蔽策略。这保留了查询外部数据时的合规性。
- **标准化身份模式:**在所有数据源中保持一致的身份属性(电子邮件、用户 ID、客户 ID 等),以避免不匹配和访问违规。
- **成本注意事项**
- **实时查询:**按查询付费模式 - 外部 Lakehouse 计算会产生成本,并可能因高 QPS 而激增。最适合价值大于成本变化率的新鲜度关键用例。
- **加速查询(缓存):**通过减少对源系统的点击,降低了与实时查询相比的查询成本,但增加了填充和刷新缓存的批处理数据接收成本。最适合频繁访问的数据集。
- **文件联合:**对象存储中最便宜的存储选项作为数据,但查询成本取决于文件大小、分区和修剪。最适合 PB 级别的历史数据或批量数据。
#### 零复制方法决策条件
| 决策点 | 实时查询 | 缓存(加速查询) | 文件联合 |
|---|---|---|---|
| 数据源位置 | 外部数据湖库(Snowflake、Google BigQuery、Redshift、数据块)。 | 外部数据湖库(Snowflake、Google BigQuery、Redshift、数据块) | 对象存储或云数据湖(S3、ADLS、GCS),通常使用 Open Table 格式,例如 Iceberg。 |
| 目的/用例 | 非常适合交互式分析和实时仪表板。最适合实时个性化和动态工作流。 | 最适合查询频繁但结果稍显过时的情况。适用于 BI 仪表板和细分。 | 最适合大规模批处理和 AI/ML 模型训练。非常适合历史分析和 PB 级报表。 |
| 新鲜度/延迟 | 最大新鲜度;查询直接实时运行。支持亚秒决策。 | 稍微过时的结果可以接受。新鲜度取决于缓存间隔,可从 15 分钟到 7 天进行配置。 | 针对批量繁重、吞吐量密集型作业进行优化。不适合实时仪表板。 |
| 访问模式 | 最适合不频繁或临时查询。用于新鲜度至关重要的高 QPS(每秒查询)、低延迟查询。 | 最适合高频读取场景。提高频繁访问模式的性能。 | 只读访问权限。适用于没有摄取的 PB 级数据集。 |
| 性能驱动因素 | 高度依赖于外部源系统的性能。在谓词和聚合可以推送到源时优化。 | 与重复的实时查询相比,减少延迟。性能取决于缓存管理和间隔。 | 性能在很大程度上取决于对象格式、分区和外部系统吞吐量。使用分区域列格式 (Parquet/ORC)。 |
| 所涉费用 | 按查询付费模式。外部 Lakehouse 计算会产生成本。对于不频繁的查询来说很经济高效,但是费用可能会因为每秒查询量 (QPS) 高而激增。 | 成本低于重复的实时查询。减少重复查询外部源的需要。添加缓存存储和刷新开销。 | 最便宜的存储选项。查询成本取决于文件大小和分区。 |
| 关键注意事项 | 避免不必要地扫描大量数据的未筛选查询。 | 需要缓存管理。不适合亚秒决策。 | 查询性能在很大程度上取决于通过分区和谓词下推进行优化。 |
#### 架构师行动手册
- **用例**
- **全方位参与:**将历史客户数据与实时行为相结合,以提供一致的上下文感知体验。
- **AI/ML 漏斗:**在策划的规范数据集上训练模型,同时使用来自外部源的原始或实时信号来丰富它们。
- **合规性和灵活性混合需求:**对敏感数据应用严格的治理,但应结合使用,以确保操作灵活性。
- **行业场景**
- **零售:**将接收用于身份解析和简档统一;将接收用于实时优惠和个性化。
- **医疗保健:**通过摄取维护黄金级患者记录,同时为即时上下文提供 IoT 设备流和传感器数据。
- **金融服务:**将受监管的数据引入合规监管的湖泊,同时整合外部查询,以进行欺诈检测和风险监控。
- **设计实践**
- **带摄取的锚治理:**将高价值或受监管的数据引入规范模型,以确保 Trust 和合规性。
- **使用新鲜度联盟:**允许外部湖库提供实时或大规模数据访问,而不会重复。
- **平衡成本与性能:**简档工作负载,以决定接收的内容与联合的内容,从而最大限度地减少不必要的存储或查询成本。
- **应用分层治理:**对接收的数据实施集中治理,同时利用联合系统自身的安全控制(例如,RLS、屏蔽)。
- 在设计混合漏斗时,请确保增量接收历史数据集,并将聚合或筛选器推送到聚合源,以优化 I/O 和计算使用。
- **成本注意事项**
- 在需要新鲜度时,通过将合规或关键数据的摄取与联合相结合,优化总成本和性能。
- 在混合摄取和联合时,考虑 I/O 和计算分配。要降低重复查询源系统的计算成本,请对高读取、频繁访问的联合数据集使用缓存 (加速查询)。
## 用例决策指南
以下是说明如何应用此逻辑的常见原型。
1. **"单一真理源"原型:集中和治理**
- **场景:**您需要为整个全球企业构建合规、统一的 Customer 360 简档。数据来自十几个不同的系统,必须遵守严格的 GDPR 和 CCPA 法规,并将作为所有营销和服务交互的可信来源。
- **推荐模式:****数据摄取。**优先级是治理、Trust 和控制。将数据引入 Data 360 是创建与源系统隔离的完全可审计的规范简档的唯一方法。
2. **“实时见解”原型:分析而不移动**
- **场景:**数据科学团队需要对 Snowflake 中不断更新的大规模事务表运行探索性查询。同时,您的执行团队需要由相同数据支持的实时 BI 仪表板。每天移动 PB 级数据太慢,成本太高。
- **推荐模式:****零复制联盟。**首要任务是大规模的速度、灵活性和成本效益。Zero Copy 允许您利用现有数据仓库的巨大功能进行实时查询,而没有数据重复的开销和延迟。
3. **"混合智能"原型:管理核心,聚合边缘**
- **场景:**您想要使用来自数据湖的实时行为信号(例如网站点击)来丰富您的受管、接收的客户简档。您需要核心简档的稳定性,但实时数据的即时性支持即时个性化。
- **推荐模式:****混合方法。**使用数据摄取来创建客户数据的稳定和受管核心。然后,使用 Zero Copy 将易失性的实时“边缘”数据联合在一起,并在查询时将其联接在一起,以获得完整的最新视图。
## 前进之路
企业数据策略不再是选择单一的集成模式,而是在可交互的数据生态系统中构建可控的灵活性。根据业务需求为每个源数据系统选择正确的数据集成方法通常会导致一种混合方法,这种方法结合了数据接收和数据联合的优点。
- 将关键任务受管数据集引入 Salesforce Data 360,以实现合规性、身份解析和运营工作流。
- 通过 Zero Copy 聚合数据,以实现实时、探索性和 AI 驱动的分析,而不会复制存储。
Hyperforce 上的 Salesforce Data 360 提供多区域弹性和可扩展性。 带有冰山表格的开放式 Lakehouse 支持计算分离,并与 Snowflake、Databricks 和 S3 Iceberg 等平台交互,从而构成了真正可交互的多云数据生态系统的主干。
随着数据生态系统的发展,不断平衡新鲜度、成本、性能和合规性,以保持架构灵活性。通过将接收的受管数据与联合访问统一起来,让您的平台面向未来。这支持跨云、地区和业务域的实时智能、AI 激活和企业级个性化。
一刀切的解决方案不适合大多数企业。最佳策略将正确的模式映射到正确的业务驱动因素。
## 关于作者
Yugandhar Bora 是 Salesforce 的软件工程架构师,专门从事数据和智能应用平台中的数据架构。他领导企业架构审查委员会 (EARB) 专注于数据治理和统一数据模型的举措,同时为自动化平台配置解决方案做出贡献。
Jan Fernando 是 Salesforce 首席架构师办公室的首席架构师。他于 2012 年加入 Salesforce,在创业生态系统中积累了丰富的经验。在加入首席架构师办公室之前,他曾在 Platform 组织中工作了十多年,领导了多项关键技术变革。
# Data 360 决策指南入门
本节提供有关 Salesforce Data 360 的关键架构决策的实用指导,包括配置策略、多组织连接和集成模式。使用这些指南来设计和实施有效的数据架构,统一客户数据并支持 AI 支持的功能。
---
## Data 360 配置
[Data 360 配置](/docs/architect/zh-cn/decision-guides/guide/data-360-provisioning)涵盖了配置 Salesforce Data 360 时的基本决策:
- **主页组织选择**:决定是否在现有生产组织中配置 Data 360,或创建专用组织,考虑治理、合规性和价值实现时间。
- **多组织策略**:在多个独立的 Data 360 实例或使用 Data Cloud One 进行选择,以统一多个 Salesforce 组织,从而平衡自治、合规性和成本。
- **Data Cloud One 架构**:通过跨组织的集中治理、元数据共享和功能奇偶性,启用多个同伴组织共享单个 Data 360 实例。
- **Data 360 组织之间的数据共享**:将独立实例之间的零复制数据共享用于区域合规、业务部门协作或联合执行仪表板。
- **配置注意事项**:数据驻留、治理模型、延迟、集成复杂性、成本和 AI 在企业范围内部署就绪方面的因素。
帮助架构师设计配置策略,以确保 Customer 360、AI 和跨平台创新的简单性、企业一致性、合规性和可扩展性。
---
## Data 360 互操作性
[Data 360 互操作性](/docs/architect/zh-cn/decision-guides/guide/data-360-interoperability)为将 Data 360 与外部平台和数据湖集成提供了一个框架:
- **数据接收模式**:实时、流和批量接收,用于创建适用于 Customer 360、合规性和集中治理的受管规范数据集。
- **零复制数据联合**:实时查询、加速查询(缓存)和文件联合方法,可在没有重复的情况下实时访问外部系统,从而实现个性化、仪表板和 AI/ML 工作负载。
- **混合方法**:将核心数据集的受管接收与零复制联合相结合,以实现新鲜性和可扩展性,支持全方位参与、Agentforce 驱动的操作和企业分析。
- **决策框架**:评估延迟、成本、可扩展性、治理和复杂性方面的权衡,以选择每个数据源的正确集成模式。
- **架构师行动手册**:金融、医疗、零售和电信场景的特定于行业的指导、设计实践和成本注意事项。
指导架构师平衡数据新鲜度、治理和漏斗效率,构建支持运营和分析工作负载的可扩展、可互操作、AI 就绪的数据架构。
## 概览
Salesforce Data 360 是基于 Hyperforce 构建的数据平台,它将 Salesforce 和外部数据统一到每个客户或客户的清晰、完整和可信的 360 度视图中。
由于并购、区域运营、功能分离或历史原因,企业通常运营多个 Salesforce 组织。架构师必须不仅在单个家庭组织还是多组织配置之间做出决定,而且还要决定是否配置多个独立的 Data 360 实例,使用 Data Cloud One 在一个实例下统一组织,或者使用 Data 360 之间的数据共享(Data 360 到 Data 360 数据共享)在独立的 Data 360 实例之间协作。这些选择会影响治理、合规性、成本、延迟以及组织扩展 AI 和跨组织平台功能的能力。
Data 360 会在获得 Data 360 许可证的任何生产组织中自动配置。Data Cloud One 是 Salesforce 的多组织连接架构,允许单个家庭组织托管 Data 360 实例,而其他 Salesforce 组织作为同伴组织连接。选择哪个组织持有 Data 360 许可证,从而成为 Data 360 主页组织,是一个具有长期后果的关键架构决策。
您如何配置 Salesforce Data 360 是一个基本的架构决策,因为它决定了企业如何在组织中统一客户数据、实施治理以及启用关键的平台功能,特别是 AI、Agentforce 和分析。将组织集群锚定到单个 Data 360 提供了统一的数据模型、集中的治理和企业范围的 AI 就绪性,同时使同伴组织能够访问共享的元数据和功能,就像数据在本地一样。相反,当监管、合规或自治要求阻止集中时,多个独立的 Data 360 实例是合适的,Data 360 组织之间的数据共享支持这些实例之间的选择性零复制协作。
对于架构师,此决策至关重要。它定义了谁控制数据治理,数据驻留在哪里,如何启用平台功能,以及未来集成和 AI 倡议可以如何顺利扩展。即使对于目前没有 Data 360 的组织,通过制定未来添加 Data 360 访问权限的策略来验证您的架构也很重要。Sales、Service、Marketing、Commerce、Industry 和 Agentforce 中的 Salesforce 功能越来越多地构建在 Data 360 上。想要使用这些平台功能的组织必须配置自己的 Data 360 或连接到作为伴随组织的共享 Data 360。
本指南帮助架构师设计配置策略,平衡简单性、企业范围的一致性、合规性和可扩展性,确保组织可以自信地利用 Data 360 进行 Customer 360、AI 和跨平台创新。这将帮助您决定如何选择在哪个组织上配置 Data 360,以及如何在 Data Cloud One 和 Data 360 组织之间的数据共享之间进行选择,从而帮助奠定坚实的基础,将您的业务推向以 Data 360 为中心的未来。
---
## 配置注意事项
每个配置选择 — 无论是选择 Data Cloud One 还是 Data 360 组织之间的数据共享,或者将哪个组织指定为家庭组织 — 都应该根据这些交叉注意事项进行评估:
| 注意事项 | 为何如此重要 | 示例场景 |
|---|---|---|
| 数据驻留与合规 | 确定数据的存储和处理位置。监管规则可能需要特定区域或多个实例。 | 一家全球银行在位于法兰克福的 Salesforce 组织中配置了一个 Data 360 租户,以满足 GDPR 合规性要求,并在弗吉尼亚州的一个组织中为其美国分部配置了另一个租户。 |
| 治理和安全 | 谁拥有和管理 Data 360?保单是集中管理还是按业务部门委派? | 一家拥有强大中央 IT 的跨国公司创建了由卓越中心管理的专用家庭组织。 |
| 自主与集中 | 不同的领导可能需要单独的数据所有权。自治支持多个 Data 360;集中支持 Data Cloud One。 | 拥有独立子公司的控股公司允许每个业务部门运行自己的 Data 360。 |
| 延迟和性能 | 影响查询速度和体验,特别是对于跨区域连接到 Data 360 租户的同伴组织。 | 伦敦的销售团队从美国的 Data 360 租户查询数据时,可能会看到更高的延迟。 |
| 集成复杂性 | 更多 Data 360 租户 = 更多漏斗、API 和中间件。整合简化了集成。 | 零售商通过整合到 Data Cloud One 配置中,避免了构建 10 个 ETL 漏斗。 |
| 零复制数据源区域 | Zero Copy 连接器可能有跨区域访问要求,限制 Data 360 可以位于哪些区域。 | 一家公司在 AWS eu-west-1 地区拥有 Snowflake 实例。他们可以使用 Zero Copy 将数据合并到他们区域的 Data 360,但无法使用 Zero Copy 合并到美国区域的 Data 360。 |
| 专用连接跨区域兼容性 | 在某些情况下,专用连接支持取决于数据源是否与 Data 360 租户位于同一区域。 | 一家公司在 aws-east-1 地区有一个 Snowflake 实例,他们希望通过零复制来连接。如果 Data 360 家庭组织位于同一区域,他们只能建立专用连接网络连接。 |
| 成本和许可 | 每个 Data 360 租户都会增加成本。整合为更少的实例可以优化支出。 | 医疗保健提供商通过采用 Data Cloud One 而不是多个独立的 Data 360 实例来降低许可成本。 |
| 未来可扩展性 | 今天的配置选择为增长奠定了基础。 | SaaS 公司从单个 Data 360 实例开始,但计划在通过 Salesforce 组织收购子公司时扩展到 Data Cloud One。 |
| 企业级 AI 就绪 | AI 功能和 Agentforce 需要在每个组织中连接 Data 360 租户。配置决策会影响 AI 模型在整个企业中的训练和激活方式。 | 一家金融服务公司在 Data Cloud One 中统一数据,因此其 Einstein AI 模型可以访问企业范围内的客户数据。 |
主页组织是 Data 360 实例的锚。它位于:
- 管理 Data 360 存储和计算(在配置时选择的区域)。
- 应用管理、治理和安全策略。
- 执行数据接收、协调、身份解析、细分和激活。
在多组织场景中,家庭组织管理其他 Salesforce "Companion" 组织的中央 Data 360 实例。
家庭组织为何重要:
- 它决定了 Data 360 实例的地理位置。
- 它确定谁拥有和管理您的 Data 360 实例。Data 360 主页组织中的管理员可以访问接收到 Data 360 中的所有数据。
- 它控制 Data Cloud One 配置中的同伴组织连接。
- 它为您的企业数据策略奠定了基础 — 稍后更改它很困难,并且具有破坏性。
### 1.2 决策:现有组织或新组织作为主页组织?
第一个主要决策是在现有生产组织中配置 Data 360,还是创建新的专用组织作为家庭组织。
#### 选项 A:在现有组织中配置 Data 360
**最适合:**拥有单个 Salesforce 组织的客户,或已经拥有主要集中组织(大部分业务都在其中运行)的多组织客户。
- **优点**:
- 最简单的路径:Data 360 配置在您的 CRM 数据已经存在的地方。
- 立即访问本地销售、服务和市场营销数据。
- 无需额外集成。
- 需要管理的许可证和环境更少。
- 加速早期采用、试点和生产用例。
- **缺点**:
- 可能继承现有组织的治理或技术债务。
- 如果不存在单个“主要组织”,选择一个组织可能会引起所有权辩论。
- 绩效与组织的位置相关;可能与企业范围的驻留需求不一致。
- 如果多个业务部门使用不同的组织,如果不与 Data Cloud One 配对,本地配置可能会导致碎片化。
**示例:**
一个拥有 Salesforce 组织的 SaaS 公司在该组织中配置 Data 360,以统一客户订阅和支持数据。
#### 选项 B:在新的专用组织中配置 Data 360
**最适合:**拥有多个 Salesforce 组织且无法在单个主要组织上保持一致的客户,或拥有强大卓越中心 (CoE) 模式的企业。
- **优点**:
- 治理清晰,没有继承的组织复杂性。
- 跨多个业务线的集中控制。
- 根据合规需求灵活选择地区。
- 充当中立的“共享服务”组织,不与一个业务部门绑定。
- 为未来的 Data Cloud One 架构(具有多个配套组织的家庭组织)设置。
- **缺点**:
- 客户必须获得新 Salesforce 组织的许可证,才可以配置 Data 360。
- 通过 Data Cloud One 配套连接,将组织连接到 Data 360 需要额外的集成。
- 可能会增加管理开销(用户管理、安全性、身份)。
- 与现有生产组织中的配置相比,价值实现时间更慢。
**示例:**
一家跨国金融服务公司创建了一个专门的家庭组织来配置 Data 360。所有业务部门组织(零售、财富、商业银行)都通过 Data Cloud One 作为配套组织连接。
#### 决策条件
| 注意事项 | 作为主页组织的现有组织(首选默认值) | 作为主页组织的新组织(替代) |
|---|---|---|
| 简单性 | 构建现有用户和数据结构,以加快设置;默认情况下,Data 360 与 Home Org 集成。 | 需要新 Salesforce 组织的许可和设置,以及额外的管理开销来管理它。 |
| 价值实现时间 | 立即使用本地 CRM 数据。 | 需要更慢的坡道集成。 |
| 治理 | 继承现有组织的基本治理模型 - 现有用户和权限集。如果组织已经处于中心位置,这可能没问题。 | 清晰的治理模式;是 CoE 主导的模式的理想选择。 |
| 合规性 | 与现有组织区域绑定的驻留。 | 灵活选择独立于现有组织的区域。 |
| 性能 | 本地 CRM 查询的最佳性能。 | 取决于同伴组织的连通性,无论是与其他组织的同一区域还是跨区域。 |
| 未来可扩展性 | 如果与 Data Cloud One 配对,效果很好;如果选择错误组织,以后更难以转换。 | 使用 Data Cloud One 轻松扩展;专为中立设计。 |
| 成本 | 降低增量成本。 | 来自其他环境的较高开销。 |
#### Data Cloud One 的工作方式
| 功能 | 主页组织 | 同伴组织 |
|---|---|---|
| 连接 配置连接器、创建数据流、接收或联合数据 | ✅ | ❌ |
| 协调和统一 构建并运行数据转换和身份解析 | ✅ | ❌ |
| 使用数据空间和权限管理安全数据 | ✅ | ✅ |
| 细分和预测构建细分、见解和 Einstein Studio 模型 | ✅ | ✅ |
| 激活随处激活、数据操作 | ✅ | ✅ |
| 平台功能提示生成器、流、报表、丰富等 | ✅ | ✅ |
| 数据 360 支持功能 勘探中心、销售和 Service Cloud 功能、Agentforce 等 | ✅ | ✅ |
| 注意事项 | 多个独立数据 360 | 一个共享 Data 360 (Data Cloud One ) |
|---|---|---|
| 自治 | 每个组织或业务部门的高度自主权。 | 集中管理,每个组织的自主权更少。 |
| 合规性 | 在需要严格分离时非常有用(例如,区域法律)。 | 当驻留允许集中时,效果最佳。 |
| 成本 | 更高的许可和管理成本。 | 更具成本效益;一个许可证适用于多个组织。 |
| 治理 | 分散;每个组织的策略不同。 | 跨组织的集中、一致的策略。 |
| 数据仓 | 每个组织都有自己的视图;没有 Enterprise 360。 | 统一数据集,无重复。 |
| AI/Analytics | 仅限于每个组织的数据。 | 具有更好准确性的企业范围模型。 |
| 复杂性 | 要管理的实例更多,集成更多。 | 更简单的架构,更少的移动部件。 |
| 性能 | 最适合组织内用例。 | 同伴组织访问权限可能会引入延迟。 |
| 系数 | 优点 | 缺点 |
|---|---|---|
| 数据驻留 | 支持区域分离,同时支持协作。 | 不会消除管理多个 Data 360 的需要。 |
| 数据复制 | 零复制;没有对象的重复。 | 需要有意选择要包含在每个数据共享中的对象。 |
| 治理 | 共享是明确和有意的(对象级)。 | 没有标记或策略流;目标组织必须重新应用治理。 |
| 复杂性 | 支持选择性协作,无需集中。 | 需要管理多个 Data 360 和数据共享。 |
| AI/Analytics | 可能的区域 AI/分析;见解可在组织之间共享。 | 没有企业范围的 AI,除非有意共享数据。 |
| 平台功能 | 每个组织的 Data 360 支持的功能独立运行。 | 没有自动共享 — 如果不仔细设计,就有重复风险。 |
| 成本 | 可能会减少对 ETL 漏斗的需求。 | 仍会产生多个 Data 360 的成本。消耗数据查询和数据共享的信用。 |
| 注意事项 | Data Cloud One(多组织首选) | Data 360 组织之间的数据共享 |
|---|---|---|
| 单一真相来源 | ✅ 是 — 所有组织共享相同的 DC。 | ❌ 否 — 每个 Data 360 都有自己的数据模型。 |
| 合规性 | 仅在驻留允许集中时有效。 | 当居住法阻止集中时需要。 |
| 治理 | 集中、一致。 | 聚合;有意的对象级共享。 |
| 复杂性 | 移动零件更少,更简单。 | ore complex — 需要配置数据共享和多个 Data 360。 |
| AI/Analytics | 企业范围的 AI 模型。 | 区域 AI;见解可以有选择地共享。 |
| 平台功能 | 共享数据 360 意味着所有功能在家庭 + 伴侣中一致工作。 | 功能在每个 Data 360 中独立运行;共享必须明确。 |
| Salesforce Lightning 平台是一个人工智能驱动的综合平台,将员工、自主人工智能客服人员、公司数据和应用程序统一到一个可信的系统中,以提高生产率和客户体验。它通过连接 Customer 360 应用程序、Data Cloud 和 Slack 来实现端到端自动化,从而支持创建“代理企业”。 |
| 方法 | 描述 | 所需技能 | 许可证和限制 |
|---|---|---|---|
| Queueable Apex | 用于涉及长时间运行的数据库操作或外部 Web 服务标注的进程。Queueable Apex 提供作业 ID、支持非原始类型和作业链接等功能。 | 赞成代码 | 许可证的数量可以增加限制。 |
| Batch Apex | 通过划分记录集并将其处理为可管理的块,构建涉及数百万条记录的复杂、长时间运行的流程。 | 赞成代码 | 许可证的数量可以增加限制。 |
| 计划 Apex | 在 Cron 表达式定义的计划时间执行 Apex。虽然通过 Cron 表达式计划 Apex 的行为是一个异步过程,但底层代码会在作业开始时同步执行。 | 赞成代码 | 许可证的数量可以增加限制。 |
| Apex 继续标注 | 从同步事务上下文中运行的 Apex 方法执行标注。 | 赞成代码 | 没有 |
| 异步路径(记录触发的流) | 执行您想要自行运行的操作。避免在更新相关记录上的值时出现混合 DML 错误,该值不是触发流的记录的一部分。 | 低代码 | 许可证的数量和类型可以增加限制。 |
| 计划路径(提交流后) | 在触发事件后的动态计划时间执行,例如在创建、更新或删除记录时。 | 低代码 | 许可证的数量和类型可以增加限制。 |
| 计划流 | 在指定的时间以重复的频率(每天、每周或一次)在后台执行流,以便对一批记录执行操作。 | 低代码 | 许可证的数量和类型可以增加限制。 |
| 平台事件触发器 | 将 Salesforce 与外部系统松耦合,并在 Salesforce Platform 中的异步组件之间进行通信。 | 低代码 + 专业代码 | 高用量平台事件用例需要加载项许可证 |
| 变更数据捕获 | 提交数据库事务后,异步捕获和处理变更事件。 | 赞成代码 | 要扩展到基准分配以上,需要加载项许可证。 |
| 批量 API | 异步插入、更新、更新插入、查询或删除许多记录,稍后处理结果。 | 赞成代码 | 是有限制的。 |
| Lightning 操作 | 允许 Lightning 页面与服务器交互,而不强制用户完全刷新页面。 | 低代码 | 没有 |
| 所需技能 | 本指南概述的一些工具需要代码,而其他工具可以声明性地配置。在您考虑选项时,请考虑团队成员拥有的技能集。请记住,即使开发人员可用于您的初始实施(例如通过实施合作伙伴),您可能需要在未来修改您的解决方案。如果维护团队缺少开发人员,低代码选项可能更适合。 |
| 强制执行的平台限制的类型 | 确定适用于执行的限制类型。在设计解决方案时,请仔细考虑每天事务的数量和频率将如何计入所选方法的调控器限制。计算每天将发生的执行次数。确保计算值在与您选择的工具相关联的限制范围内。 |
| 延迟 | 确定处理结果在平台中的可用速度。对于某些方法,更改几乎会立即生效,而对于其他方法,更改可能是几分钟或几小时。 |
| 用例 | 描述 | 首选方法 | 理由 |
|---|---|---|---|
| 高性能批处理 | 任何必须高效处理数千或数百万条记录的自动化 | 批量 Apex | Batch Apex 提供了丰富的 API 来与平台交互,并提高原始速度。 |
| 数据清理作业 | 定期或按需运行的清理数据的作业。示例包括重复数据消除、地址验证或数据整合。 | 批量 Apex | Batch Apex 提供了丰富的 API 来与平台交互,并提高原始速度。 |
| 夜间汇总作业 | 在工作日结束时计算累计数据的作业。 | 批量 Apex | Batch Apex 提供了丰富的 API 来与平台交互,并提高原始速度。 |
| 记录触发的逻辑 | 执行逻辑以响应记录更新。 | 不同 | 请查看我们的相关决策指南 - 记录触发事件自动化。它包括异步用例的决策树,包括 Queueable Apex、Batch Apex、Scheduled Apex、Scheduled Flow、异步路径流和变更数据捕获。 |
| 通过对象图级联更新 | 允许用户的保存操作快速完成,延迟到其他对象的级联更新以异步运行。 | 可排队 Apex | Queueable Apex 具有强大的链接功能,支持逻辑将更新链分为一系列异步事务。 |
| 特定于记录的计划处理 | 未来特定于记录的动态日期的自动化(例如,结束日期前 3 天)。 | 具有计划路径的流 | 计划的路径为流提供了独特的优势,因为如果记录的数据发生变化,平台会自动处理这些路径的计划、取消和重新计划。 |
| 并行调用多个缓慢的外部服务 | 在同步执行期间,并行调用多个外部服务,以优化整体执行时间。 | Apex 继续标注 | 允许多个运行缓慢的标注并行运行,可以最大限度地减少完成工作的总时间。 |
| 记录从外部系统的数据迁移 | 将大量记录从外部系统移到 Salesforce Platform。一次性或定期计划的进程。 | 批量 API | 这是最高效、最方便的数据迁移方法。 |
| 在外部系统上执行其他逻辑 | 将平台上的事件通知给外部系统,然后允许该系统异步处理该事件的触发-忘记模式。 | 平台事件或变更数据捕获 | pub-sub 模型最适合这里,并允许外部系统在准备就绪时处理事件。有关此模式的更多详细信息,请参见事件驱动架构。 |
| 要考虑的区域 | 常见问题 |
|---|---|
| 现有工具和环境 | 是否有现有的 ESB 或 ETL 解决方案?涉及的数据是否有监管或合规要求?您尝试集成的系统位于何处(在云中或本地)? |
| 数据流(时间、预期用户体验、方向性) | 数据是否需要同步、异步移动,或者是否可以批量/计划?是否需要数据复制?什么系统应该是真理的来源?什么是数据源?什么是目标目的地?是否需要用户交互?用户是否需要查看集成的结果?异常处理(重试、通知、失败)的需求是什么?系统的紧密耦合程度如何? |
| 实施 | 对于非 Salesforce 系统,工作级别是多少?哪些团队负责交付集成?他们更喜欢使用哪些工具? |
| 可维护性 | 哪些团队需要维护集成?他们目前拥有哪些技能?他们未来需要哪些技能?随着时间的推移,总拥有成本是多少?使用低代码或专业代码工具进行测试、调试和故障排除的能力有多重要? |
| 数据量 | 集成涉及多少数据?您是否将使用大数据量 (LDV)?批量更改的频率如何?单一版本更新会产生什么影响?多久发生一次? |
| 限制 | 数据是否需要进行复杂的转换?数据是否需要从几个源系统合并?每个用户多久集成一次?总共有多少用户?您是否预先计划了批量数据加载(例如:新实例的初始数据加载)? |
| 从 Salesforce 到外部系统 | 从外部系统到 Salesforce | 执行 | 需要其他许可证 | |
|---|---|---|---|---|
| Apex 操作 | 可用 | 可用 | 服务器端 | 没有 |
| 变更数据捕获 | 可用 | 不可用 | 服务器端 | 否* |
| Custom Apex(REST和SOAP Web Services) | 可用 | 可用 | 服务器端 | 没有 |
| 外部服务 | 可用 | 不可用 | 服务器端 | 没有 |
| Heroku Connect | 可用 | 可用 | 服务器端 | 是 |
| Data 360 | 可用 | 可用 | 服务器端 | 是 |
| MuleSoft Anypoint | 可用 | 可用 | 服务器端 | 是 |
| 本地 Salesforce API | 不可用 | 可用 | 服务器端 | 没有 |
| Omniscript | 可用 | 可用 | 客户端*** | 是 |
| OmniStudio 集成程序 | 可用 | 可用 | 服务器端 | 是 |
| 出站消息 | 不理想 | 不可用 | 服务器端 | 没有 |
| 平台事件 | 可用 | 可用 | 服务器端 | 否** |
| Salesforce Connect/外部对象 | 可用 | 可用 | 服务器端 | 是 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| 变更数据捕获 | 当您需要将 Salesforce 中所做的记录级更改发布到外部系统并且不需要自定义负载时。 | 必填 | 异步 | 没有 | 没有 | 是 | 使用专业代码工具 | 是 | 是 | OAuth |
| 外部服务 | 当您使用 Flow、Apex、Einstein 机器人或 OmniStudio 来编排进程时,使用 OpenAPI 规范来描述外部系统 API。 | 不需要 | 同步 | 是 | 没有 | 是 | 使用专业代码工具 | 没有 | N/A | 命名凭据 |
| Heroku Connect | 当您希望通过双向同步来扩展您的数据,以便在 Heroku 上启用移动和其他应用程序,并且您想要将数据也复制到 Salesforce 中时。 | 必填 | 异步 | 是 | 是 | 没有 | 使用专业代码工具 | 是 | 是,通过 Shield Connect | OAuth |
| OmniStudio 集成程序 | 当您需要在没有用户交互的情况下转换数据,并通过在服务器而不是浏览器上处理来提高性能时。 | 必填 | 两者 | 是 | 是 | 是 | 声明性支持 | 是 | 是 | 命名凭据 |
| Salesforce Connect/外部对象 | 当您希望数据显示在 Salesforce UI 中,但希望数据存储在外部系统中时。数据不会复制到 Salesforce。 | 必填 | 同步 | 没有 | 是* | 是 | 使用专业代码工具和声明性跟踪器 | 没有 | N/A | 命名凭据 |
| *Odata 适配器在版本 4.01 之前受标注限制。有关更多详细信息,请参阅 Odata 标注率限制注意事项。** 测试和部署是指在较低的环境中构建并通过元数据 API、软件包或更改集部署到生产环境的能力。 | ||||||||||
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| Apex 操作 | 当您希望通过 Salesforce 流自动调出另一个系统时。开发人员可以编写流可以调用的 Apex 类,或者您可以从 AppExchange 下载预构建的解决方案。 | 不需要 | 两者 | 是 | 没有 | 是 | 使用专业代码工具 | 没有 | 是 | 多个 |
| 事件中继 | 当您需要从 Salesforce 发送平台事件并将数据捕获事件更改为 Amazon EventBridge 时。事件中继仅连接到 AWS Eventbridge | 没有 | 异步 | 是 | 没有 | 是 | 是 | 是 | 是 | 带 TLS 的 HTTP/1.1 |
| 出站消息 | 当工作流规则触发时,您需要通过 HTTP(S) 向指定的端点发送 SOAP 消息,并保证接收。 | 不需要 | 异步 | 没有 | 没有 | 是 | 声明性支持 | 是 | 是 | 双向 TLS |
| 平台事件 | 当您需要自定义的结构化负载来近乎实时地更改 Salesforce 或外部系统时。 | 不需要* | 异步 | 是 | 没有 | 是 | 使用专业代码工具 | 是 | 是 | OAuth |
| Salesforce Connect/外部对象(带有自定义 Apex 适配器) | 当您希望数据显示在 Salesforce UI 中,但希望数据存储在无法使用 Odata 或 GraphQL 等标准协议的外部系统中时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | N/A | 多个 |
| Data 360 | 当您想要在一个数据存储中协调来自不同来源的数据时,或者您想要将数据复制到其他 Salesforce 组织或其他外部系统。 | 必填 | 两者 | 是 | 是 | 是 | 是 | 是 | 是 | 多个 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| Custom Apex | 当您需要的功能多于低代码工具时。 | 不需要 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是* | 多个 |
| 外部服务 | 使用 OpenAPI 规范描述了从代码与外部系统 API 的集成。 | 不需要 | 同步 | 是 | 没有 | 是 | 使用专业代码工具 | 没有 | N/A | 多个 |
| MuleSoft Anypoint | 当您需要单个企业级统一解决方案来构建、编排和管理您的集成时;当您需要替换传统的点对点架构时;或者当您需要 API 管理支持时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是* | 多个 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署* | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| Heroku Connect | 当您希望通过双向同步来扩展您的数据,以便在 Heroku 上启用移动和其他应用程序,并且您想要将数据也复制到 Salesforce 中时。 | 必填 | 异步 | 是 | 是 | 没有 | 使用专业代码工具 | 是 | 是,通过 Shield Connect | OAuth |
| OmniStudio 集成程序 | 当您需要在没有用户交互的情况下从第三方来源导入和转换数据时。 | 必填 | 两者 | 是 | 是 | 是 | 声明性支持 | 没有 | 是 | 命名凭据 |
| Salesforce Connect/外部对象 | 当您希望数据显示在 Salesforce UI 中,但希望数据存储在可以使用 Odata 或 GraphQL 等标准协议的外部系统中时。 | 必填 | 同步 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | N/A | 多个 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| 平台事件 | 当您需要自定义的结构化负载来近乎实时地更改 Salesforce 或外部系统时。 | 不需要* | 异步 | 是 | 没有 | 是 | 使用专业代码工具 | 是 | 是 | OAuth |
| Salesforce Connect/外部对象(带有自定义 Apex 适配器) | 当您需要数据显示在 Salesforce UI 中,但希望数据存储在无法使用 Odata 2.0/4.0 协议的外部系统中时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | N/A | 多个 |
| Data 360 | 当您想要在一个数据存储中协调来自不同来源的数据,或者您想要从其他 Salesforce 组织或其他外部系统复制您的数据时。Data 360 还支持一些平台的虚拟化。 | 必填 | 两者 | 是 | 是 | 是 | 没有 | 是 | 是 | 多个 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署**** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| Custom Apex REST & SOAP Web Services | 当您需要比本地 API 端点提供的功能更多的功能时,例如跨对象处理或其他复杂逻辑。 | 不需要 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是*** | 多个 |
| MuleSoft Anypoint | 当您需要单个企业级统一解决方案来构建、编排和管理您的集成时;当您需要替换传统的点对点架构时;或者当您需要 API 管理支持时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是*** | 多个 |
| 本地 Salesforce API | 当您需要更多的控制或拥有专业代码技能来通过 REST API、SOAP API、批量 API 或 GraphQL API 或 gRPC 构建集成时。 | 不需要* | 两者 | 是****** | 是 | 是 | 使用专业代码工具 | 是** | 是*** | 多个 |
| 指导 | 成本 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | 实施工具 | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署* | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | 低代码 → 专业代码 | |
| Heroku Connect | 当您希望通过 Salesforce 组织之间的双向同步来扩展您的数据,并且还支持从在 Heroku 上运行的移动和其他应用程序访问数据时 | 必填 | 异步 | 是 | 是 | 没有 | 使用专业代码工具 | 是 | 是,通过 Shield Connect | OAuth | 低代码 |
| MuleSoft Anypoint | 当您需要单个企业级统一解决方案来构建、编排和管理您的集成时;当您需要替换传统的点对点架构时;或者当您需要 API 管理支持时 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是** | 多个 | Pro 代码 |
| 本地 Salesforce API | 当 Salesforce 或 Heroku Connect 不可选或您需要更复杂的处理时 | 不需要 | 两者 | 没有 | 是 | 是 | 使用专业代码工具 | 没有 | 是** | 多个 | Pro 代码 |
| 变更数据捕获 | 当您需要将 Salesforce 中所做的记录级更改发布到外部系统并且不需要自定义负载时。 | 必填 | 异步 | 没有 | 没有 | 是 | 使用专业代码工具 | 是 | 是 | OAuth | |
| 带跨组织适配器的 Salesforce Connect | 当您希望一个组织中的用户在不复制数据的情况下查看或编辑不同组织中的记录时 | 必填 | 异步 | 是 | 是 | 是 | 使用专业代码工具 | N/A | N/A | 多个 | 低代码 |
| Data 360 | 当您希望一个组织中的用户查看或编辑具有在 Data 360 中复制的数据的不同组织中的记录时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 是 | 是 | 多个 | 混合 |
| Salesforce 平台是一个 AI 驱动的综合平台,将员工、自主 AI 客服人员、公司数据和应用程序统一到一个可信的系统中,以提高生产率和客户体验。它通过连接 Customer 360 应用程序、Data Cloud 和 Slack 来实现端到端自动化,从而支持创建“代理企业”。 | |
![]() |
MuleSoft 是 Salesforce 领先的集成平台,使组织能够跨本地和云环境连接应用程序、数据和设备。MuleSoft 是一个平台,它为 IT 提供了平台来解锁系统之间的数据,开发可扩展的集成和自动化框架,并快速创建差异化的连接体验。 |
| 决策点 | 指导 |
|---|---|
| 近乎实时通知 | 事件驱动的架构模式(例如发布/订阅、扇出和流)通常在多个应用程序需要近乎实时地通知状态更改或记录更新的情况下工作良好。 |
| 并行处理 | 发布/订阅等模式往往适用于大量数据或高度复杂的消息需要在多个系统之间分配处理负载的场景。 |
| 高用量读取 | 传递的消息和队列模式通常用于组织遇到激增的情况,并且正在生成的消息量可能超出订阅者立即处理它们的能力。 |
| 高用量写入 | 流和队列模式在许多组织遇到消息生成数量激增的场景中效果良好。 |
| 将相同数据发送到不同系统 | 虽然对于需要将相同数据发送到多个系统的组织来说,发布/订阅往往是相当常见的解决方案,但它可以通过本文涵盖的大多数模式来解决。请确保详细查看它们,以找到最合适的。 |
| 频繁引入新系统或设备 | 发布/订阅、流和队列模式通常适用于总体情况变化不定的场景,并定期添加新的系统和设备。在这种情况下,新系统或设备只需要成为事件总线的订阅者或与队列相关联,就可以开始接收消息,而无需自定义点对点集成。 |
| IoT 设备 | 因为 IoT 设备通常提供频繁更新,并且在某些情况下也会生成大量消息,所以当将它们集成到 IT 环境中时,流和队列模式往往很好用。 |
| 离线移动设备和系统 | 对于需要在互联网接入质量低或根本不存在或在消息传递时可能离线的系统中工作的移动设备,他们将受益于队列模式,该模式使他们能够连接到他们的队列并在他们重新在线时检索任何相关的消息。 |
| 决策点 | 指导/要问的问题 |
|---|---|
| 业务需求 | 对于[何时使用事件驱动的架构](#何时使用事件驱动的架构)部分中描述的任何功能,是否有真正的业务需求? |
| 技术要求 | 您正在设计的集成是否明显适合不同的模式,例如数据虚拟化、批处理或请求/回复?换句话说,您是在尝试将方形钉子放入圆形孔中吗? |
| 需要人类等待响应的进程 | 任何涉及人类等待目标系统响应的集成都不适合事件驱动的架构,因为它们专为异步执行而设计,不能保证响应时间。在实施技术解决方案之前,请考虑这样的流程是否是您的组织的最佳选择。有关更多信息,请查看[设计良好 - 流程设计](/docs/architect/zh-cn/well-architected/guide/automated#流程设计)。 |
| 不经常更改源数据 | 如果源系统中的数据变化如此频繁,以至于定期更新足够,您很可能会通过使用[批处理模式](https://developer.salesforce.com/docs/atlas.en-us.integration_patterns_and_practices.meta/ integration_patterns_and_practices/integ_pat_batch_data_sync.htm)而不是事件驱动的模式来简化您的架构。 |
| 实施要求 | 解决方案涉及的大多数系统是否支持事件驱动的架构?将事件驱动的架构与不支持它们的系统一起使用(例如,升级、自定义或中间件)需要什么?满足这些要求需要付出什么程度的努力? |
| 消息结构稳定性 | 您的消息结构需要多久更改一次?哪些系统将受此更改的影响,修复过程是什么? |
| 组织治理 | 您是否拥有治理结构来确保所有相关方了解并能够权衡消息结构、触发器和其他与架构和流程相关的决策的变化? |
| 所需技能集 | 您的员工是否拥有事件驱动架构的经验,他们是否知道如何支持它们? |
| 模式 | 近乎实时 | 唯一消息副本 | 保证交货 | 减小消息大小 | 转换数据 |
|---|---|---|---|---|---|
| 发布/订阅 | ✓ | ✓ | ✓ | ||
| 扇出 | ✓ | ✓ | ✓ | ||
| 传递的消息 | ✓ | ✓ | ✓ | ✓ | |
| 流 | ✓ | ✓ | ✓ | ||
| 排队 | ✓ | ✓ | ✓ |
| 工具 | 描述 | 所需技能 | |
|---|---|---|---|
| MuleSoft | Anypoint 平台 | 使用 API 层实现数据集成的平台。 | 赞成代码 |
| Salesforce 发布/订阅连接器 | 发布/订阅 API 连接器,它为发布和订阅平台事件、实时事件监控事件和变更数据捕获事件提供了单一界面。 | 赞成代码 | |
| MuleSoft Anypoint JMS 连接器 | 连接器,允许向实施 Java 消息服务 (JMS) 规范的任何消息服务的队列和主题发送和接收消息。 | 赞成代码 | |
| MuleSoft Anypoint Apache Kafka 连接器 | 用于在 Apache Kafka 和企业应用程序和服务之间移动数据的连接器。 | 赞成代码 | |
| MuleSoft Anypoint Solace 连接器 | 使用 JCSMP Java SDK 与本地 API 集成的 Solace PubSub+ 事件经纪人连接器 | 赞成代码 | |
| MuleSoft Anypoint MQ 连接器 | 一种多租户云消息传递服务,使客户能够在他们的应用程序之间执行高级异步消息传递。 | 赞成代码 | |
| MuleSoft Anypoint MQTT 连接器 | 符合 MQTT(消息队列遥测传输)v3.x 协议的 MuleSoft 扩展。 | 赞成代码 | |
| MuleSoft Anypoint AMQP 连接器 | 一种连接器,可让您的应用程序使用符合 AMQP 0.9.1 标准的代理发布和使用消息。 | 赞成代码 | |
| MuleSoft Anypoint 事件驱动 (ASync) API | 与行业无关的语言,通过将事件驱动的 API 分为事件、渠道和传输层,支持发布它们。 | 赞成代码 | |
| MuleSoft Anypoint MQ | 多租户云消息传递服务,可让客户在应用程序之间执行高级异步消息传递。 | 赞成代码 | |
| MuleSoft Anypoint Data Streams | MuleSoft Anypoint 中可用于发布和订阅流数据的框架。 | 赞成代码 | |
| Salesforce 平台 | Apache Kafka on Heroku | Heroku 加载项,将 Apache Kafka 作为服务提供,并将平台完全集成到 Heroku 平台。 | 赞成代码 |
| 变更数据捕获 | 更改事件日志,发布对 Salesforce 记录的更改。更改包括创建新记录、更新现有记录、删除记录和取消删除记录。 | 低代码到专业代码 | |
| 出站消息 | 在 Salesforce 中更新字段值时,向外部端点发送 XML 消息的操作。 | 低代码 | |
| 平台事件 | 包含自定义事件数据的安全和可扩展的消息。 | 低代码到专业代码 | |
| 发布/订阅 API | 支持订阅平台事件、变更数据捕获事件和/或实时 Event Monitoring 事件的 API。 | 赞成代码 | |
| 事件中继 | 允许将平台事件和变更数据捕获事件从 Salesforce 发送到 Amazon EventBridge。请注意,事件中继仅连接到 AWS Eventbridge。 | 低代码 | |
#### 与发布/订阅模式相关的工具
| 事件流和行为 | 有效载荷注意事项 | ||||||
|---|---|---|---|---|---|---|---|
| 可用工具 | 所需技能 | 发布方式 | 订阅方式 | 重放期间 | 有效载荷结构 | 有效载荷限制 | |
| MuleSoft | Anypoint 平台 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 |
| Salesforce 发布/订阅连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint JMS 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint Apache Kafka 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint Solace 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQ 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQTT 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint AMQP 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint 事件驱动 (ASync) API | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQ | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| Salesforce 平台 | Apache Kafka on Heroku | 赞成代码 | API,Heroku Postgres 中的记录更改 | N/A | ⁇ 周 | 用户定义 | 用户定义 |
| 变更数据捕获 | 低代码到专业代码 | 记录更改 | Apex、API、Lightning Web 组件 (LWC) | 3 天 | 预定义 | 1 MB | |
| 出站消息* | 低代码 | 流和工作流规则 | N/A | 24 小时 | 用户定义 | 每条消息 100 条通知 | |
| 平台事件 | 低代码到专业代码 | API、Apex、流 | Apex、API、Flow、LWC | 3 天 | 用户定义 | 1 MB | |
| 发布/订阅 API | 赞成代码 | 发布/订阅 API 或 API、Apex、流 | 发布/订阅 API | 3 天 | 用户定义 | 1 MB | |
| 事件中继** | 低代码 | 平台事件、变更数据捕获 | API | 3 天 | 用户定义 | 1 MB | |
| *Salesforce 将继续在当前功能范围内支持出站消息,但不打算对此技术进一步投资。**事件中继仅连接到 AWS Eventbridge | |||||||
#### 与扇出模式相关的工具
| 事件流和行为 | 有效载荷注意事项 | ||||||
|---|---|---|---|---|---|---|---|
| 可用工具 | 所需技能 | 发布方式 | 订阅方式 | 重放期间 | 有效载荷结构 | 有效载荷限制 | |
| MuleSoft | MuleSoft Anypoint JMS 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 |
| Salesforce 发布/订阅连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint Apache Kafka 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint Solace 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQ 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQTT 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint AMQP 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQ | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| Salesforce 平台 | Apache Kafka on Heroku | 赞成代码 | API,Heroku Postgres 中的记录更改 | N/A | ⁇ 周 | 用户定义 | 用户定义 |
| 变更数据捕获 | 低代码到专业代码 | 记录更改 | Apex、API、Lightning Web 组件 (LWC) | 3 天 | 预定义 | 1 MB | |
| 平台事件 | 低代码到专业代码 | API、Apex、流 | Apex、API、Flow、LWC | 3 天 | 用户定义 | 1 MB | |
| 发布/订阅 API | 赞成代码 | 发布/订阅 API 或 Apex、API、流 | 发布/订阅 API | 3 天 | 用户定义 | 1 MB | |
| 事件中继* | 低代码 | 平台事件、变更数据捕获 | API | 3 天 | 用户定义 | 1 MB | |
| *事件中继仅将数据发送到 AWS Eventbridge | |||||||
#### 与传递的消息模式相关的工具
| 事件流和行为 | 有效载荷注意事项 | ||||||
|---|---|---|---|---|---|---|---|
| 可用工具 | 所需技能 | 发布方式 | 订阅方式 | 重放期间 | 有效载荷结构 | 有效载荷限制 | |
| MuleSoft | MuleSoft Anypoint Apache Kafka 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 |
| Salesforce 发布/订阅连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| Salesforce 平台 | Apache Kafka on Heroku | 赞成代码 | API,Heroku Postgres 中的记录更改 | N/A | ⁇ 周 | 用户定义 | 用户定义 |
| 变更数据捕获 | 低代码到专业代码 | 记录更改 | Apex、API、Lightning Web 组件 (LWC) | 3 天 | 预定义 | 1 MB | |
| 平台事件 | 低代码到专业代码 | API、Apex、流 | Apex、API、Flow、LWC | 3 天 | 用户定义 | 1 MB | |
| 发布/订阅 API | 赞成代码 | 发布/订阅 API 或 API、Apex 流 | 发布/订阅 API | 3 天 | 用户定义 | 1 MB | |
| 事件中继* | 低代码 | 平台事件、变更数据捕获 | API | 3 天 | 用户定义 | 1 MB | |
| *事件中继仅将数据发送到 AWS Eventbridge | |||||||
#### 与流模式相关的工具
| 事件流和行为 | 有效载荷注意事项 | ||||||
|---|---|---|---|---|---|---|---|
| 可用工具 | 所需技能 | 发布方式 | 订阅方式 | 重放期间 | 有效载荷结构 | 有效载荷限制 | |
| MuleSoft | MuleSoft Anypoint Data Streams | 赞成代码 | API | API | 已配置 | 用户定义 | 无 |
| Salesforce 发布/订阅连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint Apache Kafka 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| Salesforce 平台 | Apache Kafka on Heroku | 赞成代码 | API,Heroku Postgres 中的记录更改 | N/A | ⁇ 周 | 用户定义 | 用户定义 |
| 发布/订阅 API | 赞成代码 | 发布/订阅 API 或 API、Apex 流 | 发布/订阅 API | 3 天 | 用户定义 | 1 MB | |
#### 与队列模式相关的工具
| 事件流和行为 | 有效载荷注意事项 | ||||||
|---|---|---|---|---|---|---|---|
| 可用工具 | 所需技能 | 发布方式 | 订阅方式 | 重放期间 | 有效载荷结构 | 有效载荷限制 | |
| MuleSoft | MuleSoft Anypoint MQ | 赞成代码 | API | API | 已配置 | 用户定义 | 无 |
| Salesforce 发布/订阅连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint Apache Kafka 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQ 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint MQTT 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| MuleSoft Anypoint AMQP 连接器 | 赞成代码 | API | API | 已配置 | 用户定义 | 无 | |
| Salesforce 平台 | Apache Kafka on Heroku | 赞成代码 | API,Heroku Postgres 中的记录更改 | N/A | ⁇ 周 | 用户定义 | 用户定义 |
| 变更数据捕获 | 低代码到专业代码 | 记录更改 | Apex、API、Lightning Web 组件 (LWC) | 3 天 | 预定义 | 1 MB | |
| 平台事件 | 低代码到专业代码 | API、Apex、流 | Apex、API、Flow、LWC | 3 天 | 用户定义 | 1 MB | |
| 发布/订阅 API | 赞成代码 | 发布/订阅 API 或 API、Apex、流 | 发布/订阅 API | 3 天 | 用户定义 | 1 MB | |
| 事件中继* | 低代码 | 平台事件、变更数据捕获 | API | 3 天 | 用户定义 | 1 MB | |
| *事件中继仅将数据发送到 AWS Eventbridge | |||||||
现在,分解该图表,并开始构建各个部分。
## 使用计划流计划
计划流作为计划机制提供了几个优势:
- 计划流可以打包并部署为元数据。对于通过 Apex(或通过计划作业页面)计划的作业,情况并非如此。
- “等待”元素对于需要标注的框架至关重要。通过在流中使用它,在框架的可调用部分中不需要标注。
- 计划粒度满足要求:计划流的最小间隔是每天。如果您需要更高的频率(例如每小时),请重新考虑此要求的计划流。
配置计划流时的另一个注意事项是环境门控。在调用 Apex 操作前,添加评估`{!$Api.Enterprise_Server_URL_100}`变量的决策元素。这确保了作业仅在预期的环境中运行,例如 UAT 和生产。这种模式很重要,因为 Sandbox 在 SDLC 期间经常刷新或新创建,如果没有明确的环境检查,计划流可能会无意中在框架不打算运行的环境中执行。在决策元素中使用 `contains` 运算符会使设置适应未来的 Sandbox 创建或 URL 更改。
最后,考虑框架应如何捕获失败。在流调用任何操作时,请始终添加错误路径;例如,您可以将错误连接到 [Nebula Logger 的](https://www.nebulalogger.com/)“添加日志条目”操作。星云日志记录器将日志写入自定义对象,因此客户应了解日志数据会消耗组织存储 — 默认情况下,日志会在组织中存储 14 天,然后进行清理;此保留期可配置。星云日志记录器还使用平台事件发布日志,因此日志条目独立于主要数据处理事务保存 — 这将确保捕获失败,即使主要流或 Apex 操作回滚。在考虑添加日志记录框架时,客户应评估预期的日志量和保留要求。
以下是流的外观:
现在,让我们继续讨论 Apex 代码的第一部分,满足计划要求。
## 创建步骤界面
定义`Step`界面:
```java
public interface Step {
void execute();
void finalize();
String getName();
Boolean shouldRestart();
}
```
对于本文,为清楚起见,`step`界面显示为外部类。框架本身是灵活的 — 只要所有步骤类引用相同的界面,团队就可以使用他们喜欢的任何 Apex 打包模式来组织界面及其实施。
关于在我们的界面中定义的方法,有一些需要注意的事项:
- `execute` 目前虽然没有参数,但在我们传递`State`类(或接口)以在顺序重要时在步骤之间编排数据时有所改进。
- `getName` 可以返回`System.Type`值,而不是`String`。目标是为编排层提供一种在不公开其他属性的情况下记录步骤名称的方法。
以下是第一个具体实施,显示了这些组件如何相互配合。除了稍后的一个例外,我们建议使用可排队 Apex 在 Apex 中实施异步处理;批量 Apex 通常是不必要的(不鼓励使用`@future`方法)。Queueable Apex 启动迅速,通过 Apex 光标,与批处理 Apex 相比有许多优势。
### Apex 类似光标的实施
[Apex 光标](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_cursors.htm)为传统的批量 Apex 模型提供了现代替代方案。与批处理相似,光标实施可以分块获取记录(每批最多 2,000 条)。但是,光标允许在单个事务中进行多次提取,从而为大批量操作提供了更高的吞吐量。
当将光标作为此框架的一部分时,团队应该了解当前的测试和可模拟性限制。测试中的光标行为可能与生产行为不同,因此重要的是设计测试策略,避免依赖光标内部,而是在边界处验证编排逻辑。随着平台的发展,这些领域将继续改进,但核心指导仍然是:与批处理 Apex 相比,光标在许多用例中提供了更高的性能和更低的编排开销。
要定义系统提供的光标和您自己的代码之间的明确边界,我们建议在实施`Step`界面时创建类似光标的表示。考虑以下代码:
```java
public inherited sharing abstract class CursorStep implements Step {
private static final Integer MAX_CHUNK_SIZE = 2000;
protected Cursor cursor;
private Integer chunkSize = System.Limits.getLimitDMLRows();
private Integer position = 0;
protected abstract Cursor getCursor();
protected abstract void innerExecute(List