# architect 决策指南 (decision-guides) - Full Documentation # Data 360 互操作性 企业通常会将数据存储在 Salesforce 和其他外部数据湖中(例如,_Snowflake_、_Google BigQuery_、_数据块_、_Redshift_ 或 _Amazon S3_ 等对象存储)。对于希望充分利用数据价值来支持 AI 驱动的体验的公司来说,在多个系统中竖井式数据给他们带来了挑战。Salesforce _Data 360_ 是基础情报层,每个 Agentforce AI 客服人员都用它来在正确的时间访问正确的上下文。 致力于跨多个数据湖将数据集中在一起的架构师面临着关于如何最好地集成这些数据的关键架构决策。_Data 360_ 为数据集成提供了多个选项,每个选项都有各种利弊。 ## 指南概览 本指南提供了一个框架来评估在集成数据时哪种模式最适合您对延迟、成本、可扩展性、治理和复杂性的要求,帮助您选择何时使用数据接收、零复制数据联合或混合方法。该指南还将帮助您在不同数据摄取和数据联合方法之间进行选择,每种方法都满足不同的需求。 将外部数据湖库与 _Data 360_ 集成需要仔细考虑数据新鲜度、治理和漏斗效率之间的权衡。例如,使用 Zero Copy 数据联合实时查询可以最大限度地提高数据的新鲜度,但随着更多数据通过网络移动,可能会降低漏斗效率。对于大多数真实世界的实施,在多云湖滨别墅生态系统中结合引入和聚合是最佳路径。这种混合方法确保了可扩展的、受管的、可互操作的架构,该架构支持低延迟操作工作负载(例如,实时个性化和欺诈检测)和分析工作负载(例如,监管报告和历史趋势分析)。本指南帮助您确定如何使用适当的策略导航这些权衡。 ## 重要外卖 - **数据接收**将数据复制到 Salesforce _Data 360_ 中,并创建受管的规范数据模型。这是您需要时的理想选择: - **建立一个全面的 Customer 360。**这允许您将不同的源统一并转换为一个受信任的简档。 - **满足严格的监管合规要求。**这允许您创建可审计的集中副本,以便可以紧密控制数据访问和谱系。 - **Zero Copy Federation** 实时查询外部源,没有重复,实现了实时个性化、实时仪表板和快速源入门。这种方法提供了两个主要选项,但有一些权衡需要平衡: - **实时查询:**将其用于交互式分析和在外部数据平台(例如 _Snowflake_、_BigQuery_、_Redshift_ 或_数据块_)中实时显示的数据仪表板。通过将查询处理推送到源系统并仅返回必要的结果,这有助于避免缓慢且代价高昂的数据重复。这种方法针对新鲜度至关重要的不频繁或临时查询进行了优化。它适用于低_查询/秒 (QPS)_ 工作负载(查询成本在高 QPS 时可能会大幅飙升)。 - **缓存(加速查询):**将其用于不经常更改的频繁数据查询。加速查询会保持本地缓存,缓存会以可配置的时间间隔(15 分钟到 7 天)更新,这会减少源的重复命中。这种方法平衡了仪表板性能和成本、细分和 BI 工作负载,其中的结果稍微过时是可以接受的。这不适用于亚秒决策。 - **文件联合:**将其用于云数据湖中数据的大规模批处理和 AI 模型训练(例如 _S3_ 或 _ADLS_)。这种方法通过直接查询开放表格式的文件来避免缓慢、昂贵的接收,从而释放了庞大的 ETL 数据集和数据科学工作负载。 - **混合模型**将_统一简档_的摄取与新鲜感的融合在一起,后者支持全方位参与、Agentforce 驱动的操作和 AI/ML 培训。 ### 重要注意事项 - **采用混合架构。**通常,需要混合数据摄取和联合。 - 对规范数据模型和核心治理的关键数据使用_数据摄取_。 - 对所有其他数据联合使用 _Zero Copy_,以保持新鲜度,并最大限度地减少构建和维护数据接收漏斗的操作开销。 - **数据摄取频率很重要。**根据业务价值、延迟需求和操作复杂性选择频率。 - 对时间敏感的工作流(例如个性化、实时仪表板和 Agentforce 操作)使用_实时_。 - 对于中等紧急流程(例如,市场活动和运营报表),使用 _Near Real_。 - 对历史或低速数据集使用批处理。 - **将联盟模式与延迟和性能匹配。**选择最适合您的访问模式和新鲜度、性能和成本要求的选项。 - 在低延迟至关重要的领域,将_实时查询_用于操作仪表板和实时个性化。 - 当查询频繁且稍微过时的结果可以接受时,使用_缓存 (加速查询)_,这有助于平衡性能和成本。 - 将_文件联合_用于大规模、吞吐量大的分析或批处理工作量,这是历史数据集或时间不太敏感的数据集的理想选择。 - **将治理与数据驻留要求保持一致。** - 在集中治理至关重要时使用_摄取_。 - 当分散的治理可以接受时,使用_联盟_,同时在外部实施严格的治理。 - 对源级策略(例如,_行级安全性 (RLS)_ 和数据屏蔽)使用 _Zero Copy_。 - **优先考虑高价值工作流的接收。**有选择地将摄取应用于关键流程(例如,身份解析、监管报告和操作激活)。 - **成本和复杂性推动决策。**实时摄取可能既昂贵又复杂。这就是为什么架构师必须权衡加入、存储和转换数据的成本与直接通过 _Zero Copy_ 查询数据的成本。 选择正确的集成模式 — _数据接收_、_零复制_或_混合_方法 — 直接影响多云平台的延迟、治理、运营效率和成本。此决策决定了如何可靠、大规模地提供实时见解、AI 驱动的激活和个性化参与。 ## 产品比较 此表比较了 Salesforce _Data 360_ 中的_数据接收_和_零复制_模式,重点关注功能、权衡和好处以及企业用例和结果。将此用作参考,以设计平衡性能、成本和合规性的混合、多云数据平台。
| 模式类型 | 模式/工具 | 优点 | 注意事项 | 结果 |
|---|---|---|---|---|
| 数据摄取 |
实时:
|
|
|
Agentforce:
|
流:
|
|
|
Agentforce:
|
|
批次:
|
|
|
Agentforce:
|
|
| 零复制 |
实时查询:
|
|
|
Agentforce:
|
加速查询(缓存):
|
|
|
Agentforce:
|
|
文件联合:
|
|
|
Agentforce:
|
#### 数据摄取方法
_数据接收_方法可能会有所不同,这取决于您使用哪个连接器来接收数据。一些连接器提供多种接收方法,而其他连接器仅以批处理或流模式运行。有关 _Data 360_ 连接器和可用方法的完整列表,请查看 [Data 360:集成和连接器](https://help.salesforce.com/s/articleView?id=data.c360_a_sources_targets.htm&type=5)。
- **实时:**
- 使用_变更数据捕获_提供亚秒级摄取
- 适用于对时间敏感的工作流(例如,欺诈检测、个性化和操作仪表板)
- 该功能在 _Data 360_ 中推送转换和聚合,这有助于减少下游 I/O 并优化计算使用
- 支持使用增量 CDC,以最大限度地减少数据重组
- **流:**
- 每 1-3 分钟提供少量摄取
- 平衡新鲜度和成本
- 适用于市场活动编排、近乎实时的参与和运营报告
- 支持使用微批处理控制 I/O 峰值
- 在源位置聚合数据(如果可能),以减少传输量并优化存储
- **批次(计划加载):**
- 提供大型数据集的定期摄取(例如,每小时、每天和每周)
- 为历史数据集、监管报告和合规用例提供成本效率和可靠性
- 确保计算位置与源存储位于同一区域,以提高性能并优化成本
#### 架构师行动手册
- **数据引入用例:**
- **生成 Customer 360 统一简档。**为客户身份和属性构建单一的真实来源。
- **维护监管合规数据集。**对敏感数据强制执行治理、谱系和可审计性。
- **集中市场活动编排。**确保市场营销、销售和服务都从一致、可信的数据集运行。
- **设计实践:**
- 适应历史或低延迟容忍需求的批量接收(例如,归档报告或定期快照)。
- 使用 CDC 或流 API 保持操作和个性化工作流的新鲜度,以确保近乎实时的更新。
- 通过应用增量负载来优化成本和效率(而不是重新加载整个数据集),从而控制存储和计算增长。
- 将接收漏斗与计算位置和增量处理保持一致,以减少网络 I/O。
- 在 _Data 360_ 中应用转换,避免不必要地移动原始数据。
- **成本注意事项:**
- **实时摄取**的计算和漏斗成本最高,这可能是高价值、时效性强的工作流(例如个性化、操作仪表板或 Agentforce 驱动的操作)的理由。
- **流摄取**的计算和存储成本适中,可能适合容忍轻微延迟的频繁更新(例如,市场活动编排或运营报告)。
- **批量接收**具有较低的计算成本和可预测的存储,适用于历史数据集或低频更新。使用特定连接器从 Salesforce 组织免费接收批处理数据。
- **刷新模式**允许您选择_增量刷新_模式,这降低了总摄取和计算成本。在 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_ 对外部系统进行实时查询,无需数据重复,以实现对大型或临时数据集的灵活性、新鲜性和可扩展访问。它适用于实时仪表板、探索性分析、AI/ML 模型训练和直接通过 Salesforce _Data 360_ 进行实时客户参与。
#### 零复制方法
当使用 _Zero Copy_ 时,架构师必须在三种可用的数据联合方法之间进行选择,其中每种方法都在新鲜度、性能和成本之间进行权衡。
- **实时查询**
- 直接针对外部系统(例如 _Snowflake_、_Google BigQuery_、_Redshift_、_数据块_等)运行查询,没有数据重复。
- 最大限度地减少通过网络的数据移动,并减少 Salesforce _Data 360_ 计算的 I/O,这在可以推送谓词和聚合时是最佳的。
- 适用于实时见解和低延迟操作仪表板。
- 取决于外部系统性能。
- **缓存(加速查询)**
- 在 Salesforce _Data 360_ 中临时存储聚合数据的缓存副本。
- 通过可配置的持续时间(几分钟到几天),减少频繁访问的数据集的重复查询成本和延迟。
- 数据不会永久复制或完全管理,因此新鲜度通过源的定期刷新进行管理。
- _增量刷新_仅支持更新插入。已删除的记录不会从缓存中删除。
- 定期执行完全刷新,以确保缓存与源保持同步。
- **注意:**_Snowflake_ 连接器支持_卸载_功能,该功能通过使用 Snowflake 发起的暂存存储桶来提高加速率。默认情况下启用,但可以通过编辑连接禁用。
- **文件联合**
- 提供对对象存储中大规模数据集的直接只读访问(例如,带 _Iceberg_ 的 _S3_ 和 _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_ 中的用户和实体映射到与外部系统中的身份相对应的唯一的集中企业标识符。
- **调整安全策略。**确保联盟系统中的 RLS 和屏蔽策略基于映射的身份应用。这保留了查询外部数据时的合规性。
- **标准化身份模式。**在所有数据源中保持一致的身份属性(电子邮件、用户 ID、客户 ID 等),以避免不匹配和访问违规。
- **成本注意事项**
- **实时查询:**在按查询付费模型中,外部湖滨别墅计算会产生成本,这可能会导致高 QPS 峰值。这适用于值大于成本可变性的新颖性关键用例。
- **加速查询(缓存):**此方法通过减少对源系统的点击率来降低查询成本(与_实时查询相比 )_ ; 但是,它增加了填充和刷新缓存的批处理数据接收成本。这适用于频繁访问的数据集。
- **文件联合:**这是对象存储中最便宜的存储选项;但是,查询成本取决于文件大小、分区和修剪。这适用于 PB 级别的历史数据或批量数据。
#### 零复制方法决策条件
| 决策点 | 实时查询 | 缓存(加速查询) | 文件联合 |
| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **数据源位置** | 外部数据湖别墅(例如,_Snowflake_、_Google BigQuery_、_Redshift_ 和_数据块_) | 外部数据湖别墅(例如,_Snowflake_、_Google BigQuery_、_Redshift_ 和_数据块_) | 对象存储或云数据湖(例如 _S3_、_ADLS_ 和 _GCS_),它们通常使用 _Iceberg_ 等开放表格式。 |
| **目的/用例** | 适用于交互式分析和实时仪表板。适用于实时个性化和动态工作流。 | 适用于查询频繁,但结果稍显过时的情况。适用于 BI 仪表板和细分。 | 适用于大规模批处理和 AI/ML 模型训练。适用于历史分析和 PB 级报表。 |
| **新鲜度/延迟** | 提供最大新鲜度 直接实时运行查询。当源系统针对具有有效谓词下推的低延迟查询进行优化时,支持亚秒决策。 | 当稍微过时的结果可以接受时使用。新鲜度取决于缓存间隔,缓存间隔可从 15 分钟到 7 天进行配置。 | 适用于批量繁重、吞吐量密集型作业。不适合实时仪表板。 |
| **访问模式** | 适用于新鲜度至关重要且查询量较低的不频繁或临时查询。在高 QPS 时,成本会显著飙升,因此在查询频率高时评估缓存(加速查询)非常重要。 | 适用于高频读取场景。提高频繁访问模式的性能。 | 提供*只读*访问权限。适用于没有摄取的 PB 级数据集。 |
| **性能驱动因素** | 高度依赖于外部源系统性能。适用于谓词和聚合可以推送到源时。 | 与重复的实时查询相比,减少延迟。性能取决于缓存管理和间隔。 | 性能在很大程度上取决于对象格式、分区和外部系统吞吐量。使用分区域列格式 (Parquet/ORC)。 |
| **所涉费用** | 这是按查询付费的模式,因此外部湖滨别墅计算会产生成本。对于不频繁的查询,这非常经济高效,但支出可能会随着 QPS 数量的增加而激增。 | 成本低于重复的实时查询。它减少了重复查询外部源的需要,但增加了缓存存储和刷新开销。 | 这是最便宜的存储选项。对于同一地区、同一云的 AWS 设置(例如,US-East-1 中的 _S3_,其 _Data Cloud_ 租户也在 US-East-1),访问的行不会消耗信用。跨区域或跨云配置(例如,_Azure_、_GCS_ 或不同 _AWS_ 区域)会对访问的行产生信用消耗。查询成本也取决于文件大小、分区和谓词下拉优化。 |
| **关键注意事项** | 避免不必要地扫描大量数据的未筛选查询。 | 此方法需要缓存管理。不适合亚秒决策。 | 查询性能在很大程度上取决于通过分区和谓词下推进行优化。 |
### 混合方法
混合架构使架构师能够在 _Data 360_ 中锚定关键数据集以实现集中治理,同时利用联合查询实现新鲜度、减少重复以及对大型外部数据集的可扩展访问。这种方法平衡了 I/O、计算位置、成本和合规性要求。
#### 混合用例
通过将数据接收和零复制结合起来,使用混合方法实现平衡的治理、新鲜度和运营效率,以提供实时、可操作的见解。将摄取用于需要可追溯性、RLS 和屏蔽的高价值受监管数据集,并将联合用于新鲜度和性能至关重要的短暂或高用量数据集。
#### 架构师行动手册
- **用例**
- **全方位参与:**将历史客户数据与实时行为相结合,以提供一致的上下文感知体验。
- **AI/ML 漏斗:**在策划的规范数据集上训练模型,同时使用来自外部源的原始或实时信号来丰富它们。
- **合规性和灵活性混合需求:**对敏感数据应用严格的治理,并对操作灵活性进行联合。
- **行业场景**
- **零售:**将_摄取_用于身份解析和简档统一,并将_联合_用于实时优惠和个性化。
- **医疗保健:**通过_摄取_维护黄金级患者记录,同时使用 IoT 设备流和传感器数据_的联盟_来获取即时上下文。
- **金融服务:**在使用_联盟_进行外部欺诈检测和风险监控查询时,将受监管的数据引入合规监管的湖中。
- **设计实践**
- **带摄取的锚治理:**将高价值或受监管的数据引入规范模型,以确保 Trust 和合规性。
- **使用新鲜度联盟:**允许外部湖泊别墅提供实时或大规模数据访问,而不会重复。
- **平衡成本与性能:**简档工作量,以确定何时使用_摄取_与_联合_,这将最大限度地减少不必要的存储和查询成本。
- **应用分层治理:**在利用联合系统安全控制(例如,RLS 和屏蔽)的同时,对接收的数据实施集中治理。
- **注意:**在设计混合漏斗时,重要的是要确保增量接收历史数据集,并将聚合或筛选器推送到聚合源,以优化 I/O 和计算使用。
- **成本注意事项**
- 在需要新鲜度时,将合规性或关键数据的_摄取_与_联盟_结合起来,权衡总成本和性能。
- 在混合_摄取_和_联合_时,考虑 I/O 和计算分配。要降低对源系统的重复查询的计算成本,请对高读取、频繁访问的联合数据集使用缓存 (加速查询)。
- 使用此规则来指导接收与联合决策:当数据被频繁访问但不经常更改时,_加速查询_通常更具成本效益。但是,当数据频繁更改时(相对于访问频率),_实时查询_或_摄取_更合适。以下是一些成本示例:
- **加速成功:**从 1 万个记录构建并每天更新 10 万个更改的仪表板每天查看 20 次。对于_实时查询_,_加速_成本大约相当于每月 ~600 个信用额,而实际成本大约相当于每月 4,200 个信用额。
- **实时查询成功:**使用每 30 分钟更改一次的数据每天发布 20 次的细分。在此刷新频率下,_实时查询_的_加速_成本约为每月 4200 个信用,而实际成本约为每月 28800 个信用。
## 用例决策指南
让我们仔细看看一些常见的原型,它们说明了如何应用这个逻辑。
- **"单一真理源"原型:集中和治理**
- **场景:**您需要为整个全球企业建立合规、统一的 _Customer 360_ 简档。数据来自十几个不同的系统,必须遵守严格的 _GDPR_ 和 _CCPA_ 法规,并且将成为所有营销和服务互动的真实来源。
- **推荐模式:****数据摄取。**此处的优先级是治理、Trust和控制。将数据引入 _Data 360_ 是创建与源系统绝缘的完全可审计的规范简档的唯一方法。
- **“实时见解”原型:分析而不移动**
- **场景:**数据科学团队需要对 _Snowflake_ 中不断更新的大规模事务表运行探索性查询。同时,您的执行团队需要由相同数据支持的实时 _BI_ 仪表板。每天移动 PB 级数据既缓慢又昂贵。
- **推荐模式:****零复制联盟。**这里的优先级是大规模的速度、灵活性和成本效益。_Zero Copy_ 允许您利用现有数据仓库的功能进行实时查询,而不会造成数据重复的开销和延迟。
- **"混合智能"原型:管理核心,聚合边缘**
- **场景:**您想要使用来自数据湖的实时行为信号(例如,网站点击)来丰富您的受管、接收的客户简档。您需要核心简档的稳定性,但实时数据的即时性支持即时个性化。
- **推荐模式:****混合方法。**使用_数据接收_为客户数据创建稳定的受管核心。使用 _Zero Copy_ 将易失性的实时“边缘”数据联合在一起,然后在查询时将它们连接在一起,以获得完整的最新视图。
## 前进之路
企业数据策略不再专注于选择单一的集成模式,而是在可交互的数据生态系统中构建可控的灵活性。正确的方法将每个源系统映射到最适合其新鲜度、治理、成本和访问要求的模式:
- 将关键任务、受监管的数据集引入 Salesforce _Data Cloud_,以实现合规性、身份解析和运营工作流。
- 通过 _Zero Copy_ 聚合数据,进行实时、探索性和 AI 驱动的分析,而不会重复存储。
- 应用_缓存(加速查询)_,以减少查询频率高和数据更改频率低时的源系统负载和信用消耗
_Hyperforce_上的Salesforce _Data 360_提供多区域弹性和可扩展性。它开放的湖滨别墅与 _Iceberg_ 表实现了计算分离以及与 _Snowflake_、_Databricks_ 和 _S3 Iceberg_ 等平台的互操作性。
随着数据生态系统的发展,我们必须不断平衡新鲜度、成本、性能和合规性,以保持架构灵活性。这就是为什么通过联合访问统一接收的受管数据来适应未来非常重要。这支持跨云、地区和业务域的实时智能、AI 激活和企业级个性化。
请记住,一刀切的解决方案不适合大多数企业。最佳策略将正确的模式映射到正确的业务驱动因素。
## 关于作者
**Yugandhar Bora** 是 Salesforce 的软件工程架构师,专门从事数据和智能应用程序平台中的数据架构。他领导_企业架构审核委员会 (EARB)_ 计划,重点关注数据治理和统一数据模型,同时也致力于自动化平台配置解决方案。
**Jan Fernando** 是 Salesforce 首席架构师办公_室 (OCA)_ 的首席架构师,于 2012 年加入 Salesforce。在加入 OCA 之前,他曾在 _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 就绪的数据架构。
# Data 360 配置
Salesforce Data 360 是基于 [Hyperforce](https://www.salesforce.com/platform/public-cloud-infrastructure/) 构建的数据平台,它将 Salesforce 和外部数据统一到每个客户或客户的清晰、完整和可信的 360 度视图中。
由于并购、区域运营、功能分离或历史原因,企业通常运营多个 Salesforce 组织。架构师需要做出一些关于 Data 360 的决策,所有这些都会影响治理、合规性、成本、延迟以及组织扩展 AI 和跨组织平台功能的能力。
## 指南概览
本指南为使用 Data 360 做出配置决策提供了一个框架。这些决策包括:
- 选择单个家庭组织与多组织配置
- 配置多个独立的 Data 360 实例
- 使用 Data Cloud One 将组织统一到一个实例下
- 使用 Data 360 组织之间数据共享的独立 Data 360 实例之间协作
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 为中心的未来奠定了坚实的基础。
## 范围内的产品
![]() |
Salesforce Data 360 是 Salesforce 的实时、超大规模数据平台,可将来自任何来源(CRM、Web、移动或外部数据湖)的数据协调和统一到单个可操作的客户简档中。作为 Customer 360 平台的一个关键组成部分,它支持 AI、分析和销售、服务和市场营销的个性化体验。 |
| 注意事项 | 为何如此重要 | 示例场景 |
|---|---|---|
| 数据驻留与合规 | 确定数据的存储和处理位置。监管规则可能需要特定区域或多个实例。 | 一家全球银行在位于法兰克福的 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 漏斗。 |
| 零复制数据源区域 | 一些连接器的跨区域访问要求可能会限制 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 360 租户都会增加成本。整合为更少的实例可以优化支出。 | 医疗保健提供商通过采用 Data Cloud One 而不是多个独立的 Data 360 实例来降低许可成本。 |
| 未来可扩展性 | 今天的配置选择为增长奠定了基础。 | SaaS 公司从单个 Data 360 实例开始,但计划在通过 Salesforce 组织收购子公司时扩展到 Data Cloud One。 |
| 企业级 AI 就绪 | AI 功能和 Agentforce 需要在每个组织中连接 Data 360 租户。配置决策会影响 AI 模型在整个企业中的训练和激活方式。 | 一家金融服务公司在 Data Cloud One 中统一数据,因此其 Einstein AI 模型可以访问企业范围内的客户数据。 |
**备选案文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 默认与主页组织集成。 |
需要许可和设置新的 Salesforce 组织,以及额外的管理开销来管理它 |
| 价值实现时间 | 立即使用本地 CRM 数据 | 需要更慢的坡道和集成。 |
| 治理 | 继承现有组织的基本治理模式 — 现有用户和权限集(如果组织已经处于中心位置,则可接受)。 | 治理的清白。是 COE 主导模型的理想选择。 |
| 合规性 | 与现有组织区域绑定的驻留 | 灵活选择独立于现有组织的区域 |
| 性能 | 本地 CRM 查询的最佳性能 | 取决于伴随组织的连通性,无论是与其他组织相同的区域还是跨区域 |
| 未来可扩展性 | 如果与 Data Cloud One 配对,效果良好。如果选择了错误的组织,以后很难轮班 | 使用 Data Cloud One 轻松扩展。设计中立。 |
| 成本 | 降低增量成本 | 来自其他环境的较高开销 |
**Data Cloud One 的工作方式**
- **数据接收和统一(家庭组织)**
- 所有数据接收配置(Salesforce CRM、外部源、流、批处理)仅从家庭组织进行。
- 与家庭组织绑定的 Data 360 租户执行身份解析、协调、建模,并将其统一到受信客户简档中。
- Data 360 管理、治理策略、标记和屏蔽从家庭组织集中应用。
- **数据空间架构**
- 从主组织中,数据被组织成数据空间,它们充当数据、元数据和流程的逻辑容器。
- 企业可以为品牌、地区或业务线创建数据空间。
- 数据空间共享:从主组织中,特定数据空间有选择地与伴随组织共享。这将确保只有相关数据(和相关元数据)流向正确的组织。
- **元数据共享**
同伴组织从主组织接收元数据定义,包括数据模型对象 (DMO)、统一简档模式、计算见解、细分[等](https://help.salesforce.com/s/articleView?id=data.c360_a_companion_org_data_cloud_features.htm&type=5)。这些资产会本地显示在伴随组织中,如同本地资产,但会链接到本地组织。
- **家庭组织与同伴组织中的功能**
家庭组织和伴侣组织之间的功能访问权限不同。配套组织无法接收或统一数据,需要依赖家庭组织进行接收、建模和统一。同伴组织可以访问 Data 360 数据,以支持 Data 360 支持的平台功能,他们可以在共享的可信数据上创建本地见解、细分和流。在未来的愿景中,他们还可以访问激活功能。
| 功能 | 主页组织 | 同伴组织 |
|---|---|---|
| 连接 配置连接器、创建数据流、接收或联合数据 | ✅ | ❌ |
| 协调和统一构建并运行数据转换和身份解析 | ✅ | ❌ |
| 使用数据空间和权限管理安全数据 | ✅ | ✅ |
| 细分和预测构建细分、见解并创建 Einstein Studio 模型 | ✅ | ✅ |
| 激活随处激活、数据操作 | ✅ | ✅ |
| 平台功能:提示生成器、流、报表、丰富、[及更多](https://help.salesforce.com/s/articleView?id=data.c360_a_companion_org_data_cloud_features.htm&type=5) | ✅ | ✅ |
| Data 360 支持的功能:潜在客户中心、Sales 和 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 组织之间的数据共享 |
|---|---|---|
| 单一真相来源 | 是 — 所有组织共享数据模型。 | 否 — 每个 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) | 可用 | 可用 | 服务器端 | 没有 |
| 外部服务 | 可用 | 不可用 | 服务器端 | 没有 |
| 赫羅庫連絡 | 可用 | 可用 | 服务器端 | 是 |
| 資料360 | 可用 | 可用 | 服务器端 | 是 |
| MuleSoft Anypoint | 可用 | 可用 | 服务器端 | 是 |
| 本地 Salesforce API | 不可用 | 可用 | 服务器端 | 没有 |
| 全名 | 可用 | 可用 | 客户端*** | 是 |
| OmniStudio 集成程序 | 可用 | 可用 | 服务器端 | 是 |
| 出站消息 | 不理想 | 不可用 | 服务器端 | 没有 |
| 平台事件 | 可用 | 可用 | 服务器端 | 否** |
| Salesforce Connect/外部对象 | 可用 | 可用 | 服务器端 | 是 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| 变更数据捕获 | 当您需要将 Salesforce 中所做的记录级更改发布到外部系统并且不需要自定义负载时。 | 必填 | 异步 | 没有 | 没有 | 是 | 使用专业代码工具 | 是 | 是 | OAuth |
| 外部服务 | 当您使用 Flow、Apex、Einstein 机器人或 OmniStudio 来编排进程时,使用 OpenAPI 规范来描述外部系统 API。 | 不需要 | 同步 | 是 | 没有 | 是 | 使用专业代码工具 | 没有 | 不适用 | 命名凭据 |
| 赫羅庫連絡 | 当您希望通过双向同步来扩展您的数据,以便在 Heroku 上启用移动和其他应用程序,并且您想要将数据也复制到 Salesforce 中时。 | 必填 | 异步 | 是 | 是 | 没有 | 使用专业代码工具 | 是 | 是,通过 Shield Connect | OAuth |
| OmniStudio 集成程序 | 当您需要在没有用户交互的情况下转换数据,并通过在服务器而不是浏览器上处理来提高性能时。 | 必填 | 两者 | 是 | 是 | 是 | 声明性支持 | 是 | 是 | 命名凭据 |
| Salesforce Connect/外部对象 | 当您希望数据显示在 Salesforce UI 中,但希望数据存储在外部系统中时。数据不会复制到 Salesforce。 | 必填 | 同步 | 没有 | 是* | 是 | 使用专业代码工具和声明性跟踪器 | 没有 | 不适用 | 命名凭据 |
| *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 等标准协议的外部系统中时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 不适用 | 多个 |
| 資料360 | 当您想要在一个数据存储中协调来自不同来源的数据时,或者您想要将数据复制到其他 Salesforce 组织或其他外部系统。 | 必填 | 两者 | 是 | 是 | 是 | 是 | 是 | 是 | 多个 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署** | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| Custom Apex | 当您需要的功能多于低代码工具时。 | 不需要 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是* | 多个 |
| 外部服务 | 使用 OpenAPI 规范描述了从代码与外部系统 API 的集成。 | 不需要 | 同步 | 是 | 没有 | 是 | 使用专业代码工具 | 没有 | 不适用 | 多个 |
| MuleSoft Anypoint | 当您需要单个企业级统一解决方案来构建、编排和管理您的集成时;当您需要替换传统的点对点架构时;或者当您需要 API 管理支持时。 | 必填 | 两者 | 是 | 是 | 是 | 使用专业代码工具 | 没有 | 是* | 多个 |
| 指导 | 许可 | 时间 | 体积和规模 | 交付和维护 | 隐私和安全 | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| 何时使用 | 其他许可证 | 同步(请求/回复)或异步(火灾/忘记) | 多对象支持 | LDV/批量 | 测试和部署* | 调试 | 内置错误处理/重试行为 | 可与静态加密的数据一起使用 | 身份验证协议 | |
| 赫羅庫連絡 | 当您希望通过双向同步来扩展您的数据,以便在 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 | 当您希望一个组织中的用户在不复制数据的情况下查看或编辑不同组织中的记录时 | 必填 | 异步 | 是 | 是 | 是 | 使用专业代码工具 | 不适用 | 不适用 | 多个 | 低代码 |
| 資料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/ operational-excellence.html)。 |
| 不经常更改源数据 | 如果源系统中的数据变化如此频繁,以至于定期更新足够,您很可能会通过使用[批处理模式](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 | |||||||
| 动态表单 | Salesforce Lightning 应用程序生成器中的动态表单将整体记录详细信息组件分解为单独的可配置字段和部分。此功能允许管理员通过在任何地方放置字段来创建灵活的高性能页面,并使用可见性规则根据用户简档、设备或数据显示或隐藏组件,这有助于减少页面混乱。 |
|---|---|
| 屏幕流 | Salesforce 屏幕流是 Flow Builder 中的一个交互式自动化工具,需要用户输入才能完成自定义的逐步业务流程。与自动后台流不同,屏幕流提供类似向导的用户界面,以通过 Lightning 页面、按钮或自定义应用程序收集数据、显示信息或执行操作,而无需编写代码。 |
| 奧姆尼斯圖 | Salesforce Omnistudio 是一款低代码工具套件,旨在快速构建特定于行业的引导式数字体验和复杂的业务流程。它使开发人员能够使用拖放组件(例如 Flexcard 和 Omniscript)创建像素级完美用户界面(例如,引导式工作流和动态仪表板)。使用 Omnistudio,您可以声明性地创建 LWC。 |
| Lightning Web组件 | Salesforce Lightning Web 组件是轻量级的自定义 HTML 元素,使用 HTML、CSS 和现代 JavaScript 构建,设计用于在浏览器中本地运行,以获得卓越的 Salesforce UI 性能。它们允许开发人员创建与 Aura 组件共存的自定义用户界面,这通过行业标准和详细的组件生态系统增加了开发。 |
| 配置 | 其他许可证要求 | |
|---|---|---|
| 动态表单 | 低代码 | 无 |
| 屏幕流 | 低代码 | 无 |
| 奧姆尼斯圖 | 低代码 + 专业代码 | 行业软件包 |
| 屏幕流加上 Lightning Web 组件 | 低代码 + 专业代码 | 无 |
| Lightning Web组件 | Pro 代码 | 无 |
| 决策点 | 指导 |
|---|---|
| 运行时用例类别 | |
| 表单范围和导航 | 确定表单上的所有字段是否逻辑上适合一个屏幕,或者用户是否需要能够在多个屏幕之间导航。 |
| 位置 | 确定您想要嵌入表单的位置,范围从 Salesforce 应用程序内部、移动应用程序到外部网站。 |
| 控制器 | 确定用户与您的表单交互时必须在幕后执行的操作或逻辑,包括数据转换和与外部系统的集成。 |
| 验证 | 确定您是否有超出 Salesforce 提供的标准系统级验证的任何其他输入验证要求。 |
| 交互设计 | 确定应在表单中触发动态响应的交互或条件类型。 |
| 样式 | 确定所需的样式和 CSS 要求的复杂程度。 |
| 布局 | 确定表格的布局要求(例如,所需的列数、制表符和折叠符)以及显示重复数据块的能力。 |
| 翻译 | 确定是否必须为其他语言本地化表单。 |
| 非功能注意事项 | |
| 安全性 | 确定您的表单是否应该在执行某些操作之前检查用户的访问权限,您是否想要控制谁可以访问表单,以及您是否想要控制表单可以嵌入的位置。 |
| 对象影响 | 确定您的表单是针对单个对象还是多个对象进行操作。 |
| UI 测试自动化 | 确定 DevOps 流程是否需要表单进行自动单元测试或自动端到端测试。 |
| 度量 | 确定您想要如何跟踪表格的使用情况,包括页面视图、在表格上花费的时间、完成率和成功率。 |
| 打包和部署 | 确定在构建表单后您想要如何分发或部署表单。 |
| 单屏幕 | 多屏幕表单 | 进度指示器 | 在步骤/屏幕之间跳转导航 | |
|---|---|---|---|---|
| 动态表单 | 可用 | 不可用 | 可用 | 不可用 |
| 屏幕流 | 可用 | 可用 | 可用 | 不可用 |
| 奧姆尼斯圖 | 可用 | 可用 | 可用 | 可用 |
| 屏幕流 + LWC | 可用 | 可用 | 可用 | 可用 |
| LWC | 可用 | 不理想 | 不理想 | 不理想 |
| Lightning 记录页面 | Lightning 主页或应用程序页面 | Aura Experience Cloud 站点 | LWR Experience Cloud 站点 | 嵌入式 Snap-In | 实用程序栏 | 特定于对象的操作 | 全局操作 | Salesforce 移动应用程序* | Field Service Mobile | Mobile SDK | 外部站点和应用程序 | 自定义 LWC | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 动态表单 | 可用 | 不可用 | 不可用 | 不可用 | 不可用 | 不可用 | 不可用 | 不可用 | 可用 | 不可用 | 不可用 | 不可用 | 不可用 |
| 屏幕流 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 不可用 | 可用 | 可用** | 不可用 | 不可用 | 可用 |
| 奧姆尼斯圖 | 可用 | 可用 | 可用 | 不可用 | 不可用 | 可用 | 不可用 | 不可用 | 可用 | 不可用 | 不可用 | 可用 | 可用 |
| 屏幕流 + LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 不可用 | 可用 | 不可用 | 不可用 | 不理想 | 可用 |
| LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 不可用 | 不可用 | 可用 | 不可用 | 不可用 | 可用 | 可用 |
| *Salesforce 移动应用程序支持流和 LWC,但不支持嵌入流和 LWC 的所有方式(例如,移动设备支持特定于对象的操作,但实用程序栏项目不支持)。 **Salesforce Field Service 移动应用程序包含数据捕获 — 一个基于流引擎的离线优先表单解决方案,具有专用离线运行时,支持最新的流功能。该应用程序还包括传统的 Field Service 移动流,这些流在旧的自定义离线引擎上运行,并且不支持许多最新的流功能。 | |||||||||||||
| 日志和操作 | 层次结构数据管理 | 在一个事务中操作 | 跨多个事务操作 | 集成 | 模块化设计和重用 | 打包 | |
|---|---|---|---|---|---|---|---|
| 动态表单 | 不可用 | 不可用 | 不可用 | 不可用 | 不可用 | 不可用 | 可用 |
| 屏幕流 | 可用 | 不可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| 奧姆尼斯圖 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 不可用 |
| 屏幕流 + LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| 遵守系统级验证 | 特定于此表单的自定义字段级验证 | 自定义字段级验证 | |
|---|---|---|---|
| 动态表单 | 可用 | 不可用 | 不可用 |
| 屏幕流 | 可用 | 不可用 | 不可用 |
| 奧姆尼斯圖 | 可用 | 可用 | 可用 |
| 屏幕流 + LWC | 可用 | 可用 | 可用 |
| LWC | 可用 | 可用 | 可用 |
| 执行屏幕外数据操作 | 条件值和计算 | 条件可见性 | 条件要求 | 条件格式化 | 条件只读状态 | 有条件禁用状态 | |
|---|---|---|---|---|---|---|---|
| 动态表单 | 不可用 | 不可用 | 可用 | 不可用 | 可用 | 不可用 | 不可用 |
| 屏幕流 | 可用 | 可用* | 可用 | 可用 | 不可用 | 可用 | 可用 |
| 奧姆尼斯圖 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| 屏幕流 + LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| *仅限于使用资源选择器而不是静态复选框的组件 | |||||||
| 标准事件处理(模糊、聚焦) | 自定义事件处理 | |
|---|---|---|
| 动态表单 | 不可用 | 不可用 |
| 屏幕流 | 不可用 | 不可用 |
| 奧姆尼斯圖 | 不可用 | 可用* |
| 屏幕流 + LWC | 可用 | 可用 |
| LWC | 可用 | 可用 |
| *Omnistudio 标准运行时不支持发布/订阅,但支持 Windows postMessage | ||
| 直接样式 | 组织和体验生成器主题 | 像素完美样式 | |
|---|---|---|---|
| 动态表单 | 不可用 | 可用 | 不可用 |
| 屏幕流 | 不可用 | 可用 | 可用** |
| 奧姆尼斯圖 | 可用* | 不可用 | 可用 |
| 屏幕流 + LWC | 不可用 | 可用 | 可用 |
| LWC | 不可用 | 可用 | 可用 |
| *仅限FlexCard **可以为屏幕组件配置某些样式属性,但不能为 CSS 覆盖配置。 | |||
| 2 列 | 4 列 | 超过 4 列 | 重复数据块 | 选项卡容器 | 折叠容器 | |
|---|---|---|---|---|---|---|
| 动态表单 | 可用 | 不可用 | 不可用 | 不可用 | 可用 | 可用 |
| 屏幕流 | 可用 | 可用 | 不可用 | 可用 | 不可用 | 可用 |
| 奧姆尼斯圖 | 可用 | 可用 | 可用 | 可用 | 可用* | 可用 |
| 屏幕流 + LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| LWC | 可用 | 可用 | 可用 | 可用 | 可用 | 可用 |
| *如果将数据嵌入 Omniscript 中的 FlexCard,可以使用选项卡 | ||||||
| 在生成器中输入的标签 | 代码中的标签 | |
|---|---|---|
| 动态表单 | 可用* | 不可用 |
| 屏幕流 | 可用 | 可用 |
| 奧姆尼斯圖 | 可用 | 可用 |
| 屏幕流 + LWC | 可用 | 可用 |
| LWC | 不适用 | 可用 |
| *仅限字段部分标题 | ||
| 提升用户权限 | 控制谁拥有访问权限 | 限制允许的位置 | |
|---|---|---|---|
| 动态表单 | 不可用 | 可用 | 不可用 |
| 屏幕流 | 可用 | 可用 | 不可用 |
| 奧姆尼斯圖 | 不可用 | 可用 | 不可用** |
| 屏幕流 + LWC | 可用 | 可用 | 不可用 |
| LWC | 可用* | 可用 | 可用 |
| *需要 Apex **虽然 Omniscript 不能有一组指定的目标位置,但 FlexCard 可以。 | |||
| 单元测试 | 端到端自动化 | |
|---|---|---|
| 动态表单 | 不可用 | 可用* |
| 屏幕流 | 不可用 | 可用* |
| 奧姆尼斯圖 | 可用* | 可用* |
| 屏幕流 + LWC | 可用* | 可用* |
| LWC | 可用 | 可用 |
| *需要代码 | ||
| 页面视图 | 在表单上花费的时间 | 跟踪表单完成情况 | 跟踪成功率 | |
|---|---|---|---|---|
| 动态表单 | 可用** | 不可用 | 不可用 | 不可用 |
| 屏幕流 | 可用 | 可用* | 可用 | 可用 |
| 奧姆尼斯圖 | 可用 | 可用* | 可用 | 可用 |
| 屏幕流 + LWC | 可用 | 可用* | 可用 | 可用 |
| LWC | 可用** | 可用* | 可用 | 可用 |
| *在启用基于软件包的 Omnistudio 运行时可用**通过跟踪父 Lightning 页面使用情况可用 | ||||
| 第一代受管软件包 (1GP) | 第二代受管软件包 (2GP) | 解锁的软件包 | 更改集 | DevOps Center | |
|---|---|---|---|---|---|
| 动态表单 | 可用 | 可用 | 可用 | 可用 | 可用 |
| 屏幕流 | 可用 | 可用 | 可用 | 可用 | 可用 |
| 奧姆尼斯圖 | 不可用 | 不可用 | 不可用 | 不可用* | 不可用* |
| 屏幕流 + LWC | 可用 | 可用 | 可用 | 可用 | 可用 |
| LWC | 可用 | 可用 | 可用 | 可用 | 可用 |
| *使用 IDX 工作台将 Omnistudio 解决方案部署到其他组织。 | |||||
| 动态表单 | - 使用动态表单拆分记录详细信息 - 获取 Lightning 应用程序生成器的帮助 |
| 屏幕流 | - 使用屏幕流与用户交互 - 使用流自动任务 |
| 奧姆尼斯圖 | - Omnistudio - 全名脚本 - IDX 工作台桌面应用程序 - 新港设计系统 - 使用 Newport 设计系统自定义 Omniscript 和 Flexcard |
| LWC | - Lightning Web组件 - Lightning Aura组件开发指南 - 适用于 Aura 开发人员的 Lightning Web 组件 |
| Agentforce | 传统自动化 | 集成 |
|---|---|---|
| 流 | Salesforce Flow 是一款功能强大的点击式自动化工具,可让用户使用 Flow Builder 直观地构建复杂的业务流程、屏幕和逻辑,而无需编写代码。它自动化数据更新、发送电子邮件和指导用户等任务,并通过屏幕流(用户交互)和触发的流(记录/计划的事件)等类型提供灵活性。 |
| Apex | Salesforce Apex 是适用于 Salesforce 平台的专有的、面向对象的编程语言,与 Java 相似,用于构建自定义业务逻辑、自动化流程并将核心 CRM 功能扩展到声明性工具之外。 |
随着 Salesforce 应用程序的范围和复杂性的增长,请提交到单个主要入口点 — 记录触发的流或 Apex 触发器。避免在单个 Salesforce 对象上跨多个机制划分自动化,因为这会导致可维护性差和治理分散。
### 密度选择矩阵
使用此矩阵来确定 Salesforce 对象所需的架构标准。
- **记录触发流**是低自动化密度的首选解决方案。它提供了功能和可访问性的平衡,是直接且相互独立的自动化的理想选择。
- **混合模式(带有可调用 Apex 的记录触发流)**对于复杂性不断上升的中等密度自动化来说是一个强大和可维护的选择。这种模式使团队能够在声明性流中维护有序的编排,同时将计算繁重的操作委托给 Apex,平衡可访问性和性能。
- **Apex触发器**为支持高密度自动化奠定了坚实的建筑基础。Apex 的性能、粒度控制、面向对象的抽象和多态性更适合管理这些场景的复杂性和规模。
| 密度级别 | 自动化数量 | 数据量(批次大小) | 依赖性蔓延 | 架构标准 |
|---|---|---|---|---|
| 低 | < 15 自动化 |
标准 用户驱动的 UI 交互或少量 API 加载(1–200 条记录) |
离散 独立逻辑。同一对象或相关对象上的 0–1 下游 DML 操作。 |
记录触发的流 |
| 中等 | 15–30 自动化 |
审核 标准批处理(逻辑需要谨慎批量化) |
夫妻 父/子级更新 2-4 个下游 DML 操作。递归风险 |
混合模式 流 + 可调用 Apex |
| 高 | > 30 自动化 |
高 具有批量 API 加载的大数据量(2,000 – 10,000 多条记录) |
复杂和递归 深度依赖图(5+ 下游 DML 操作)。三角形递归循环的风险 |
Apex 触发器元数据框架 |
| 功能 | 记录触发的流 | Apex 触发器 |
|---|---|---|
| 交付和维护速度 | 推荐 Flow Builder 的可视用户界面允许管理员和其他声明性生成器创建和修改自动化,比编写、测试和部署 Apex 代码更快。此界面使更广泛的团队成员能够提供业务价值,并减少对简单任务的专业开发人员资源的依赖。 |
需要专业知识 Apex 需要具备适当技能的软件开发人员来实施、测试和维护代码。 |
| 模块化 | 可用 默认情况下,记录触发的流是模块化的。团队不是单一逻辑,而是针对特定要求构建离散流,并使用流触发器资源管理器一起编排它们。这种模块化实现了隔离修改和简单扩展,大大降低了长期拥有成本。 |
可用 Apex 按设计分为功能模块。每个 Apex 类旨在实施单个功能模块。 |
| 可见性和治理 | 推荐 流的可视性提供了业务逻辑的直观表示。流触发器资源管理器提供对象上所有流的综合视图,使架构师和管理员更容易理解、治理和排除故障,而无需阅读代码。 |
需要专业知识 使用元数据框架来组织触发器是有利的,但是 Apex 需要纪律严明的开发团队来保持代码的组织性和可维护性。 |
| 高性能批量数据处理 | 不推荐 在处理复杂逻辑或大数据量时,达到调控器限制的风险更高。 |
推荐 Apex 代码的执行更接近平台的核心服务,并为开发人员提供了对查询优化、数据处理和算法效率的增强控制。这将带来更好的性能和规模,特别是在涉及大量数据的复杂场景中。 |
| 强大的逻辑和数据结构 | 可用 流转换元素可以帮助完成一些复杂的处理任务。但是,Flow 缺少本地地图和设置数据结构,使得复杂的数据处理很麻烦,计算效率低下。 |
推荐 Apex 提供对映射、设置和程序循环的完整访问权限,以实现高效、批量安全的数据操纵。Apex 作为一种全功能编程语言,也提供对复杂逻辑结构、数据结构和设计模式的访问权限,有助于以可维护和有效的方式解决复杂的业务问题。Apex 包含丰富的高级函数标准库(例如 BusinessHours、Crypto),目前这些函数在声明性工具中不可用。 |
| 交易控制 | 不可用 对于部分事务提交或回滚,流不提供对“Database.savepoint”、“Database.rollback”或部分成功的 DML 操作的访问权限。 |
可用 Apex 提供了对事务完整性和复杂错误恢复场景的全面精细控制。 |
| 电子邮件分发 | 推荐 从记录触发的流发送预配置的电子邮件提醒简单且可扩展。自定义电子邮件提醒可以在运行时创建和分发。自定义电子邮件受每日电子邮件发送限制。 |
可用 Apex 可以生成并发送自定义电子邮件消息。从 Apex 发送的所有电子邮件都受每日电子邮件发送限制。 |
| 应用平台保障 | 推荐 流包含内置保护,例如自动批量化和自动重试。这些保障措施提高了价值实现的速度,并防止了否则需要复杂的手动编码的性能缺陷。 |
需要手动实施 批量化等保护措施必须明确编码(例如,管理集合和避免循环内的 SOQL)。自动重试不是触发器的本机功能,需要复杂的自定义逻辑来实现。 |
| 异步处理 | 可用 对于需要在异步路径中单独交易的自动化,流提供了简单的机制。这些自动化受每日限制。 |
可用 Apex 通过解耦触发器订阅者处理的变更数据捕获和可排队事件实现完全控制。 |
| 计划处理 | 推荐 流的计划路径提供了独特而强大的计划功能(例如,“在结束日期前 3 天触发”)。如果记录的数据发生变化,此功能包括自动取消和重新计划。这些自动化受每日限制。 |
不可用 Apex 触发器无法通过自动取消本地计划特定于记录的时间事件。虽然存在计划的 Apex,但它是一种根本不同的机制,它在特定时间运行,并且在作为触发器的一部分处理单个记录的过程中不会被计划。 |
| 订单和编排 | 可用 流触发器资源管理器允许管理员为同一对象上的多个流定义相对执行顺序。 |
可用 触发器框架提供了对自动化精确顺序的精细控制。 |
| 相同记录字段更新 | 可用(保存前) 记录触发的流是在初始 DML 提交之前更新触发记录的最高性能的声明性选项。 |
可用(保存前) Apex 以最少的开销提供最高性能的产品。 |
| 跨对象 CRUD | 可用(保存后) 流适用于简单、低复杂性的跨对象 DML 操作。 |
可用(保存后) Apex 为跨对象 DML 操作提供了对重复数据消除、错误处理和性能的卓越控制。 |
| 昂贵的重复数据消除 | 可用 Flow 擅长通过自动批量化来消除冗余查询和 DML 语句。但是,状态不能在不同流触发器之间或在一个事务中同一流的多次调用之间缓存或共享。在极端性能场景中,此限制可能变得很重要。 |
推荐 Apex 提供了对昂贵操作进行重复数据消除的机制。开发人员可以使用静态属性和变量的事务缓存和使用平台缓存的平台级缓存来存储和重用数据。这些技术对于减少事务调控器限制(例如 SOQL 查询)的消耗,并确保高性能和可扩展性非常重要。 |
| 自定义错误处理 | 可用 CustomError 元素可以阻止保存操作并向用户显示消息。 |
推荐addError() 方法提供了灵活的字段级和条件错误消息。 |
| 用例 | 描述 | 最适合 | 理由 |
|---|---|---|---|
| 高性能批处理 | 任何必须高效处理数千条记录的自动化 | Apex | Apex 为与平台的接口和原始速度提供了丰富的 API。 |
| 复杂数据处理 | 需要高级数据操作的场景 | Apex | Apex 提供在流中本地不可用的数据结构,例如映射和集,对于编写高效的批量安全代码至关重要。 |
| 交易控制 | 控制机制,例如保存点、回滚和部分提交 | Apex | Apex 提供对 Database.savepoint 和 Database.rollback 等机制的访问权限,并能够处理部分成功的 DML 操作。 |
| 复杂的自定义验证 | 记录中多个字段之间的数据验证 | Apex | 虽然流可以阻止使用“CustomError”元素保存,但它并非在所有流类型中可用,包括子流。Apex addError() 方法提供了多个特定于字段的错误消息,可以在触发器处理期间随时添加到记录中。 |
| 简单流程中的适度复杂逻辑 | 中等复杂性的逻辑和数据操纵,由标准高级函数库简化,作为不复杂流程的一部分发生 | 流 + Apex | 记录触发的流充当编排层,而高复杂性操作封装在可调用 Apex 中。 |
| 简单到中等复杂的逻辑 | 低到中等复杂性的数据操纵,对主数据和相关数据对象进行触发器更新 | 流 | 流通常是转到选项,因为它基于声明性模型,使管理员和开发人员都可以访问它。 |
| 通知和出站消息 | 发送出站电子邮件和消息 | 流 | 流使发送电子邮件提醒和记录更改的出站消息变得容易和高度可扩展。 |
| 计划处理 | 未来动态日期的自动化(例如,结束日期前 3 天) | 流 | 计划的路径为流提供了独特的优势,因为如果记录的数据发生变化,平台会自动处理这些路径的计划、取消和重新计划。 |
### 计划作业替代项
如流程图所示,当您面临大量 DML 操作但无法使用变更数据捕获时(可能由于对象限制),最佳的架构选择通常是完全避免触发器调用的过程。
相反,请考虑使用计划的进程。这可以是计划的流或计划的 Apex。所需步骤是:
1. 在同步触发器中执行简单的低成本更新。例如,将`Status__c`字段设置为“待处理”,或插入低成本相关记录,例如 Chatter 帖子,以表示该记录需要处理。
2. 创建定期运行的已计划作业,即已计划流或已计划 Apex,例如每 15 分钟或每小时运行一次。
3. 让计划作业查询处于待处理状态的所有记录,在受控的高用量上下文中执行复杂逻辑,然后在处理时更新记录。
此模式将繁重的处理与用户的同步保存完全分离,不受触发器触发批次的每个事务一个作业的限制,并为非实时需求提供了高度可扩展和可管理的解决方案。
如果计划作业的延迟对业务需求来说是不可接受的,并且您仍然被限制使用 CDC 或触发器触发的可排队,这表明架构不匹配。此时,必须考虑不同的机制。重新评估核心应用程序设计可能会导致某些结论,例如:
- 购买加载项以删除 CDC 对象限制。
- 从根本上说,确定近乎实时的处理是否真正是“必须拥有的”,或者计划作业的延迟是否是平台稳定性的可接受的折衷方案,是业务需求的挑战。
## 非功能注意事项
除了决策点之外,您还需要考虑非功能性因素,例如复杂性和标准。
### 复杂性
实施的复杂程度是解决方案总拥有成本的一部分,也是其适应不断变化的业务需求的能力的一部分。如果不遵循最佳实践,复杂性会影响任何实施。在本文档的“_相关最佳实践_”部分中,提出了降低解决方案复杂性的建议,包括以下模式:
- 混合模式:适用于流中复杂逻辑的可调用 Apex
- 使用 Apex 触发器的元数据框架
- 超大流与多个流
### 流程和标准
文档与自动化本身同样重要。它不仅确保可维护性,而且对于 AI 和基于客服人员的工具也至关重要。文档有助于您了解和管理业务流程。
**在流中**
- 为所有元素和变量建立一致的命名约定。
- 使用流的描述字段来解释其整体目的、触发条件和预期结果。
- 在每个单个元素上使用描述字段(例如,`Get Records`、`Action`、`Transform`)。这种做法是传达意图的最佳方式。它对于可调用操作和子流尤其重要,其中描述是解释操作执行的复杂逻辑的主要位置。
**在 Apex**
- 清晰评论您的代码,以解释逻辑背后的_原因_,而不仅仅是_什么_。
- 如果使用元数据驱动的框架,请确保您的元数据记录包含并填充人类可读的描述字段,以解释每个处理程序类的功能及其应运行的时间。
DevOps 和源控制是成熟开发生命周期的一部分。始终使用源控制工具,例如适用于 Salesforce 项目的 Git。Apex 类和 Salesforce 流都是定义业务逻辑的元数据,必须对其进行版本化和管理。
在记录触发的自动化管理的上下文中,现代 DevOps 漏斗提供了基本的好处。
- **自动质量检查:**[Salesforce 代码分析](https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview)器等工具可以配置为在您的漏斗中自动运行。静态分析可以在升级之前检测这两种自动化工具中的问题模式,并标记出流循环中效率低下的`Get Records`元素或 Apex for 循环中的`SOQL`查询等问题,这些都是性能下降的常见原因。
- **回归预防:**随着自动化密度的增长,对一个流或 Apex 类的更改可能会对同一对象上的其他自动化产生意想不到的后果。确保新流版本不会破坏现有 Apex 逻辑的最可靠方式是强大的 DevOps 测试策略,其中针对任何建议的更改运行自动 Apex 测试(反之亦然)。
- **协作和可见性:**源控制是“真理的单一来源”。它允许管理员和开发人员并行处理相同对象的自动化。它还提供了宝贵的审计跟踪:当生产过程中断时,您可以立即看到_谁_更改了自动化,他们_何时_更改的,以及他们为_什么_更改它 — — 通过提交消息。
对于管理员和开发人员混合的团队,[DevOps Center](https://help.salesforce.com/s/articleView?id=platform.devops_center_overview.htm&type=5)提供了统一的界面来帮助编排所有这些步骤,使团队中的每个人都可以访问可扩展的、基于源代码控制的开发流程。
文档和 DevOps 的这一组合纪律确保了贵组织的长期运行状况和维护性,这将使关注您的每位架构师和管理员受益。
## 相关最佳实践
以上决策指南最适合在计划实施前使用。它旨在帮助您为您的用例选择最佳产品。在产品选择后,了解您的实施的现有最佳实践非常重要。
### 利用混合模式:适用于流中复杂逻辑的可调用 Apex
_每个对象一_个工具原则对于管理高密度自动化至关重要,但请勿将其解释为纯声明性或纯编程堆栈之间的二元选择。更有效和可维护的架构模式利用了混合模型:将记录触发的流定位为编排层,同时将高复杂性操作封装在可调用 Apex 中。
#### 编排图层:流
记录触发的流充当业务流程的编排层。它拥有准入条件和执行上下文(_什么_和_什么时候_)。通过在此层中保留决策逻辑和路由,架构的进程拓扑保持透明,并通过流触发器资源管理器进行管理,防止代码中的关键业务逻辑被模糊。
#### 复杂组件:可调用 Apex
复杂组件的一个常见示例是实施个案记录的服务级别协议 (SLA) 计算。由于 BusinessHours 对象及其相关逻辑(对于排除非工作时间和假期的准确计算至关重要)无法在流中本地访问,因此使用专用 Apex 类。该类通常命名为 `ServiceLevelAgreementCalculator`,它使用单个静态方法设计,并使用 `@InvocableMethod` 注解,以计算经过的工作时间,确定 SLA 是“目标内”还是“已违反”,并返回结构化输出。这种方法在 Apex 中封装了复杂的高性能逻辑,同时允许它无缝执行并集成到记录触发流的声明性编排层中。
一旦定义了 Apex `ServiceLevelAgreementCalculator`类,它就可以在记录触发的流中使用:
这种模式表明关切事项严格分离。声明层用于管理事务生命周期和编排,而代码用于高复杂性的执行。通过将代码视为功能实用程序而不是基础,我们平衡了性能和可维护性。
#### 混合模式的关键收益
**模块化**:该决策偏离了在整个流程中使用 Apex 或 Flow 的奇异性。相反,该架构将复杂的逻辑封装成离散的、批量安全的和可独立测试的单元。这些单元充当声明层消耗的可重用组件,确保自动化规模,而不会使架构设计复杂化。
可**重用性**:逻辑与触发器事件分离。设计良好的代码单元(例如`InvocableMethod`)仅编写一次,但会在多个入口点之间使用:记录触发的流、屏幕流或外部集成。这种代码重用消除了冗余开发。
可**维护性**:流程流逻辑在声明性流中保持可见和可管理。这种集中极大地减少了调试开销,并确保系统的执行顺序是确定性和透明的。
#### 混合模式的限制和权衡
虽然使用流中可调用 Apex 的混合模型功能强大,但并非一刀切的方法。在致力于混合解决方案之前,架构师必须了解特定的限制和权衡。
- **无保存前支持**:这是最重要的限制。可调用操作仅在保存后上下文中可用(操作和相关记录的流)。它们不能在高性能保存前上下文中使用(用于快速字段更新的流)。因此,此模式不能用于委派相同记录字段更新。在保存前流或上下文 Apex 触发器中使用本机流元素执行高性能工作。
- **无取消删除后支持:**记录触发的流目前不支持取消删除后的上下文。如果 Salesforce 对象有在从回收站恢复记录时运行自动化的业务需求,Apex 触发器是唯一的解决方案。
- **高用量场景下的性能开销:**从流运行时到 Apex 运行时的过渡不是零成本操作。虽然通常速度很快,但从流的运行时进入可调用操作的操作在计算上不如完全在 Apex 触发器内的本地执行快。对于大多数中等密度的自动化,这种微型开销对于提高可访问性来说微不足道,值得权衡。但是,对于极端高性能、高用量的场景,纯 Apex 仅框架将具有原始计算速度优势。
### 传统自动化的策略
虽然自动化密度启发式为更新的绿地架构提供了明确的指导,但企业 Salesforce 环境的现实往往更加细微。在成熟的组织中,通常可以找到在相同 Salesforce 对象上运行的记录触发流和 Apex 触发器。此场景与之前解释的混合模式不同:这里,流和 Apex 触发器不是耦合的,也不是设计为一起工作的。
这种共存往往是平台功能不断发展或传统技术债务的结果。虽然这是允许的操作状态,但架构师必须将其视为计算权衡,而不是最终状态。
零散的编配造成了巨大的治理和维护开销,使得开发、测试和事件处理活动相互脱节且繁琐。这导致解决时间 (TTR) 和操作复杂性增加。
- 对于新的 Salesforce 对象,坚持自动化密度原则作为主要指南。
- 对于具有混合足迹、双 Apex 触发器和记录触发的流入口点的现有 Salesforce 对象,评估密度,然后架构师重构到可维护的混合状态。
- 对于低密度,将 Apex 触发器重构为记录触发的流,并指定执行顺序,将它们带到单个自动化入口点。
- 对于中等密度,使用正确的执行顺序将复杂的超大流重构为流子集。仅在绝对必要时引入 Apex 触发器,例如在取消删除上下文后支持。
- 为获得高密度,最好实施 Apex 触发器。
### 使用 Apex 触发器的元数据框架
随着组织在 Salesforce 平台上的业务流程的成熟,记录触发的自动化的数量和复杂性不可避免地会增加。一个基本的最佳实践是维持_每个 Salesforce 对象一个_ Apex 触发器。此规则至关重要,因为平台不保证同一事件同一对象上多个触发器的执行顺序。这种限制会导致非确定性行为、竞争条件和难以调试的问题。
然而,遵守_单触发器_原则带来了一个架构挑战:如何以可维护、可扩展的方式管理和编排从该单一入口点调用的所有业务逻辑。
#### Classic 触发器处理器的限制
此架构的第一个演变是 Classic 触发器处理器模式。在这种方法中,单个 Apex 触发器将其所有逻辑委托给相应的处理程序类(例如,`OpportunityTriggerHandler`)。此方法将逻辑与触发器文件分开,并为开发人员提供对处理器类方法(例如 `afterInsert()`)中执行顺序的确定性控制。
虽然是一种改进,但这种模式通常会导致单片处理器类。随着时间的推移,随着更多业务需求的添加,该类会变得很大,难以管理,并且难以单独测试。所有单个流程的执行顺序都在一个方法中硬编码,这使得类容易出现合并冲突,从而大大增加了大型企业环境中的治理和维护开销。
#### 解决方案:元数据驱动的触发器框架
为了解决模块化和编排的核心问题,架构师转向了**元数据驱动触发框架**。这是一次重大的架构飞跃,将自动化逻辑本身与_如何_和_何时_运行的配置分离开来。
该框架基于三个关键优势:
- **分区:**不是单个处理器类,而是将核心业务逻辑分解为小的原子 Apex 类(例如,`RecalculateAccountValues`类或`NotifySalesLeads`类),每个类都遵守_单一责任原则_。这种模块化使得逻辑更容易单独测试、调试和理解。
- **顺序和编排:**执行订单不再在 Apex 中硬编码。相反,它由配置记录进行声明性定义,通常存储在自定义元数据类型中(例如,`TriggerAction__mdt`)。这允许管理员通过修改元数据记录来重新排序、添加或删除自动化操作,这不需要部署或代码更改。
- **绕过功能:**该框架提供了标准化的精细旁路功能。每个自动化操作都可以通过其元数据记录配置为全局关闭,或者通过引用自定义权限来绕过特定的管理用户。
然后,对象的单个 Apex 触发器仅用作动态调度人员。它不包含业务逻辑,而是实例化一个中心`MetadataTriggerHandler`类。该处理器查询自定义元数据记录,以动态确定执行顺序,并按照规定的顺序调用正确的原子 Apex 类。自动化被统一在一个透明和可治理的层下。
### 在事务中重复开销操作
在强大的框架中使用 Apex 的一个重要好处是通过消除冗余工作来管理事务状态和优化性能的能力。随着逻辑的累积,保存订单中的不同自动化通常会独立执行相同的昂贵操作,消耗宝贵的调控器限制,并增加 DML 操作时间。
该框架旨在用两个主要策略来解决这个问题:
- **共享状态管理:**在单个 Apex 事务的范围内,静态属性和变量被用来缓存数据。这确保了昂贵的操作(例如配置设置的`SOQL`查询)仅执行一次,即使在触发器的不同记录或阶段中多次调用自动化逻辑。事务限制的消耗大大减少。
- **平台缓存利用率:**要超越简单的事务内缓存,请使用平台缓存来避免查询整个数据库的某些数据。这种受管的内存缓存非常适合检索非原始的、在代码库中频繁读取的、在整个事务过程中不可变的数据(例如简档、角色、工作时间)。使用 `Cache.CacheBuilder` 界面,系统首先检查缓存,并仅在数据不存在时执行数据库查询,从而最大限度地提高性能和可扩展性。
### 对相同记录更新使用保存前
当您的自动化只需要更改启动事务的记录上的字段值时,请始终使用保存前更新。这适用于流中的快速字段更新(在保存前运行)和 Apex 触发器中的上下文前逻辑(插入前、更新前)。
无论使用哪种工具,此模式都是有效的,因为它避免了第二次 DML 操作和递归保存周期。在提交到数据库_之前_,对内存中的记录进行更改,并作为原始事务的一部分保存。消除了第二次保存的开销,否则将重新执行整个保存订单并再次启动所有自动化。
### 防止不受控制的递归
不受控制的递归是更新后触发器中常见的陷阱,其中触发器的逻辑执行 DML 更新,进而导致同一触发器再次触发。这将创建一个无限循环,并最终以调控器限制异常结束。虽然静态布尔标记或处理的记录 ID 集合历来用于防止这种递归,但更精确和更强大的模式是通过比较记录本身的新版本和旧版本之间的字段值来把逻辑关起来。
仅在特定兴趣领域实际发生变化时执行逻辑。这防止触发器在同一事务中的后续 DML 操作上运行其逻辑,其中关键数据保持不变。
#### 控制记录触发流中的递归
在记录触发的流中,通过将流设置为仅在更新记录以满足条件要求时运行,防止不受控制的递归:
如果您在流中选择使用准入条件公式,您可以通过将`$Record`全局变量(代表新值)与`$RecordPrior`全局变量(代表保存前的原始值)进行比较来防止失控递归。例如,要确保流仅在业务机会的金额字段已更改时运行,请在准入条件中使用:
```
$Record.Amount != $Record__Prior.Amount
```
#### 在 Apex 中控制递归
将新版本记录 `Trigger.new` 中的字段值与旧版本记录 `Trigger.oldMap` 中的字段值进行比较,以查看您是否发生了您正在寻找的特定更改。这种方法确保自动化是幂等的,并且只在必要时运行,提高了系统的效率,防止了灾难性的递归循环。
### 绕过自动化
架构良好的 Salesforce 组织需要一致可靠的机制来绕过自动化。这不是可选功能,而是维护数据完整性和启用管理任务的核心操作要求。
对于一些场景,旁路框架至关重要:
- 在加载大量数据时,触发每个记录的触发器会显著减慢进程,导致限制异常,并创建错误的相关记录和通知。旁路允许干净高效地插入数据。
- 集成用户可能需要同步来自外部记录系统的数据。当更改来自另一个系统时,通常为用户发起的更改触发的自动化(例如,发送电子邮件、创建任务)可能是不可取的或多余的。
- 管理员或支持人员可能需要对记录执行更正更新。绕过机制允许他们在不触发标准业务自动化的情况下进行这些更改,这可能会产生意想不到的后果。
**自定义权限**:实施旁路逻辑的现代可扩展标准是自定义权限。这些方法优于旧方法有几个原因:
- **灵活性:**自定义权限可以通过权限集分配给用户。这种做法符合现代 Salesforce 安全和访问模型,允许精细和灵活的分配。绕过可以授予特定用户,甚至可以临时授予特定到期日期/时间。
- **可维护性:**使用自定义权限可以避免将简档或用户硬编码到自动化逻辑中。如果用户的角色发生变化或新简档需要绕过访问权限,则更改是简单的权限集分配,而不是需要部署的代码或流修改。
- **可扩展性:**自定义权限为管理复杂用户群中的异常提供了一个可扩展的框架。它们可以通过权限集、权限集组或简档分配给用户。它们与权限集或简档的关联也可以在源元数据中表示。
**实施模式**:将一致的绕过模式应用于组织中的所有记录触发的自动化。
**绕过记录触发的流**:绕过流的最有效方法是完全阻止它运行。通过将条件添加到流的准入条件来实现这一点。
- 在记录触发的流的开始元素中,将条件要求设置为公式评估为真。
- 在公式生成器中,使用 `$Permission` 全局变量包含自定义权限的检查。将检查与您现有的准入条件结合起来。
- 公式模式:
```
( ) && NOT($Permission.Bypass_This_Flow)
```
- 此模式确保流仅在用户_未_分配指定自定义权限时运行。此检查甚至在创建流采访之前执行,使其成为性能最好的方法。
**绕过 Apex 触发器框架**:在 Apex 中,将绕过逻辑直接集成到元数据驱动的触发器框架中,允许精细控制。
- `TriggerAction__mdt`自定义元数据类型应包含文本字段,例如 `BypassPermission__c`。
- 在 `MetadataTriggerHandler` 类中,在动态执行操作之前,代码应读取此字段中的值。
- 如果填充字段,处理程序会使用 `FeatureManagement.checkPermission()` 方法确定当前运行用户是否拥有指定的自定义权限。
- 如果 `checkPermission()` 返回真,处理程序会跳过该特定操作,并继续序列中的下一个操作。
- 此模式功能强大,因为它允许全局绕过(如果所有`TriggerAction__mdt`记录引用相同权限)和精细的每个操作绕过(如果不同记录引用不同权限,或一些记录根本没有绕过权限)。
### 超大流与多个流
将对象的所有自动化整合到单个大型流中是一种反模式。合并为一个流与将逻辑拆分为多个条件良好的流不会对性能产生重大影响。最重要的性能提升来自:
- 使用保存前流进行相同记录字段更新。
- 编写精确的条目条件,以确保流排除在不会影响特定用例的更改上运行。
[流触发器浏览](https://trailhead.salesforce.com/content/learn/modules/record-triggered-flows/meet-flow-trigger-explorer)器允许您为对象上的每个流分配顺序值,保证顺序执行。
## 资源
| Apex | 流 | 操作 |
|---|---|---|