组件。屏幕阅读器使用语义结构来传达页面组织并启用地标导航。避免使用从内容层次结构中删除意义的纯视觉标记。
- **在自定义组件中实施 ARIA。**当语义 HTML 无法传达界面行为时,应用 ARIA 地标、角色和属性。动态内容更新需要向屏幕阅读器宣布更改的咏叹调实时区域。自定义交互式组件需要与其行为相匹配的明确角色定义。Lightning 基础组件会自动处理 ARIA;但是,自定义组件需要通过屏幕阅读器测试手动验证 ARIA。
- **使用辅助技术进行测试:**使用实际屏幕阅读器验证 Lightning 组件(例如,适用于 Windows 的 JAWS 和 NVDA、适用于 macOS 和 iOS 的 VoiceOver 以及适用于 Android 的 TalkBack)。根据 Deque 的大规模研究,像 axe-core 这样的自动化工具可以捕获大约 57% 的可访问性问题。其余问题需要了解屏幕阅读器导航模式的人员使用辅助技术进行手动测试。
- **在 Lightning 流程中使用焦点管理。**当模态打开、动态内容加载或用户完成多步骤流时,您应以编程方式管理焦点,以指导键盘用户找到新内容。Lightning 模态和弹出窗口组件提供基本的焦点管理,但复杂的流需要明确的焦点逻辑,以便在内容更改时适当移动焦点。
### Experience Cloud 可访问性架构
Experience Cloud 站点为外部用户(包括客户、合作伙伴和公共受众)提供服务,这些用户需要满足 ADA、第 508 节和/或[欧洲无障碍法案](https://eur-lex.europa.eu/eli/dir/2019/882/oj)要求的无障碍设计(取决于辖区、受众和组织类型 ) 。
- **使用可访问的模板。**使用 Lightning Web Runtime (LWR) 构建的 Experience Cloud 模板包含基准可访问性。标准模板(例如客户帐户入口网站和帮助中心)在正确配置时提供 WCAG 2.2 AA 基础。自定义模板需要明确的可访问性实施,包括语义标记、键盘导航和屏幕阅读器兼容性。
- **验证主题中的 WCAG 合规性。**自定义主题和品牌站点需要颜色对比度验证。体验生成器的主题设置控制颜色、排印和间距。确保所有文本满足正常文本的 4.5:1 对比度(常规文本低于 18pt,粗体文本低于 14pt),以及大文本(常规文本低于 18pt 或更大,粗体文本低于 14pt)和 UI 组件的 3:1 对比度。使用浏览器开发人员工具或在线对比度检查器来验证合规性。使用浏览器缩放到 200% 进行测试,以确保文本在不丢失内容或功能的情况下缩放。
- **在导航菜单中使用键盘导航。**Experience Cloud 导航组件必须支持仅键盘操作,而不依赖于鼠标。用户必须使用 Tab、Enter、Escape 和箭头键导航下拉菜单、超大菜单和弹出导航,而无需焦点陷阱。仅使用键盘测试所有导航路径,以验证可访问性。
- **在 Experience Cloud 中启用表单可访问性。**使用适当的标签元素或 aria-labeledby,明确关联标签与所有表单输入。占位符文本本身不符合可访问性要求,因为文本会在数据输入开始时消失,这使得屏幕阅读器用户没有足够的持久上下文。Lightning 输入组件在使用所需的标签属性进行配置时提供内置的标签关联。自定义 Visualforce 表单需要明确的标签-输入关联。
- **使用辅助技术测试 Experience Cloud 站点。**在启动面向公众的 Experience Cloud 站点之前,您必须使用屏幕阅读器、仅键盘导航和浏览器缩放进行全面的可访问性测试。重要的是让残疾用户参与可用性测试,以揭示专家审查可能经常错过的实际、真实体验障碍。仅测试内部 Lightning 页面而不验证外部 Experience Cloud 可访问性会使面向公众的站点容易受到可访问性投诉和诉讼。
- **为图像和图标使用替代文本。**Experience Cloud 中的所有信息性图像、图标和图形内容都需要替换文本。装饰图像使用空替换文本 (alt=""),这允许屏幕阅读器跳过它们。信息性图像提供有意义的替代文本,描述内容和功能。当您为图标编写替换文本时,请关注图标的操作或目的,而不是其视觉外观(例如,不要将放大镜图标描述为“放大镜”,替换文本应说明其功能实用程序,例如“搜索站点”)。在管理图像时,CMS 必须提示内容作者输入替换文本或明确将图像标记为装饰性(这将设置 alt="")。通过防止丢失替换文本和强制描述美学图像,确保可访问性。
### Lightning 中的键盘导航
完整的键盘可访问性意味着用户可以使用键盘访问所有功能,而无需鼠标或触摸交互。
- **在 Lightning 页面中使用逻辑焦点顺序。**确保焦点顺序遵循可视布局和交互流。当用户按下 Tab 键时,可视焦点应按照用户基于可视设计的预期顺序在交互元素中移动。Lightning 应用程序生成器和体验生成器根据组件位置确定焦点顺序。自定义组件需要显式选项卡索引管理,以确保逻辑焦点进度。
- **使用可见的焦点指示器来满足对比度要求。**Lightning 设计系统提供聚焦样式,以满足大多数组件的 WCAG 要求。自定义组件可能需要增强的焦点指示器,以满足周围内容的 3:1 对比度要求。焦点指示器必须清晰可见,以允许弱视用户通过键盘导航。在没有提供其他可见焦点样式的情况下,*请勿*使用 CSS 移除焦点指示器(概述:无)。
- **在模态和叠加中使用键盘陷阱缓解。**模态对话框应在打开时将焦点困在模态中,这可防止键盘用户触及模糊的背景内容。焦点陷阱应在模态关闭时释放,并将焦点返回到触发器元素。如果没有转义机制,嵌入内容(包括 iframe 和第三方小部件)不能永久捕获键盘焦点。
- **使用没有冲突的快捷键。**Lightning 提供 Salesforce 帮助中记录的标准键盘快捷方式。自定义键盘快捷方式的设计必须防止与标准浏览器控制和屏幕阅读器导航命令冲突。按照 WCAG 成功条件,单字符快捷方式(例如,按单个字母或标点符号)不得触发全局操作。他们必须将激活限制在特定组件具有活动焦点时,或为用户提供完全关闭或重新映射快捷方式的方法。
### 集成自动可访问性测试
将可访问性验证构建到 CI/CD 漏斗中,以便在每次部署时自动查找结构问题,而不是将可访问性视为定期的手动审计。
- **使用 sa11y 进行 Lightning Web 组件可访问性测试。**Salesforce 的 sa11y 库(@sa11y/jest 软件包)封装了轴核心可访问性引擎,以便为 Jest 单元测试添加 toBeAccessible() 匹配器。编写可访问性测试,作为单元测试的一部分,自动验证正确的 ARIA 使用情况、标签关联、对比度和语义标记。将生成配置为在检测到关键的可访问性问题时失败。
- **将 Lighthouse CI 用于 Experience Cloud。**Google Lighthouse 会审核网页可访问性,包括 Experience Cloud 站点。将 Lighthouse CI 集成到部署漏斗中,以扫描面向公众的页面是否存在可访问性问题。配置分数阈值,以在部署批准前要求最低可访问性分数。
- **使用通过 Salesforce DX MCP 软件包提供的无障碍代理。**在兼容 MCP 的环境中或 Agentforce 环境中,它根据 WCAG 标准审查代码,显示有针对性的修复,并可以生成拉取请求,供工程师审查、验证和合并。
## Salesforce 自动化中的公平性
在 AI 进入图像之前,偏见早就存在于确定性 Salesforce 自动化中。分配规则、流决策、验证规则和区域设计编码人类判断,这可能会使歧视永久化。与架构师广泛审查的 AI 偏见不同,自动化偏见通常未经审查,因为确定性逻辑感觉客观。
### 分配和路由规则中的偏见
- **遵循潜在客户和个案分配规则。**在销售和服务团队之间分配工作。当分配逻辑使用与受保护特征相关的标准时,自动化会在服务质量和业务机会访问方面产生系统性差异。
- 使用区域、邮政编码或客户特征的分配规则可能会将高价值业务机会不成比例地路由到特定团队,而将低价值工作路由到其他地方。如果区域边界与不同区域的客户人口统计和报酬结构相关,分配自动化会产生经济歧视。
- **定期审计分配规则结果。**计算按客户人口统计分层的区域和团队之间的分配。如果企业客户集中在特定的区域,而 SMB 客户分布在其他地方,并且如果企业区域得到更好的补偿或资源,那么分配规则可能会产生不公平的结果,需要公平审查。
- **查看基于技能的全方位路由。**这会影响客户群的服务质量。如果路由逻辑隐式假设某些技能与客户价值或问题复杂性相关,那么客户可能会收到基于人口统计代理的不同服务结果。
重要的是监控平均处理时间、首次联系解决率和路由路径中的客户满意度。差异可能表明某些客户群是否系统地接收了经验较少的客服人员或更少的路由选项。
### 流和流程自动化中的偏见
- **查看 Salesforce 流自动化。**做出批准决定、资格确定或访问权限授予可能通过看似无害的业务规则编码歧视性逻辑。当标准与受保护的特征相关时,某些流会产生间接歧视。
- **考虑公平性,审查流决策。**对于做出影响用户的相应决策的每个流,重要的是要问:
- 不符合典型客户简档的用户会怎样?
- 决策标准是否与人口统计特征相关?
- 异常和边缘个案是否得到公平处理,或者它们是否系统地使特定群体处于不利地位?
重要的是在架构决策记录中记录流决策逻辑和公平性注意事项,并将高风险流置于与 AI 系统相同的道德审查策略之下。
### 验证规则和数据质量执行中的偏见
- **查看验证规则。**阻止数据输入可能会将有效数据从信息与系统假设不匹配的用户中排除。拒绝合法数据的验证规则会产生不可见的人群。数据不符合验证模式的用户无法使用某些系统。验证失败通常不会报告,因为用户放弃他们的请求,而不是报告技术错误。以下是几种常见的验证偏差模式:
- 需要拉丁字符的名称验证可能会排除带有变音符和非拉丁字母的名称。
- 电话号码验证通常使用美国/西方格式,不包括国际号码和其他通信方法。
- 地址验证无法识别非标准地址(例如,邮政信箱、乡村路线、部落土地和国际格式)。
- 需要个人电子邮件地址的电子邮件验证可能会对没有个人电子邮件访问权限的用户造成不利的影响。
- **使用不同的数据测试验证规则。**在验证测试中包括国际地址、非西方名称和其他电话格式。当验证拒绝合法数据时,您必须扩展验证逻辑以避免排除有效用户。
### 区域和细分设计中的偏见
- **审查销售区域设计。**客户细分策略和销售区域设计决定了客户群之间的资源分配。当区域边界或细分标准与导致资源分配不平等的人口统计相关时,这种分配会产生歧视性结果。由于住宅隔离模式,使用地理边界的区域设计通常与种族、族裔和经济人口统计相关。如果各地区的薪酬、人员配备水平或资源投资不同,地理位置会成为歧视性资源分配的机制。
- **在最终确定设计之前,分析区域人口统计数据。**跨建议的区域边界映射客户人口统计。在出现人口集中时,评估资源分配是否在所有区域间公平,而不论人口组成如何。如果业务理由要求各区域的资源水平不同(例如,市场成熟度、竞争强度和增长潜力),请明确记录该理由并监控结果,以确保服务不足的区域获得足够的投资机会,防止根深蒂固的差异。
### 减轻自动化偏见
- **保持自动化逻辑的透明度。**在 Salesforce Knowledge 或架构决策记录中记录业务规则、分配条件和流决策逻辑。透明自动化能够以隐藏逻辑阻止的方式审查公平性。
- **定期审计结果。**计划季度审计,以分析可能按客户人口统计分层的自动化结果。请记住,差异会触发调查和潜在的补救。
- 重要的是跟踪:
- 团队和区域之间的分配
- 做出资格决定的流的批准率
- 按数据模式划分的验证规则拒绝率
- 区域绩效和资源分配
- **通过道德镜头查看高风险自动化。**影响就业、信用、服务访问或与 AI 系统相同的道德审查流程的其他结果的主题流和分配规则。自动化偏见需要与算法偏见相同的审查级别。
## 使用 Einstein 促进 AI 公平性
在 Salesforce 中,AI 公平性侧重于使用 Einstein 来验证预测是否在所有人口群体中产生公平的结果。Einstein Discovery 和自定义仪器可以捕获预测模型决策数据,从而实现偏见检测。CRM Analytics 仪表板会跟踪公平度量。Field Audit Trail 和 Event Monitoring 捕获算法问责的决策数据。
### Einstein 预测中的偏见检测
影响相应决策的 Einstein 预测(例如潜在客户评分、业务机会预测和客户细分)需要部署前公平性评估,作为强制等效步骤(类似于安全审查)。
使用统计方法分析所有预测模型特征与受保护特征的相关性。在评估代理功能的预测值是否证明尽管有代理影响仍应包含后,移除或转换代理功能。
- **在培训前审核 Salesforce CRM 数据。**Salesforce 组织包含基于历史实践的数十年人类决策。如果过去的销售团队优先考虑某些人口统计,那么 Einstein 潜在客户得分会学习这些模式并将其永久化。在对历史数据进行预测模型训练之前,重要的是要审核这些数据,以了解不同客户细分之间的人口统计表征差距和测量不一致。
- **计算跨人口统计组的公平度量。**在部署预测模型之前,计算受保护群体之间的人口均等、平等机会和不同影响率非常重要,因为您可以在这些群体中收集和处理所需的人口统计数据。如果 Einstein 潜在客户得分在 50% 的时间内将高分分配给分段 A,但只有 30% 的时间分配给分段 B,那么 60% 的比例不符合[五分之四规则](https://www.eeoc.gov/laws/guidance/uniform-guidelines-employee-selection-procedures) (80%),需要进行调查和缓解。80% 的数字是筛选触发器,而不是法律通过/失败线:五分之四规则是美国联邦就业选择的经验法则,排除它不是一个安全港 — — 在更高的比率下,统计上的重大差异值得仔细审查,而其他制度衡量负面影响的方式也不同(例如,欧盟间接歧视法开启了一个实践是否造成“特别不利”的问题,没有固定的阈值 ) 。将调查阈值校准到您操作的管辖区和用例。
- **捕获预测模型决策数据,用于偏见检测。**要检测潜在客户评分和业务机会评分等预测模型中的偏见,请通过 Einstein Discovery 和自定义仪器捕获决策数据:在跟踪字段中存储预测输入、输出和模型版本,并启用字段审计跟踪。在 CRM Analytics 中分析这些数据,以随着时间的推移跟踪人口统计组的决策模式,并构建仪表板,以便在人口统计均等或平等机会度量偏离可接受的阈值时发出警报。
- **检测预测模型中的代理特征。**与受保护特征相关的特征支持间接识别,即使受保护特征被排除在模型之外。
* Salesforce 数据通常包含代理功能:
- 地区或邮政编码(种族、族裔和收入的代理)
- 客户名称模式(组织规模和行业人口统计的代理)
- 通信活动时间(时区、宗教和护理责任的代理)
- 活动数据中的设备类型或浏览器(收入级别的代理)
### Salesforce AI 中的偏见缓解
在 Einstein 预测中检测到偏差时,您必须在适当的漏斗阶段应用缓解措施(基于根本原因和技术约束)。
- **模型训练前的余额数据。**在训练预测模型之前,通过过度抽样代表性不足的客户细分或过度抽样代表性不足的细分来重新平衡 Salesforce CRM 数据。使用 Data 360 在多个组织中聚合数据,以确保不同的训练集。合成数据生成可以通过不同的隐私技术来补充稀疏细分,同时保护隐私。
- **删除功能工程中的代理。**在识别代理功能时,使用提供预测功能的替代功能进行替换,而无需人口统计相关性。如果区域用作人口统计代理,则考虑行业分类或公司规模作为替代。如果客户名称模式与人口统计相关,请改用公司历史属性。
- **在后处理期间调整阈值。**调整每个人口细分的决策阈值,以平衡训练模型后的结果率。对于与就业相关的决定,直接禁止:[第七](https://www.eeoc.gov/statutes/title-vii-civil-rights-act-1964)章(1991年民权法)禁止按受保护阶级调整分数或使用不同的截止分数,而且没有多少书面理由使这种做法合法。在未禁止的情况下,记录阈值调整,并在预测为自动决策提供信息时说明区别对待的业务理由。
- **使用更新的数据定期重新训练模型。**每季度计划一次模型再培训(或当发生重要的数据分发轮班时)。对新数据进行重新训练会捕捉新出现的偏见模式,并纠正任何偏离原始公平基线的情况。在生产部署之前,重新验证每个模型版本的公平性度量,以确保重新培训不会引入新的偏见。
## 使用 Einstein 审计和解释工具启用透明度
Einstein Trust 层捕获生成式 AI 和 Agentforce 功能的提示、响应和 Trust 信号,支持生成式 AI 的透明度和合规性。对于预测模型,透明度和决策谱系来自 Einstein Discovery 和模型管理器,这需要自定义仪器来保留审计数据。
### Einstein 预测的可解释性
从初始架构到 Einstein 解决方案构建可解释性,而不是在部署后将解释重新构建到不透明的系统上。
- **在决策点展示 Einstein Discovery 解释。**Einstein Discovery 提供预测因素解释,显示哪些变量对具有方向性影响的特定预测影响最大。架构师 Lightning 组件,在决策点向用户显示这些解释,而不是需要导航来分离 CRM Analytics 仪表板。当决策影响用户时,他们需要透明度,而不是抽象的模型性能度量。
- **不同受众的分层解释。**提供适合每个受众的解释深度:
- **业务用户:**该潜在客户得分很高,因为年收入超过 100 万美元,参与度得分排名前 10% 。 "
- **技术用户:**提供 Einstein Discovery 模型卡,其中包含功能权重、训练数据特征和验证度量。
- **客户:**"此推荐基于您最近的购买和具有相似首选项的客户。"
- **审核员:**提供通过自定义仪器捕获的 Einstein Discovery 和模型管理器的决策谱系(模型版本、输入值和推动预测的因素)。
- **适当沟通信心。**以用户适当的术语显示预测置信度,并避免用户可能误解的原始概率分数。与其显示“73% 的置信度”,不如使用类别(例如,高置信度、中等置信度和需求审查)来传达这一点,并解释每个置信度级别对决策可靠性意味着什么,以及将进行哪些额外的审查。
### AI 驱动的决策的审计跟踪
维护全面、不可变的审计跟踪,支持对影响用户的所有 AI 驱动的决策进行问责、调试和监管合规。
- **使用正确的工具捕获预测性审计数据。**在启用了字段审计跟踪的被跟踪字段中存储预测模型审计数据(预测输入、输出和模型版本)。构建数据保留策略,以满足因行业和司法管辖区而异的监管要求:
* 金融服务规则根据条例设置保留期(例如,[FINRA 规则 4511(b)](https://www.finra.org/rules-guidance/rulebooks/finra-rules/4511) 为根据 FINRA 规则或 [SEA 规则 17a-4](https://www.law.cornell.edu/cfr/text/17/240.17a-4) 没有指定保留期的记录设置默认六年保留期 ) 。
* 医疗保健保留也受特定规则的约束(例如,[HIPAA](https://www.hhs.gov/hipaa/index.html) 要求合规文档至少保留 6 年;病历保留由各州法律制定 ) , 而不是一揽子无限期保留规定。
- **使用 CRM Analytics 分析预测模型决策数据。**根据您捕获的预测模型决策数据(被跟踪字段中的预测输入、输出和模型版本)构建 CRM Analytics 仪表板,以分析决策模式、公平度量和模型随时间的变化。创建按置信度、人口细分和结果类型显示预测分布的镜头。配置 Einstein Discovery 数据趋势图,识别需要进一步调查的异常模式。
- **使用字段审计跟踪进行长期保留。**标准字段历史会在 UI 中跟踪 18 个月的变化,并通过 API 跟踪最多 24 个月的变化。字段审计跟踪允许您无限期地保留存储 AI 决策数据的自定义对象的字段历史。默认情况下,它会在最多 18 个月后归档历史,然后保留归档的数据,直到您将其删除。对包含同意记录、覆盖决策和偏见报表的对象启用字段审计跟踪,以满足监管保留要求。
- **使用 Event Monitoring for Agentforce interaction.**Event Monitoring 会捕获 Agentforce 的调用级事件,例如在操作和流运行时。将 Event Monitoring 数据导出到外部 SIEM(通过 API 导出标准事件日志文件数据,通过平台事件导出实时 Event Monitoring 事件子集),以便存储超过 Salesforce 本地保留窗口。篡改证据取决于强制实施一次写入存储和访问隔离的特定 SIEM 行为。配置 SIEM 查询,以检测大量 Agentforce 交互中的偏见模式。
- **审核 Agentforce 与 Einstein Trust 层的对话。**Einstein Trust 层捕获存储在 Data 360 中的 Agentforce 对话提示和响应的审计跟踪,为实现透明度和法规遵从性提供脚本级记录。
### 增强监管合规定位
让我们仔细看看架构师的透明度功能,这些功能旨在遵守跨多个司法管辖区的当前和新兴 AI 法规。
- **欧盟 AI 法案透明度要求。**[欧盟 AI 法案](https://eur-lex.europa.eu/eli/reg/2024/1689/oj)下的高风险 AI 系统需要透明度文档、技术文档、人员监督能力和准确性/公平性度量。Einstein Trust 层审计跟踪和 Einstein Discovery 模型卡为这些要求提供了基础。记录模型训练数据人口统计、验证方法和架构决策记录中的已知限制。
- **GDPR 解释权。**GDPR 赋予欧盟数据主体权利,当决策完全基于自动化处理并产生法律或类似重大影响时,有权获取有关决策逻辑的有意义信息。这项权利源自[第15(1)(h)](https://gdpr-info.eu/art-15-gdpr/)和[第22(3)](https://gdpr-info.eu/art-22-gdpr/)条,与[建议71](https://gdpr-info.eu/recitals/no-71/)一并解读,并由欧洲法院在[*Dun & Bradstreet (2025)*](https://curia.europa.eu/)中澄清。设计系统,以便在数据主体访问请求时间范围内按需对任何历史决策生成一致的解释,该时间范围在 15 到 45 天之间(取决于司法管辖区)。您捕获的预测模型决策数据 — 预测输入、输出、模型版本和 Einstein Discovery 解释因素 — 使您能够在存储时以足够的保留重新构建解释。
- **算法问责法。**美国州级算法问责法越来越多地要求自动化决策系统提供影响评估和透明度报告。您捕获的预测模型决策数据和 CRM Analytics 公平性监控仪表板为这些报表提供了数据基础。在将后续 AI 部署为主动合规而不是对监管查询的反应性响应之前,请执行算法影响评估。
## 使用组织范围的默认值 (OWD) 和共享规则促进不歧视
OWD、共享规则和字段级安全性 (FLS) 塑造了数据访问模式,决定了用户可以查看和使用哪些信息来做出决策。正确的配置可以防止对敏感属性的歧视性访问,同时确保公平的服务。
### 为公平设计数据访问架构
设计 OWD 和字段级安全性,以默认限制访问权限。对于共享规则,使用最小特权 (PoLP) 原则,仅授予每个角色合法需要的额外访问权限,这将防止基于受保护特征的歧视性决策。
- **默认启用限制性 OWD。**对包含敏感客户数据的对象使用专用 OWD,并按角色层次结构和共享规则授予访问权限。公共读/写 OWD 使稍后限制访问具有破坏性 — 收紧默认设置会触发共享重新计算,并且仅在完成后生效 — 而不是不可能。具有明确共享拨款的私有 OWD 创建了支持不歧视合规的可审计访问模式。
- **对敏感属性应用字段级安全性。**对于出于合法商业目的不需要访问权限的用户,隐藏包含受保护特征(例如,种族、宗教和残疾状态)的敏感字段。配置 FLS,以删除大部分简档中敏感字段的读取权限。当这些字段出于特定目的(例如,多样性报告和合理便利)需要时,使用具有记录的业务理由的权限集授予最低访问权限。
- **设计公平结果的分配和共享规则。**使用分配规则、队列和全方位路由,以在区域、团队和服务客服人员之间公平分配工作。避免在没有书面业务理由的情况下,将高价值业务机会或客户集中在特定用户群的手动共享。根据客观标准(例如,行业、地理位置和产品线)配置自动共享规则,而不是主观的经理酌处权,这可能会导致偏见。
- **提供临时访问权限集。**通过权限集授予对敏感数据的临时访问权限,而不是修改简档,这将永久影响所有用户。当用户需要访问特定项目的人口统计数据时(例如,多样性分析和住宿请求),分配具有记录到期时间的权限集。计划的流可以在定义的期间后自动撤销权限集。
### 检测歧视性访问模式
使用 Shield Event Monitoring 和报表来检测表明数据使用中潜在歧视或偏见的数据访问模式。
- **使用 Shield Event Monitoring 审核对敏感数据的访问权限。**使用 Event Monitoring 捕获包含受保护特征或敏感属性的对象上的对象级访问事件(报表导出、API 查询和页面视图)。配置对这些事件的查询,以显示谁、何时以及在什么上下文中访问该对象,并将异常模式(例如,突然峰值和意外用户的访问)视为调查的触发器。
- **共享规则分配的报表。**构建报表,分析记录如何在用户、团队和区域之间分发。按客户人口统计计算分配统计数据,以确保高价值客户和业务机会得到公平分配。确定特定用户组在没有记录的业务理由的情况下获得对宝贵记录的过度访问的集合。
- **审计 CRUD 和 FLS 违规。**查看设置审计跟踪,了解对 OWD 设置、共享规则、FLS 配置和权限集的更改。对数据访问控制的未授权更改可能表示有人试图不适当地访问敏感数据。使用事务安全性策略对高风险实时 Event Monitoring 事件采取行动(例如,异常 API 活动、可疑登录和敏感数据的大报表或列表视图导出)。由于事务安全性仅对这些运行时事件进行操作,而不是对记录级 DML 或 FLS 更改进行操作,因此您必须依赖设置审计跟踪和 FLS 和共享更改的文档化更改管理批准。
## 用户代理和同意管理
在 Salesforce,用户代理意味着客户和员工对 AI 如何影响他们的体验保持有意义的控制。Salesforce 同意管理功能、Data 360 同意和自定义同意对象支持对 AI 交互进行精细控制。
### Salesforce 同意架构
使用 Data 360 同意管理、Marketing Cloud 同意或使用特定于 AI 的同意要求的字段审计跟踪的自定义同意对象来设计同意跟踪。
- **为每个 AI 用例启用粒度同意。**启用每个 AI 用例的同意,而不是使用一揽子 AI 同意。客户可能同意 Einstein 产品推荐,但拒绝 AI 驱动的信用决策。启用同意对象的字段审计跟踪,以便长期保留并满足监管要求。使用跟踪以下字段设计自定义同意对象:
- 同意目的(例如 Einstein 潜在客户评分、Einstein 回复推荐和 Einstein 推荐生成器)
- 同意授予日期和授予方法(例如,Web 表单、API、电话和电子邮件)
- 同意撤销日期(如果适用)
- 相关用户或联系人 ID
- **使用 Data 360 同意进行个性化。**将 Data 360 同意管理用于 Einstein 个性化功能。Data 360 通过映射到隐私数据模型的连接器从上游系统接收和存储同意首选项,这允许您在细分和激活时将这些同意属性用作筛选条件。将同意属性映射到特定的 AI 用例,使用户能够选择退出个性化,同时还能维护核心服务
- **启用 Marketing Cloud 同意集成。**将 Marketing Cloud 同意与 Einstein 消息传递见解和 AI 驱动的市场营销功能集成。在所有 AI 驱动的通信中,尊重 Marketing Cloud 订阅状态和同意。
*
### 提供选择退出和人工替代
通过质量相当的人工替代方案,通过尊重用户首选项的可访问控制,从 AI 驱动的功能中提供有意义的退出。
- **在简档设置中提供可访问的选择退出。**使用户能够通过 Experience Cloud 简档设置中的可访问首选项控制或内部应用程序中的“我的设置”选择退出 AI 驱动的交互。清楚地描述每个选择退出的含义,以及用户在选择退出时将收到的替代体验。在用户或联系人记录中存储首选项。
- **跨渠道提供持久首选项选项。**在用户或联系人记录中存储 AI 首选项,以确保渠道之间的一致性(例如,Web、手机、电话和电子邮件)。在所有交互流中一致地查询首选项,以防止用户需要在不同渠道中重复声明首选项。
## 实践符合道德的 AI 治理
符合道德的 AI 治理提供了组织结构,有助于确保公平性随着模型的发展、数据转移和用例的扩展而持续存在。如果没有治理,最初的公平努力会随着组织注意力的转移而恶化。
### 模型文档和部署网关
在部署 Einstein 之前,建立强制文档并检查检查点。将其视为与安全审查同样重要的大门。
- **提供模型文档。**使用自定义模型对象或附加到项目的 Salesforce Files,在 Salesforce 中存储模型文档,以实现可搜索性和版本控制。使用以下内容记录每个生产预测模型:
- 训练数据人口统计和已知表征差距(适用于客户训练的预测模型,例如 Einstein Discovery 和预测生成器)
- 按人口统计组计算的部署前公平度量
- 预期用例和已知不当使用
- 开发期间应用的偏见缓解策略
- 公平性监测方法和警报阈值
- 人员监督要求和审批工作流
- 审查时间表和责任方
- 监管注意事项和合规定位
- **启用部署前公平大门。**未通过任何网关测试的模型不得继续生产。将公平门视为与安全门相同的严格程度。换句话说,它们拥有阻止部署的权限。在将 Einstein 预测部署到生产之前,您必须:
- **审查培训数据审计。**必须分析和记录所有代表性差距。
- **审查公平度量**(例如,必须计算并确认人口统计均等、平等机会和差别性影响,以满足阈值 ) 。
- **审查影响评估。**评估受影响人群的潜在伤害。
- **设计要有人工监督。**所有升级模式、批准工作流和覆盖机制必须经过适当的设计和测试。
- **完成透明度审查。**必须验证所有决策类型的解释功能。
- **完整文档。**所有必需的模型文档工件必须获得批准。
### 建立 AI 道德审查委员会
为高风险 AI 应用程序建立审查流程,提供跨职能监督并拥有执法权限。
- **审核委员会组成。**包括技术专家(例如,架构师和数据科学家)、业务利益相关者(例如,产品所有者和运营人员)、法律顾问、隐私专家和受影响社区的代表(如果可能)。请谨记,不同视角会暴露出同质群体经常忽略的公平问题。
- **查看需要道德委员会批准的所有触发器。**定义哪些 AI 用例需要在部署前进行道德审查:
- 影响就业、信贷、住房、医疗保健或法律权利的决定
- 每年影响超过 10,000 个用户或交易的自动化系统
- 使用敏感个人数据的 AI 应用程序,包括健康、财务或人口统计数据
- 没有既定组织先例的新用例
- 潜在偏见可能对个人或群体造成重大伤害的系统
- **查看并确定谁有权阻止部署。**道德审查委员会应有权要求更改、强制实施监控条件或阻止不符合道德标准的部署。仅提供咨询的审查(没有强制执行的权力)可能会限制治理过程的有效性。记录 Salesforce 自定义对象中跟踪的所有审核:申请名称、审核日期、提出的顾虑、缓解要求和批准条件。
### 实践持续公平性监控
公平性监控是一个持续的过程,需要持续关注,以随着数据分布的变化和用户群体的变化检测偏差。
- **创建 CRM Analytics 公平仪表板。**使用您捕获的预测模型决策数据构建跟踪公平度量的仪表板。按客户细分监控人口统计均等、业务机会平等、不同影响比率和预测质量度量。配置 CRM Analytics 警报,这些警报会在公平度量违反定义的阈值并需要调查时触发。
- **启用公平信号的自定义监控。**构建自定义公平性监控来检测信号(例如,按人口统计组划分的决策分布的突变、与偏见相关的个案记录的峰值或特定人群的模型性能下降)。
- **计划公平性审计。**对高风险的 AI 系统(例如,信贷、就业和医疗保健)进行全面的季度公平审计,对低风险的系统(例如,推荐和个性化)进行半年期审计。审计应检查当前的公平度量,审查批准历史中的覆盖模式,分析用户反馈和偏见报表,并验证治理控制是否仍然有效。
- **对公平失败实施事件响应。**建立清晰的流程,这些流程在 Salesforce Knowledge 中记录,详细描述了在检测到偏见时如何响应:
- **即时:**通过在 CRM Analytics 中查询预测模型决策数据,评估严重性和范围。如果事件严重,在调查前暂停所有自动决策。
- **短期:**实施临时缓解策略(例如,通过调整置信度阈值、禁用功能或完全暂停客服人员来增加人员监督)。
- **调查:**完成根本原因分析 (RCA),以确定偏见如何进入系统或演变。在 RCA 期间,通过现场审计跟踪分析培训数据、模型版本和配置更改。
- **补救:**通过数据更正、模型重新训练或流程更改实施永久修复。
- **通信:**通过个案、电子邮件或 Experience Cloud 公告通知受影响的用户。
- **预防:**处理更改以防止重复发生,并在 Runbook 中记录预防方法。
## 填写汇总核对清单
在架构审查期间、生产部署之前,使用此核对清单,并定期进行持续评估。
**数据质量和代表性公平性**
- 在进程可以运行而没有数据的情况下,使字段成为可选字段,并设计下游进程来处理缺失的值,这样无法提供信息(电子邮件、SSN、街道地址)的用户就不会被排除在外。
- 架构师姓名字段作为单个全名字段或灵活的多部分结构,接受单名、非拉丁字母、变音符和长名称,而不是假设西方的首尾顺序。
- 实施允许的地址验证,接受自由格式和国际格式,存储输入的地址,而不是在格式不匹配时阻止创建记录。
- 在联系人记录中存储通信渠道首选项,并支持全方位替代(电子邮件、短信、电话、邮寄、聊天、语音),而不是假设一个渠道可以联系到所有用户。
- 通过带有“宁愿不回答”选项的自愿自我识别收集人口统计数据,单独存储在带有 FLS 的专用 OWD 下,汇总用于报告,并通过 Shield Event Monitoring 进行监控。
- 在将人口统计或行为数据附加到记录之前,审核第三方丰富供应商的公平性测试、人口统计覆盖率和推理方法。
**可访问性和包容性设计**
- 使用 Lightning 设计系统组件,这些组件旨在支持 WCAG 2.2 AA 可访问性。请谨记,Salesforce 力求合规,但组件仍需要正确使用。
- 通过屏幕阅读器测试(例如 JAWS、NVDA 和 VoiceOver),验证自定义 Lightning Web 组件。
- 确保 Lightning 页面和 Experience Cloud 站点中存在完整的键盘导航,而不依赖于鼠标。
- 使用浏览器开发工具或对比度检查器,验证正常文本的对比度是否达到 4.5:1。
- 在失败的 CI/CD 漏斗中集成 sa11y 或 Lighthouse 可访问性扫描,构建关键问题。
- 在公开发布前,使用辅助技术测试 Experience Cloud 站点。
- 通过确认所有动态更改(例如,错误状态、加载微调器或展开菜单)都已明确宣布,并且口语内容与 UI 的视觉意图相匹配,来验证听觉反馈。
**Salesforce 自动化的公平性**
- 查看分配和路由规则,了解与受保护特征的相关性,这些特征可以将有利或不利的结果集中在特定的人口统计组中。
- 审核流和流程自动化决策逻辑是否存在偏见,在 Salesforce Knowledge 或架构决策记录中记录业务规则和标准。
- 评估不成比例地影响特定数据模式或人群的拒绝率的验证规则。
- 分析区域和细分设计的人口统计相关性,记录明确的业务理由,并监控服务不足的区域,以实现公平的资源分配。
- 将高风险流和分配规则(就业、信贷、服务访问)置于与 AI 系统相同的道德审查流程中,并计划按人口统计分层的自动化结果的季度审计。
**AI 公平和偏见检测**
- 在预测模型训练之前,审核 Salesforce CRM 数据中人口统计表征的差距。
- 在部署前,计算每个人口统计组的人口统计均等、平等机会和不同影响率。
- 实施公平性评估作为强制部署网关(将此视为相当于安全审查)。
- 使用通过字段审计跟踪捕获的预测模型决策数据,构建跟踪公平度量的 CRM Analytics 仪表板。
- 分析预测模型功能,了解代理与受保护特征的相关性(例如,区域和客户名称模式)。
- 为所有高风险 AI 系统安排全面的季度公平性审计。
**透明度和可审计性**
- 在 Lightning 组件的决策点显示 Einstein Discovery 预测解释。
- 使用满足监管要求的保留方法配置 Einstein Trust 层审计捕获。
- 在存储 AI 决策数据以便长期保留的所有自定义对象上启用字段审计跟踪。
- 将 Event Monitoring 数据导出到外部 SIEM(通过 API 导出事件日志文件数据,通过平台事件导出实时 Event Monitoring 事件),以便存储超过本地保留,SIEM 侧的一次性写入控制用于篡改证据。
- 提供适合用户的置信度通信(例如,高、中和低),而不是原始概率。
**使用 Salesforce 自动化进行人工监督**
- 在流中配置基于置信度的升级阈值,并将低置信度预测路由到人工审核。
- 将 Salesforce 审批流程用于需要多阶段审查链的高风险决策。
- 集成 Agentforce 和全方位路由,支持无缝升级到人工客服人员。
- 在 Agentforce 界面中提供持续的“连接到人工客服人员”选项,以尊重用户代理。
- 对于在自定义字段中捕获的 Agentforce 覆盖,需要记录的理由和批准历史跟踪。
**通过数据访问控制实现不歧视**
- 启用专用 OWD,然后通过角色层次结构和共享规则授予其他访问权限。
- 配置字段级安全性,以对不需要访问权限的用户隐藏敏感人口统计字段。
- 通过 Shield Event Monitoring 监控敏感数据的对象级访问事件(报表导出和 API 查询),并分析异常访问模式。
- 构建分析共享规则分配的报表,以确保跨区域的公平记录分配。
- 查看设置审计跟踪,了解未经授权的 OWD、共享规则或 FLS 配置更改。
**用户代理和同意**
- 使用字段审计跟踪设计自定义同意对象,以跟踪每个用例的 AI 同意。
- 将 Data 360 或 Marketing Cloud 同意与 Einstein 个性化和 Agentforce 功能集成。
- 在用户或联系人记录中存储 AI 首选项,以确保渠道之间的一致性(例如,Web、手机和手机)。
- 通过全方位路由,在简档设置和人工替代项中提供可访问的选择退出。
- 在 Einstein 预测或 Agentforce 参与影响用户之前,在流中查询同意记录。
**符合道德的 AI 治理**
- 记录所有生产预测模型,包括公平度量和缓解策略;对于客户训练的预测模型(例如 Einstein Discovery 和预测生成器),还要记录训练数据人口统计数据。
- 建立强制部署前公平大门,阻止部署,直到满足所有公平标准。
- 创建 AI 道德审查委员会,作为所有高风险 AI 应用程序的强制执行机构。
- 构建 CRM Analytics 仪表板,以通过 CRM Analytics 警报按计划节奏监控公平度量。
- 为公平失败定义事件响应程序,并在 Salesforce Knowledge 中记录该过程。
- 安排季度公平审计,分析所有高风险系统的覆盖模式和用户反馈。
分享您对良好架构框架的反馈。
# 公平性 — 模式
公平性支柱侧重于可访问性、AI 道德、人的监督、偏见缓解和公平的设计,因此解决方案公平地为所有用户服务。这些模式将支柱的设计原则转化为具体的、可审查的实践:解决方案中寻找什么,好的是什么样子,以及破坏它的反模式。
## 设计原则
这些模式将公平性支柱的设计原则付诸实践。这些原则为架构决策提供信息,但它们本身并不会产生公平的结果 — 与[公平支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/fairness.md)一起阅读它们,以获取每项原则背后的完整指导。
- **设计 Lightning 可访问性模式**----使用 SLDS 和经过 WCAG 2.2 AA 审查的标准 Lightning Web 组件构建,并通过辅助技术测试验证任何自定义组件。
- **使用适合每种模型类型的工具减少和监控偏差** — 使用适合每种模型类型的工具,在部署前和生产中验证模型输出以获得公平的结果。
- **利用 Shield Platform Encryption 进行数据保护控制** -- 保护敏感属性并将 Event Monitoring 日志路由到 SIEM 进行明显的篡改审计跟踪。
- 为高风险预测**设计审查工作流** — 配置审批流程和置信度阈值,以便相应的预测得到适当的人工审查。
- **应用组织范围默认设置 (OWD) 和字段级安全性 (FLS) 实现不歧视** — 默认限制访问权限,并仅授予每个角色所需的权限,避免暴露敏感属性。
- **通过平台同意**启用用户代理 — 跟踪每个用例的精细 AI 同意,并让用户尽可能选择退出具有人工替代项的 AI 驱动的功能。
## 如何使用这些模式
每个类别将**模式**(看起来不错)与**反模式**(应避免的内容)配对,这样您就可以逐个地区查看解决方案。从您需要的公平结果开始:
- **使体验对每个人都可用?**使用**可访问性**实现 WCAG 合规性、辅助技术支持和包容性设计。
- **构建负责任、公平的 AI?**将 **AI 道德**用于偏见缓解、公平度量、人力监督、不歧视和同意。
- **生产中的操作客服人员?**使用**客服人员模式**进行偏见检测、透明 AI 和公平的客服人员行为。
## 模式类别
### [可访问性](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/fairness-accessibility-patterns.md)
WCAG 合规性、辅助技术支持、包容性设计和可访问用户体验的模式。
### [代理模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/fairness-agentic-patterns.md)
客服人员系统的公平模式,包括偏见检测、透明 AI 和公平的客服人员行为。
### [AI 道德](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/fairness-ai-ethics-patterns.md)
道德 AI 开发、偏见缓解、公平度量、人类监督、不歧视、同意和负责任的 AI 实践的模式。
## 相关资源
- [公平支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/fairness.md) — 这些模式实施的设计原则和架构指导
- [客服人员企业公平](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-fairness.md) — 基于客服人员的解决方案的公平指导
- [架构良好的框架](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/framework.md) — 公平性如何与其他支柱相结合
- [模式和反模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/patterns-and-anti-patterns.md) — 所有支柱的完整模式库
# 共享责任模型 - 模式
了解更多关于 Well-Architected [Trust](/docs/architect/zh-cn/well-architected/guide/trust.html) → [The Shared Responsibility Model](/docs/architect/zh-cn/well-architected/guide/trust.html#the-shared-responsibility-model)
## 了解平台责任
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 安全性 | ✅ 架构设计假设物理数据中心安全、监控和环境保护措施由 Salesforce(或适用于 Hyperforce 的 AWS)处理 |
| 平台 \| 安全性 | ✅ 网络安全设计利用平台提供的 DDoS 缓解和入侵检测系统,无需重复投资 |
| 平台 \| 安全性 | ✅ 所有传输中 (TLS 1.2+) 和静态 (AES-256) 的流量加密均由平台基础设施提供 |
| 平台 \| 安全性 | ✅ 平台强化、漏洞管理和补丁部署是 Salesforce 的责任;架构师围绕计划的维护时段进行规划 |
| 平台 \| 安全性 | ✅ 确保数据分离的多租户安全性和租户隔离架构是平台提供的保证 |
| 平台 \| 合规性 | ✅ 平台合规性认证(SOC 1/2/3、ISO 27001/27017/27018、FedRAMP for Government Cloud 产品、HIPAA、PCI DSS、GDPR)可在 Trust.salesforce.com 和 compliance.salesforce.com 获得 |
| 平台 \| 安全性 | ✅ 平台加密服务和备份基础架构是架构师利用的平台管理功能,无需实施责任 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 安全性 | 架构设计包括自定义物理安全控制、网络周边防御或操作系统级加固,复制平台提供的功能 |
| 平台 \| 安全性 | 安全审查静态平台加密或网络安全问题,无需咨询 Trust。现有控制的salesforce.com 文档 |
| 平台 \| 合规性 | 合规性评估重新审核平台基础设施安全控制,而不是利用现有的 SOC 2/ISO 认证 |
| 平台 \| 安全性 | 架构负责修补平台基础设施或管理多租户隔离 |
## 了解客户责任
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 身份 | ✅ 身份和访问权限管理(角色、简档、权限集、MFA、SSO、最低权限)由架构师设计和配置 |
| 平台 \| 身份 | ✅ 用户生命周期管理和访问权限重新认证流程通过记录的季度审查实施 |
| 平台 \| 数据 | ✅ 数据治理包括分类、屏蔽、对象/字段/记录级安全性、CRUD 权限和共享规则是架构师的责任 |
| 平台 \| 集成 | ✅ 集成安全性(OAuth 2.0、JWT 身份验证、命名凭据、安全端点、外部系统验证)由架构师设计和维护 |
| 平台 \| 安全性 | ✅ 监控和响应功能(事件监控、审计跟踪、SIEM 集成、事件响应程序)由架构师实施 |
| 平台 \| 开发 | ✅ 应用程序安全性,包括安全自定义代码(Apex、Lightning)、输入验证、注入防护和安全开发实践,是架构师和开发人员的责任 |
| 平台 \| 合规性 | ✅ 解决方案通过隐私/同意管理、数据保留策略和符合监管要求的合规配置来保持合规状态 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 身份 | 身份和访问权限管理被视为“平台安全性”,无需设计角色、简档、权限集或 MFA 要求 |
| 平台 \| 数据 | ⚠ 假设数据治理是平台提供的;未配置数据分类、共享规则或字段级安全性 |
| 平台 \| 集成 | 集成安全性依赖于网络级控制,无需实施 OAuth、凭据管理或端点验证 |
| 平台 \| 安全性 | 监控和事件响应被视为 Salesforce 的职责;不存在 Event Monitoring、SIEM 集成或响应程序 |
| 平台 \| 开发 | 自定义代码安全性未验证;注入漏洞、缺少 CRUD/FLS 实施和不安全模式累积 |
| 平台 \| 合规性 | 合规配置从未实施;解决方案违反了监管要求,尽管通过了平台认证 |
## 利用平台证书
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 合规性 | ✅ 合规文档中引用的平台认证(SOC 2 Type II、ISO 27001、FedRAMP for Government Cloud 产品、HIPAA、PCI DSS、GDPR)涵盖了基础设施的责任 |
| 平台 \| 合规性 | ✅ 审计准备利用 trust.salesforce.com 和 compliance.salesforce.com 文档进行平台基础设施控制 |
| 平台 \| 合规性 | ✅ 合规性文档清楚地描述了平台提供的认证与架构师实施的自定义解决方案的控制 |
| 平台 \| 架构 | ✅ 自定义对象、Apex 代码、集成和配置旨在保持平台提供的合规性 |
| 平台 \| 合规性 | ✅ 架构文档明确映射自定义解决方案如何在利用平台认证的同时满足监管要求 |
| 平台 \| 合规性 | ✅ 区域认证和合规要求推动了组织配置期间的 Hyperforce 区域选择 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 合规性 | 假设平台认证涵盖了所有合规义务;未实施自定义解决方案控制 |
| 平台 \| 合规性 | 审计准备尝试重新审计平台基础设施控制,而不是引用现有认证 |
| 平台 \| 架构 | 自定义代码、配置和集成违反了合规性要求,尽管平台拥有适当的认证 |
| 平台 \| 合规性 | 合规文档未将平台认证与架构师实施的控制明确分开 |
| 平台 \| 合规性 | 架构缺少文档映射,无法说明自定义解决方案如何在利用平台认证的同时保持合规性 |
## 责任边界理解
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 安全性 | ✅ 事件响应程序文档协作:Salesforce 提供平台检测和响应;架构师提供解决方案级检测和响应 |
| 平台 \| 安全性 | ✅ 漏洞管理责任已明确记录:Salesforce 补丁平台;架构师修补自定义代码和已安装软件包 |
| 平台 \| 安全性 | ✅ 安全监控将平台生成的事件 (Event Monitoring) 与架构师配置的分析、警报和响应工作流相结合 |
| 平台 \| 架构 | ✅ Trust 支柱中的每个设计原则、主题部分和核对清单项目都被视为共享责任模型中的架构师责任 |
| 平台 \| 安全性 | ✅ 设计决策明确引用分担责任模型边界,区分平台提供的控制和架构师配置的控制 |
| 平台 \| 架构 | ✅ 架构决策记录记录了安全控制、合规性要求和事件响应的责任边界 |
| 平台 \| 安全性 | ✅ 安全审查验证架构师的责任(配置、访问控制、自定义代码)是否在平台提供的基础上适当实施 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 安全性 | 事件响应程序假设 Salesforce 处理所有方面;不存在解决方案级别的检测、响应或恢复功能 |
| 平台 \| 安全性 | 漏洞管理不解决自定义代码;仅考虑平台补丁 |
| 平台 \| 安全性 | 安全监控完全依赖于平台本地工具,无需架构师配置的分析或响应工作流 |
| 平台 \| 架构 | 设计决策未引用共享责任模型;对于谁负责确保 |
| 平台 \| 架构 | 架构决策记录忽略责任边界;安全假设是隐式而非显式的 |
| 平台 \| 安全性 | 安全审查假设平台认证消除了架构师的安全责任 |
## 特定于行业的合规责任
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 医疗保健 \| HIPAA | ✅ 为包含受保护健康信息 (PHI) 的所有字段启用 Shield Platform Encryption |
| 医疗保健 \| HIPAA | ✅ 字段审计跟踪配置为保留,满足 HIPAA 对 PHI 访问跟踪的记录保留要求(根据管理法规确认当前期间) |
| 医疗保健 \| HIPAA | ✅ 事件监控被配置为通过路由到安全团队的警报来检测未经授权的 PHI 访问模式 |
| 医疗保健 \| HIPAA | ✅ HIPAA 安全规则要求的技术保障(访问控制、审计日志、传输安全性)通过架构师配置实施 |
| 财务 \| SOX/PCI | ✅ 通过权限集设计实现职责分离,防止单个用户创建和批准财务交易 |
| 财务 \| PCI DSS | ✅ 尽可能将完整的主要客户编号 (PAN) 排除在 Salesforce 之外,并通过付款处理器进行令牌化,以减少范围;在必须存储 PAN 的地方,它使用 PCI DSS 控制下的加密自定义字段 |
| 隐私 \| GDPR/CCPA | ✅ 同意管理通过精细的按用途的同意跟踪和撤销工作流实施 |
| 隐私 \| GDPR/CCPA | ✅ 数据主体权利工作流(访问、更正、擦除、可移植性)在响应窗口中完成部署的管理法规集 |
| 隐私 \| GDPR/CCPA | ✅ 数据保留自动化会在同意到期或保留期结束时清除数据 |
| 政府 \| FedRAMP | ✅ Salesforce Government Cloud 用于需要 FedRAMP 合规的受监管政府工作负载 |
| 政府 \| FedRAMP | ✅ NIST 800-53 控件映射到 Salesforce 配置,并为每个适用控件提供了文档化实施 |
| 政府 \| FedRAMP | ✅ 使用 Event Monitoring 进行连续监控会路由到政府 SIEM 基础设施,以进行实时威胁检测 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 医疗保健 \| HIPAA | PHI 存储在没有 Shield Platform Encryption 或字段审计跟踪的标准加密字段中 |
| 医疗保健 \| HIPAA | 事件监控未配置为检测未经授权的 PHI 访问;违规发生时未检测到 |
| 财务 \| SOX/PCI | 单个用户可以创建和批准财务交易;不强制职责分离 |
| 财务 \| PCI DSS | ⚠ 完整的主要客户编号 (PAN) 存储在标准 Salesforce 字段中,无需加密,而是使用付款处理器令牌化或兼容 PCI DSS 的加密存储 |
| 隐私 \| GDPR/CCPA | ⚏ 未实施同意管理;数据处理没有精细的同意或撤回功能 |
| 隐私 \| GDPR/CCPA | ⚏ 数据主体权利请求通过法律团队手动处理,而不是根据法规的响应窗口调整自动化 |
| 隐私 \| GDPR/CCPA | ⚠ 数据保留是手动的;尽管同意书或保留期已过,数据仍会无限累积 |
| 政府 \| FedRAMP | 受监管的政府工作负载在商业 Salesforce 实例上运行,而不是 Government Cloud |
| 政府 \| FedRAMP | NIST 800-53 控件缺少与 Salesforce 配置的文档映射;存在合规性差距 |
| 政府 \| FedRAMP | 事件监控未路由到政府 SIEM;未满足连续监控要求 |
## 安全资产库存
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 安全性 | ✅ 具有关键系统权限(查看所有数据、修改所有数据、管理用户)的用户作为提升权限的资产进行清点和跟踪 |
| 平台 \| Shield Event Monitoring | ✅ Event Monitoring 捕获事件日志,涵盖登录、报表和数据导出、权限更改和 API 调用,以进行安全分析 |
| 平台 \| Shield Event Monitoring | ✅ Event Monitoring 日志被路由到外部 SIEM 平台,以便与非 Salesforce 安全事件相关联 |
| 集成 \| SIEM | ✅ SIEM 关联规则检测权限升级,例如批准更改窗口之外的权限更改和超过基准的 API 量异常 |
| 集成 \| SIEM | ✅ SIEM 仪表板提供了安全资产变化的可见性,例如特权用户授予和数据导出 |
| 平台 \| 文档 | ✅ 安全资产清单记录有资产类别(用户、数据、集成、软件包、配置)、所有者和审查节奏 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 安全性 | ⚏ 安全资产库存在创建后立即过时的电子表格中手动维护 |
| 平台 \| 安全性 | ⚠ 通过部落 Knowledge 跟踪安全资产,无需在事件期间访问可记录、可查询的库存 |
| 平台 \| 安全性 | 安全审计仅在年度合规性审查期间进行,两次审计之间没有持续监控 |
| 平台 \| 安全性 | ⚏ 安全资产库存已收集,但从未审核;休眠客户、孤立集成和过度权限会无限期存在 |
| 平台 \| 安全性 | 官方集成用户被跟踪,但业务部门绕过安全审查和凭据轮换策略创建临时连接的应用程序 |
| 平台 \| Shield Event Monitoring | 事件监控已启用,但事件不会路由到 SIEM;安全事件在 Salesforce 中保持孤立,没有相关性 |
| 平台 \| 集成 | 影子 IT 集成绕过库存跟踪;未经授权的 API 活动会产生数据泄露风险 |
# 卓越运营

## 概览
出色的 Salesforce 解决方案不是一次性构建的,而是不断优化的。通过监控解决方案的性能并改进其工作方式,将卓越运营嵌入您的系统,以便以可预测的方式提供业务价值,并在出现故障时快速恢复。
忽视卓越运营会对解决方案产生可预测的后果。手动部署流程成为瓶颈,减慢功能交付并增加错误风险。监控不足会延迟事件检测,直到用户报告问题,延长影响持续时间并削弱 Trust。缺少自动化需要运营团队随着解决方案的复杂性成比例地增长,从而产生不可持续的成本轨迹。监控不力的批处理作业如果失败,可能会在任何人发现之前损坏数据或下游流程。
专为卓越运营设计的解决方案使团队能够通过全面的监控来观察系统行为,使用自动化漏斗安全地部署更改,通过预定义的程序有效地响应事件,并通过无懈可击的审查从运营经验中学习。这些功能会随着时间的推移而复合。与将运营问题推迟到生产问题迫使进行反应性投资的团队相比,早期投资于运营基础的团队更快、更可靠地提供功能。
卓越运营直接连接到其他架构支柱。[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)取决于检测故障的监控和实现快速恢复的自动化。[Trust](/docs/architect/zh-cn/well-architected/guide/trust.html) 需要安全的开发生命周期做法和业务变化的审计跟踪。资源优化受益于运营遥测提供的持续改进。成本优化需要部署效率和自动化,以防止运营成本增长。这些支柱共同创建了解决方案,通过可持续的运营投资提供持续的业务价值。
Salesforce 操作基础设施 — 服务器、数据库、运行时和网络。您操作的是构建在它之上的一切 — 定义解决方案的元数据、管理其行为的配置、流过它的数据、连接它的集成以及在其中操作的客服人员。
这种责任分工决定了您的每个运营决策。虽然 Salesforce 确保平台可用、高性能和安全,但您必须设计可观察、可部署、可自动化和可恢复的解决方案。该平台的多租户架构意味着您的解决方案中的操作问题可能会触发调控器限制,导致单个事务失败,并导致行锁定或资源竞争在您的组织中级联。您无法在事后专注于可观察性、部署安全性或事件准备,而无需额外努力或返工。
在本指南中,您将了解如何设计和实施操作实践(监控、部署自动化、事件响应和持续改进),将 Salesforce 解决方案转化为可靠、可持续的系统。
## 设计原则
使用这些原则来指导您在平台上实现卓越运营的架构决策。
- **随着可观察性的发展。**从初始版本设计全面的可观察性,而不是在出现问题后被动地重新配置仪器。可观察系统揭示了它们在真实条件下的实际行为方式,实现了数据驱动的架构改进和快速问题诊断。可观察性是一个架构问题,它从一开始就决定了解决方案的设计 — 仪器、监控和遥测收集决策会影响数据模型、集成模式和组件边界。
- **标准化操作程序。**源代码控制中的版本配置和操作程序,以及应用程序代码。编码操作支持自动 Salesforce DX 部署、Sandbox 刷新自动化和元数据部署,可在环境中一致执行。有关组织配置的部落 Knowledge 会转换为任何团队成员都可以运行的可执行脚本。当过程在版本控制中运行时,它们通过与应用功能相同的审查和改进周期来演变,从而创建可重复的操作模式,从而显著减少配置偏差。实施卓越中心。
- **拥抱 DevOps 文化。**打破开发、运营和业务团队之间的组织孤岛。对解决方案结果的共同责任取代了将工作扔到墙外。DevOps 文化减少了摩擦,加快了反馈循环,并建立了运营影响的责任。架构师通过支持协作的技术选择和通过消除分担责任的结构性障碍的组织宣传来支持 DevOps。
- **自动化提高效率。**自动化重复的操作任务,以消除手动工作,减少人为错误,并使操作能够扩展,同时优化成本和资源使用。频繁重复的手动操作是自动化的理想选择。通过节省的小时数、减少的错误和创建的运营容量来衡量自动化价值。
- **从所有运营事件中学习。**从事件、性能异常、濒临缺失和成功操作中提取组织经验。无怨无悔的尸检侧重于系统改进,而不是个人错误,为诚实评估创造心理安全。操作遥测揭示了各种事件的模式,从而实现了主动预防。学习文化将运营经验转化为随着时间的推移而复合的组织能力。
## 平台操作:Salesforce 管理的内容
了解 Salesforce 的操作有助于您将操作设计工作集中在您控制的内容上。该平台处理传统 IT 环境中需要专职团队的基础架构问题:
- **基础架构的可靠性和性能:**Salesforce 在所有实例中监控和维护服务器容量、数据库性能、网络可用性和存储系统。平台状态显示在 [status.salesforce.com](http://status.salesforce.com) 中,并带有实时事件更新和计划维护时段。
- **平台更新和补丁:**每年 3 个主要版本(春季、夏季、冬季)会提供新的功能、安全补丁和性能改进。Salesforce 管理发布时间、API 版本支持和弃用,以及平台级更改的更改管理。在生产部署之前,您可以根据 Sandbox 环境中的版本测试解决方案。
- **多租户资源管理:**存在调控器限制是为了保持共享基础设施的公平性 — 由于您与其他客户在相同的资源上运行,Salesforce 会对 CPU 时间、堆大小、Salesforce 对象查询语言 (SOQL) 查询、数据操纵语言 (DML) 语句和 API 调用等事项实施限制,因此任何租户都不会过度消耗容量。虽然 Salesforce 会跟踪整体使用情况,并让客户通过许可层请求对某些限制(例如 API 调用)进行更高的分配,但每个事务的 Apex 调控器限制本身是固定的,并以相同的方式对每个人强制执行。
- **核心平台安全操作:**Salesforce 安全团队监控威胁,管理漏洞披露和补丁,维护安全认证,并响应平台级安全事件。这种基础安全性创建了基准,您可以在此基础上构建特定于解决方案的安全控制。
- **灾难恢复和业务连续性:**Salesforce 维护地理位置分散的数据中心,测试灾难恢复程序,并维护无需客户操作即可实现故障切换的冗余系统。在基础架构故障期间,平台级恢复可以透明地进行。
这些平台操作为您构建奠定了基础。您无需为基础设施配置服务器、修补数据库或设计灾难恢复。但您仍应对在此基础之上构建和配置的一切内容负责。
## 解决方案操作:您设计和管理的内容
共享责任模型意味着您在 Salesforce 中创建的一切内容都拥有卓越的运营。平台操作支持您的工作,但不会替换它。您的运营责任跨越五个相互关联的领域:
### 可观察性和监控
可观察性是从外部输出理解内部系统状态的能力。可观察的 Salesforce 解决方案使操作员能够回答有关系统行为的问题、诊断故障和验证假设,而无需为每个调查部署新的仪器。监控(使用预定义的仪表板回答已知问题)和可观察性(使用全面的遥测回答任意问题)之间的区别非常重要,因为生产系统会产生超出您在设计期间预期的意外行为。
#### 综合可观察性框架
对于 Salesforce 解决方案,可观察性跨越适应平台多租户模型的三种互补信号类型:
- **日志 -** 使用完整上下文信息捕获离散事件。Event Monitoring 提供捕获 API 调用、登录事件、Apex 执行、SOQL 查询、Visualforce 页面、Lightning 页面的事件日志文件,以及包含用户身份、时间戳、持续时间和结果的请求上下文的报表运行。日志会回答以下问题:“哪些用户遇到此错误?”和“成功执行和失败执行之间发生了什么变化?”
- **度量 -** 随时间汇总的数字度量,揭示趋势和模式。度量包括 API 消耗率、Apex CPU 时间分布、批量作业成功率、集成延迟百分比和用户流完成率。度量回答了“性能是否会随时间下降?”和“我们是否接近调控器限制?”等问题。
- **跟踪 -** 显示通过分布式系统的请求路径,揭示延迟源和故障点。对于 Salesforce 解决方案,跟踪可以将同步 API 调用连接到异步处理链,将平台事件连接到订阅者执行,并将集成请求连接到外部系统响应。跟踪回答了“此流中的延迟累积在哪里?”和“此多步骤流程中哪个组件失败?”等问题。
从初始架构设计可观察性。关于要启用哪些 Event Monitoring 事件类型的决策、如何构建平台事件负载以实现操作可见性、在哪里放置集成检查点以及要实施哪些自定义日志记录,所有这些都决定了解决方案的长期可操作性。将可观察性改造到现有解决方案需要更改涉及大多数组件的仪器,并存在在操作改进过程中引入错误的风险。
| 阶段 | 方面 | 权衡 |
| :---- | :---- | :---- |
| **精益优化** — 高交付速度,零设置开销 | 标准平台 Event Monitoring 日志和本机错误日志 | 适合标准实施。随着复杂性的增长,例如跨几个对象的异步操作或事务,需要投入更多精力将断开的信息拼接在一起。 |
| **规模优化** — 模式识别、阈值隔离和可跟踪执行 | 自定义日志记录框架,将事件日志标准化引入集中视图,以及跨平台事件、集成负载和异步链的独特关联机制设置 | 主动显示系统性能趋势,调控器限制风险,并在多步骤执行中精确定位故障节点。随着足迹的扩大,它需要一致的开发人员纪律来将这些挂钩嵌入到每个新的资产中,从而将带宽从功能交付中转移开来。 |
| **优化治理** — 可验证、负责任的跨边界可观察性 | 遥测被保留为一项明确的义务,具有访问控制和防篡改性,并且跨团队和合规边界保留了日志数据驻留和跨组织相关性 | 生成审计级历史,以及谁做了什么、何时和谁看过。需要跨不同的工程团队进行持续协调,以保留密钥和保留,从而引入大量的治理开销。 |
#### 平台监控功能
Salesforce 提供了专门构建的监控功能,架构师从一开始就应该围绕这些功能进行设计。
**Event Monitoring** 会捕获整个组织的详细运营数据。事件类型包括 API 使用情况、登录活动、注销事件、Apex 执行、SOQL 查询、Visualforce 页面加载、Lightning 页面视图、报表运行、文档附件、内容转移和您定义的自定义事件。Event Monitoring 为安全分析、性能优化、容量规划和合规报告提供了基础。
为生产环境启用 Event Monitoring,并建立事件日志文件到外部聚合平台的自动导出。对于大多数事件类型,本地保留是有限的,不足以满足趋势分析、容量规划和合规性要求。外部聚合支持历史分析、与其他系统的企业遥测关联、高级分析和符合监管要求的保留期。
**Proactive Monitoring**不断评估贵组织的性能和可扩展性风险,在预定义信号成为用户可见的事件之前发出警报。Proactive Monitoring 检测的模式包括接近每日分配的 API 请求限制峰值、指示共享资源竞争的并发 Apex 执行失败、接近调控器阈值的 SOQL 行限制以及建议设计改进的行锁定竞争。
Proactive Monitoring 使用一组预定义的警告和警报阈值,由 Salesforce 管理。对于需要更深入的性能可见性并想要调查基准和趋势的组织,Scale Center 提供了详细的运行时分析,包括 CPU 超时、并发和行锁定、调控器限制错误和数据库性能。
**数据检测**(需要 Salesforce Shield)扫描标准和自定义对象字段,以识别、分类和补救文本、富文本和加密字段中的敏感数据,例如个人身份信息。它使用带有模式匹配和自定义正则表达式的本地平台处理来最小化误报。运行针对新记录或修改记录的重复扫描(每周或每月),已分类或已弃用的字段除外。
使用调查结果推动下游治理,以更新合规分类、强制执行 Shield Platform Encryption、触发 Event Monitoring 安全策略或应用 Sandbox 数据屏蔽。
**规模中心**提供了对长期运行操作、吞吐量模式、异常热点和调控器限制消耗的事务级可见性。规模中心揭示了哪些操作消耗了最多的资源,哪些事务接近超时阈值,以及优化投资将在哪些方面产生最大的运营影响。
在解决方案稳定期间建立规模中心基准,并在每个主发布版本后重新访问基准。没有上下文的表现很难解释。基准比较揭示了更改是提高了性能还是降低了性能,从而指导了进一步的优化决策。
- **设置审计跟踪:**跟踪配置更改,包括权限修改、元数据部署、管理操作和安全设置更新,本地保留最多 180 天。设置审计跟踪通过揭示谁在何时更改了什么配置,来支持安全调查、合规性验证和事件事后分析。当合规性或合同要求需要更长的历史窗口时,导出设置审计跟踪条目,以便保留 180 天以上。
- **字段审计跟踪:**(需要 Salesforce Shield)跟踪历史字段值的变化。对于包含敏感数据、需要变更历史的受管数据或关键业务数据的字段,有选择地启用字段审计跟踪,了解历史值有助于运营和合规报告。
- **运行状况检查:**提供自动安全配置评估,将当前设置与 Salesforce 安全基准建议进行比较。根据环境的风险优先级,安排季度健康检查审查和补救发现。如果您有补偿控制或与默认建议不同的风险容忍度,并非所有发现都需要补救,但每个发现都值得仔细审查。
#### 应用程序和集成监控
平台监控揭示了组织级别的运行状况,但忽略了特定于应用程序的问题。通过检测关键业务流程,从用户角度监控应用程序运行状况:
根据业务影响定义关键用户流程,并监控端到端成功率、完成时间、放弃点和错误率。关键流通常包括创收活动(订单提交、合同执行、业务机会完结)、高用量活动(用户登录、搜索操作、记录创建)和合规要求的活动(同意捕获、数据主体权利履行、审计敏感的工作流)。
带有重大事件标记的仪器流程,指示每个重要步骤的开始、完成、放弃和失败。在流成功率低于可接受阈值或持续时间超过延迟目标时发出警报。进程级监控揭示了组件级监控中不可见的问题,因为涉及多个 Apex 类、几个流、三个平台事件和两个外部集成的用户旅程可能会在任何过渡点失败。
双向监控集成运行状况。跟踪对外部系统的出站调用,以了解成功率、延迟、重试模式和错误类型。跟踪来自外部系统的入站呼叫,以了解数量模式、身份验证失败、数据验证错误和处理持续时间。集成监控通常会在操作员发现外部系统问题之前发现它们,从而实现主动升级。
与外部合作伙伴建立集成 SLA,并根据承诺的目标监控实际绩效。当发生违反服务级别协议 (SLA) 的情况时,遥测会区分问题是来自 Salesforce、集成层、网络路径还是外部系统。在事件升级和合同谈判中,这种区分很重要。
#### 服务级别指标和目标
服务级别指标 (SLI) 是精心选择的指标,代表用户感知的质量。服务级别目标 (SLO) 是平衡用户期望与运营投资的 SLI 的目标值。对于 Salesforce 解决方案,有效 SLI 包括:
- **可用性:**解决方案成功响应用户请求的时间百分比。从用户角度衡量可用性,而不是基础设施角度。平台可用,但由于单点登录 (SSO) 配置错误,用户无法登录的解决方案不可用,无论平台正常运行时间如何。
- **延迟:**从用户操作启动到可见响应的时间。以特定百分比(p50、p90、p99)定义延迟目标,而不是平均值,因为平均值会掩盖最慢的请求所遭受的可怕体验。p99 延迟为 8 秒意味着 100 个请求中就有 1 个需要 8 秒以上,这可能代表在高流量解决方案中每天有数千次不良体验。
- **成功率:**没有用户可见的错误而完成的操作的百分比。区分用户引起的错误(无效输入、权限不足)和系统引起的错误(调控器限制失败、集成超时、未处理的异常)。只有系统导致的错误才会计入成功率 SLO。
- **吞吐量:**每个时间单位完成的操作量。批处理、数据导入、计划作业和批量操作的吞吐量事项,其中是否满足业务期限取决于处理能力。
根据用户要求而不是技术能力设置 SLO。问题不是“我们能做到多快?”,而是“用户必须做到多快才能实现目标?”如果用户能够容忍两秒钟,200ms 的页面加载目标毫无意义。相反,如果用户在 500 毫秒后放弃,2 秒的目标毫无意义。用户研究、会话分析和业务需求为现实的 SLO 目标提供信息。
监控 SLI 燃烧率,以检测累积的 SLO 违反排放错误预算的时间。错误预算代表可接受的失败率,它平衡了用户体验和运营投资。当烧毁率超过可持续水平时,停止功能工作,并专注于可靠性改进,直到 SLO 恢复。这一纪律防止了团队在追求功能截止日期的同时忽视可靠性下降的常见模式,直到灾难性故障迫使做出应急响应。
#### 警报架构
当自动化系统检测到需要人为判断或操作的问题时,警报会通知人类。有效的警报平衡了覆盖范围(检测真正的问题)与精确度(避免误报)。不良警报会错过事件(警报太少,阈值太高),或造成警报疲劳(警报太多,阈值太低),操作员会学会忽略通知。
围绕可操作性设计提醒。每个警报应回答三个问题:
1. 有什么问题?
2. 为什么重要?
3. 我该怎么办?
缺少明确答案的警报会训练操作员忽略它们。例如,一条警告称“API 调用超过限制的 80%”,而没有关于哪个 API、哪个集成或要采取什么操作的上下文来提供响应的不足信息。
实施与操作升级程序匹配的警报严重级别:
- **重要警报:**指示面向用户的服务降级,需要立即响应,而不论何时。重要提醒页面呼叫工程师。示例包括登录失败超过设置阈值、创收流低于可用性 SLO 或数据丢失检测。
- **警告提醒:**指示在没有干预的情况下将变得至关重要但还不会影响用户的问题。警告会为工作时间调查生成票证。示例包括 API 消耗趋于每日限制、批量作业完成但缺少 SLA 目标,或集成错误增加但仍低于失败阈值。
- **信息提醒:**无需采取行动即可了解运营变化。信息提醒会显示在监控仪表板中,但不生成通知。示例包括成功部署、计划维护完成或配置更改。
建立警报审查节奏,以评估警报质量并根据实际事件模式调整阈值。跟踪警报度量,包括真阳性率(表示实际问题的警报)、假阳性率(不存在问题的警报)和解决时间(警报导致事件解决的速度)。假阳性率高表明阈值过于敏感,需要调整才能恢复操作员 Trust。
### DevOps 实践
DevOps 文化将开发和运营责任整合到统一团队中,这些团队拥有从初始代码提交到生产运营的解决方案结果。与传统的孤立组织相比,DevOps 实现了更快的交付、更高的质量和更好的运营结果,在这些组织中,开发人员将工作移交给了缺乏有效运行上下文的运营团队。
| 阶段 | 方面 | 权衡 |
| :---- | :---- | :---- |
| **精益优化** — 以最少的漏斗开销快速发货 | 通过命令行界面 (CLI) 或受管集成开发环境 (IDE)/工具,手动部署源控制的元数据。验证和回滚是手动的,回滚是手动撤销更改和重新部署以前的版本。 | 最小的漏斗开销和最小的表面最快的生产路径。随着团队和组件数量的增加,手动部署成为瓶颈,质量完全取决于个人纪律,而不是强制门。 |
| **规模优化** — 以安全的节奏进行可重复的门控更改 | 自动化的持续集成/部署。每个提交都会在全新环境中构建和测试,受保护的主分支块会合并,直到检查通过,更改会在生产前通过验证通过 Sandbox 层升级。 | 以更快的安全节奏进行可重复的门控更改,并在合并前捕获回归。要求工程人员构建和操作漏斗,维护它所依赖的测试套件,并保持 Sandbox 层的最新状态。 |
| **治理优化** — 在整个企业中经过验证的受控版本 | 受控释放。批准门和漏斗顶部的渐进式公开,在多个组织和系统中一致地管理着变更,每个部署都可以根据定义的标准进行审计和可撤销。 | 企业级的可验证、可问责、可逆的变化。针对批准和审核权重(这会降低每个更改的速度),以及针对编排,以保持发布治理在组织中的一致性。 |
#### 源驱动的开发
源驱动的开发将所有解决方案工件(元数据、配置、代码、文档)视为版本控制的源文件,而不是仅存在于组织中的点击式设置。源控制支持可重复构建、协作开发、变更跟踪和自动部署漏斗。
Salesforce DX 为源驱动的开发提供了工具链。元数据 API 将组织配置公开为 XML 文件。临时组织提供从源代码控制创建的一次性开发环境。CLI 工具支持脚本部署和组织操纵。版本控制系统(包括 Git)会跟踪更改并启用协作工作流。
有意构建元数据,以实现团队协作。模块化软件包结构允许团队独立工作,而不会合并冲突。将共享组件(页面布局、权限集和自定义字段)与特定于功能的组件(Apex 类、流和 Lightning 组件)分开。明确的所有权边界可以防止每个人改变一切的混乱。
#### 代码审查
在更改进入生产环境之前,代码审查提供了质量控制、Knowledge 共享和学习机会。有效的代码审查平衡了彻底性和速度,在不成为部署瓶颈的情况下提供了有意义的反馈。
建立明确的审查标准。审查者检查:
- 正确性 - 代码是否如其声明的那样?
- 可维护性 - 未来的开发人员能否理解和修改这一点?
- 性能 - 此方法是否适当扩展?
- 安全性 - 是否存在注入风险或权限绕过?
- 一致性 - 这是否匹配项目模式和标准?
没有明确的标准,审查就会变得主观或肤浅。
对于生产绑定的更改,需要两次批准。单一审查者批准会创建 Knowledge 孤岛,并错过其他视角可能发现的问题。双重审查者要求分发 Knowledge,将总线因素保持在 1 以上,并发现更多缺陷。平衡批准要求与团队规模 — 在五人团队中需要三个批准会产生瓶颈。
保持拉取请求 (PR) 较小。包含数百行更改的 PR 会接受粗略的审核,因为审核者面临着巨大的认知负荷。对于在 200-400 行中更改一个功能的 PR,将进行彻底审查,并发现微妙的问题。将大型功能分为可审查的块,以增量方式交付。
自动化机械检查。代码格式化、命名约定合规性、测试覆盖率要求和静态分析检查应该自动运行,而不是消耗评审人员的注意力。评审人员应关注需要人为判断的逻辑、设计和可维护性问题。
#### 测试策略
测试提供了解决方案正常工作的信心,并随着更改的累积继续工作。有效测试平衡了覆盖率(代码和功能测试的工作量)与执行速度(测试套件完成的速度)和维护负担(维护测试需要的工作量)。
- **单元测试:**隔离验证单个组件。Apex 单元测试独立于现有组织数据和外部依赖性来验证方法和类。Lightning Web 组件测试在没有后端 API 的情况下验证组件逻辑和渲染。设计良好的单元测试可在数秒内执行,并在开发过程中提供即时反馈。目标为仅单元测试的最低要求代码覆盖率高于 75%,将覆盖率视为下限而不是上限。
- **集成测试:**验证组件之间的交互。集成测试练习实际的数据库操作、对模拟外部系统的真实标注和真实的调控器限制行为。集成测试捕获单元测试错过的假设 — 意外数据状态、权限问题、批量操作限制和触发订单依赖性。集成测试以每次测试的秒到分钟为单位执行。
- **端到端 (E2E) 测试:**验证从登录到任务完成的完整用户旅程。E2E 测试在完全 Sandbox 环境中运行,练习 UI 交互、后端流程、异步操作和集成接触点。E2E 测试发现仅在整个系统运行时出现的问题 — 竞赛条件、意外的用户工作流、环境配置问题。对于综合套件,E2E 测试的执行时间从几分钟到几小时不等。
- **性能测试:**验证加载下的解决方案行为。性能测试衡量响应时间、吞吐量、资源消耗和调控器限制在实际流量模式下的邻近性。性能测试会阻止发布降低性能的更改,在生产前捕获 N+1 个查询模式,并在高峰季节前验证容量剩余空间。性能测试需要类似生产的数据量,并在专用测试环境中运行。
实施测试棱锥策略:许多快速单元测试、更少的集成测试、选择性 E2E 测试以及在负载下单独验证的性能测试。这种平衡支持快速迭代(快速单元测试提供即时反馈),同时确保集成点正常工作(集成测试发现跨组件问题),用户体验仍然可以接受(E2E 测试验证完整的过程)。
在 CI 漏斗中自动化测试执行。不要在提交前手动运行测试套件,而是让 CI 在每次提交前自动运行测试套件。自动测试会立即发现回归,一致地执行质量标准,并防止在截止日期压力期间手动测试成为可选时出现的逐渐质量下降。
#### CI/CD 漏斗
持续集成 (CI) 和持续部署 (CD) 漏斗自动化了从代码提交到生产部署的路径。CI/CD 减少了人为错误,加快了反馈,提供了一致的质量检查,并实现了快速发布节奏。
- **持续集成**会自动构建、测试和验证每个代码提交。当开发人员将提交推送到版本控制时,CI 系统会拆分新的组织,部署更改,运行自动测试套件,执行静态代码分析,检查测试覆盖率要求,并在几分钟内报告结果。快速反馈使开发人员能够在上下文更新时修复问题,而不是几天后在手动集成测试期间发现问题。
在允许合并到主分支之前,需要 CI 成功。这种纪律(通常称为“保护主要”)防止损坏的代码在共享分支中累积,从而阻止其他开发人员。具有 CI 网关的受保护分支使主分支始终可以部署,从而支持按需发布,而不是当主发生工作时发布。
- **连续部署**会自动将经过验证的更改通过环境部署到生产环境。在 CI 验证隔离环境中的更改后,CD 漏斗会部署到集成 Sandbox,运行其他测试,部署到暂存,运行最终验证,还可以自动或手动批准后部署到生产。
在生产部署期间实施限制爆破半径的渐进式部署策略:
- **蓝绿色部署:** 维护两个相同的生产环境。当绿色环境收到新部署时,流量会路由到蓝色环境。验证后,流量会切换到绿色环境。蓝色环境仍作为即时回滚目标运行。
- **金丝雀部署:**在完全部署前,将更改发布到小用户子集。初始金丝雀接收一小部分流量,同时监控错误率、延迟和用户行为。成功的金丝雀会逐渐扩展(例如,从 5% 扩展到 25%,然后是 50%,最后是 100%)。在金丝雀部署期间检测到的问题会在影响所有用户之前中止发布。金丝雀部署非常适合具有外部路由层或功能标记的 Salesforce 解决方案,这些层或标记支持选择性功能公开。
- **功能标记:**启用独立于部署时间的运行时功能可见性控制。新功能会部署到生产环境,但在明确启用前仍隐藏在标记后。通过切换标记,而不是部署代码,功能标记支持金丝雀部署、A/B 测试、逐步推出和即时回滚。
*备注*:通过资源分配和流量分配控制,金丝雀和蓝绿色部署模式适用于托管在 Heroku 上的自定义应用程序,或部署在 CloudHub 2.0 上的 MuleSoft 应用程序。核心 Salesforce 平台元数据部署是“全有或全无”事务。
#### 基础设施即代码
基础设施即代码 (IaC) 将环境的定义(组织形状、元数据、依赖性以及使其正常运行的配置和种子数据)视为版本控制的源,而不是在每个组织中手动进行的设置。在 Salesforce 中,没有服务器要配置,因此 IaC 控制环境的组装方式,而不是环境下方的硬件。编码的环境是可复制的、可比较的和可丢弃的,这正是避免它们漂移的原因。
环境从源配置定义,而不是手动配置。临时组织定义文件指定了版本、启用的功能和设置,因此任何人或漏斗都可以按需启动相同的一次性组织。Sandbox 采用不同的路径:从为复制类型和模板命名的定义中配置它们,然后从它们复制的生产组织中继承配置,为集成和暂存提供更高的保真度环境。软件包定义声明解决方案的组件和依赖性,使构建可从源复制,而不是依赖于长期存在组织的累积状态。
每个环境假设的基准也是版本的。自定义元数据、命名凭据配置和自定义设置定义作为元数据部署,而设置值和参考记录从版本化的种子数据加载。将两者与代码一起放在源代码控制中意味着每个环境都从已知、一致的基准开始,而不是手动配置的基准。
以这种方式编码环境会从源头攻击配置偏差。当环境的定义存在于版本控制中时,环境之间的差异表现为可见的差异,而不是静默的差异,重建干净的环境比调试已经偏移的环境更快。当环境损坏时,从源重新配置会缩短恢复时间,并且它允许漏斗为每次更改建立一次性环境,而无需手动设置。
#### Sandbox 策略
Sandbox 为开发、测试和培训提供了隔离的环境,无需承担生产数据或配置的风险。有效的 Sandbox 策略平衡了环境保真度(Sandbox 与生产的匹配程度)与成本和刷新频率。
- **Developer Sandbox** 为单个功能开发提供了轻量级的隔离环境。开发人员使用开发人员 Sandbox 进行具有共享依赖性的集成测试,从源代码控制中创建临时组织进行日常工作。Developer Sandbox 和临时组织经常刷新,以保持配置与生产同步。
- **集成 Sandbox** (Developer pro 或 Partial copy) 提供了多个功能集成和交互的共享环境。集成 Sandbox 包含足够的生产数据来测试现实的工作流,而无需完整数据复制的成本和复杂性。在升级到暂存之前,集成测试针对集成 Sandbox 运行。
- **暂存 Sandbox**(完整副本)镜像生产配置和数据,在生产部署前提供最终验证。暂存 Sandbox 会在生产前收到版本,从而支持对部署程序、性能特征和数据迁移脚本进行类似生产的测试。暂存 Sandbox 每季度刷新一次,或在主发布之前刷新一次。
- **培训 Sandbox** 为用户培训和演示提供了真实的环境,而不会暴露真正的客户数据。训练 Sandbox 可能包含合成数据或匿名生产数据。培训环境保持稳定,以支持一致的培训材料和认证流程。
自动化 Sandbox 刷新和数据加载。手动 Sandbox 刷新成为阻止频繁测试类似生产数据的瓶颈。自动刷新程序与数据加载脚本相结合,支持按需环境重置,支持持续集成漏斗和手动测试需求。
注意:“Sandbox”在代理企业中有两个不同的含义。上面的 Sandbox 是环境:组织的隔离副本,团队在更改到达生产环境之前进行构建和测试。Sandbox 客服人员的操作不同。运行时边界通过范围权限、有限的对象和集成访问权限以及受控的执行来约束自主操作的执行位置和方式,因此客服人员不能超出预期范围。两者是相辅相成的:Developer Sandbox 是您针对非生产数据验证客服人员操作的地方,而操作 Sandbox 是在生产中包含这些操作的地方。
#### 安全部署实践
即使使用自动化漏斗,部署也会带来风险。安全部署实践通过验证、监控和受控执行来降低风险:
- **部署验证:**以干运行方式运行部署,无需提交更改。验证会在实际部署前发现部署错误 — 缺少依赖性、组件冲突、引用无效。Salesforce 支持通过 UI 和 CLI 进行验证部署,即使在实际部署等待维护时段时,也能在工作时间在生产中验证。
- **部署监控:**在部署期间和之后观察关键度量。监控错误率、性能度量、用户流成功率和 API 消耗。部署后的突然变化表明回归需要调查和可能的回滚。自动监控会比较部署前和部署后度量,并在统计偏差超过阈值时发出警报。
- **部署手册:**记录部署程序,包括先决条件、执行步骤、验证检查、回滚程序和通信计划。Runbook 将部署从紧张的部落 Knowledge 仪式转变为任何人都可以执行的日常程序。Runbook 通过部署回顾来发展,总结经验教训并防止重复出现问题。
- **回滚功能:**在部署失败时提供转义路径。Salesforce 元数据回滚需要重新部署以前的版本,而不是本地回滚命令,这使得版本控制变得至关重要。为每个生产版本维护部署软件包,支持快速部署。对于数据更改,请保留启用还原的部署前备份。对于配置更改,请在设置审计跟踪中跟踪以前的值。
在部署影响影响较少用户时,在低流量期间计划部署。周末和晚上的部署最大限度地减少了业务风险,但增加了运营负担。平衡用户影响与团队可持续性。具有强大的部署实践和全面的监控的解决方案可以在工作时间安全地部署,但是未经验证的解决方案受益于非工作时间的部署,直到建立信任。
#### 配置管理
配置是管理解决方案行为的元数据 — 组织设置、功能、权限、集成和自定义。配置更改会影响在不部署代码的情况下立即运行解决方案,因此配置管理对运行稳定性至关重要。
源代码控制中的版本配置与代码。简档定义、权限集分配、自定义设置、平台事件定义、命名凭据和远程站点设置都属于版本控制。版本化配置支持部署自动化、变更跟踪、环境一致性和回滚功能。
检测并修复配置偏差。随着时间的推移,随着管理员的直接更改、热修复绕过正常的部署流程以及未记录的解决方法的累积,生产组织会偏离文档化配置。生产配置和版本控制之间的自动比较显示了偏差。计划每季度的偏差检测和补救,以防止配置债务累积到部署变得不可预测的地步。
记录配置决策及其理由。未来的维护人员不仅需要了解配置的内容,还需要了解原因。将组织范围的默认设置设置为客户专用,但联系人公用需要文档,以解释导致此决策的业务需求。如果没有记录的理由,未来的变化就有可能打破业务流程中隐藏的假设。
### 自动化和效率
自动化消除了重复的手动工作,减少了人为错误,并使操作能够扩展,而无需按比例增加员工数量。对于 Salesforce 解决方案,自动化业务机会跨越声明性平台功能、编程自动化和操作程序。
#### 声明性优先自动化
Salesforce 的声明性自动化工具 Flow Builder、公式字段、验证规则、审批流程 — 使非开发人员能够在没有代码的情况下实施复杂的业务逻辑。声明性自动化提供了治理优势(管理员无需部署即可修改)、透明度(可视化设计文档本身)和平台优化(声明性操作的执行效率通常高于等效代码)。
- **Flow Builder:** 自动化结合了用户交互、数据操纵、业务逻辑和集成的复杂流程。流处理常见模式,包括使用依赖查找创建记录、条件批准路由、多步骤数据导入、计划清理作业和错误通知工作流。自动启动的流会对记录更改、计划的时间间隔或从代码中显式调用执行。屏幕流通过基于用户输入的分支逻辑来指导用户完成多步骤流程。
设计可重用性和可维护性的流。子流封装了多个父流重用的通用模式(例如错误处理或记录锁定逻辑)。命名良好的流变量和显式描述会创建未来维护人员可以理解的自文档逻辑。模块化流设计允许在集成之前测试单个组件。
- **公式字段:**从其他字段动态计算值,无需代码或数据库更新。公式支持复杂计算、条件逻辑、日期算术和文本操作。公式字段适用于报表、列表视图、验证规则和流,在不同上下文中提供一致的计算。公式可以高效执行,因为它们不会消耗数据库存储,并且在记录访问期间可以实时计算。
- **验证规则:**在保存时强制执行数据质量。验证规则捕获数据输入错误,强制执行业务规则,并防止无效的状态转换。将验证规则放在标准和自定义对象上,以发现错误,而不管数据源是什么 — UI、API、Data Loader、集成。精心制定的验证规则错误消息会指导用户纠正问题,而不是使用加密技术消息让他们感到沮丧。
- **审批流程:**在状态升级之前,将记录路由到所需的批准。审批流程实施签名机构层次结构、合规性审查、法律批准和多方同意工作流。审批流程会自动提供审计跟踪,记录谁在没有自定义开发的情况下批准了什么以及何时批准了什么。
#### 程序自动化模式
虽然声明自动化处理许多场景,但复杂的要求或性能约束有时需要在 Apex 中实现编程自动化。有效的 Apex 自动化平衡了功能和灵活性与可维护性和治理挑战。
- **触发器框架**为数据库触发器逻辑提供了一致的结构。设计良好的触发器框架可以分离问题(逻辑何时执行、逻辑执行的内容、依赖性的顺序),在不更改代码的情况下启用/禁用单个处理器,并通过上下文跟踪防止递归问题。触发器框架通过防止不相关逻辑累积成不可维护的整体的“一个大触发器”反模式,使 Apex 自动化更具可维护性。
- **Batch Apex** 异步分块处理大量数据,遵守调控器限制,同时执行同步执行中超时的操作。批处理作业处理数据清理、跨越对象边界的批量更新、需要每条记录多次查询的复杂计算以及数据迁移操作。为幂等性设计批处理作业 - 运行两次相同作业应产生相同的结果,而不会重复工作或损坏。
- **可排队的 Apex** 通过明确的工作序列将异步工作联系起来。当未来的方法被触发并被遗忘时,Quueable Apex 支持一个作业完成触发下一个作业的结构化序列。可排队作业支持复杂的编排,包括 API 标注,然后是数据处理、多阶段数据转换和具有指数回退的重试逻辑。
- **计划 Apex** 以固定的时间间隔执行任务。计划作业处理定期清理、夜间数据同步、每小时集成轮讯和一天结束时的处理。在低流量期间计划作业并实施监控,以检测错过的执行。考虑计划的时间间隔是否真正满足业务需求,或者事件驱动的触发是否会更快地响应。
为操作可见性设计编程自动化。记录开始/结束时间、处理的记录计数、遇到的错误和性能度量。当批处理作业无声地失败时,它通常会被忽视,直到用户几天后注意到数据问题。主动日志记录和警报将静默故障转化为可诊断的事件。
#### 适用于事件驱动架构的平台事件
平台事件支持事件驱动的架构,生产者在不了解消费者的情况下发布事件,消费者在不依赖生产者的情况下订阅事件。事件驱动的架构解耦组件,支持异步处理,并支持多语言集成模式。
- **平台事件发布:**通知感兴趣的订阅者重要的业务事件。订单下订单、付款处理、履行完成、SLA 违约和错误条件都代表值得发布的事件。事件负载包含足够的上下文,以便订阅者做出适当的反应,而无需额外的查询。从触发器、流、Apex 或 API 调用发布事件,为事件源提供灵活性。
- **平台事件订阅:**通过 Apex 触发器、流或外部集成平台对发布的事件作出反应。订阅者异步处理事件,这意味着发布者无需等待订阅者完成。事件驱动的处理通过在单独的执行上下文中分配工作而不是在大规模同步事务中消耗限制来遵守调控器限制。
- **事件重放:**使订阅者能够处理历史事件。使用平台事件重放 ID 从特定点重放事件。外部订阅者必须管理自己的重放 ID 状态。由于交付至少一次,因此重复处理是可能的 — 在订阅者逻辑中处理。根据用户恢复要求配置事件保留 — 高用量平台事件为 72 小时,原有标准事件为 24 小时,足以实现快速恢复,更长的保留期支持灾难恢复场景。
为稳定性设计事件。事件模式成为生产者和消费者之间的合同。模式更改需要跨多个团队和系统进行协调。在扩展事件时添加新字段,而不是修改现有字段。当破坏性更改变得不可避免时,显式的版本事件。
| 阶段 | 方面 | 权衡 |
| :---- | :---- | :---- |
| **精益优化** — 具有无代码自动化的标准逻辑 | 业务逻辑的声明性自动化。流、公式字段、验证规则和审批流程处理标准模式。人工手动处理运行时的异常。 | 无需部署,即可快速构建和更改。随着数量和复杂性的增长,仅声明性自动化达到了性能和可维护性的限制,并且未记录逻辑的累积速度超过了可以控制的速度。 |
| **规模优化** — 无需手动即可运行复杂的高用量工作 | 针对声明性无法包含的内容,实现编程和事件驱动的自动化。触发器框架、批量安全的批次和可排队作业以及平台事件将生产者与消费者分离开来,每个生产者和消费者都是幂等构建的,并且都有工具。 | 处理异步、高用量、多步骤的工作,否则会消耗限制或大规模失败。要求工程构建批量安全和幂等,并要求仪器在异步执行中防止静默故障隐藏。 |
| **治理优化** — 可靠地管理整个企业的自动化 | 经过编排、管理的自动化。稳定、版本化的事件合同、运行内容的受控启用以及在整个企业中应用的一致的自动化标准,所有这些都可以审计。 | 企业级的可靠自主性,以及对执行内容的可靠控制。不利于在团队之间维护事件合同的协调,也不利于降低更改任何共享自动化的治理权重。 |
### 事件管理
事件是服务的计划外中断或降级,需要响应才能恢复正常操作。有效的事件管理可以快速发现问题,将它们发送给合格的响应者,有效地解决问题,并吸取经验教训以防止再次发生。
#### 事件检测和响应
- **检测速度:**确定事件影响持续时间。您发现问题的速度越快,在响应开始前累积的损害就越小。检测机制包括自动监控警报(来自可观察性系统)、用户报表(支持票证和直接上报)和外部监控(来自网络外部的合成事务和正常运行时间服务检查)。
根据用户影响而不是技术严重性确定事件的优先级。例如,影响内部批处理作业的 API 错误与阻止所有用户访问的登录失败的紧迫性不同。
事件严重性指导响应时间和升级路径:
| 严重级别 | 描述 | 示例 |
| :---- | :---- | :---- |
| 严重性 1 | 阻止关键业务功能、影响所有或大多数用户、导致数据丢失或出现安全紧急情况的事件。严重 1 级事件会触发即时响应,包括执行通知、作战室协调和全方位响应,直到解决问题。 | 完成登录失败、数据泄露检测或收入系统中断 |
| 严重性 2 | 降低重要功能或影响重要用户群的事件。严重 2 级事件需要快速响应,但不能成为将人员从睡眠中拉出来或取消所有其他工作的理由。 | 搜索返回部分结果、报表超时或与解决方法集成失败。 |
| 严重性 3 | 影响有限功能或少量用户的事件。严重性 3 事件会在工作时间引起关注。 | 遇到问题、表面 UI 问题或少量数据不一致的单个用户。 |
建立清晰的事件响应程序,包括谁响应、如何升级、要保持什么通信节奏以及如何在团队之间协调。记录随叫随到的工程师在高压力事故期间可以遵循的 Runbook 中的程序。当人们确定要打电话给谁以及要采取的步骤时,未记录的部落 Knowledge 会产生响应延迟。
#### 随叫随到和升级
- 随叫随到的**轮换:**在团队成员之间分配运营负担,而不是消耗掉一些应对每个事件的英雄。随叫随到的轮换平衡了覆盖范围要求(始终有人可用)、公平性(每个人都分担负担)和可持续性(在出现激烈事件后,人们需要恢复时间)。
通过清晰的切换和记录的责任,构建随叫随到的轮换。主要随叫随到处理初始响应,次要随叫随到在主要需要帮助时提供升级,或在主要不可用时接管。随叫随到的轮班应该大小合适。例如,从一周开始,不要超过两周 — 较短的轮班会产生持续的上下文切换,而较长的轮班会增加倦怠的风险。计划轮换,允许提前计划个人义务。
- **升级路径:**定义何时及如何涉及额外资源。明确的升级标准可以防止两种失败模式:过早升级,这会将高级工程师的时间浪费在初级工程师可以处理的问题上;延迟升级,初级工程师会努力处理超出他们经验的问题,而专家援助却无所事事。升级标准通常分为三类 - 基于时间的触发器,例如 30 分钟没有进展;复杂性触发器,例如目前不需要专家的问题;严重性触发器,例如严重性 1 事件,它们总是升级为领导。
为随叫随到的工程师提供必要的访问权限、工具和信息。在人员等待访问时,没有生产访问权限的随叫随到状态会产生挫折感,并延长事件持续时间。随叫随到的工具包包括生产访问凭据、Runbook 访问权限、监控仪表板链接、上报联系人、供应商支持程序和通信模板。
公平补偿随叫随到的关税。随叫随到的工作会打乱个人时间并造成压力。补偿方法包括额外工资、代替休假或减少其他责任的轮换积分。如果没有公平的报酬,随叫随到的轮换会给尊重工作与生活平衡的组织带来不满和质量工程师离职。
#### 事件后审查
- **无怨无悔:** 从事件中获取最大教训,而不会造成妨碍诚实讨论的恐惧。无怨文化承认人们在复杂的系统中犯错误,并关注防止未来事件的系统改进,而不是因为过去的事件惩罚个人。
对所有 1 级和 2 级严重事件以及任何揭示新模式或系统问题的事件进行尸检。事后审查的时机至关重要:过早进行审查有可能造成信息不完整,而过迟进行审查则有可能造成记忆模糊。在事件解决后的合理时段(24-48 小时)内安排尸检,以便有时间收集数据,同时保持详细信息新鲜。
格式一致的文档尸检捕获:
- **时间线:**事件从初始检测到解决的时间顺序。包括时间戳、采取的行动、观察到的结果和做出的决定。时间线重建揭示了响应的有效性并确定了延迟。
- **根本原因:**允许事件发生的潜在系统弱点。超越近因(直接触发器),进入系统原因(导致触发器后果的设计或流程差距)。“工程师部署错误代码”是近因。“部署漏斗缺少捕获此错误类的自动化测试”是系统原因。
- **影响:**用户影响持续时间、受影响的用户数量、收入影响、数据完整性问题和声誉损害。量化的影响指导预防工作的优先级 - 预防具有 10 万美元影响的事件比预防 1000 万美元影响的事件值得更多投资。
- **预防:**防止重复发生的具体行动项目。有效的预防项目是具体的,包括行动、被分配人和计划完成。例如,将集成烟雾测试添加到 CI 漏斗,所有者:Jane,完成人:下一个冲刺。“改进测试”等模糊的预防项目被忽视,因为没有人知道要采取什么行动。
- **检测改进:**如何更快地检测类似事件。通过用户报表发现的事件表明存在监控差距。改进项目可能包括新警报、更好的仪器或关键路径的综合监控。
广泛分享死后发现。组织学习需要直属团队之外的共享。尸检会在公司范围内共享有关系统行为、常见故障模式和有效响应程序的分发 Knowledge。公开尸检(在外部发布)显示了透明度,并帮助客户了解服务质量承诺。
| 阶段 | 方面 | 权衡 |
| :---- | :---- | :---- |
| **精益优化** — 通过明确的所有权解决事件。 | 一个人拥有事件响应,使用 Runbook 处理顶级失败模式。检测是警报和用户驱动的,升级通过平台支持运行。 | 最低运营负担,无需轮换员工。恢复取决于一个人的可用性和 Knowledge,这会产生单点故障。 |
| **规模优化** — 无论谁在呼叫,都可以预测响应。 | 共享的随叫随到轮换,具有定义的严重性级别、每层的响应时间目标、记录的升级触发器以及预先配置的随叫随到访问权限和工具。 | 通过升级机制,将可预测的响应与任何个人分离。要求员工保持轮换和纪律,以保持 Runbook 和访问权限的最新状态。 |
| **优化治理** — 实现承诺的恢复目标并实施它。 | 根据承诺的恢复时间对象 (RTO)、事件处理和记录且可审计的通信、整个企业的协调响应以及程序中内置的监管或合同通知来衡量恢复。 | 根据审计中的承诺和履行的义务可证明的回收。与企业范围响应的协调开销和正式事件治理给每个事件增加的过程权重相比。 |
### 持续改进
卓越运营是一种持续的实践,需要持续投资于衡量、学习和改进。随着系统变得复杂和操作 Knowledge 的扩散,将操作视为一次性设置的团队会随着时间的推移而退化。接受持续改进的团队会提高运营能力,通过可持续努力提供不断增长的价值。
#### 操作度量和 DORA
DORA 度量来自 DevOps 研究和评估 (DORA) 计划,基于 2025 年 AI 辅助软件开发状况报告,它提供了经过研究验证的软件交付和运营性能评测。交付业绩强劲的团队在以下五个关键指标上表现出明显更好的结果:
DORA 将这五个度量组织成两个因素:吞吐量和不稳定。**吞吐量**由变更的提前期、部署频率和失败的部署恢复时间组成 — 它衡量变更进入生产阶段的程度。**不稳定性**有剩余的变更失败率和返工率度量 — 它衡量这些部署的进展。
- **部署频率:**衡量发布到生产环境的频率。移动最快的团队按需部署 - 通常每天多次。频繁部署支持快速反馈,通过较小的更改降低部署风险,并与更快的功能交付相关联。低部署频率表明团队避免了部署难题,并形成了一种恶性循环,即不频繁的部署会使每次部署的风险更高。
- **更改准备时间:**衡量从代码提交到生产部署的时间。子日提前期是高绩效交付的强烈信号,子小时提前期表示卓越的交付能力。较短的交付时间实现了对用户需求、竞争威胁和安全漏洞的快速响应。提前期长表示流程开销过大、自动化不足或组织功能失调。
- **更改失败率:**衡量导致需要补救的生产事件的部署百分比。最可靠的团队始终将这一比率保持在较低水平,这只占所有部署的一小部分。更改失败率高表明测试不足、部署验证不足或更改仓促而没有适当的质量检查。
- **失败部署恢复**时间 (FDRT) 衡量您从需要立即干预的失败部署中恢复的速度。不到一小时的恢复是交货到期的强烈信号。较短的恢复时间表明成熟的事件响应、有效的回滚功能和实践良好的运行手册。恢复时间长表明部署验证不足、缺乏自动回滚或生产事件的所有权不明确。
- **部署返工率:**衡量由于生产事故而发生计划外部署的频率。低返工率表示稳定、经过良好测试的版本不会生成下游修复工作。高返工率表明,生产事件经常推动紧急部署,表明生产前测试、发布验证或更改管理实践存在差距。
持续测量 DORA 度量,并随时间变化趋势。改进轨迹比绝对值更重要。在保持质量的同时,团队从每月部署改进到每周部署,这证明了进步。跟踪对整个组织可见的操作仪表板中的度量,实现运营绩效和改进目标进度的透明度。
#### 回顾和审查
- **缩短回顾时间:**从最近的工作中提取经验教训,包括运营事件、部署挑战、流程摩擦和团队动态。回顾应定期进行(每次冲刺或每月),为持续反思创造节奏,而不是等待危机。
使用鼓励参与和可操作结果的结构化格式运行回顾。常见格式包括:
- 开始/停止/继续 - 我们应该开始做什么、停止做什么、继续做什么?
- 疯狂/悲伤/高兴 - 对最近经历的情绪反思
- 时间线 - 重建冲刺事件并识别模式)。
将回顾性见解转换为包含所有者和完成日期的具体行动项目。引起长时间讨论但没有行动的回顾会浪费时间并滋生犹 ⁇ 。有效的回顾在每个会话中产生 2-3 个可行的改进。跨回顾跟踪操作项目的完成情况,使团队对跟进负责。请确保轮换主持人,防止一个人主导讨论。
- **运营审查:**通过季度或月度业务审查评估总体运营状况。运营审查检查趋势数据,与目标进行比较,确定改进机会,并分配改进投资。这些审查还吸引领导参与,为与功能开发竞争的运营改进工作争取资源。
在审查中包含操作度量:
- **可用性:**实际与目标,按用户旅程和整体
- **性能:**按百分比和关键流划分的延迟趋势
- **事件:**按严重性、平均检测时间、平均解决时间计数
- **部署运行状况:**频率、成功率、回滚频率
- **操作负载:**呼叫页面、手动干预、工作时间
审查为卓越运营建立了问责制,而不是将运营视为无形的背景工作,只在危机期间得到关注。定期业务审查表明组织对可持续业务的承诺。
#### 工程审查
回顾最近的工作进展,运营审查向领导报告总体健康状况。工程审查是团队将运营信号转化为交付决策的重复节奏。他们介于两者之间,将仪表板、事件趋势和系统产生的错误预算与团队承诺的发布计划和待办事项联系起来。运行此审核会使运行状况保持为从事工作的人员所有,使其成为计划的内置部分,而不是事后的想法。
- **发布计划:**将操作就绪与功能范围、限制爆破半径的顺序更改一起视为一流的输入,并在错误预算用完时暂停发布。这样,部署纪律和业务优先级就会有意协调,而不是迫于最后期限的压力。
- **待办事项分类:**将业务工作(例如,事件操作项目、预防任务、技术债务、监控差距)与功能工作放在相同的待办事项中,以便竞争容量。定期分类会分配所有者和优先级,从而关闭从死后到提交工作的循环。
#### 操作就绪审查
- **运营就绪审查** (ORR) 在生产发布前评估新功能或系统是否满足运营要求。ORR 通过在开发过程中发现操作缺陷来防止运营灾难,因为修复比启动后补救更便宜。
在生产推出新解决方案、主要功能或具有运营影响的架构更改之前,请执行 ORR。ORR 时间很重要 — 太早,实施仍然不完整,太晚,操作问题就像部署障碍一样,造成跳过修复的压力。
以下是执行 ORR 时需要记住的注意事项和问题:
- **监控和提醒:**是否有足够的度量?是否存在失败场景的警报?是否配置显示健康状态的仪表板?
- **文档:**常见操作是否存在 Runbook?架构是否记录在案,使响应者能够了解系统?升级程序是否清楚?
- **部署和回滚:**部署能否可靠执行?是否存在回滚程序?部署是否已在暂存中验证?
- **性能和可扩展性:**性能目标是否已在实际负载下验证?是否有增长的空间?是否存在调控器限制风险?
- **安全性与合规性:**是否已完成安全审查?是否满足审计要求?访问控制是否匹配要求?
- **依赖性:**是否识别了外部依赖性?集成合作伙伴是否有 SLA?依赖失败是否有回退行为?
在 ORR 完成时启动大门生产。当运营问题成为部署要求时,团队会认真对待,而不是尽力而为。ORR 大门防止运营债务的累积,这使得未来卓越运营变得越来越困难。
#### 反馈循环和学习文化
学习型组织系统地获取运营经验,并将其转化为改进的实践。学习文化取决于:心理安全,人们可以毫无恐惧地报告问题;衡量,数据可以揭示模式;承诺,领导可以分配时间来改进。
- **心理安全:** 能够诚实地讨论问题、错误和濒临失误,而不必担心受到惩罚。缺乏心理安全的团队会隐藏问题,直到它们变成灾难,从而阻止早期干预。通过无懈可击的事后分析、庆祝问题发现和通过讨论自己的错误来领导建模脆弱性来建立心理安全。
- **测量:**使运行状态可见。运营度量、事件趋势、DORA 指标和用户满意度分数揭示了运营的实际表现与预期表现。测量可以根据影响而不是最大声的投诉或最近的事件来客观地确定改进工作的优先级。
- **改进时间:** 承认卓越运营需要投资。在功能上花费 100% 容量的团队没有时间进行运营改进,从而产生技术和运营债务,并最终迫使他们做出危机响应。有意为运营改进、技术减债、工具和自动化投资预留工程能力。该规则防止了长期性能下降,同时实现了可持续的特征速度。
创建反馈循环,将运营体验与设计决策联系起来。当事件显示架构弱点时,优先考虑架构改进,以防止类似事件。当监控发现性能下降时,优先考虑优化工作。当部署失败发现测试差距时,优先考虑测试覆盖率改进。反馈循环创造了良性循环,其中运营不断改善,而不是逐渐退化。
| 阶段 | 方面 | 权衡 |
| :---- | :---- | :---- |
| **精益优化 -** 从直接运营经验中改进。 | 非正式审查。事件和发布后的回顾、作为待办事项跟踪的改进、从本机信号判断的运行状态和直接观察。 | 最低开销,学习发生在工作附近。改进是反应性的和不均衡的,取决于谁记得什么,退化是看不见的,直到它作为一个事件出现。 |
| **规模优化 -** 根据测量的趋势进行改进。 | 测量的改进。DORA 和运营度量随时间变化的趋势,根据目标安排运营审查,以及 ORR 发布新产品。 | 从趋势数据和发布前发现的操作差距中确定目标优先级。要求仪器计算度量,以及查看度量和对其采取行动的准备时间。 |
| **治理优化 -** 在整个企业中提高到承诺的标准。 | 受管改进。根据承诺的目标向领导报告的运营度量、运营工作的受保护容量分配以及在整个企业中一致应用的改进标准。 | 持续、负责任的改进需要持续的投资和承诺。 |
## 摘要核对清单
卓越运营要求设计可观察性解决方案,通过自动化漏斗进行部署,有效响应事件,并从运营经验中不断学习。查看此核对清单,以评估您的运营成熟度:
**可观察性和监控**
- 解决方案包括全面的日志记录,捕获分布式跟踪的相关 ID
- 启用 Event Monitoring 和 Event Log Files 导出到外部平台,以进行超出本机限制的保留
- Proactive Monitoring 配置的阈值与组织基准一致
- 在每个版本后建立和审查的规模中心基准
- 设置审计跟踪导出以保留 180 天以上
- 为敏感和受监管的数据字段启用字段审计跟踪]
- 数据检测扫描识别并分类字段中的敏感数据,发现有助于合规性分类和补救
- 每季度根据安全基准检查一次健康检查,并根据风险优先级修复检查结果
- 使用重大事件标记和成功率监控来检测关键用户流程
- 集成监控跟踪所有外部依赖性的双向运行状况
- 为可用性、延迟、成功率和吞吐量定义的服务级别目标
- 警报架构包括严重级别、可操作的上下文和明确的升级
**DevOps 实践**
- 所有元数据版本控制启用从源的可复制生成
- 临时组织或开发人员 Sandbox 支持隔离开发
- 配置更改遵循与代码更改相同的审查流程
- 配置偏差检测每季度运行一次,并记录补救措施
- Sandbox 策略包括开发人员、集成、暂存和培训环境
- Sandbox 刷新和数据加载自动化
- CI 漏斗通过自动测试验证每个提交
- 受保护的主分支需要在合并前 CI 成功
- CD 漏斗通过渐进式验证在环境中部署
- 部署验证在生产部署之前运行
- 部署监控跟踪部署期间和之后的关键度量
- 部署 Runbook 文档程序、验证和回滚
- 测试金字塔包括单元测试、集成测试和端到端测试
- CI 漏斗中的测试执行自动化
- 代码审查需要两个具有明确审查条件的批准
- 拉取请求保持较小(200-400 行),以便进行彻底审查
**自动化和效率**
- 适用时使用的声明性自动化(流、公式、验证、批准)
- 使用可重用子流模块化设计的流
- 触发器框架为 Apex 自动化提供了一致的结构
- 批处理作业实施 idempotency 和全面的日志记录
- 带监控的计划作业在低流量期间运行
- 平台事件为异步处理启用事件驱动的架构
- 使用版本控制策略为稳定性设计的事件模式
- 自动化操作可见性包括记录、监控和提醒
**事件管理**
- 自动监控提供主要事件检测
- 通过明确的响应时间要求定义的事件严重级别
- Runbook 中记录的事件响应程序
- 随叫随到的轮换在团队之间公平分配运营负担
- 使用基于时间和基于复杂性的触发器清除升级路径
- 随叫随到的工程师拥有必要的访问权限、工具和信息
- 随叫随到的职责得到公平补偿
- 对所有严重 1 级和 2 级事件进行了无可指责的尸检
- 事后记录时间线、根本原因、影响、检测改进和特定预防操作
- 为组织学习广泛分享死后发现
**持续改进**
- 持续跟踪 DORA 度量(部署频率、提前期、变更失败率、恢复时间、返工率)
- 通过结构化格式和可操作的结果定期进行冲刺回顾
- 运营审查每季度或每月评估一次整体运行状况
- 运营就绪审查网关生产推出新功能
- 心理安全允许诚实讨论问题和错误
- 专为运营改进保留的工程能力
- 反馈循环将运营体验与设计改进联系起来
- 卓越运营被视为每个人的责任,而不仅仅是运营团队
分享您对良好架构框架的反馈。
# 卓越运营 - DevOps 模式
了解有关架构良好的[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)的更多信息 → [DevOps 实践](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html#devops-practices)
## 源驱动的开发
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 版本控制设置 | ✅ 所有元数据以 Git 源格式存储,使用 Salesforce DX 项目结构,其中 .forceignore 配置为排除不相关的文件;所有团队成员从中央存储库复制 |
| 临时组织使用情况 | ✅ 开发人员从源创建用于功能工作的临时临时组织,将更改提交回版本控制,并在功能完成后丢弃临时组织 |
| 提交消息 | ✅ 每个提交都包含清晰、简洁的消息,解释发生了什么变化及其原因;消息遵循团队约定(例如,“feat:”、“fix:”、“docs:”)。 |
| 变更跟踪 | ✅ 版本控制中捕获的每个元数据修改都带有作者身份、时间戳和显示精确更改的差异 |
| 代码审核流程 | ✅ 所有生产绑定更改都通过合并前需要审核批准的拉取请求进行;声明性配置接受与代码相同的检查 |
| 回滚程序 | ✅ 以前的版本可以通过 Checkout 或还原操作从 Git 历史中恢复;团队记录了在非生产环境中测试的回滚程序 |
| 审计跟踪 | ✅ 在版本控制中保留完整的更改历史,支持合规要求和安全调查 |
| 分支策略 | ✅ 与团队规模和发布频率相适应的一致的 Git 分支模型(GitFlow、GitHub 流或基于中继);已记录并强制执行 |
| 从基于组织的迁移 | ✅ 在解决方案生命周期的早期完成向源代码驱动的开发的过渡,然后围绕基于组织的开发形成习惯 |
| .gitignore 配置 | ✅ 存储库排除生成的文件、用户特定设置和凭据;仅包括打算版本的源文件团队 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 作为真相来源的组织 | ⚏ 开发直接在共享 Sandbox 中进行,元数据会作为事后考虑导出到版本控制;组织和版本控制存在差异,导致部署失败 |
| .gitignore 不足 | 存储库包含生成的文件、用户特定设置、大型二进制文件或凭据;臃肿存储库和安全风险 |
| 模糊提交消息 | ⚠ 像“修复错误”或“更新”这样的提交没有提供发生了什么变化或为什么变化的上下文;阻碍了审计调查和未来的维护 |
| 大量不频繁提交 | 开发人员每周提交大型更改集,而不是每天多次提交小型增量;难以审查,难以隔离失败 |
| 直接提交到主要 | 开发人员绕过审查和验证,将更改直接推送到主/生产分支;消除了质量门槛 |
| 无分支策略 | 团队缺少一致的分支模型;开发人员创建任意分支名称和合并模式;造成混乱和合并冲突 |
| Git 中的二进制文件 | ⚏ 大型二进制文件(PDF、视频、归档)致力于 Git 膨胀存储库大小和减慢复制操作 |
| 提交凭据 | 提交到版本控制的 API 密钥、密码、集成凭据或安全令牌;即使从以后的提交中移除,也会造成安全漏洞 |
| 忽略合并冲突 | ⚏ 通过接受一方而不分析来解决合并冲突;丢失更改或引入错误 |
| 无提交验证 | ⚠ 团队从不验证提交的元数据是否真正代表预期的更改;元数据格式错误或意外更改会遗漏 |
## Sandbox 策略
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Developer Sandbox | ✅ 单个开发人员使用 Developer Sandbox 进行功能工作、单元测试和快速迭代;每个开发人员都有专门的环境 |
| Developer Pro Sandbox | ✅ 开发受管软件包或需要更高存储限制的团队使用 Developer Pro Sandbox 进行协同工作 |
| 部分复制 Sandbox | ✅ 集成测试使用部分复制 Sandbox,其中包含通过数据模板配置的代表性数据示例(每个对象 10,000 条记录) |
| 完全复制 Sandbox | ✅ 性能测试、类似生产的暂存和数据迁移验证使用包含完整生产数据和配置的完全复制 Sandbox |
| 数据灵敏性控制 | ✅ 完全复制 Sandbox 访问权限仅限于需要生产数据的角色;Shield Platform Encryption 数据掩码在适当时适用于非生产使用 |
| 集成端点配置 | ✅ 每个 Sandbox 层连接到相应的测试端点进行外部集成;生产集成从不从 Sandbox 连接 |
| 特定于环境的配置 | ✅ 集成架构使用自定义元数据类型或自定义设置来外部化每个环境的端点 URL、凭据和功能标志 |
| 刷新后自动化 | ✅ Sandbox 刷新会触发自动 Salesforce CLI 脚本,恢复特定于 Sandbox 的设置,包括集成凭据、测试数据种子、功能标记状态和电子邮件可送达性 |
| 刷新计划 | ✅ Sandbox 刷新计划已记录并传达;计划在活动较少的时段进行刷新,以最大限度地减少团队中断 |
| 数据模板 | ✅ 部分复制 Sandbox 使用设计良好的数据模板,选择对象中的代表性数据,保持引用完整性 |
| 命名约定 | ✅ Sandbox 遵循明确的命名约定,指示目的、所有者和刷新周期(例如,“dev- integration-q2”、“uat-release-2-4”)。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 共享开发 Sandbox | ⚠ 所有开发人员在单个共享 Sandbox 中工作,覆盖彼此的更改;对什么是可部署状态产生混淆 |
| 过时 Sandbox | ⚏ Sandbox 几个月没有刷新,与生产配置相差很大;在不具代表性的环境中测试会导致部署失败 |
| 完全复制中没有数据治理 | 完整复制 Sandbox,包含整个开发团队可以访问的生产 PII、财务数据、HIPAA 数据,无需访问控制或数据屏蔽 |
| Sandbox 中的生产集成 | Sandbox 直接连接到生产集成端点,从而产生影响生产数据或外部系统的测试事务的风险 |
| 手动刷新后配置 | ⚏ Sandbox 刷新需要几个小时的手动重新配置恢复设置;开销阻碍了根据需要频繁刷新 Sandbox |
| 无 Sandbox 文档 | 团队缺少有关 Sandbox 目的、刷新计划、数据内容或访问程序的文档;开发人员猜测哪个环境用于什么目的 |
| 单一环境类型 | ⚏ 团队出于所有目的仅使用一种 Sandbox 类型(通常是开发人员或完全复制);错失了每个活动的适当 Sandbox 策略的好处 |
| Sandbox 囤积 | 分配给个人或项目的 Sandbox,在不再需要时从未发布;尽管有可用的许可证,但人为稀缺 |
| 测试数据不足 | ⚏ Sandbox 中的测试数据不代表生产数据特征(数量、关系、边缘个案);在不现实的环境中测试会遗漏生产问题 |
## CI/CD 漏斗
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 源提交阶段 | ✅ 开发人员向 Git 中的功能分支提交更改,并带有解释上下文和理由的明确提交消息 |
| 静态分析阶段 | ✅ Salesforce 代码分析器扫描 Apex 的安全漏洞(OWASP 前 10 名)、性能反模式(循环中的 SOQL、循环中的 DML)、代码质量问题(复杂性、重复)和调控器限制风险;运行时间以秒为单位,提供即时反馈 |
| 单元测试阶段 | ✅ Apex 测试在短暂的临时组织或专用集成 Sandbox 中执行验证业务逻辑和调控器限制合规性;正确隔离的测试在不到 5 分钟内完成 |
| 验证部署阶段 | ✅ 元数据使用 Salesforce CLI 部署到集成 Sandbox,带有 - - checkonly 标志,用于仅验证部署运行测试,无需提交更改 |
| 集成测试阶段 | ✅ 自动化测试针对具有测试数据管理的共享集成环境,验证多组件工作流、外部集成合同、平台事件流和异步处理链 |
| 安全扫描阶段 | ✅ 其他安全工具扫描硬编码凭据、易受攻击的依赖关系、CRUD/FLS 违反和合规策略违反;重要发现会破坏构建 |
| UAT 部署阶段 | ✅ 变更通过所有自动网关部署到用户验收测试环境进行业务验证;部署可能是自动的,或者需要根据变更风险手动批准 |
| 生产部署阶段 | ✅ UAT 批准后,更改会部署到生产环境,具有自动一键执行、全面日志记录和即时回滚功能 |
| 漏斗执行时间 | ✅ 对于典型的更改,端到端漏斗可在 15 分钟内完成,支持快速反馈;对于大型部署或广泛的测试套件,时间更长 |
| 构建工件 | ✅ 漏斗会保留部署软件包、测试结果、安全扫描报表和执行日志,以便合规和故障排除 |
| 漏斗工具 | ✅ 团队将 Salesforce DevOps Center 用于平台本地 CI/CD,或与外部平台集成(GitHub Actions、GitLab CI、Azure DevOps、CircleCI、Jenkins、Copado、Gearset、AutoRABIT) |
| 失败通知 | ✅ 漏斗故障触发通知提交作者和相关渠道,诊断上下文支持快速补救 |
| 分支保护 | ✅ 主要/生产分支受保护,需要在合并前通过 CI 检查和批准审查;阻止直接提交 |
| 环境促销 | ✅ 更改通过定义的升级路径(开发 → 集成 → UAT → 生产)进行,并在每个阶段进行验证 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 手动部署 | ⚠ 通过更改集或 Salesforce CLI 命令手动部署的更改,步骤不一致;人为错误、缺少步骤、缺少审计跟踪 |
| 无静态分析 | 漏斗跳过 Salesforce 代码分析器或类似工具;安全漏洞、性能反模式、代码质量问题到达生产环境 |
| 测试不足 | 漏斗仅验证最低 75% 的覆盖率,无需运行集成测试或验证关键用户流;回归会通过 |
| 无安全扫描 | 漏斗从不扫描硬编码凭据、易受攻击的依赖关系或 CRUD/FLS 违规;在生产或安全审查中发现的安全问题 |
| 漏斗执行缓慢 | 端到端的漏斗需要 45-60 分钟以上,这不利于频繁提交,并减慢反馈循环;开发人员提交不太频繁,累积较大的更改 |
| 忽略的漏斗故障 | ⚏ 团队忽略或覆盖漏斗故障,以满足截止日期要求;质量大门成为舞台,而不是实际控制 |
| 无测试环境奇偶性 | CI/CD 在配置、限制或数据特征与生产不同的环境中进行验证;通过验证并不保证生产成功 |
| 缺少回滚功能 | 漏斗自动部署,但不提供自动回滚;从错误部署中恢复需要手动紧急程序 |
| 无部署日志 | 在没有全面日志记录的情况下执行的部署;故障排除或审计部署变得困难 |
| 全有或全无测试 | 漏斗会针对每个更改运行所有测试,无论更改内容如何;即使文档更新,也会运行 30 分钟的测试套件 |
## 安全部署实践
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 功能标记 | ✅ 高风险更改部署,在自定义元数据类型或自定义设置配置后禁用功能;支持在生产中测试,无需用户暴露,逐步推广到细分,A/B 测试,并通过配置更改即时回滚 |
| 功能标记范围 | ✅ 为影响关键业务流程、性能敏感操作或新集成模式的高风险更改保留的功能标记;并非每个功能都需要标记 |
| 金丝雀部署 | ✅ 关键业务更改首先发布到小用户子集(通过权限集或用户属性筛选,5%-10%);在扩展推出前,24-48 小时密集监控金丝雀队列,测量成功率、性能、错误率 |
| 部署窗口 | ✅ 在低用量期间安排部署,由 Event Monitoring API 使用日志通知,显示实际流量模式;避免高峰使用、月底关闭、季度结束、主要业务事件 |
| 部署通信 | ✅ 利益相关者会收到部署窗口的提前通知,包括预期持续时间、受影响的功能和回滚决策时间表 |
| 回滚程序 | ✅ 每种部署类型的回滚程序都有记录并经过测试;在需要时,团队可以在 30 分钟内执行回滚 |
| 回滚测试 | ✅ 在重要部署之前,在非生产环境中验证回滚程序,确保存在恢复功能 |
| 部署验证 | ✅ 部署后烟雾测试在发布后立即验证关键用户流、集成端点和主要功能 |
| 变更协调 | ✅ 当更改跨越多个系统或需要跨 Salesforce 和外部平台同步发布时,协调部署策略 |
| 部署期间的监控 | ✅ 在部署时段和部署后观察期间(24-48 小时)启用增强监控,以监控错误率峰值、性能下降或用户流故障 |
| 适用于集成的蓝绿色模式 | ✅ 面向 Salesforce 的外部服务使用蓝绿色部署来维护两个类似生产的环境,先部署到非活动状态,验证后交换流量 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 大爆炸部署 | ⚏ 大型版本包含许多同时部署的功能、重构和更改,无需逐步推出;失败会立即影响所有用户 |
| 高峰时段部署 | ⚠ 计划在高峰工作时间(中午、月底、季度末)发布,此时使用率最高,问题对用户的影响最大化 |
| 无回滚计划 | ⚏ 在没有记录和测试的回滚程序的情况下进行部署;当出现问题时,团队会争先恐后地找出恢复方法 |
| 功能切换为事后 | ⚠ ⸏ 在出现问题时被动添加的功能标记,而不是主动为高风险更改设计;将回滚选项限制为完全部署撤销 |
| 无部署验证 | ⚠ 部署到生产的更改没有部署后的烟雾测试;团队假设部署成功并继续前进;用户几小时后发现问题 |
| 未测试的回滚程序 | ⚏ 回滚过程已记录,但未在非生产环境中测试;在实际事故中,过程失败或证明不足 |
| 并发多系统更改 | 无需同步或兼容性测试即可在 Salesforce 和部署的外部系统中协调更改;导致集成失败 |
| 无监控增强 | ⚏ 在部署时段内,部署过程不会增强监控;通过用户投诉而不是主动警报发现问题 |
| 周末部署 | ⚏ 当随叫随到的覆盖范围缩小和供应商支持可用性受到限制时,周五晚上或周末部署的主要版本 |
## 测试策略
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 单元测试覆盖率 | ✅ 有意义的测试覆盖率,验证业务规则、边缘个案、错误路径和调控器限制方法;显著超过 75% 的最低要求 |
| 单元测试质量 | ✅ 测试验证业务逻辑,而不是平台功能;编写良好的单元测试快速(毫秒)、隔离(无共享状态)和专注(每个测试验证一个行为) |
| 测试数据策略 | ✅ 测试对常见测试数据使用 @TestSetup 方法;尽可能避免测试中的 SOQL 查询;使用 Test.loadData() 加载静态资源 |
| 模拟外部依赖性 | ✅ 单元测试使用测试存根和依赖注入模拟外部标注,无需实际 HTTP 请求即可快速执行 |
| 集成测试 | ✅ 使用代表性测试数据,验证触发器、流、平台事件、批处理作业和在 Sandbox 中运行的外部标注之间的交互 |
| 集成测试可靠性 | ✅ 集成测试具有可重复性和确定性;通过同步机制(例如平台事件重放 ID 和批处理作业轮询)解决零星故障 |
| 端到端测试 | ✅ 自动浏览器测试(Selenium、Playwright、Provar)验证用户的完整旅程,以便在用户交互时通过 UI 实践系统的关键业务流 |
| E2E 测试重点 | ✅ E2E 测试侧重于价值最高的用户路径,因为执行速度变慢(每次测试的分钟数)以及 UI 更改带来的更高维护负担 |
| 负载测试 | ✅ 使用 Salesforce 负载测试服务或第三方工具,在实际并发用户负载和数据量下验证性能;揭示调控器限制问题、锁定争用、性能下降 |
| 负载测试频率 | ✅ 加载测试在主发布之前运行,并定期(每季度)验证当前生产量的 3x-5x 的性能 |
| 测试金字塔 | ✅ 平衡的测试分配:多个单元测试(几百分钟 ) , 更少的集成测试(几十分钟 ) , 更少的 E2E 测试(不到 20 分钟 ) ; 基础反馈快,顶部验证全面 |
| 测试隔离 | ✅ 测试不相互依赖;可以以任何顺序运行;每个测试都使系统处于干净状态,或使用 @TestSetup 获得一致的起点 |
| 消极测试用例 | ✅ 测试验证错误处理、验证规则实施、权限实施和不利条件下的正常降级 |
| 调节器限制测试 | ✅ 测试专门验证接近调控器限制的行为,包括 SOQL 查询限制、DML 限制、CPU 时间、堆大小 |
| 连续测试执行 | ✅ 通过 CI/CD 漏斗,每次提交时自动运行测试;测试失败会阻止部署到更高的环境 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 测试覆盖范围 | ⚠ 仅为实现 75% 的最小覆盖率而编写的测试,不验证业务规则或边缘个案;不声明任何内容或测试琐碎代码路径的测试 |
| 测试平台功能 | 测试会验证 Salesforce 保存记录或 SOQL 查询是否有效,而不是验证业务逻辑;在平台保证上浪费精力 |
| 无模拟策略 | 单元测试对外部系统进行实际标注;测试速度缓慢,易受外部系统可用性的影响,并消耗 API 限制 |
| 零星测试失败 | 根据执行时间、数据状态或测试执行顺序,测试通过或不可预测的失败;团队学习忽略失败并重新运行,直到测试通过 |
| 无集成测试 | 仅存在单元测试;团队从未验证触发器、流、平台事件和批处理作业是否正常工作 |
| 仅手动 E2E 测试 | ⚏ 在每个版本前手动验证关键用户流;没有自动 E2E 测试;当手动测试错过场景时,在生产中发现回归 |
| 无负载测试 | ⚏ 性能从未在实际并发负载下验证;在生产中发现调控器限制问题、锁定争用或性能下降 |
| 测试数据依赖性 | 测试取决于组织中存在的特定记录或假设特定的用户配置;在 Sandbox 刷新或配置更改时中断 |
| 无消极测试用例 | 测试仅验证幸福路径场景;从不测试错误处理、验证实施或权限检查;未发现的失败模式 |
| 跳过的测试 | 失败的测试被评论为 @isTest,并被跳过而不是修复;测试套件会随着时间的推移而退化,因为更多的测试被忽略 |
## 代码审查
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 审查范围 | ✅ 所有生产绑定更改都通过合并前需要批准的拉取请求进行代码审查;包括 Apex、Aura、LWC、流、验证规则、权限集、共享规则 |
| 审查条件核对清单 | ✅ 明确核对清单,涵盖安全性(CRUD/FLS 实施、输入验证)、性能(批量化、SOQL 优化)、调控器限制合规性(处理模式、递归预防)、可维护性(命名、文档、复杂性)、测试覆盖率(有意义的测试、边缘个案)、架构一致性(设计模式、问题分离) |
| 审查大小限制 | ✅ 拉取请求保持在 400 行以下有意义的更改,允许彻底审查;大型功能分为较小的增量更改,可单独审查和独立部署 |
| 审查时间 | ✅ 在一个工作日内完成的审核保持开发势头并提供快速反馈;延迟的审核会产生上下文切换开销 |
| 自动审查前检查 | ✅ 静态分析、单元测试和安全扫描在人工审核请求前自动运行;自动检查会捕获机械问题,因此审核人员会专注于设计和业务逻辑 |
| 分布式审查责任 | ✅ 代码审核责任分配到团队,防止瓶颈和共享 Knowledge;初级开发人员审核高级代码,并在审核期间解释自己的代码 |
| 审核评论质量 | ✅ 审核人员提供具体、可操作的反馈,并说明理由;区分所需的更改(阻止问题)和建议(改进效果好) |
| 审查文档 | ✅ 拉取请求描述解释了发生了什么变化、为什么变化、进行了什么测试,以及任何特殊的部署注意事项或回滚程序 |
| 声明性配置审查 | ✅ 流、验证规则和权限更改的审查严格程度与代码相同;配置是架构性的,值得仔细检查 |
| 对评论采取后续行动 | ✅ 合并前处理的所有审查意见;回答的问题、实施的更改或未采纳建议的理由 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 无代码审核 | ⚠ 直接提交到生产分支的更改,无需任何同行审查;消除了主要缺陷检测机制 |
| 橡皮图章 | 审查者可在数秒内批准拉取请求,而无需实际检查更改;审查成为复选框合规性,而不是质量门 |
| 单一审查者瓶颈 | 只有一个高级开发人员被授权审查代码;造成瓶颈和单点故障;Knowledge 集中而不是分散 |
| 大量拉取请求 | ⚠ 拉取请求包含跨越多个功能的数千行更改;无法彻底检查导致表面检查 |
| 延迟审查 | 拉取请求在几天或几周内处于未审查状态;开发人员失去上下文并转移到其他工作;当开发人员切换了思维上下文时,审查评论到达 |
| 无审查条件 | ⚏ 团队缺乏评审人应检查内容的明确标准;评审人评审质量差异很大;一些评审人关注风格,另一些关注逻辑,没有全面的 |
| 无需测试即可查看 | 审查者仅根据代码检查批准更改,而无需提取分支和本地测试,或验证自动化测试合格 |
| 忽略的自动检查 | 审查者批准拉取请求,尽管静态分析、安全扫描或单元测试失败;自动化质量门的目的落空 |
| 敌对评论文化 | 审查变成了个人批评或竞争活动,而不是协作性的质量改进;不利于学习和心理安全 |
| 无声明性审查 | 在 Apex 代码接受检查时,流、验证规则、权限集和共享规则未经审查就部署;在声明性配置中产生质量差距 |
# 卓越运营 - 客服人员模式
了解有关架构良好的[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)的更多信息 → [Agent Enterprise Operations Excellence](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-operational-excellence.html)
## 客服人员可观察性
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 会话跟踪 | ✅ 使用本地会话跟踪数据模型 (STDM) 捕获 Data 360 上统一数据模型中的客服人员交互,而不是构建并行遥测系统 — 将每个对话记录为会话、交互(轮次)和步骤的跟踪层次结构 (UserInputStep、LLMExecutionStep、FunctionStep) |
| Agentforce \| 会话跟踪 | ✅ 依赖于标准 STDM 对象(AIAgentSession、AIAgentSessionParticipant、AIAgentInteraction、AIAgentInteractionStep、AIAgentInteractionMessage),这些对象将操作作为交互步骤本地捕获,而不是需要单独的操作日志 |
| Agentforce \| 会话跟踪 | ✅ 通过将交互步骤加入 LLM 呼叫记录(通过 GenerationId 和 GenAiGatewayRequest/Response 引用)而不是将它们存储为自定义会话字段来检索令牌使用情况、模型和提示详细信息 |
| Agentforce \| 会话跟踪 | ✅ 从 Atlas 推理引擎捕获推理跟踪 — 会话跟踪将计划员的步骤记录为每次交互的一部分 — 以揭示客服人员的决策过程并提高可调试性 |
| Agentforce \| 客服人员配置 | ✅ 记录轮次级别的详细信息,包括用户输入、客服人员响应、推理解释、置信度分数、检索的上下文、尝试的操作和遇到的错误 |
| Einstein \| Trust 层 | ✅ 打开流到 Data 360 的 Einstein Trust 层生成式 AI 审计跟踪(提示和响应文本、PII 屏蔽版本、基础数据、安全和毒性分数、模型详细信息),以及 Einstein 生成式 AI 和反馈数据收集和存储,以便长期保留 |
| 平台 \| 自定义对象 | ✅ 保留自定义日志记录对象,以防蓄意例外,例如将客服人员行为与业务结果关联的轻量级对象,而不是将它们作为主要日志记录基底 |
| 平台 \| 仪表板 | ✅ 将客服人员行为与业务结果相关联,通过模式分析确定改进机会,并通过质量标签示例提供持续学习漏斗 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 自定义对象 | 手动构建自定义事务对象作为主要对话记录基底,而不是本地会话跟踪数据模型,在存储多轮对话、大型 JSON 负载和快速数据增长时会遇到规模问题 |
| Agentforce \| 会话跟踪 | 当 Agentforce 会话跟踪已经在 Data 360 上捕获统一数据模型中的交互时,构建并行遥测系统 |
| Agentforce \| 客服人员配置 | 仅记录客服人员响应,不捕获输入、推理跟踪、检索的上下文和采取的操作 |
| Einstein \| Trust 层 | 在生产中禁用 Einstein Trust 层审计跟踪,或未打开反馈数据收集和存储以在 Data 360 中长期保留 |
| 平台 \| 监控 | 仅依赖于对话成功/失败,而不通过 STDM LLM 调用连接捕获令牌使用、模型和提示详细信息 |
## 性能监控
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 监控 | ✅ 以百分位数测量响应延迟(p50、p95、p99),揭示典型性能和最糟糕的情况 |
| 平台 \| 监控 | ✅ 单独检测每个延迟阶段(模型推理、上下文检索、操作执行、网络),实现有针对性的优化 |
| 平台 \| 监控 | ✅ 当 p95 延迟超过阈值表示性能下降时发出警报 |
| 平台 \| 监控 | ✅ 跟踪每个对话、每个客服人员和每个用例的令牌分配(提示令牌、完成令牌、令牌总数) |
| 平台 \| 监控 | ✅ 检测消耗过多令牌的异常对话,提示提示问题或滥用 |
| 平台 \| 监控 | ✅ 将当前吞吐量与接近阈值时提醒的已知速率限制或容量基线进行比较 |
| 平台 \| 监控 | ✅ 计算错误率占请求总数的百分比,以便跨客服人员和时间段进行比较 |
| 平台 \| 监控 | ✅ 区分需要不同响应的错误类别(模型错误、权限错误、集成错误) |
| 平台 \| 监控 | ✅ 计算可用性作为客服人员成功响应请求的百分比,并根据 SLO 进行跟踪 |
| 平台 \| Proactive Monitoring | ✅ 根据基准客服人员行为模式配置 Proactive Monitoring 阈值,而不是接受默认值 |
| 平台 \| 比例中心 | ✅ 在部署新客服人员或进行重大提示更改后,查看规模中心数据,验证资源消耗是否与预期相符 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 监控 | ⚠ 仅测量平均延迟,而不是百分比,屏蔽最糟糕的用户体验 |
| 平台 \| 监控 | 无需检测单个阶段(推理、检索、操作执行)即可跟踪总延迟 |
| 平台 \| 监控 | 对所有错误一视同仁,而不是按类型(模型、权限、集成)分类,以获取适当的响应 |
| 平台 \| Proactive Monitoring | 接受默认的 Proactive Monitoring 阈值,而不调整到基准客服人员行为模式 |
| 平台 \| 比例中心 | 部署新客服人员或进行即时更改,无需查看规模中心数据来验证资源消耗 |
| 平台 \| 监控 | 忽略令牌消耗模式,无法检测消耗 10 倍典型令牌的异常对话 |
## 质量度量和评估
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 测试中心 | ✅ 从本地测试和评估工具开始:在 Agentforce 测试中心维护可重用的测试用例集,并针对它们批量运行客服人员,检查客服人员是否选择了预期的主题和操作,并产生了可接受的响应 |
| Agentforce \| 测试中心 | ✅ 使用本机评估器 — 现成的质量维度和 LLM 作为判断者的方法来对对话质量进行评分,并使用代表对话编写特定于组织的标准的自定义评估器,以便评估反映真实使用情况 |
| Agentforce \| 测试中心 | ✅ 对于包含已知答案的事实问题,在测试中心将已知答案声明维护为可重复测试用例;对于开放式问题,添加对抽样对话的人工审核 |
| Data 360 \| 检索质量 | ✅ 对于基于 Knowledge 库的客服人员,使用本地检索质量分析来评估回复的上下文相关性、答案相关性和忠实度(基于) |
| Einstein \| Trust 层 | ✅ 将 Einstein Trust 层运行时毒性检测作为第一道防护线,然后通过内容筛选、手动审查抽样、用户报告和跨人口统计组的公平性审计来改进安全监控 |
| Data 360 \| GenAIFeedback | ✅ 通过流向 Data 360 中 GenAIFeedback/GenAIFeedbackDetail DMO 的 Agentforce 反馈(拇指向上/向下、接受/拒绝、编辑、逐字评论)以及网关请求和生成数据,获取用户满意度 |
| 平台 \| Analytics | ✅ 将显式反馈(升级前、对话后、跟进调查)与隐式信号(完成率、升级、放弃、重试)相结合,与对话特征相关联,以指导改进优先级 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 测试中心 | 构建和运行自定义测试工具,而不是从 Agentforce 测试中心的可重用测试集和本机评估器开始 |
| Agentforce \| 测试中心 | ⚠ 完全依赖自动评估,无需人工审核,即可对开放式回复进行质量评估 |
| 平台 \| 监控 | 仅监控准确性,不跟踪相关性、安全性和用户满意度维度 |
| Data 360 \| GenAIFeedback | 当 Agentforce 反馈已经流入 GenAIFeedback DMO 时,无法收集关于客服人员响应质量的任何用户反馈(显式或隐式) |
| Agentforce \| 客服人员配置 | 跳过公平性审计,评估人口统计组之间的结果分布 |
## 模型漂移检测
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 在客服人员部署后立即建立基准性能,衡量代表性测试用例的准确性、相关性、安全性和满意度 |
| Agentforce \| 客服人员配置 | ✅ 根据相同的测试用例定期重新评估,揭示与使用模式变化无关的性能变化 |
| 平台 \| 监控 | ✅ 当质量度量下降超过业务影响容限定义的可接受阈值时发出警报 |
| 平台 \| Analytics | ✅ 监控输入特征(问题长度、主题分布、语言复杂性、领域术语),检测显著的分布变化 |
| 平台 \| 监控 | ✅ 监控响应特征(平均响应长度、操作调用率、升级频率、错误模式),建立行为基线 |
| 平台 \| 监控 | ✅ 配置当漂移度量超过阈值时触发调查和补救的自动警报 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | ⚠ 初始客服人员部署后无法建立基准性能,导致无法检测偏差 |
| 平台 \| 监控 | 在用户输入模式与客服人员设计处理的模式发生显著变化时,忽略分布漂移 |
| 平台 \| 监控 | 未根据既定基准监控行为变化(响应长度、操作率、升级频率) |
| 平台 \| 监控 | 没有漂移度量的自动警报,仅依靠手动观察来检测退化 |
## 异常检测和警报
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 监控 | ✅ 监控令牌消耗分布,检测异常对话,并调查消耗 10 倍典型令牌的对话 |
| 平台 \| 监控 | ✅ 检测故障率的突然增加、基线之外的新错误类型或影响特定用户或客服人员的局部错误集中 |
| 平台 \| Analytics | ✅ 按对话阶段跟踪对话放弃,确定用户是在初始交互、对话中还是在任务完成后放弃 |
| 平台 \| 监控 | ✅ 将关键客服人员故障立即路由到随叫随到的工程师,在工作时间将质量降级路由到产品团队,并将小异常路由到每日摘要 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 监控 | ⚠ 同等紧急地处理所有警报,导致警报疲劳和错过关键故障 |
| 平台 \| 监控 | 忽略成本异常,例如令牌消耗峰值,这可能表示提示问题、滥用或基础设施问题 |
| 平台 \| Analytics | 未跟踪对话放弃率,或无法按阶段分析放弃情况 |
| 平台 \| 监控 | 等待用户报表,而不是通过自动监控主动检测错误率峰值 |
## 提示版本控制
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 源控制 | ✅ 将提示模板与应用程序代码一起存储在 Git 中,将提示视为值得代码审查、测试和受控部署的关键应用程序逻辑 |
| Einstein \| 提示生成器 | ✅ 使用提示生成器进行具有版本历史和测试功能的迭代提示开发,然后导出到部署漏斗的版本控制 |
| 平台 \| 源控制 | ✅ 将配置(模型选择、温度、令牌限制、检索配置、操作权限、功能标记)存储为代码,支持特定于环境的值和漂移检测 |
| 平台 \| 源控制 | ✅ 将语义版本应用于客服人员组件:主要(破坏性更改)、次要(功能)、补丁(错误修复),版本号显示在日志中 |
| 平台 \| 文档 | ✅ 记录更改内容、更改原因、验证更改的测试,以及每个提示和配置更改的回滚程序 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Einstein \| 提示生成器 | 无需代码审查、测试或受控部署流程即可进行即时更改 |
| 平台 \| 配置 | 存储源控制之外的客服人员配置,其中无法检测到偏差,部署也无法自动化 |
| 平台 \| 文档 | 无需记录原理、测试结果或回滚程序即可进行即时更改 |
| 平台 \| 源控制 | 无法应用语义版本,因此无法将事件与特定部署关联 |
## 模型注册表和部署跟踪
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 文档 | ✅ 维护模型注册表,记录部署的模型版本,包括模型系列、特定版本、微调状态、环境、部署日期和负责团队 |
| 平台 \| 文档 | ✅ 记录每个客服人员部署,包括版本、环境、时间戳、部署用户、获得的批准和部署结果 |
| 平台 \| 文档 | ✅ 明确映射客服人员、提示、Knowledge 库、操作和集成之间的依赖性,而不是在事件期间发现它们 |
| 业务 \| 流程 | ✅ 建立弃用计划,并充分提前传达策略支持的最小通知期,允许计划的迁移,而不是对强制弃用做出应急响应 |
| 平台 \| 文档 | ✅ 每个客服人员的文档回滚程序,包括目标版本、执行步骤、验证测试和通知要求 |
| 平台 \| 暂存 | ✅ 在非生产环境中测试回滚程序,在生产事故期间验证它们是否正常工作 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 文档 | 仅在事件期间发现客服人员、提示和 Knowledge 库之间的依赖性,而不是维护显式依赖性映射 |
| 业务 \| 流程 | ⚠ 提供的弃用通知不足,迫使紧急迁移,而不是计划的迁移 |
| 平台 \| 文档 | ⚠ 具有未经测试的回滚程序,在生产事件期间最需要时失败 |
| 平台 \| 部署 | 部署客服人员时不记录版本、环境、批准或结果,失去将事件与部署进行关联的能力 |
## 持续训练和域适应
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| UI | ✅ 系统地收集显式反馈(拇指向上/向下、质量分数、评论)和隐式反馈(完成率、升级频率、重试模式) |
| Data 360 \| 数据策划 | ✅ 通过筛选质量、删除有问题的例子、确保代表性和重复数据消除,将对话日志纳入训练数据集 |
| Data 360 \| 基础训练 | ✅ 主要通过基于 Data 360 的 RAG 和提示调整 — Salesforce 本地适应路径,使客服人员适应域词汇、业务流程和组织特定的 Knowledge |
| Einstein \| BYOLLM | ✅ 当基础和提示调整不足时,从外部微调模型并通过 BYOLLM 连接它,而不是期待平台内的生成式微调 |
| Einstein \| 提示生成器 | ✅ 建立定期的提示审核节奏,检查最近的对话、质量度量和用户反馈,以确定改进机会 |
| Einstein \| 提示生成器 | ✅ 通过 A/B 测试在全面推出前验证改进,逐步实施提示更改 |
| Agentforce \| 客服人员配置 | ✅ 维护涵盖幸福之路、边缘个案、对抗输入和历史问题场景的测试集,并随着新边缘个案的发现而不断扩展 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 数据 | 在没有系统反馈收集的情况下尝试改进,使改进成为猜测而不是数据驱动 |
| Data 360 \| 数据策划 | 使用未经策划的对话日志进行培训,包括违反安全规定、错误和非代表性示例 |
| Data 360 \| 基础训练 | ⚠ 在用尽 RAG 基准和提示调整之前,需要外部微调,这是无需自定义模型即可解决大部分域适应需求的本地路径 |
| Einstein \| 提示生成器 | 将即时工程视为一次性实践,而不是随着使用模式的发展而调整的连续实践 |
| Agentforce \| 客服人员配置 | ⚠ 拥有从不扩展的静态测试集,以涵盖生产中发现的新边缘个案 |
## 逐步推出和 A/B 测试
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 自定义元数据类型 | ✅ 使用自定义元数据类型或自定义设置实施功能标记,以将部署与发布分离,从而进行高风险客服人员更改 |
| 平台 \| 权限集 | ✅ 实施金丝雀部署,首先使用控制客服人员访问权限的权限集将客服人员更改发布到小用户子集 |
| Agentforce \| 客服人员配置 | ✅ 监控金丝雀队列,以密集测量成功率、质量、错误率、延迟、令牌消耗和满意度,并仅在金丝雀匹配或改进了运行上一个客服人员版本的对照组时扩大推出 |
| 平台 \| Analytics | ✅ 在开始 A/B 测试前定义成功标准,防止结果不明确,与业务目标保持一致 |
| Agentforce \| 客服人员配置 | ✅ 部署冠军挑战者测试,将经过验证的版本作为后备版本,同时与改进的挑战者版本进行比较 |
| 业务 \| 流程 | ✅ 在促销决策前,建立客观的促销标准,包括最小样本量、质量阈值和评估持续时间 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | ⚏ 在不进行金丝雀测试的情况下,同时向所有用户推出客服人员更改,从而最大化问题的爆发半径 |
| 平台 \| 部署 | 部署没有功能标记的高风险客服人员更改,无需重新部署即可实现即时回滚 |
| 平台 \| Analytics | 在没有预定义成功标准的情况下运行 A/B 测试,导致结果不明确和决策不当 |
| 平台 \| Analytics | 运行样本大小不足的实验会产生噪声结果,导致错误的结论 |
| Agentforce \| 客服人员配置 | ⚠ 为每个微小的提示更改使用功能标记,而不是将它们保留给业务关键客服人员进行高风险更改 |
## 事件检测和分类
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 监控 | ✅ 通过对错误率、质量度量下降、成本异常、延迟增加和用户升级的自动监控提醒来检测客服人员故障 |
| 平台 \| 监控 | ✅ 使用用户报告机制补充自动检测,支持问题升级 |
| 业务 \| 流程 | ✅ 根据用户影响、爆炸半径、数据完整性风险和恢复紧迫性,客观定义严重性标准 |
| 平台 \| 文档 | ✅ 将初始响应程序记录为没有深厚客服人员专业知识的随叫随到工程师可执行的 Runbook |
| Agentforce \| 客服人员配置 | ✅ 包括在初始响应中:禁用故障客服人员(断路器)、路由后备、收集诊断、通知利益相关者、启动事件通信 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 监控 | 依赖用户报表作为主要检测机制,而不是自动监控客服人员故障 |
| 业务 \| 流程 | ⚠ 使用主观严重性分类,导致实际问题上报不足或小问题上报过多 |
| 平台 \| 文档 | ⚠ 没有 Runbook,在每个事件期间需要具有深厚客服人员专业知识的工程师进行特定于事件的调查 |
| 业务 \| 流程 | ⚠ 将客服人员故障视为与传统应用程序故障相同的故障,无需考虑幻觉、主题外响应或安全违规 |
## 断路器和后备
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Apex | ✅ 实施具有可配置错误阈值(例如 50% 错误率)、持续时间窗口(例如 5 分钟滚动窗口)和恢复测试(定期试用请求)的断路器 |
| Agentforce \| 客服人员配置 | ✅ 设计后备层次结构:主要复杂客服人员 → 更简单的备份客服人员 → 静态常见问题解答 → 人工切换 |
| 平台 \| 编排 | ✅ 在编排层而不是单个客服人员中实施后备逻辑,实现客服人员生态系统之间的一致行为 |
| Agentforce \| 客服人员配置 | ✅ 设计人工切换工作流,保留对话上下文,传达切换原因,并路由到具有相关专业知识的适当人工客服人员 |
| 平台 \| 监控 | ✅ 按主题、客服人员和失败原因监控切换率,以确定客服人员的能力差距 |
| Agentforce \| 客服人员配置 | ✅ 当复杂的推理失败时,回退到更简单的逻辑;当实时数据不可用时,对缓存的数据进行操作;当集成失败时,以只读模式操作 |
| 平台 \| 编排 | ✅ 测试后备路径,在需要时定期验证它们是否正常工作 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 没有断路器,允许故障客服人员在解决问题时反复影响用户 |
| 平台 \| 编排 | 在单个客服人员中实施后备逻辑,而不是在编排层,从而产生不一致的行为 |
| Agentforce \| 客服人员配置 | ⚠ 设计完美或完全失败的二进制通过/失败代理,没有优雅的降级选项 |
| 平台 \| 编排 | 从不测试后备路径,发现它们仅在实际事件中不起作用 |
| Agentforce \| 客服人员配置 | ⚏ 丢失对话上下文的人工切换,迫使用户重复信息 |
## 事件后分析
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 流程 | ✅ 进行无可指责的事件后审查,重点关注系统改进,而不是个人错误创造心理安全 |
| 业务 \| 流程 | ✅ 通过带有时间戳的检测、调查、响应、恢复和验证,从初始条件创建详细的时间线 |
| 业务 \| 流程 | ✅ 使用“五个为什么”技术从症状到根本原因进行钻取,而不是简单地得出结论 |
| 业务 \| 流程 | ✅ 分析影响因素,包括监控差距、测试差距、文档差距、自动化差距和架构差距 |
| 业务 \| 流程 | 评估检测:什么信号应该更早检测到问题,什么监控支持更快的检测 |
| 业务 \| 流程 | ✅ 指定具体的、已分配的、有时限的操作项目,以防止重复发生(例如,“添加超过 10 分钟的错误率 5% 的警报 - 已分配:Alex - 到期:2 周) |
| 业务 \| 流程 | ✅ 在后续审核中跟踪操作项目的完成情况,确保持续改进实际发生 |
| 平台 \| 文档 | ✅ 在共享 Knowledge 库中记录事件后审查,并标记启用跨多个事件的模式分析 |
| 业务 \| 流程 | ✅ 通过团队会议或午餐学习会议,广泛分享事件后审查,而不仅仅是直接的事件响应者 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 流程 | ⚠ ⸏ 专注于指责的尸体会降低心理安全并阻止诚实评估失败 |
| 业务 \| 流程 | ⚠ 简单的根本原因结论(“客服人员有缺陷”)而不是支持有效补救的特定结论 |
| 业务 \| 流程 | 模糊操作项目,例如“改进监控”,而不是特定的、已分配的、有时限的任务 |
| 业务 \| 流程 | 操作项目完成率低,表明持续改进过程失败 |
| 业务 \| 流程 | 将事件后的学习单独保留给直接响应者,而不是为了组织学习而广泛共享 |
## 部署批准
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 流程 | ✅ 验证部署前核对清单,包括测试、安全审查、合规性验证、文档、监控配置和相关方批准 |
| 业务 \| 流程 | ✅ 根据爆炸半径、数据灵敏性、操作权限、集成依赖性、恢复复杂性和合规性影响评估风险 |
| 业务 \| 流程 | ✅ 基于风险的规模批准要求:高风险需要主管批准、安全审查和逐步推出;低风险需要同行审查和标准测试 |
| 平台 \| 审批流程 | ✅ 使用 Salesforce 审批流程或外部部署工具实施自动化、跟踪和可审计的批准工作流 |
| 业务 \| 流程 | ✅ 定义紧急绕过程序,需要主管批准、理由文档和快速部署后审查 |
| 平台 \| 监控 | ✅ 单独跟踪紧急部署;紧急部署频率高表示流程问题需要调查 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 流程 | ⚠ 无论客服人员风险状况如何,应用统一的审批深度,将精力浪费在低风险客服人员或审核不足的高风险客服人员上 |
| 业务 \| 流程 | 部署生产客服人员,无需部署前核对清单验证测试、安全性、合规性和监控 |
| 平台 \| 部署 | ⚠ 没有紧急旁路程序,导致生产事故期间的关键修复延迟 |
| 业务 \| 流程 | ⚠ 经常需要紧急部署,表明标准流程已中断,而非特殊情况 |
## 质量门和测试
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 测试输出特征(包含所需信息、保持适当语气、包含引用),而不是非确定性客服人员输出的精确文本 |
| Agentforce \| 客服人员配置 | ✅ 建立最低质量阈值(例如“坚持测试集的准确率为 95%,安全违规为零,公平性审核显示人口统计差异不超过 5%”) |
| Agentforce \| 客服人员配置 | ✅ 使用对抗性输入执行安全测试,包括提示注入、越狱尝试、请求升级和范围外请求 |
| Agentforce \| 客服人员配置 | ✅ 让未参与客服人员开发的团队成员执行安全测试,为漏洞提供新的视角 |
| 平台 \| 性能测试 | ✅ 在实际负载下测试,包括并发对话、典型对话长度和预计使用量 |
| 平台 \| 安全性 | ✅ 验证客服人员无法访问未经授权的数据,无法执行未经授权的操作,以及提示注入无法升级权限 |
| 平台 \| CI/CD | ✅ 使用 Salesforce 代码分析器和专用 AI 安全工具,在部署漏斗中集成安全扫描 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 测试客服人员在非确定性输出上精确匹配文本,而不是测试输出特征 |
| 平台 \| 性能测试 | 仅针对单用户场景、缺失调控器限制问题、资源限制和可扩展性瓶颈进行测试 |
| Agentforce \| 客服人员配置 | 跳过安全测试或让开发人员测试自己的客服人员,而没有新的漏洞视角 |
| 平台 \| 安全性 | ⚠ 不测试提示注入是否可以升级客服人员权限或访问未经授权的数据 |
| Agentforce \| 客服人员配置 | 静态测试集不代表真正的使用多样性,包括不同的用户类型和对话复杂性 |
## 变更管理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 文档 | ✅ 记录每个更改:更改内容、原因、测试验证,以及存在哪些回滚程序 |
| 业务 \| 通信 | ✅ 通知所有利益相关者(用户、运营团队、支持、业务),描述正在变化的内容、时间、好处、风险以及联系对象 |
| 业务 \| 通信 | ✅ 为不同变更类型建立通信模板,标准化消息并降低准备开销 |
| 平台 \| Event Monitoring | ✅ 低用量期间的时间客服人员部署由 Event Monitoring 数据显示实际使用模式 |
| 业务 \| 流程 | ✅ 从周初到周中部署主要客服人员变更,避免周末事件响应能力下降 |
| 业务 \| 流程 | ✅ 在重大业务事件(会计年度末、产品发布会、重大市场营销活动)前建立变更冻结期 |
| 业务 \| 流程 | ✅ 文档变更冻结日历每年提前通知限制期间 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 部署 | ⚏ 在使用高峰、月末结算、季度末结算或主要业务事件期间部署 |
| 平台 \| 部署 | 在事件响应能力有限时,在周一(增加)或周五(减少人员)部署 |
| 业务 \| 流程 | 变更冻结过多会降低改进速度,而不会按比例降低风险 |
| 业务 \| 通信 | 部署客服人员更改,而不通知受影响的用户、运营团队、支持团队或业务利益相关者 |
| 平台 \| 文档 | ⚠ 在不记录理由的情况下进行更改,创建重新发现经验教训而不是基于经验的组织 |
## 反馈循环架构
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| UI | ✅ 在对话 UI 中实施反馈收集,以便在交互新鲜时立即响应,而不是延迟收集 |
| 平台 \| Analytics | ✅ 查询对话日志,按主题分析问题类型、对话长度、成功率,按对话特征分析用户满意度 |
| 平台 \| Analytics | ✅ 按错误类型、受影响的用户、对话模式和时间分布分析错误日志分组,以揭示系统问题 |
| 平台 \| Analytics | ✅ 按频率和影响确定错误补救的优先级:影响许多用户的高频错误需要立即关注 |
| 平台 \| 监控 | ✅ 在初始部署后建立质量基线,并根据基线监控持续质量,并在趋势下降时发出警报 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| UI | 延迟反馈收集(例如,几天后的跟进电子邮件),降低回复率并引入召回偏见 |
| 平台 \| Analytics | ⚠ 不分析使用模式,以确定客服人员是否有理由考虑操作复杂性,或功能是否未得到充分利用 |
| 平台 \| Analytics | 平等对待所有错误,而不是按频率和业务影响确定优先级 |
| 平台 \| 监控 | 在没有数据、缺乏质量基准和趋势监控的情况下做出改进决策 |
## 实验跟踪
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 流程 | ✅ 提供一致的实验结构:假设、实验设计、度量、样本大小和成功标准 |
| 业务 \| 流程 | ✅ 执行前记录实验,防止结果解释不明确 |
| 平台 \| Analytics | ✅ 跟踪对话元数据中的变量分配,启用按变量的结果相关性 |
| 平台 \| Analytics | ✅ 根据预期效应大小、统计能力和可接受的错误率,在实验前计算所需的样本大小 |
| 平台 \| Analytics | ✅ 使用多臂强盗优化,将更多流量动态分配到性能更好的变体,降低业务机会成本 |
| 平台 \| 文档 | ✅ 维护实验目录,其中包含测试的变体、测量的结果、实现的结果和做出的决策,以防止重新测试失败的方法 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 流程 | 在没有预定义假设和成功标准的情况下运行实验,导致结果不明确 |
| 平台 \| Analytics | 使用样本量不足会产生干扰结果,导致改善决策不佳 |
| 平台 \| 文档 | 没有实验目录,导致团队重新测试以前失败的方法,并丢失组织 Knowledge |
| 平台 \| Analytics | ⚠ 不跟踪哪些用户收到了哪些变体,使得结果相关性变得不可能 |
# 卓越运营 - 自动化模式
了解有关架构良好的[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)的更多信息 → [自动化和效率](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html#automation-and-efficiency)
## KPI 和度量
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 仪表板 | ✅ 与 KPI 相关的所有度量都包含在至少一个仪表板中 |
| 平台 \| 文档 | ✅ 每个自动化的输出都是可测量和有时限的 |
| 平台 \| 文档 | ✅ 为每个 KPI 列出负责任的利益相关者 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 仪表板 | ⚏ KPI 报告不存在或仪表板缺少与一些 KPI 相关的度量 |
| 平台 \| 文档 | 没有负责任的利益相关者, KPI 就会存在 |
| 平台 \| 文档 | 自动化不存在 KPI,或者测量的时间范围不明确 |
## 声明自动化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 流 | ✅ Flow Builder 用于记录触发的自动化(替换进程构建器和工作流规则) |
| 平台 \| 流 | ✅ 具有保存前执行的记录触发流用于创建记录前的字段群 |
| 平台 \| 流 | ✅ 流处理决策逻辑、循环、API 标注、DML 操作和复杂的多步骤编排 |
| 平台 \| 流 | ✅ 流事务控制用于在需要时提交中间更改 |
| 平台 \| 流 | ✅ 实施错误处理,以在流中正常恢复错误 |
| 平台 \| 流 | ✅ 反应性屏幕流提供动态用户体验 |
| 平台 \| 流 | ✅ 当业务用户或管理员需要修改逻辑而无需开发人员参与时,选择声明性自动化 |
| 平台 \| 流 | ✅ 变量不是指硬编码值(适用于记录类型、用户等) |
| 平台 \| 流 | ✅ 在大数据量上下文中,流将逻辑切换到 Apex |
| 平台 \| 流 | ✅ 子流用于需要在整个业务中重用的部分流程 |
| 平台 \| 流 | ✅ 所有自动启动的流都使用决策和/或暂停元素来评估准入条件,并防止针对大数据量的无限循环或执行 |
| 平台 \| 流 | ✅ 仅在现有系统数据无法使用时要求用户提供数据 |
| 平台 \| 流 | ✅ 流以层次结构组织,包括主流和支持子流 |
| 平台 \| 流 | ✅ 所有用户输入在流中都有明确的目的 |
| 平台 \| 流 | ✅ 每个流服务于一个特定目的 |
| 平台 \| 流 | ✅ 每个步骤执行特定的精细任务 |
| 平台 \| 流 | ✅ 在用户上下文中启动的所有流将系统上下文事务抽象到子流,一致放在暂停元素之后,以创建新事务 |
| 平台 \| 流 | ✅ 所有记录触发的流都填充了触发顺序值 |
| 平台 \| 流 | ✅ 涉及外部系统标注或长时间运行的流程的流使用异步路径 |
| 平台 \| 流 | ✅ 使用 Orchestrator 创建相关数据操作的复杂序列(而不是在单片流中调用多个子流) |
| 平台 \| 验证 | ✅ 使用验证规则、重复规则和必填字段在平台级别强制执行数据完整性 |
| 平台 \| 验证 | ✅ 验证规则防止保存前无效数据输入(比触发器验证更高效) |
| 平台 \| 审批流程 | ✅ 多步骤批准路由处理委派批准人的并行和顺序批准路径 |
| 平台 \| 审批流程 | ✅ 批准架构考虑异常情况(所有批准人休假,紧急业务需求绕过正常批准) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 流 | 用于新自动化的流程生成器和工作流规则(流生成器是战略方向) |
| 平台 \| 流 | 在业务用户或管理员需要修改逻辑而无需开发人员参与时使用的程序自动化 |
| 平台 \| 流 | 流缺少错误处理,导致错误恢复不佳 |
| 平台 \| 流 | 变量包含硬编码值 |
| 平台 \| 流 | ⚏ 流必须在批量数据加载之前手动停用 |
| 平台 \| 流 | 流的一部分在流之间重复,而不是使用子流 |
| 平台 \| 流 | 流会触发“未处理异常”通知 |
| 平台 \| 流 | ⚠ 即使简单的流也会定期导致与调控器限制相关的错误 |
| 平台 \| 流 | ⚏ 流需要额外的输入来提供上下文 |
| 平台 \| 流 | ⚠ 流服务于多种目的 |
| 平台 \| 流 | 相关步骤组包含与其他流中的步骤组重叠的功能 |
| 平台 \| 流 | 流会在存储的数据可用于替代时请求用户输入 |
| 平台 \| 流 | 流需要不使用数据的输入 |
| 平台 \| 流 | 使用从屏幕组件输出的集合执行 DML(在从屏幕组件输出集合时,在创建、更新或删除元素时,利用“使用记录或记录集合中的 ID 和所有字段值”设置) |
| 平台 \| 流 | 记录触发的流根本不使用触发顺序属性,或者没有一致使用触发顺序值 |
| 平台 \| 流 | 异步路径的使用不一致或根本不存在 |
| 平台 \| 流 | 大型单片流尝试协调相关数据操作的复杂序列(带或不带子流) |
| 平台 \| 审批流程 | 批准架构不考虑异常情况(所有批准人休假、紧急业务需求) |
| 平台 \| 验证 | ⚏ 数据完整性仅在触发器中强制执行,而非验证规则(触发器验证效率更低,更复杂) |
## 编程自动化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Apex | ✅ 触发器处理器框架强制实施每个对象的单一触发器、批量化、关注分离和递归执行预防 |
| 平台 \| Apex | ✅ 触发器处理器委派给业务逻辑的服务类,保持明确的关注分离 |
| 平台 \| Apex | ✅ 触发器使用静态标记或专用递归控制类进行递归保护 |
| 平台 \| Apex | ✅ Future Apex 谨慎使用,适用于标注或系统对象 DML |
| 平台 \| Apex | ✅ 异步 Apex 调用使用可排队以在事务之间“链接”复杂的 DML |
| 平台 \| Apex | ✅ 批量 Apex 用于大数据量(使用每个块的专用调控器限制处理大量数据) |
| 平台 \| Apex | ✅ 批处理作业的错误处理记录失败的记录,而不会停止整个批处理执行 |
| 平台 \| Apex | ✅ 批量 API 仅在必须处理大量数据时使用(本地 SOAP 和 REST API 可用于少量数据) |
| 平台 \| Apex | ✅ Queueable Apex 用于复杂的工作流编排、具有重试逻辑的外部标注以及受益于异步限制的处理 |
| 平台 \| Apex | ✅ Scheduled Apex 按固定计划执行夜间维护、每日报告、定期集成同步和基于时间的业务规则处理 |
| 平台 \| 设计标准 | ✅ 自动化内部同步和异步操作的用例被清楚地概述为设计标准的一部分 |
| 平台 \| 文档 | ✅ 清晰概述自动化的计划和潜在执行路径 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Apex | 一个对象上的多个触发器,执行顺序不可预测,逻辑重叠 |
| 平台 \| Apex | 直接嵌入触发器文件的业务逻辑使测试变得困难 |
| 平台 \| Apex | ⚠ 没有触发器处理程序框架或对象之间的触发器模式不一致 |
| 平台 \| Apex | 批处理 Apex 作业的范围大小非常小(例如,范围大小 = 1) |
| 平台 \| Apex | 用于外部标注的批处理 Apex(使用批处理 Apex 将大量 Salesforce 数据推送到外部系统) |
| 平台 \| Apex | 任意使用的异步 Apex 功能(未来方法和可排队 Apex 使用不一致或互换) |
| 平台 \| Apex | 异步 Apex 很少使用 |
| 平台 \| Apex | 数据库操作没有明确一致的逻辑来在需要时将执行传递给 Batch Apex |
| 平台 \| 设计标准 | 未解决同步和异步操作的用例 |
| 平台 \| 文档 | 自动化调用未记录 |
## 平台事件
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 平台事件 | ✅ 平台事件用于事件驱动的自动化,将发布者与订阅者分离 |
| 平台 \| 平台事件 | ✅ 发布者不知道订阅者并发布火与忘了 |
| 平台 \| 平台事件 | ✅ 多个订阅者通过平台事件触发的流、Apex 触发器或外部集成对事件做出独立反应 |
| 平台 \| 平台事件 | ✅ 重放 ID 用于从 72 小时保留时段中的任何时间点重放错过的事件 |
| 平台 \| 平台事件 | ✅ 平台事件支持跨组织通信、外部系统通知和内部工作流编排 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 平台事件 | 发布者和订阅者之间的直接耦合阻止了可组合自动化 |
| 平台 \| 平台事件 | ⚏ 客户层升级直接在一个事务中调用业务机会更新、客户团队通知和数据仓库同步(每次需要新的下游处理时,紧耦合都需要更改客户逻辑) |
| 平台 \| Apex | ⚠ 立即发布使用的临时平台事件(无论发布订单要求或记录锁定风险如何,都使用实时事件,而不是提交后发布) |
## Apex 开发标准
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Apex | ✅ SOQL 语句使用正逻辑比较运算符(`INCLUDES`、`IN`)作为主要或唯一逻辑 |
| 平台 \| Apex | ✅ SOQL 避免在正比较运算符后`= NULL`、`!= NULL`或谨慎使用它们 |
| 平台 \| Apex | ✅ SOQL 不使用 `LIMIT 1` 语句 |
| 平台 \| Apex | ✅ SOQL 不使用 `ALL ROWS` 关键字 |
| 平台 \| Apex | ✅ SOQL 不会出现在循环中 |
| 平台 \| Apex | ✅ 通配符条件显示在 SOSL(非 SOQL)中 |
| 平台 \| Apex | ✅ SOQL 语句避免`LIKE`比较或部分文本比较 |
| 平台 \| Apex | ✅ SOQL 封装在`try-catch`块中 |
| 平台 \| Apex | ✅ 变量不是指硬编码值(适用于记录类型、用户等) |
| 平台 \| Apex | ✅ 每个类都服务于一个特定的目的 |
| 平台 \| Apex | ✅ 每种方法执行特定的精细任务 |
| 平台 \| Apex | ✅ 所有输入变量在类中都有明确的目的 |
| 平台 \| Apex | ✅ 代码执行需要最少的资源 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Apex | SOQL 语句使用 `NOT`、`NOT IN` 条件作为主要或唯一比较运算符(非选择性) |
| 平台 \| Apex | ⚏ SOQL 语句使用 `ALL ROWS` 关键字(非选择性) |
| 平台 \| Apex | SOQL 语句使用 `= NULL`、`!= NULL` 条件作为主要或唯一比较运算符(非选择性) |
| 平台 \| Apex | 变量包含硬编码值 |
| 平台 \| Apex | ⚏ SOQL 显示在循环中 |
| 平台 \| Apex | ⚏ SOQL 语句经常使用`LIKE`和通配符筛选条件(非选择性) |
| 平台 \| Apex | ⚏ SOQL 未封装在`try-catch`块中 |
| 平台 \| Apex | ⚏ SOQL 语句使用 `LIMIT 1`(非选择性) |
| 平台 \| Apex | ⚏ SOSL 很少或没有一致地用于通配符选择条件 |
| 平台 \| Apex | 类具有多种用途 |
| 平台 \| Apex | 方法执行多个任务,或方法执行的任务与其所属类的声明目的不一致 |
| 平台 \| Apex | 输入变量未在方法中实际使用 |
| 平台 \| Apex | 方法从数据库或外部系统检索不必要的数据 |
## 错误处理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Apex | ✅ 自定义异常用于创建高级错误消息和逻辑 |
| 平台 \| Apex | ✅ 代码将所有 DML、SOQL、标注和其他关键流程步骤封装在`try-catch`块中 |
| 平台 \| Apex | ✅ 数据库类方法可以专用于所有数据操作(而不是 DML) |
| 平台 \| Apex | ✅ 在异步和批量上下文中,使用数据库类方法,而不是 DML |
| 平台 \| Aura | ✅ JavaScript 将所有数据操作和关键流程步骤封装在`try-catch`块中 |
| 平台 \| Aura | ✅ 在`try-catch`块中,本地 JavaScript `Error` 用于 throw 语句(不使用 `$A.error()`) |
| 平台 \| Aura | ✅ 所有可恢复的错误逻辑都出现在 `catch` 语句中,并提供明确的用户消息 |
| 平台 \| 流 | ✅ 具有数据操作、标注和其他关键处理逻辑的流具有所有关键操作的错误路径 |
| 平台 \| 流 | ✅ 屏幕流始终使用错误连接器向用户显示错误 |
| 平台 \| 流 | ✅ 为屏幕上显示的错误配置自定义错误消息 |
| 平台 \| Lightning Web 组件 (LWC) | ✅ JavaScript 将所有数据操作和关键流程步骤封装在 `if ()`/`else if ()` 块中 |
| 平台 \| Lightning Web 组件 (LWC) | ✅ 所有`@wire`函数使用 API 提供的`data`和`error`属性 |
| 平台 \| Lightning Web 组件 (LWC) | ✅ 所有 `if (error)`/`else if (error)` 语句都包含处理错误和提供信息性消息的逻辑 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Apex | DML、SOQL、标注或其他重要流程步骤未一致封装在 Try-Catch 块中 |
| 平台 \| Apex | 不使用数据库类方法 |
| 平台 \| Apex | ⚏ 数据操作仅通过 DML 完成 |
| 平台 \| Apex | `System.debug` 语句出现在生产代码中(不会被注释掉) |
| 平台 \| Aura | JavaScript 没有一致地将数据操作和关键流程步骤封装在`try-catch`块中 |
| 平台 \| Aura | 组件使用 `$A.error()` |
| 平台 \| Aura | 可恢复的错误逻辑并不总是出现在 `catch` 语句中,并且对用户的错误消息不清楚 |
| 平台 \| 流 | ⚏ 流不会一致或根本不使用错误路径 |
| 平台 \| 流 | 未使用自定义错误消息,因此用户会看到默认“此流中发生未处理的错误”消息 |
| 平台 \| Lightning Web 组件 (LWC) | `@wire` 函数不使用 API 提供的`data`和`error`属性(或没有一致使用) |
| 平台 \| Lightning Web 组件 (LWC) | `if (error)`/`else if (error)` 语句如果使用,实际上不包含处理错误和提供有用错误消息的逻辑 |
| 平台 \| Lightning Web 组件 (LWC) | JavaScript 没有一致使用带有数据操作或关键流程步骤的 `if ()`/`else if ()` 块 |
# 卓越运营 — 模式
卓越运营支柱侧重于自动化、DevOps 实践、可观察性、监控和事件管理,因此运营运行平稳,恢复迅速。这些模式将支柱的设计原则转化为具体的、可审查的实践:解决方案中寻找什么,好的是什么样子,以及破坏它的反模式。
## 设计原则
这些模式将卓越运营支柱的设计原则付诸实践。与[卓越运营支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence.md)一同阅读,了解每项支柱背后的完整指导。
- **发展可观察**性 — 从初始版本开始设计仪器、监控和遥测,而不是在出现问题后进行改造。
- **标准化操作程序** — 源控制中的版本配置和操作程序,以便它们一致运行并减少配置偏差。
- **拥抱 DevOps 文化** — 通过共享结果责任,打破开发、运营和业务团队之间的孤岛。
- **自动化提高效率** — 自动化重复的操作任务,以消除手动工作、减少错误并让操作规模扩大。
- **从所有运营事件**中学习 — 通过无可指责的事后分析和运营遥测,从事件、濒临失误和成功中学习。
## 如何使用这些模式
每个类别将**模式**(看起来不错)与**反模式**(应避免的内容)配对,这样您就可以逐个地区查看解决方案。从您需要的操作结果开始:
- **获取系统行为的可见性?**使用可**观察性**进行记录、监控、跟踪、提醒和系统可见性。
- **消除手动操作?**使用**自动化**实现流程自动化、将基础设施作为代码并移除重复工作。
- **货运变更是否安全且频繁?**将 **DevOps** 用于 CI/CD 漏斗、版本控制、测试自动化和部署策略。
- **准备检测和解决事件?**将**事件管理**用于检测、响应程序和事后分析。
- **随着时间的推移而变得越来越好?**将**持续改进**用于 DORA 度量、运营审查、就绪审查和学习文化。
- **生产中的操作客服人员?**将**客服人员模式**用于客服人员生命周期管理、部署自动化和运营监控。
## 模式类别
### [代理模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence-agentic-patterns.md)
客服人员系统的卓越运营模式,包括客服人员生命周期管理、部署自动化和运营监控。
### [自动化](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence-automation-patterns.md)
流程自动化、基础设施作为代码和消除手动操作的模式。
### [持续改进](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence-continuous-improvement-patterns.md)
DORA 度量、回顾和运营审查、运营就绪审查和构建学习文化的模式。
### [DevOps](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence-devops-patterns.md)
CI/CD 漏斗、版本控制、测试自动化和部署策略的模式。
### [事件管理](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence-incident-patterns.md)
事件检测、响应程序、事后分析和持续改进的模式。
### 可[观察性](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence-observability-patterns.md)
日志记录、监控、跟踪、警报和系统可见性的模式。
## 相关资源
- [卓越运营支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/operational-excellence.md) — 这些模式实施的设计原则和架构指导
- [Agent Enterprise 卓越运营](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-operational-excellence.md) — 基于客服人员的解决方案的操作指南
- [架构良好的框架](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/framework.md) — 卓越运营如何与其他支柱相适应
- [模式和反模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/patterns-and-anti-patterns.md) — 所有支柱的完整模式库
# 原有框架映射
原有架构良好的框架围绕三个功能进行组织 — **— 受信**、**容易**和可**适应** — — 每个功能都有自己的子支柱。现行框架将这一指导重新组织为五个支柱。此页面将每个原有子支柱映射到单个文件,其中的指导现已**得到最直接**的处理,因此您可以直接从现有概念跳转到当前主页。
每个目标链接到实时页面。新框架将几个子支柱拆分为多个支柱,因此我们链接了主要(最常见)主页,并在备注中调出任何次要主页。
## 受信
| 副支柱 | 现在大部分地址位于 | 备注 |
| 安全 | 信任 | 组织、会话和数据安全性;通过 Agentforce 客服人员-用户身份验证和数据公开进行扩展。 |
| 可靠 | 可靠性 | 可用性、性能和可扩展性;添加 Scale Center 和 ApexGuru。数据生命周期方面也出现在资源和成本优化中。 |
| 合规 | 公平 | 道德标准、AI 公平性、可访问性和隐私权。法律合规和数据驻留仍由 Trust 负责。 |
## 轻松
| 副支柱 | 现在大部分地址位于 | 备注 |
| 意图 | 卓越运营 | 战略、优先级和治理。可维护性和可读性适用于资源和成本优化。 |
| 自动 | 卓越运营 | 流程设计和数据完整性。批量化/查询机制和业务价值/投资回报率转移到资源和成本优化。 |
| 参与 | 公平 | 公平相关的 UX(外形规格/设备等效性、形式认知负载、有意的应用程序内指导)是公平的。 |
## 可调整
---
## 如何阅读此地图
- **"Now Most Addressed In"** 是该子支柱的大部分指导现在所在的单个文件 — 最好的第一次单击。这不是主题出现的唯一位置。
- 当一个子支柱被故意分成几个支柱时(例如,法律遵守:信任中的基础设施/安全、公平中的个人权利),在说明中就要求**拆分**。
- **参与 (简化和帮助)** 有助于公平性 (响应/外形等效、形式认知负载和有意的应用程序内指导) 的公平相关指导。
# 可扩展性模式
了解有关架构良好的[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)的更多信息 → 可[扩展性和容量](/docs/architect/zh-cn/well-architected/guide/reliability.html#scalability-and-capacity-planning)规划
## 调控器限制优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| SOQL 查询效率 | 使用关系查询(联系人、Case__r)合并查询,而不是每个相关对象单独查询。每个事务查询一次所有需要的数据。目标在同步事务中<50个查询,在异步事务中<100个查询(限制:100 个同步,200 个异步)。保持 30-50% 的缓冲低于限制。 |
| DML 操作批量化 | 将记录收集到列表中,为每个事务的每个对象类型执行单个 DML 语句。使用 Database.insert/update/delete 与 allOrNone 参数控制部分成功行为。目标每个事务 <75 个 DML 语句(限制:150).批处理将 DML 消耗从 N 个语句减少到 1。 |
| 堆大小管理 | 仅查询必填字段(避免选择 \* 模式)。分块处理大型结果集。处理完后清除集合以释放内存。同步上下文中的目标 <4MB 堆(限制:6MB)、<8MB 异步(限制:12MB)。堆超出错误表示需要分块或流模式。 |
| CPU 时间优化 | 最小化循环中的计算复杂性。使用 Maps 进行查找 (O(1)),而不是嵌套列表迭代 (O(n²))。将繁重的计算转移到异步上下文。同步事务中的目标 CPU <7,000ms(限制:10,000ms)、异步 <40,000ms(限制:60,000ms)。 |
| SOQL 查询行 | 设计返回合理结果集大小的查询。使用 LIMIT 子句限定结果。在同步上下文中,目标为每个查询 <25,000 行(限制:50,000).接近限制的查询应使用分页,或使用批处理 Apex 或可查询转到异步处理。 |
| API 调用分配 | 通过系统概览监控 24 小时 API 限制消耗。批处理 API 操作,而不是逐个记录的调用。使用平台缓存缓存频繁访问的参考数据。目标为每日 API 限制的 70%,以适应峰值。API 限制因版本和许可证计数而异。 |
| 标注限制 | 合并外部标注:在外部系统支持时,将多个记录批量转换为单个 API 请求。实施请求排队,以序列化标注。遵守每个事务 120 秒的总标注时间。限制:每个事务 100 个标注。为标注繁重的集成设计异步处理。 |
| 代码(Apex、Aura、LWC) | 实施批量化模式:处理集合而不是单个记录,查询一次并在地图中缓存,为每个对象类型执行单个 DML。使用关系查询,以最小化 SOQL 消耗。应用高效的算法,避免大型数据集上的嵌套循环。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 循环中的 SOQL |
问题:为处理记录集合的循环执行内部 SOQL 查询。
影响:超过 100 条记录的查询限制错误(限制:每个事务 100 个查询)。
解决方法:在循环前查询一次,将结果存储在按关系键划分的映射字段中。从地图内部循环查找(批量化模式)。 |
| 循环中的 DML |
问题:为循环执行内部插入/更新/删除语句。
影响:DML 限制超出 150 多条记录的错误(限制:每个事务 150 个 DML 语句)。
解决方法:将记录收集到列表内部循环中,并在循环完成后执行单个 DML 语句。 |
| 无调控器限制缓冲 |
问题:设计在正常条件下消耗调控器限制 95% 以上的事务。
影响:在负载略有增加时出现生产故障,边缘个案没有容量。
解决方法:将限制的 70% 作为运营上限。为峰值和边缘个案保留 30% 的缓冲空间。 |
| 嵌套循环笛卡尔积 |
问题:嵌套循环迭代两个大集合,创建 O(n²) 操作。
影响:CPU 限制超出错误,临时对象超出堆限制。
解决方法:O(n ) : n(n ) : n(n ) : n(n)收集外循环密钥,查询一次相关记录,在内循环中查找。 |
| 堆积 |
问题:将大型查询结果加载到内存中,而不进行分块处理。
影响:堆限制超出错误(6MB 同步,12MB 异步)。
解决方法:仅查询所需字段。在每个批次后分批次清除集合的过程。将 QueryLocator 与 Batch Apex 一起使用,以处理数百万条记录。 |
| 无字段级筛选 |
问题:在仅需要子集时,选择所有字段(显式或隐式)。
影响:堆消耗过多、查询执行缓慢、SOQL 行限制不必要地接近。
解决方法:仅选择处理所需的字段。使用关系表示法在单个查询中获取相关数据,而不是单独的查询。 |
| 同步处理过度使用 |
问题:在用户事务中同步处理大量数据。
影响:用户等待多秒操作,CPU/堆限制超过了阻止用户。
解决方法:将繁重的处理移到异步上下文(批次、可排队、平台事件)。通过状态轮询为用户提供即时响应。 |
## 水平缩放策略
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 异步处理 | 使用批处理 Apex 处理大量记录(百万)。使用 Queueable Apex 进行具有链接的复杂多步骤编排。使用平台事件进行事件驱动的解耦。使用计划的 Apex 进行定期维护。将异步模式与用例匹配:批量批量、复杂性可排队、解耦事件。 |
| 批处理 Apex 实施 | 设计开始方法返回选择性 QueryLocator,以最小化处理的记录。根据记录复杂性配置批处理大小(每次执行 200-2000 条记录)。仅在必要时实施有状态的接口,因为这会降低吞吐量。监视 AsyncApexJob 的成功/失败。批次提供每个区块的专用调控器限制。 |
| 平台事件架构 | 为需要下游处理的状态更改发布事件。在平台事件对象上使用 Apex 触发器订阅,或通过 CometD 订阅外部订阅者。设计幂等订阅者(重放可能会多次提供事件)。使用 72 小时保留从临时订阅者失败中恢复。 |
| 基于日期的分区 | 在时间窗口中处理数据:当月、上一季度、今年。将历史数据归档到大对象或外部存储。基于时间的分区支持同时处理不同日期范围的并行批处理作业。大多数查询自然会按日期筛选,因此效率很高。 |
| 记录类型分区 | 独立处理不同的记录类型。为每个启用并行化的记录类型计划单独的批处理作业。记录类型通常与证明独立处理的合理性的不同业务流程相关联。每个组织最多 5 个并发批处理作业需要战略性分区。 |
| 基于地理位置的分区 | 按所有人、分部或区域划分,以处理分发。在并行批处理作业中处理每个区域、业务部门或销售区域。基于地理位置的分区利用共享模式:每个批处理作业在特定用户组的上下文中运行,自然会筛选数据。 |
| 缓存策略 | 对频繁访问的参考数据使用平台缓存(组织/会话分区)。缓存减少了查询和 API 消耗。以整数 MB 增量分配组织和会话分区;默认容量因版本而异,额外容量可以块为单位购买。缓存未命中应优雅地返回到查询。缓存 TTL 应匹配数据更改频率:静态参考数据的小时数,半动态数据的分钟数。 |
| 流批量化 | 使用循环和集合变量设计处理记录集合的流。创建记录集合,执行单个获取记录,使用单个更新记录元素更新集合。避免循环中的单个记录操作。流批量化模式反映了 Apex 最佳实践。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 仅顺序处理 |
问题:单个批处理作业按顺序处理所有 5000 万条记录需要 24 小时以上。
影响:阻止其他处理、维护时段耗尽、面向用户的延迟。
解决方法:按日期、记录类型或地理位置对数据进行分区。同时运行并行批处理作业处理独立分区。 |
| 同步集成依赖性 |
问题:用户事务已阻止通过同步标注等待外部系统响应。
影响:用户体验与外部系统性能、外部中断期间的超时失败有关。
解决方法:使用平台事件进行异步集成。将用户事务与外部系统可用性分离。 |
| 无缓存层 |
问题:在事务中重复查询相同的参考数据。
影响:SOQL 消耗过多,API 限制浪费,事务执行缓慢。
解决方法:为频繁访问的参考数据实施平台缓存。缓存减少了调控器限制消耗,并提高了性能。 |
| 批处理作业堆叠 |
问题:计划 20 多个批处理作业同时开始。
影响:队列深度累积,5 个并发作业限制导致序列化,完成时间不可预测。
解决方法:错开计划,将负载分配到不同时间。使用动态调度逻辑将类似的作业整合到单个批次中。 |
| 有状态的批次过度使用 |
问题:在不需要时使用 Database.Stateful 实施批处理 Apex。
影响:跨 execute() 调用对实例成员变量进行不必要的序列化和从保留状态进行潜在堆累积。
解决方法:仅在状态必须跨执行调用持续存在时使用 stateful。首选无状态批处理,以避免不必要的状态序列化开销。 |
| 单线程流设计 |
问题:在循环中逐个处理流记录,每次迭代都有单独的获取/更新记录元素。
影响:与记录计数成比例的调控器限制消耗,大规模事务失败。
解决方法:将记录收集到集合变量中,执行单个获取记录,使用循环外的单个更新记录元素更新集合。 |
| 无异步重试策略 |
问题:失败的异步作业不会自动重试,需要手动干预。
影响:数据不一致、手动操作负担、SLA 缺失。
解决方法:使用指数回退实施自动重试。将平台事件用于持久队列,启用重放。监视 AsyncApexJob,并提醒持续失败。 |
## 异步处理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 批次与可排队选择 | 使用 Batch Apex 进行:分块处理数百万条记录、计划批量操作、数据迁移。将 Queueable Apex 用于:具有链接的多步骤集成工作流、需要复杂对象参数的操作、需要比 @future 更好的监控的作业。异步 Apex 在批次、可队列、未来和计划 Apex 之间共享每 24 小时 250,000 次执行的限制 (DailyAsyncApexExecutions),而不是特定于可队列的分配。 |
| 可排队链接 | 通过将下一个作业从当前作业的执行方法中排队来实施多步骤工作流。链启用顺序处理:标注 → 解析响应 → 排队跟进操作。每个可队列执行最多 1 个队列可以防止失控链。使用完成检测设计链,以避免无限循环。 |
| @future 方法使用情况 | 将 @future 用于简单的异步操作,无需复杂的参数(仅限原始参数)和链接。限制:每个 Apex 事务 50 次 @future 调用。 @future 提供最简单的异步模式,但缺乏可见性:没有作业监控、没有链接、没有复杂的参数。新开发的首选可排队。 |
| 计划 Apex 优化 | 将计划操作合并为单个可计划类,调度到特定处理器。每个组织最多 100 个计划作业需要战略整合。安排在非工作时间,以减少与用户操作的竞争。使用 Scheduled Apex 进行编排,将繁重的处理委托给 Batch Apex。 |
| 平台事件重放 | 设计处理重放场景的订阅者:订阅者失败后的重复事件、长期中断后的差距事件。维护每个订阅者上次处理的 ReplayId。使用 EventBus.getReplayId() 检测重放与新事件。实施幂等处理(两次处理相同事件会产生相同结果)。 |
| 继续模式 | 对于需要 >5 秒响应时间的 Lightning 组件中长时间运行的标注,使用“继续”。继续启用多个同时 120 秒的标注,提高了并行操作的感知性能。限制:每个请求 3 个继续。实施超时处理和用户反馈。 |
---
有关内联示例和详细指导,请查看[可靠性支柱](/docs/architect/zh-cn/well-architected/guide/reliability.html),或浏览[模式和反模式](/docs/architect/zh-cn/well-architected/guide/patterns-and-anti-patterns.html)资源管理器。
# 可用性和性能模式
了解有关架构良好的[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)的更多信息 → [高可用性架构](/docs/architect/zh-cn/well-architected/guide/reliability.html#high-availability-architecture)
## 服务级别目标 (SLO)
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务影响分析 | ✅ 每个业务能力定义的 SLO(例如,“业务机会关闭流:99.9% 的可用性,p95 延迟不到 2 秒)),而不是每个技术组件 |
| 用户流文档 | ✅ 每个关键用户流都有可衡量的 SLO,涵盖可用性、延迟、吞吐量、错误率以及与实际用户体验相关的恢复时间 |
| 架构决策记录 | ✅ 可用性目标基于业务停机时间影响分析,并带有书面理由(例如,内部批处理报告 99% 与收入关键订单处理 99.95%) |
| SLO 规格 | ✅ 考虑架构复杂性的现实目标(99% = 标准平台功能,99.5% = 基本冗余和主动监控,99.9% = 多区域感知和自动故障切换,99.95% = 主动-主动模式和混沌测试,99.99% = 多组织架构) |
| 平台文档 | ✅ 解决方案 SLO 不如平台 SLA 严格(例如,平台 99.9% SLA → 解决方案 99.5% SLO),为应用程序层故障提供错误预算 |
| 监控配置 | ✅ 服务级别指标 (SLI) 可通过平台测试进行客观测量:trust.salesforce.com 正常运行时间、Experience Cloud Analytics、Event Monitoring API 响应时间、AsyncApex作业完成情况 |
| 用户体验度量 | ✅ SLO 反映完整的用户旅程(例如,“个案提交流:对于 p95 用户,所有 5 个步骤都在 8 秒内完成”)而不是个人 API 正常运行时间 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 架构文档 | ⚠ ⸏ "系统应快速可靠 " ( 不可测量,不会导致架构决策) |
| SLO 规格 | "一切都需要99.999%的正常运行时间 " ( 不合理的成本忽略了收入运营和内部管理工具之间的业务关键度差异) |
| 监控策略 | ⚏ 基础设施 CPU 监控作为主要 SLI(平台度量架构师无法操作,不反映面向用户的体验) |
| 平台容量规划 | ⚠ 解决方案 SLO 与平台 SLA 的匹配率达到 99.9%(应用程序层问题、集成失败或计划维护没有错误预算) |
| SLO 文档 | ⚠ 每个技术组件定义的 SLO,而不是每个面向用户的业务能力(组件可用性是必需的,但不足以保证用户体验的可靠性) |
## 高可用性架构
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 区域部署战略 | ✅ 具有平台管理的 Hyperforce 冗余的单区域部署(多个可用性区域、自动基础设施故障切换)为大多数解决方案提供了 99.9% 的 SLO |
| 多组织架构 | ✅ 多组织模式仅在业务需要超出平台功能的保证 RPO/RTO、监管地理数据隔离或完全区域独立性(主动-被动或主动-主动与数据同步)时适用 |
| 数据复制 | ✅ 关键数据的变更数据捕获(近实时 RPO,分钟)、近实时业务事件的平台事件、参考数据的预定批量 API 2.0 提取(24 小时 RPO) |
| 平台运行状况监控 | ✅ 订阅 trust.salesforce.com 状态通知和特定于实例的状态 API,支持主动响应事件、维护时段和性能影响 |
| 动态负载管理 | ✅ 解决方案通过减少降级期间的非关键批处理,在维护时段内延迟后台作业来响应平台运行状况 |
| 比例中心使用情况 | ✅ 每周规模中心审查确定消耗过多资源的长期事务和运营,在用户影响之前进行架构补救 |
| 故障检测层 | ✅ 多级检测:通过状态 API 的平台故障、通过超时监控的集成故障、通过异常日志记录的应用程序故障、通过延迟百分比的性能下降、通过 Proactive Monitoring 的容量警告 |
| 警报阈值 | ✅ 警报根据错误率模式触发(例如,60 秒内 5 次 API 超时)或持续降级,而不是分布式系统中常见的孤立故障 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 多组织设计 | ⚠ 实施多组织架构“以防万一”,但没有记录业务需求,说明数据同步、用户配置、部署协调的操作复杂性 |
| 平台运行状况监控 | 忽略 trust.salesforce.com 状态通知,在用户报告故障时发现维护时段(反应性而非主动响应) |
| 故障检测 | ⚠ 警报每个单独的错误,而不论频率如何(生成警报疲劳模糊关键信号);单个 API 超时触发分页(对正常分布式系统行为的过度反应) |
| 数据复制 | 没有集成特定的监控,仅在用户报告阻止的操作(缺少外部系统运行状况的可见性)时发现集成失败 |
| 冗余策略 | ⚏ 同步调出外部丰富服务,没有超时或回退(在外部服务缓慢或不可用时阻止用户) |
## 延迟优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 真实用户监控 (rum) | ✅ 通过 Experience Cloud 分析或自定义仪器测量的实际用户延迟,反映真实网络条件、设备性能、地理分布 |
| 合成监测 | ✅ 在用户报告问题之前,从多个位置自动验证可用性和性能(例如,来自 3 个地区的订单每 15 分钟提交一次) |
| 交易跟踪 | ✅ 多步骤操作,每个步骤都有时间确定瓶颈(例如,步骤 3 地址验证标注占总延迟的 70%) |
| 查询优化 | ✅ 具有索引筛选器的选择性查询、减少往返的关系查询、具有生产规模数据量的查询优化器注意事项(超过 1000 万条记录的行为发生显著变化) |
| 平台缓存利用率 | ✅ 会话或组织缓存分区提供频繁访问的参考数据,在成功操作期间预填充,在实时 API 不可用时提供过时但可用的数据 |
| 超时配置 | ✅ 面向用户的同步标注 5-10 秒(响应 UI),后台异步标注 30-60 秒(可变外部性能),批处理 120 秒(无用户等待);每个事务多个标注的预算总额 |
| 集成延迟监控 | ✅ 每个端点与 SLO 的每次集成的 p50/p95/p99 延迟百分比;延迟异常(响应时间向上偏移)表示完全失败前的容量饱和 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 监控策略 | ⚠ 仅监控基础设施度量(服务器 CPU、网络带宽),而不进行面向用户的流测量(度量不反映实际用户体验) |
| 缓存策略 | ⚏ 频繁访问的参考数据没有平台缓存利用率(对相同数据的重复查询会增加延迟并消耗 SOQL 限制) |
| 超时配置 | ⚠ 同步流标注,超时 120 秒,导致用户盯着加载旋转器 2 分钟(应使用 5-10 秒的超时和回退) |
| 性能测试 | ⚠ 使用最少的数据量进行小规模测试(在 10M 以上的记录时,查询优化器的行为会发生显著变化,使小规模结果产生误导) |
| 集成设计 | 没有多步骤工作流的事务级跟踪(聚合度量中不可见的瓶颈步骤) |
## 吞吐量管理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 水平缩放模式 | ✅ 跨多个资源分配的工作量:每个事务批量化处理多个记录,异步处理跨时间分配工作,数据分区跨边界分配负载 |
| 批处理配置 | ✅ 优化批处理大小平衡吞吐量和调控器限制(每个批处理 Apex 执行 2000 条记录,每个触发器调用 200 条记录,每个复合 API 调用 25 个请求) |
| API 流量管理 | ✅ 集成批处理和缓存减少了 API 消耗,按版本监控 24 小时 API 分配,容量规划在耗尽前添加许可证或限制增加 |
| 并发执行 | ✅ 分区域数据的并行批处理作业(同时运行 5 个区域汇总批次),平台事件订阅者同时处理流 |
| 队列深度监控 | ✅ 对于异步集成,队列深度趋势表明处理落后于生产速度,需要增加容量或优化吞吐量 |
| 体积异常检测 | ✅ 交易量显著高于/低于预期模式可能表明流程失控,需要调查和限制 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 批处理 | ⚏ 当数据量需要分区域并行执行时,按顺序处理所有记录(基于日期、基于记录类型或基于所有者的分区支持并发处理) |
| API 消耗 | ⚠ 集成模式在没有容量规划的情况下增加了 25% 的 API 消耗(突然出现的“超出 API 限制”错误会影响用户) |
| 队列监控 | ⚠ 没有异步集成队列深度的监控(处理落后于生产速度,没有可见性) |
| 调控器限制管理 | 处理大量达到堆大小或 CPU 时间限制的同步操作(应转移到具有专用限制的异步处理) |
## 故障缓解
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 功能关键度层次结构 | ✅ 定义的层次:关键(收入/合规性,永不降级)、重要(核心工作流,仅在主要事件期间降级)、支持(增强体验,在集成失败期间禁用)、可选(舒适,在高负载期间禁用) |
| 断路器实施 | ✅ 电路状态(关闭 = 正常,打开 = 阈值后立即失败,半打开 = 恢复探测);平台缓存存储状态,平台事件广播更改;连续失败后打开(例如 10 次失败) |
| 重试逻辑 | ✅ 暂时性故障的指数回退(1、2、4、8,上限为 30-60 秒);使用回退重试网络超时和 5xx 错误,在重试后标题后重试 429 速率限制;在同一事务中不要重试客户端 4xx 错误或调控器限制错误 |
| 后备策略 | ✅ 备用数据源(实时 API 不可用时的平台缓存)、默认行为(个性化服务关闭时的标准规则)、手动流程(卡住事务的管理员界面)、重试队列(72 小时重放的平台事件) |
| 错误处理架构 | ✅ 快速失败(在条目时验证输入)、正常失败(200 个记录中的 197 个进程,其中 3 个验证失败)、信息性失败(记录事务 ID、用户上下文、堆栈跟踪)、安全失败(回滚部分事务,从不向用户公开内部事务) |
| 恢复自动化 | ✅ 平台监控触发自动恢复:异步重试机制、失败处理的死信队列、无需手动干预的快速恢复自愈工作流 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 集成依赖性 | ⚏ 当外部地址验证服务关闭时,订单提交完全失败(关键流被支持功能阻止;应该通过手动审核正常降级) |
| 断路器策略 | ⚠ 外部标注没有断路器,导致每个事务在外部系统停机时等待 120 秒超时(所有用户都受一次失败集成的影响) |
| 重试逻辑 | 在相同事务上下文中,立即重试 Apex CPU 限制超出错误(将再次失败;应作为具有专用限制的异步操作重新排队) |
| 重试逻辑 | 无限重试,直到成功(无限循环风险,事务永远不会完成;应限制最大重试尝试次数) |
| 错误处理 | ⚠ 尝试捕获块吞噬异常,没有日志记录(阻止诊断和补救的操作者看不到故障) |
| 错误处理 | 在 Lightning 页面中向最终用户显示堆栈跟踪(安全风险泄露实施细节,用户体验不佳) |
| 后备策略 | 税务计算服务无法阻止所有订单提交(无回退的关键功能;应排队等待手动处理或使用默认费率) |
## Proactive Monitoring
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 健康建模 | ✅ 聚合健康状况:服务运行状况(事务成功率 >99.5% 绿色、98-99.5% 黄色、<98% 红色)、集成运行状况(所有响应绿色、降级黄色、断路器打开红色)、数据运行状况(同步电流绿色、黄色后面、陈旧/失败红色)、容量运行状况(<70% 绿色、70-85% 黄色、>85% 红色) |
| 事件监控 | ✅ EventLogFile 对象,24 小时/1 小时交付被路由到外部 SIEM,以便保留到本机保留限制之外;捕获 API 调用、页面视图、报表导出、登录活动、Apex 执行 |
| Proactive Monitoring警报 | ✅ 持续评估显示 API 请求限制峰值(75% 阈值触发器调查)、并发 Apex 执行失败、SOQL 行限制问题、存储消耗趋势 |
| 集成健康仪表板 | ✅ 每个集成度量:错误率(<1% 的目标)、带 SLO 的延迟 p50/p95/p99、超时率(<0.1% 的目标)、断路器状态、异步队列深度;包含请求 ID、端点、响应代码、持续时间的结构化日志 |
| 可操作的警报设计 | ✅ 每个警报定义谁响应、他们检查什么、他们如何补救;包括跨越的阈值、当前值、最近趋势、仪表板链接、Runbook 链接;与紧急程度匹配的严重性(用户影响的关键页面、趋势问题的警告电子邮件) |
| 异常检测 | ✅ 数量异常(典型负载的 300%)、错误率异常(2% 与 0.5%,即使低于 5% 阈值)、延迟漂移(逐渐上升趋势)、行为异常(异常登录模式、批量作业超出计划);用于指导调查不触发立即升级 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 事件监控 | 事件监控已启用,但未导出(本地保留不足以进行趋势分析,历史数据丢失) |
| 警报设计 | ⚏ 没有上下文、阈值或响应操作的警报消息“发生错误”(产生警报疲劳,运算符无法有效分类) |
| 警报严重性 | ⚠ 将所有异常视为关键警报(高误报率会导致警报疲劳,导致错过关键警报) |
| 健康监测 | ⚠ 没有聚合运行状况模型,操作员被单个技术指标淹没,缺少跨系统模式 |
| 集成监控 | 没有集成特定的错误率、延迟或断路器状态跟踪(通过用户报表被动发现的集成故障) |
| 容量监控 | 没有 Proactive Monitoring 或规模中心审查(资源密集型事务的可靠性风险直到生产受到影响才会被发现) |
---
有关内联示例和详细指导,请查看[可靠性支柱](/docs/architect/zh-cn/well-architected/guide/reliability.html),或浏览[模式和反模式](/docs/architect/zh-cn/well-architected/guide/patterns-and-anti-patterns.html)资源管理器。
# 可观察性和监控 - 模式
了解有关架构良好的[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)的更多信息 → 可[观察性和监控](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html#observability-and-monitoring)
## 可观察性框架
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Event Monitoring | ✅ Event Monitoring 设计为初始架构,捕获通过异步处理链和外部集成跟踪请求的相关 ID |
| 平台 \| Event Monitoring | ✅ 可观察性基础设施包含在初始阶段,而不是在生产事故被证明无法诊断后进行改造 |
| 平台 \| 集成 | ✅ 集成检查点是有意放置的,以支持跨系统边界的请求跟踪 |
| 平台 \| 平台事件 | ✅ 平台事件负载针对具有事务标记和上下文的运营可见性进行构建 |
| 平台 \| 自定义日志记录 | ✅ 自定义日志框架捕获离散事件,其中包含完整的上下文信息,包括用户身份、时间戳、持续时间和结果 |
| 平台 \| 度量 | ✅ 度量汇总了一段时间内的数值测量,揭示了 API 消耗率、Apex CPU 时间分布和批处理作业成功率等趋势 |
| 平台 \| 分布式跟踪 | ✅ 跟踪将同步 API 调用连接到异步处理链,将平台事件连接到订阅者执行,并将集成请求连接到外部系统响应 |
| 平台 \| 可观察性 | ✅ 可观察性使操作员能够回答有关系统行为的任意问题,而无需为每个调查部署新的仪器 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Event Monitoring | ⚏ 在没有自定义日志的情况下启动解决方案,当生产事件被证明无法单独使用平台日志诊断时,需要在六个月后进行重大重构 |
| 平台 \| Event Monitoring | 将可观察性改造到现有解决方案中,需要在操作改进工作中对大部分组件进行仪器更改,并存在缺陷风险 |
| 平台 \| 集成 | ⚏ 集成失败,但没有全面的遥测,请求路径无法跨系统边界跟踪 |
| 平台 \| 平台事件 | ⚏ 平台事件负载缺乏操作上下文,导致事件调查依赖于搜索多个系统 |
| 平台 \| 自定义日志记录 | 日志捕获的上下文不足;调查需要重现问题,以收集更多信息 |
| 平台 \| 可观察性 | 预定义仪表板无法回答有关生产中出现的系统行为的意外问题 |
## 平台运行状况监控
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Event Monitoring | ✅ 为捕获 API 使用情况、登录活动、Apex 执行、SOQL 查询、Visualforce 页面、Lightning 页面和报表运行的生产环境启用 Event Monitoring |
| 平台 \| Event Monitoring | ✅ 事件日志文件每小时导出一次到集中日志平台,支持本地平台保留之外的历史分析 |
| 平台 \| Event Monitoring | ✅ 外部日志聚合支持与其他系统的企业遥测进行端到端交易跟踪 |
| 平台 \| Event Monitoring | ✅ 保留事件日志文件,匹配合规报告和长期趋势分析的监管要求 |
| 平台 \| Proactive Monitoring | ✅ Proactive Monitoring 阈值会根据特定组织的正常工作范围进行有意调整,而不是接受默认值 |
| 平台 \| Proactive Monitoring | ✅ Proactive Monitoring 警报在用户可见的事件之前检测 API 限制峰值、并发 Apex 故障、SOQL 行限制方法和行锁定冲突 |
| 平台 \| Proactive Monitoring | ✅ 调整后的阈值产生团队Trust的可操作信号,并采取行动创造持续改进的良性循环 |
| 平台 \| 比例中心 | ✅ 规模中心基线在解决方案稳定期间建立,并在每个主发布后重新访问 |
| 平台 \| 比例中心 | ✅ 规模中心显示哪些操作消耗资源最多,哪些事务接近超时阈值,以及优化投资在哪些方面产生最大影响 |
| 平台 \| 比例中心 | ✅ 基线提示调查揭示了最新部署中引入的无意 N+1 查询模式,导致事务时间增加 |
| 平台 \| 设置审计跟踪 | ✅ 设置审计跟踪跟踪配置更改,包括权限修改、元数据部署和安全设置更新,最多保留 180 天 |
| 平台 \| 设置审计跟踪 | ✅ 当合规性或合同要求需要更长的历史窗口时,设置审计跟踪条目将被导出以保留 180 天以上 |
| 平台 \| Shield | ✅ 对于包含敏感数据、需要变更历史的受管数据或关键业务数据的字段,有选择地启用字段审计跟踪 |
| 平台 \| Shield | ✅ 字段审计跟踪为了解历史值有助于运营和合规报告的字段提供长达 10 年的保留期 |
| 平台 \| 健康检查 | ✅ 健康检查审查计划每季度进行一次,并根据环境的风险优先级对调查结果进行补救 |
| 平台 \| 健康检查 | ✅ 健康检查发现得到有意的审查,而不是被动接受;补偿控制或不同的风险容忍被记录下来 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Event Monitoring | 事件监控已启用,但日志从未导出,将调查限制为本机保留窗口,并阻止历史趋势分析 |
| 平台 \| Event Monitoring | 事件日志文件保留在平台存储中;不实施外部聚合会阻止长期容量规划 |
| 平台 \| Proactive Monitoring | Proactive Monitoring 使用过于敏感或过于宽松的默认阈值,生成团队学习忽略的干扰警报 |
| 平台 \| Proactive Monitoring | 警报噪音会破坏对监控系统的Trust;团队停止响应有效信号 |
| 平台 \| 比例中心 | 规模中心已启用,但从未主动审查;性能缓慢下降,直到用户在几个月的增量降级后抱怨 |
| 平台 \| 比例中心 | ⚠ 绩效指标缺乏基线上下文;不清楚 3 秒的事务时间是典型的、改善的还是降级的 |
| 平台 \| 设置审计跟踪 | 设置审计跟踪不会导出;保留限制会阻止超过 180 天的安全调查或合规验证 |
| 平台 \| Shield | 为所有字段启用字段审计跟踪,而不是有选择地启用,这会产生没有相应合规值的存储成本 |
| 平台 \| 健康检查 | 运行状况检查结果从不审核;安全配置偏离基准建议,未经有意接受 |
## 应用程序和集成监控
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 用户流 | ✅ 根据业务影响定义关键用户流,并端到端地监控成功率、完成时间、放弃点和错误率 |
| 平台 \| 用户流 | ✅ 关键流包括创收活动(订单提交、合同执行、业务机会完结)、高用量活动(登录、搜索、记录创建)和合规要求的活动(同意捕获、数据主体权利履行) |
| 平台 \| 用户流 | ✅ 流带有事务标记,指示每个重要步骤的开始、完成、放弃和失败 |
| 平台 \| 用户流 | ✅ 订单提交流在每个阶段(购物车验证、库存检查、付款处理、履行触发器)使用平台事件进行测量,按阶段显示成功率 |
| 平台 \| 用户流 | ✅ 流级监控揭示了组件级监控中不可见的问题,因为故障可能发生在任何过渡点 |
| 平台 \| 用户流 | ✅ 在流成功率低于可接受阈值或持续时间超过延迟目标时触发警报 |
| 平台 \| 集成 | ✅ 集成健康监控在级联到面向用户的故障之前,检测外部系统故障、网络问题、身份验证问题和速率限制方法 |
| 平台 \| 集成 | ✅ 关键同步集成的成功率监控警报低于 99% |
| 平台 \| 集成 | ✅ 出现基准中不存在的新错误类型时的错误分布监控警报 |
| 平台 \| 集成 | ✅ 同步面向用户的呼叫超过 3 秒时的延迟百分位数监控 (p95) 警报 |
| 平台 \| 集成 | ✅ 当超过已知速率限制或 SLA 阈值的 80% 时,吞吐量监控警报 |
| 平台 \| 集成 | ✅ 断路器状态监控报警,当任何电路断开指示外部系统降级 |
| 平台 \| 集成 | ✅ 重试率监控警报,当持续重试率超过 5% 表示可靠性问题 |
| 平台 \| 集成 | ✅ 将遥测路线集成到集中监控平台,实现跨系统边界的关联 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 用户流 | ⚏ 组件被独立监控,显示运行正常,而 12% 的用户放弃关键流,看不到原因 |
| 平台 \| 用户流 | 当用户无法完成显示监控架构失败的关键工作流时,组件运行状况仪表板显示绿色 |
| 平台 \| 用户流 | 用户接触多个 Apex 类、流、平台事件和外部集成的过程缺乏端到端的可见性 |
| 平台 \| 用户流 | 关键业务旅程缺少工具;成功率和放弃点未知 |
| 平台 \| 集成 | ⚏ 集成失败仅在级联到面向用户的失败后检测,而不是主动检测 |
| 平台 \| 集成 | ⚠ 集成遥测在单个系统中仍处于隔离状态,阻止了跨边界的相关性和根本原因分析 |
| 平台 \| 集成 | ⚠⸏ 在损坏后监控下游症状的警报,而不是尽早揭示根本原因 |
## 服务级别指标和目标
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| SLI | ✅ 可用性滑块衡量从用户角度成功执行时间关键流的百分比(接收预期结果,而不仅仅是 200 个状态代码) |
| 平台 \| SLI | ✅ 延迟 CLI 衡量 p50(中位数)、p90(排除异常值的第 90 百分位数)、p95(排除最差异常值的第 95 百分位数)和 p99(显示最差情况体验的第 99 百分位数)的完成操作的时间 |
| 平台 \| SLI | ✅ 延迟目标因操作关键度和用户期望而异(500ms 的搜索感觉是即时的,输入输入的相同延迟感觉是缓慢的) |
| 平台 \| SLI | ✅ 吞吐量 SLI 衡量每个时间单位的成功操作量,揭示容量利用率和增长趋势 |
| 平台 \| SLI | ✅ 吞吐量与延迟相结合,可以揭示系统是否在负载增加的情况下保持性能,或随着容量的增长而下降 |
| 平台 \| SLI | ✅ 错误率 SLI 区分错误类型(验证失败等用户错误与调控器限制异常等系统错误) |
| 平台 \| SLO | ✅ 在选择架构模式之前,根据业务需求确定服务级别目标,定义可接受的 SLI 阈值 |
| 平台 \| SLO | ✅ 业务需求“销售代表必须在 5 秒内看到业务机会更新”推动了 SLO“业务机会详细信息页面加载在 p95 时在 3 秒内完成”,这推动了架构决策 |
| 平台 \| SLO | ✅ SLO 来自业务需求,并推动架构决策,而不是根据系统当前实现的目标来定义 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| SLI | 可用性从技术角度(200 状态代码)而不是用户角度(接收预期结果)来衡量 |
| 平台 \| SLI | 延迟仅在中值测量,而不了解 p95 或 p99 百分位数的最坏用户体验 |
| 平台 \| SLI | 错误率 SLI 不区分用户错误和系统错误,屏蔽了需要不同解决方案的不同问题 |
| 平台 \| SLO | 首先构建架构,然后 SLO 被定义为“我们当前实现的一切”,导致接受 12 秒的页面加载,因为系统设计从未考虑用户的要求 |
| 平台 \| SLO | SLO 是架构驱动的,而不是业务驱动的,根据系统实现的目标而不是用户的需求来设定目标 |
## 警报架构
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 提醒 | ✅ 严重性分类将关键事件(生产不可用、数据损坏风险、安全妥协)立即发送给随叫随到的工程师 |
| 平台 \| 提醒 | ✅ 严重事件(性能下降、部分停机)会在工作小时内生成及时调查的通知 |
| 平台 \| 提醒 | ✅ 警告(接近阈值、配置偏差)生成每日摘要通知,以便进行主动补救 |
| 平台 \| 提醒 | ✅ 警报上下文包含受影响的用户计数、错误消息、堆栈跟踪、最近部署、相关警报和相关仪表板的链接 |
| 平台 \| 提醒 | ✅ 富上下文通过启用即时严重性评估和调查,无需收集基本信息,从而减少了平均确认时间 |
| 平台 \| 提醒 | ✅ 警报分组防止警报风暴,数百个相关警报针对单个基本问题触发 |
| 平台 \| 提醒 | ✅ 集成失败会触发一个按集成端点分组的警报,显示过去 5 分钟内 156 个失败的请求,其中包含延迟图、错误分布和仪表板链接 |
| 平台 \| 提醒 | ✅ 警报抑制防止已知瞬态条件在预期的维护时段或自动修复期间生成警报 |
| 平台 \| 提醒 | ✅ 在定期维护期间、缓存升温时部署后的最初几分钟以及重试逻辑成功的短暂暂时性故障期间,警报会被抑制 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 提醒 | ⚠ 所有警报都路由到同一渠道,没有严重性分类;重要事件没有与常规警告区分开来 |
| 平台 \| 提醒 | ⚏ 警报缺乏诊断上下文;随叫随到的工程师必须通过单独的查询收集基本信息,然后才能评估严重性 |
| 平台 \| 提醒 | 集成失败在 5 分钟内生成 156 个单独的警报,使随叫随到的工程师的电话无法接听,每个警报都相同,但时间戳除外 |
| 平台 \| 提醒 | 警报风暴阻止响应者从数百个相关症状中区分单个潜在问题 |
| 平台 \| 提醒 | 在已知维护时段内发出火灾警报,以及产生噪音的瞬态条件,从而削弱对监控的Trust |
| 平台 \| 提醒 | ⚏ 对噪音误报的警报疲劳导致团队忽略通知,降低了响应效率 |
# 可访问性和包容性设计 - 模式
了解更多关于架构良好的[公平性](/docs/architect/zh-cn/well-architected/guide/fairness.html)的信息 → [通过 Lightning 和 Experience Cloud](/docs/architect/zh-cn/well-architected/guide/fairness.html#accessibility-with-lightning-and-experience-cloud) 实现无障碍
## WCAG 2.2 AA 合规性
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 设计标准 | ✅ WCAG 2.2 AA 级是自定义构建工作(Experience Cloud、LWC、自定义主题)的最低可访问性栏,由构建团队验证 |
| 平台 \| 设计标准 | ✅可感知原则:图像和图标存在文本替代项;视频附带说明 |
| 平台 \| 设计标准 | ✅操作原则:所有功能均可通过键盘单独操作,无需鼠标或触摸 — 语音控制和开关访问辅助技术依赖于相同的键盘/焦点模型 |
| 平台 \| LWC | ✅ 标准 Lightning Web 组件按设计使用,自动提供基准可访问性 |
| 平台 \| LWC | ✅ 自定义组件实施显式可访问性,并使用屏幕阅读器进行测试验证 |
| 平台 \| 测试计划 | ✅ 可访问性测试包含在所有测试阶段(非临时或可选) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 设计标准 | WCAG 2.2 AA 级被视为可选或“很高兴拥有”,而不是最低要求 |
| 平台 \| 设计标准 | 图像和图标缺少文本替代;视频缺少说明 |
| 平台 \| 设计标准 | ⚏ 功能需要鼠标或触摸交互,没有键盘选项 |
| 平台 \| LWC | 自定义组件是在没有无障碍实施或验证的情况下构建的 |
| 平台 \| LWC | 自定义输入组件使用 div 元素和 CSS 样式,没有语义意义或键盘可访问性 |
| 平台 \| 测试计划 | 可访问性测试是临时的、可选的,或仅在启动前执行(并非在整个开发过程中) |
## 屏幕阅读器架构
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| LWC | ✅ 语义 HTML 元素(页眉、导航、主、侧、页脚、文章、部分)用于自定义 Lightning Web 组件 |
| 平台 \| LWC | ✅ ARIA 重大事件、角色和属性仅在语义 HTML 无法传达界面行为的地方应用 |
| 平台 \| LWC | ✅ 动态内容更新使用 aria-live 区域向屏幕阅读器用户宣布更改 |
| 平台 \| LWC | ✅ 自定义交互式组件具有与其行为相匹配的明确角色定义 |
| 平台 \| LWC | ✅ 表单标签使用适当的标签元素或 aria-labeledby 属性与所有表单输入明确关联 |
| 平台 \| LWC | ✅ Lightning 输入组件配置了所需的标签属性,提供了内置的标签关联 |
| 平台 \| 测试计划 | ✅ 使用实际屏幕阅读器进行测试:Windows 上的 JAWS 和 NVDA、macOS 和 iOS 上的 VoiceOver、Android 上的 TalkBack |
| 平台 \| 测试计划 | ✅ 使用真正的辅助技术进行手动测试的人员了解屏幕阅读器用户如何导航 |
| 平台 \| 设计标准 | ✅ 占位符文本永远不会用作唯一标签,因为占位符会在焦点上消失,并且为屏幕阅读器提供的上下文不足 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| LWC | ⚏ 内容层次结构中大量标记条的含义迫使屏幕阅读器用户线性导航 |
| 平台 \| LWC | 仅在语义 HTML 无法传达界面行为时,不使用 ARIA |
| 平台 \| LWC | 动态内容更新不使用 aria-live 区域;屏幕阅读器用户错过重要更改 |
| 平台 \| LWC | 自定义交互式组件缺乏明确的角色定义;屏幕阅读器错误地宣布它们 |
| 平台 \| LWC | 表单输入缺少明确的标签关联;占位符文本用作唯一标签 |
| 平台 \| 测试计划 | 自动可访问性工具仅供使用;不执行手动屏幕阅读器测试 |
| 平台 \| 测试计划 | 测试由不熟悉屏幕阅读器用户实际导航方式的视力用户执行 |
## 键盘导航
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 设计标准 | ✅ 可通过键盘访问完整功能,无需在用户旅程中的任何时间点进行鼠标或触摸交互 |
| 平台 \| LWC | ✅ 逻辑聚焦顺序遵循可视布局和交互流 |
| 平台 \| LWC | ✅ 当动态内容加载或模态打开时,焦点以编程方式管理,以指导键盘用户了解新内容 |
| 平台 \| LWC | ✅ 模态和弹出组件在打开时将焦点移到模态标题或第一个交互式元素;在关闭时将焦点返回到触发器按钮 |
| 平台 \| 设计标准 | ✅ 可见的焦点指示器清楚显示哪个元素始终具有键盘焦点 |
| 平台 \| 设计标准 | ✅ 焦点指示器满足周围内容的 3:1 对比度要求 |
| 平台 \| LWC | ✅ 用户可以单独使用键盘导航进出所有组件,而不会陷入困境 |
| 平台 \| LWC | ✅ 模态对话框在打开时将焦点困在模态中(防止访问隐藏的内容),但在关闭时释放焦点 |
| 平台 \| 设计标准 | ✅ 频繁操作的键盘快捷方式避免与屏幕阅读器快捷方式和浏览器快捷方式冲突 |
| 平台 \| 设计标准 | ✅ 单字母快捷方式仅在特定组件有焦点时激活(非全局),以避免与屏幕阅读器导航命令冲突 |
| 平台 \| 文档 | ✅ 所有自定义键盘快捷方式都记录在可访问的帮助内容中 |
| 平台 \| 测试计划 | ✅ 测试步骤包括仅使用键盘导航所有用户旅程,无需使用鼠标或触摸 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 设计标准 | ⚏ 功能需要鼠标或触摸交互;仅限键盘的用户无法完成关键任务 |
| 平台 \| LWC | 焦点顺序不遵循逻辑可视布局;用户会以意想不到的顺序使用 Tab 键浏览元素 |
| 平台 \| LWC | 打开的模态没有焦点管理;键盘用户困在现在隐藏的触发按钮上 |
| 平台 \| LWC | 模态关闭不会将焦点返回到触发器按钮;用户必须搜索他们在页面中的位置 |
| 平台 \| 设计标准 | ⚠ 焦点指示器出于美观原因被禁用;用户看不到哪个元素有焦点 |
| 平台 \| 设计标准 | 焦点指示器对比度不足 (<3:1) |
| 平台 \| LWC | 用户被困在没有逃逸机制的界面区域(键盘陷阱) |
| 平台 \| LWC | 嵌入内容(iframes、第三方小部件)永久捕获键盘焦点 |
| 平台 \| 设计标准 | 单字母快捷方式激活与屏幕阅读器单字母导航命令冲突的全局 |
| 平台 \| 文档 | 自定义键盘快捷方式未记录;用户无法发现 |
## 视觉设计和对比度
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 设计标准 | ✅ 对于 18pt 或 14pt 以下粗体的正常文本,对比度最低为 4.5:1 |
| 平台 \| 设计标准 | ✅ 大文本和有意义的 UI 组件和图形(表格边框、信息图标)的最低 3:1 对比度;纯装饰和禁用元素除外 |
| 平台 \| Experience Cloud | ✅ 自定义主题和品牌化 Experience Cloud 站点包含使用浏览器开发工具或自动检查器的显式对比验证 |
| 平台 \| 设计标准 | ✅ 支持将文本大小调整为 200%,而不会丢失内容或功能(WCAG 要求) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 设计标准 | 文本对比度低于 4.5:1(正常文本)或 3:1(大文本和 UI 组件) |
| 平台 \| Experience Cloud | 部署自定义主题时没有对比验证;弱视用户无法阅读内容 |
| 平台 \| 设计标准 | 文本调整大小超过 200% 会中断丢失内容或功能的布局 |
## 可访问性测试和验证
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| CI/CD | ✅ Axe-core 或 Lighthouse 可访问性扫描集成到 CI/CD 漏斗中,捕捉每个部署的结构问题 |
| 平台 \| CI/CD | ✅ 当检测到关键的可访问性问题时,构建失败 |
| 平台 \| 测试计划 | ✅ 在整个开发过程中定期进行手动测试,包括屏幕阅读器、仅键盘导航和浏览器缩放到 200% |
| 平台 \| 测试计划 | ✅ 测试显示交互问题,包括混淆公告顺序、焦点管理失败和键盘陷阱 |
| 平台 \| 业务 | ✅ 在整个设计过程中,将残疾用户纳入可用性测试 |
| 平台 \| 业务 | ✅ 可用性测试揭示了自动化和手动专家测试错过的实际障碍 |
| 平台 \| 测试计划 | ✅ 自动测试(按数量计算约占问题的57%)、手动测试(交互问题)和用户测试(真实障碍)全部执行 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| CI/CD | ⚏ 可访问性扫描未集成到 CI/CD 漏斗中 |
| 平台 \| CI/CD | 尽管存在严重的可访问性问题,但构建仍会继续 |
| 平台 \| 测试计划 | 不使用辅助技术进行手动测试;仅使用自动扫描 |
| 平台 \| 业务 | ⚠ 残疾用户不包括在可用性测试中 |
| 平台 \| 测试计划 | ⚠ 自动可访问性扫描仪在启动前运行一次,并考虑完成可访问性测试 |
# 可靠性

## 概览
Salesforce 在多个地区运营弹性基础设施,具有自动故障切换和基础设施级弹性。该平台处理数据中心冗余、网络可用性和基础设施修补,实时平台可用性状态在 trust.salesforce.com 上可见。
您可以设计在此基础设施上运行的一切的可靠性:在调控器限制范围内扩展的数据模型、预测故障并从故障中恢复的事务、检测解决方案何时偏离可用性目标的监控,以及在发生故障时恢复业务操作的灾难恢复程序。
Salesforce SLA 涵盖了该平台,但您拥有基础设施层以上所有内容的可靠性。您负责定义和实现自己的服务级别目标 (SLO),即业务所需的可靠性目标。无论平台 SLA 级别如何,应用程序层的可靠性仍然是您的责任。保证可用性的相同平台也限制了可用性:调控器限制会限制每个租户的资源消耗,因此任何单个租户都不能降低其他租户的平台。因此,您的解决方案必须在这些限制内进行适度扩展,而不仅仅是请求更大的容量。
不可靠的解决方案会产生级联业务影响。当商业平台不可用时,收入流会变慢。当内部工具在工作流中失败时,生产力会下降。当数据损坏或记录丢失时,Trust 会削弱。随着解决方法的累积和技术债务的增加,这些问题会随着时间的推移而复杂化。
可靠性不是防止所有故障。在分布式系统中出现故障。可靠性是指设计预测故障、帮助控制爆破半径和自动恢复服务的系统。可靠性要求因业务影响而异。例如,需要 99.9% 可用性的面向客户的 Experience Cloud 入口网站所涉及的架构选择与容忍偶尔延迟的内部批处理报告流程有着根本的不同。
### 可靠性和卓越操作性:一枚硬币的两面
可靠性和[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)是紧密关联的。两者都解决了监控、事件响应和系统可用性的问题。这种重叠是有意的,不是偶然的。区别在于*设计时间*与*运行时间*。
可靠性是在系统运行之前构建*到*系统的内容,包括:
- 前面提到的在调控器限制范围内扩展的数据模型
- 预测故障并从中恢复的事务
- 包含爆炸半径的冗余和断路器
- 恢复目标 - 恢复时间目标 (RTO) 和恢复点目标 (RPO) 决定了系统在出错时的行为方式。
可靠性至关重要;这是解决方案的结构属性。
卓越运营是指系统运行后如何*操作、改进和维护*,包括:
- 降低变更风险的部署实践
- 事件期间指导团队的 Runbook 和升级路径
- 表面信号的可观察性漏斗
- 随着时间的推移改善系统的反馈回路。
实践卓越运营;这是围绕解决方案的人力和流程纪律。
两个支柱之间的共同点是监测和观察层。监控*设计*为可靠性问题。您应该构建可观察的系统。它是作为卓越运营来*实践*的。您的团队会根据这些系统告诉您的信息采取行动。可靠性涵盖了您构建的架构模式,例如警报阈值和健康仪表板。卓越运营涵盖了团队如何响应信号,例如 Runbook 和随叫随到的响应。
请考虑以下区别:可靠性解决的是“此系统能否生存?”,而运营卓越解决的是“您的团队能否操作?”由没有运行手册、部署不一致或没有反馈环路的团队运营的完全可靠的系统在实践中仍然会失败。一个运营出色的团队管理一个脆性、设计糟糕的系统时,他们将被无法防止的事件淹没。这两个支柱都是必要的,不能取代另一个。
可靠性并非孤立操作。如前面章节所述,卓越运营是其最密切的合作伙伴。这两个支柱共享可观察性层,可靠性定义了您构建到系统中的内容,运营卓越性定义了团队的工作方式。[Trust](/docs/architect/zh-cn/well-architected/guide/trust.html) 还需要能够抵御攻击并保持数据完整性的基础设施:如果系统可能遭到破坏,它就不可靠。资源优化防止调控器限制耗尽,确保平台保持大规模的可靠性。成本优化平衡了可靠性投资及其提供的业务价值。可用性目标证明了实现这些目标所需的架构复杂性。没有一个支柱能够单独产生架构良好的解决方案 — 可靠性提供了其他支柱*依赖*和*强化*的结构基础。
## 设计原则
使用这些原则来指导您在平台上的可靠性的架构决策。
- **通过批量化分配工作量。**在单个事务中处理多个记录,而不是依赖按顺序进行的每条记录操作。批量化在单个事务中处理的批次之间共享调控器限制,遵守这些限制,同时最大限度地提高吞吐量。基于集合的 Apex 处理、具有可配置范围的批处理作业以及批量消耗的平台事件都体现了这一原则。在顺序处理中,批量化良好的解决方案处理 200 个 SOQL 和 DML 语句数量相同的记录。分布式工作负载模式提供了弹性,因为没有单个记录故障影响整个批次的处理。
- **假设一切失败。**调控器限制、平台维护窗口和集成依赖性创建与 Salesforce 多租户架构相关的失败模式。从一开始就设计这些特定于平台的故障。SOQL 查询超出数据偏差下的行限制。Apex CPU 时间可能在复杂计算期间到期。随着外部服务变慢,可能会出现标注超时。当并发事务冲突时,DML 行锁定失败。当文件上传意外达到峰值时,存储限制可能会失败。为这些失败制定计划的架构师无需手动干预即可构建可靠的解决方案。这些可靠的系统检测接近调控器限制,通过错误处理控制爆炸半径,并通过重试框架和平台事件自动恢复。
- **构建自我恢复系统。**设计无需人工干预即可检测故障并自动恢复的解决方案。平台事件启用自定义重试模式。可以使用 EventBus.RetryableException 重试向订阅者交付,但重放原始事务需要自定义架构。流错误处理会将异常定向到恢复流。Apex 批处理作业隔离块失败 - 失败的块不会阻止其他块处理 - 启用部分作业完成和目标重试。使用 AsyncApexJob 上的错误跟踪实施显式重试逻辑,以实现暂时性故障恢复。在处理暂时性失败时,对这些重试模式应用指数回退。自助恢复系统即使在非工作时间事件(人工响应人员可能不可用)中也能保持可用性目标,从而减轻了操作负担,同时缩短了平均恢复时间。
- **首先设计业务需求。**在选择技术解决方案之前,根据实际业务影响定义服务级别目标。不是每个组件都需要五个 9 的可用性。将可靠性投资与业务关键度相匹配,并为支持功能设计合理的降级。现实的目标支持适当的架构选择,并避免过度设计或交付不足。
- **通过钻机验证恢复。**安排灾难恢复演练,以测试备份还原、故障转移程序和事件响应行动手册。从生产备份恢复完全复制 Sandbox,以验证恢复过程。在 Sandbox 环境中引入故意故障,以确认您的监控检测到问题,以及自动恢复正确执行。演练会在真实事件暴露出来之前揭示程序、工具和运行手册中的差距。记录钻取结果,并跟踪发现的缺口的补救措施。定期测试可确保恢复功能随着解决方案的发展和团队成员的变化保持最新状态。
## 平台可靠性:Salesforce 管理的内容
了解 Salesforce 的操作有助于您将可靠性设计工作集中在*您*控制的内容上。该平台处理传统 IT 环境中需要专职团队的基础架构问题,例如:
- **多区域基础设施和故障切换:**Salesforce Hyperforce 为区域数据中心提供内部服务的自动故障切换。它还提供了区域内的多个可用性区域,以及在基础设施层的数据复制。该平台透明地处理区域内的冗余和可用性区域分配。
- **平台 SLA 承诺:**带有合同补救措施的保证可用性级别是根据每个客户商定的。 [Trust.salesforce.com](http://trust.salesforce.com)公布实时平台状态和正常运行时间历史,但任何具体的可用性保证及其补救措施都存在于你商定的协议中。查看您的合同和当前的 Salesforce Trust 与合规文档,了解适用于贵组织的承诺。
- **基础设施冗余:**该平台维护冗余服务器、网络路径、数据库基础设施和存储系统。基础设施级故障切换会在硬件故障期间自动发生,无需客户采取行动。平台备份可以防止基础设施级别的数据丢失。
- **平台维护和更新:**主要平台版本提供 Salesforce 管理的向后兼容性的功能和安全补丁。平台维护时段将在 [ trust.salesforce.com](http://trust.salesforce.com) 上安排和传达。基础设施修补以透明方式发生,无需客户参与。
- **核心平台运行状况监控:**Salesforce 监控基础设施性能,包括数据库响应时间、网络延迟、API 网关运行状况和存储系统性能。平台健康状态显示在 [trust.salesforce.com](http://trust.salesforce.com) 上,并包括实时事件更新。特定于实例的状态可通过状态 API 获得。
这些平台操作为您构建奠定了基础。您无需管理数据中心、配置服务器或设计基础设施灾难恢复。相反,您负责在此基础之上设计和配置的内容。
## 解决方案可靠性:您设计和管理的内容
共享责任模型指定您拥有使用 Salesforce 创建的一切内容的可靠性。平台可靠性支持您的工作,但不会取代它。您的可靠性责任跨越六个相互关联的领域:
### 可靠性目标和 SLO
#### 定义服务级别目标
服务级别目标 (SLO) 以可衡量的方式量化可靠性要求。SLO 将业务需求和技术架构联系起来。在选择技术或设计数据模型之前,请建立定义每个关键用户流成功的 SLO。
SLO 通常衡量:
- **可用性** \- 系统运行和可访问的时间百分比
- **Latency** — 完成操作所需的时间,以百分位数 (p50、p95、p99) 衡量
- **吞吐量** \- 单位时间内成功完成的操作量
- **错误率** \- 失败或返回错误的请求的百分比
- **恢复时间** \- 事件发生后恢复服务所需的持续时间
定义每个业务能力的 SLO,而不是每个技术组件。面向用户的功能需要比管理或批处理更严格的 SLO。每个 SLO 应使用现有仪器进行客观测量。
#### SLA 与 SLO 与 SLI
服务级别协议 (SLA) 是带有失败后果的合同承诺。任何保证的可用性级别及其合同补救措施都是按客户协商商定的。查看您的协议和当前的 Salesforce Trust 与合规文档,了解适用于贵组织的承诺。
解决方案 SLO 应该比平台 SLA 更严格,以保持错误预算。如果您的平台 SLA 和解决方案 SLO 的目标都是 99.9%,任何显著的平台停机都会直接消耗您的错误预算,从而在相同的测量周期内没有为应用程序层故障、集成问题或计划的维护留下缓冲空间。只有当累积停机时间耗尽测量期间的全部误差预算时,才会正式违反 SLO。如果您的 SLA 和 SLO 设置为相同的目标,一个平台事件会完全耗尽该预算。例如,当平台提供 99.9% 时,将解决方案 SLO 的目标设置为 99.5%,以便为您必须解决的问题(应用程序错误、集成失败和部署窗口)保持有意义的缓冲。
服务级别指标 (SLI) 是用于评估 SLO 实现情况的评测。SLI 必须可以客观衡量、持续收集,并与用户体验直接相关。
对于 Salesforce 解决方案,SLI 包括:
- 通过 [ trust.salesforce.com](http://trust.salesforce.com) 的平台正常运行时间
- 通过 Experience Cloud Analytics 加载页面的时间
- 通过 Event Monitoring(需要 Event Monitoring 加载项或 Salesforce Shield)的 API 响应时间
- 通过自定义应用程序日志记录的事务成功率
- 通过 AsyncApex 作业监控完成批处理作业
#### 现实的可用性目标
更高的可用性目标导致复杂性和成本呈指数增长。在提交目标之前,了解架构含义:
| 目标 | 年度停机时间 | 每月停机时间 | 架构要求 |
| :---- | :---- | :---- | :---- |
| 99% | 3.65 天 | 7.3 小时 | 标准平台功能 |
| 99.5% | 1.83 天 | 3.6 小时 | 基本冗余,活动监控 |
| 99.9% | 8.76 小时 | 43.8 分钟 | 多区域感知、自动故障切换 |
| 99.95% | 4.38 小时 | 21.9 分钟 | 主动-主动模式,混沌测试 |
| 99.99% | 52.6 分钟 | 4.4 分钟 | 多组织架构,全面自动化 |
避免任意的目标,例如“所有事情都用五个九”。相反,评估每个功能停机对业务的影响,并相应地设定目标。允许每月停机 7 小时的内部批处理报告需要的架构与需要子小时恢复的收入关键订单处理根本不同。
#### 基于用户体验的可靠性
从用户角度定义可靠性,而不仅仅是从技术指标。报告 99.9% 正常运行时间但频繁超时的系统会降低基于用户体验的可靠性。用户更关心成功完成工作流,而不是个人 API 正常运行时间。
设计反映用户过程而不是个人 API 调用的 SLO。多步骤 Checkout 流要求每个步骤在可接受的时间内成功完成。衡量端到端用户流完成率,作为主要的可靠性指标。组件可用性是必要的,但不足以保证用户体验的可靠性。
### 高可用性架构
#### 多区域策略
Salesforce Hyperforce 提供支持地理分布的区域数据中心。该平台处理区域内的基础设施冗余,包括多个可用性区域、内部服务的自动故障切换以及基础设施层的数据复制。平台 SLA 反映了这种基础设施冗余。
对于大多数解决方案,具有平台受管冗余的单区域部署提供了足够的可用性。Trust Salesforce 基础设施的基础可用性,并将解决方案架构集中在应用程序层可靠性上,包括容错集成模式、正常降级和自动恢复。
跨可用性区域的区域内故障切换是自动的,并包含在标准平台 SLA 承诺中 — Salesforce 在基础设施层对此进行透明的管理。跨区域(区域外)灾难恢复是单独的付费产品,默认情况下不包括在任何标准版本中。如果您的业务连续性要求进行跨区域故障切换,请在灾难恢复计划中明确记录这种依赖性,以便利益相关者了解包含的平台弹性和购买的跨区域灾难恢复功能之间的区别。
### 关键工作负载的多组织模式
多组织架构提供了最强的隔离和地理冗余,但增加了操作复杂性,包括数据同步、用户配置、部署协调和许可证成本。为业务需求明确证明复杂性的场景保留多组织模式。例如,考虑这些场景的多组织模式:
- 该业务需要超出平台功能的保证 RPO/RTO
- 监管要求要求地理数据隔离,业务连续性规划要求完全独立于单个区域
- 由于业务部门自治要求,组织整合不可行。
**主动-被动模式:**\- 主要组织在正常条件下为所有流量提供服务。不同区域的次要组织保持同步但空闲。故障切换发生在主要区域停机期间。此解决方案提供了最简单的多组织模式,但未使用辅助容量。DNS 路由或用户身份验证层将用户定向到活动组织。
**主动-主动模式:**\- 两个组织都持续为生产流量提供服务。用户按地理位置、业务部门或工作量类型进行分配。主动-主动最大限度地提高了容量利用率,但需要复杂的数据同步和用户路由。在两个组织中修改相同记录时,解决冲突至关重要。
设计适合 RPO 要求的数据同步。平台事件为关键数据更改提供近乎实时的事件流。变更数据捕获最少的开发为选定对象提供自动变更跟踪。通过固定间隔的批量 API 2.0 进行计划的 API 复制适合时间要求较低的参考数据。
#### 多层冗余
在数据、应用程序和集成层应用冗余,以防止单点故障。分层冗余可确保任何单个层的故障不会影响整体系统可用性。
- **数据冗余:**该平台通过基础设施备份提供数据冗余。当业务需要比平台还原程序更快的恢复时,使用应用程序级复制来补充这种冗余。使用变更数据捕获或平台事件将关键数据连续复制到辅助存储或外部系统。这将支持从逻辑损坏或基础设施备份无法解决的配置错误中恢复。
- **应用程序冗余:**设计无状态应用程序逻辑,以便任何应用程序服务器都可以处理任何请求。避免阻止水平缩放的服务器端状态。使用自定义元数据类型和自定义设置进行配置,这些配置必须在所有应用程序服务器中立即可用。无状态设计使应用程序服务器能够处理请求,而不依赖于特定的服务器状态。
- **集成冗余:**设计容忍临时外部系统不可用的集成。实施断路器模式来检测失败的集成。当外部系统停机时,通过平台事件将请求排队,而不是阻止用户操作。这将外部系统故障与面向用户的功能隔离开来。
#### 平台运行状况监控
使用 [trust.salesforce.com](http://trust.salesforce.com) 和特定于实例的状态 API 监测 Salesforce 平台的健康。订阅实例的状态通知,以接收有关事件、维护时段和性能影响的提醒。平台运行状况信号支持主动响应,而不是被动故障排除。
设计响应平台健康状况的解决方案。当平台性能下降时,减少非关键批处理负载。使用计划的作业监控,在维护时段内延迟后台作业。禁用非必要集成,以在事件期间保护面向用户的关键操作。这种动态负载降低功能可以保持关键功能在压力下的可靠性。
使用规模中心来识别消耗不成比例的平台资源的长期事务和操作。规模中心提供事务级可见性,使架构师能够在成为面向用户的事件之前检测可靠性风险。每周规模中心审查揭示了需要架构补救的模式。
#### 故障检测
在多个级别实施故障检测,以在问题级联为完全停机之前发现问题。分层检测提供了对未检测到的故障的深度防御。
| 检测层 | 信号源 | 捕获的内容 |
| :---- | :---- | :---- |
| 平台故障 | [ trust.salesforce.com](http://trust.salesforce.com), Status API | 基础设施事件、维护 |
| 集成失败 | 超时监控、错误率跟踪 | 外部系统问题、网络问题 |
| 应用程序失败 | 异常日志记录,事务成功率 | 代码缺陷、配置错误 |
| 性能下降 | 延迟百分位数监控 | 完全失败前的减速 |
| 容量警告 | Proactive Monitoring警报 | 调控器限制即将到来,API 耗尽 |
设计警报阈值,平衡早期发现和假阳性。在错误率超过阈值或出现持续降级时发出警报,而不是在孤立的故障时。单个错误在分布式系统中是正常的。错误模式表示需要注意的可靠性问题。
### 可扩展性和容量规划
#### 作为架构约束的调控器限制
Salesforce 调控器限制会限制多租户平台中每个租户的资源消耗,因此单个租户不会降低其他租户的性能。这些不是任意的限制;它们是影响解决方案设计的架构边界。在设计可靠的架构之前,请了解调控器的限制。在正常负载下经常接近调节器限制的解决方案很可能会在压力下失败。
影响架构决策的关键调控器限制:
| 资源 | 同步限制 | 异步限制 | 架构影响 |
| :---- | :---- | :---- | :---- |
| SOQL 查询 | 每个事务 100 个 | 每个交易 200 个 | 查询合并、关系查询 |
| DML 语句 | 每个事务 150 个 | 每个事务 150 个 | 批量 DML、集合操作 |
| 堆大小 | 6 MB 同步 | 12 MB 异步 | 数据块、流模式 |
| CPU 时间 | 10,000 毫秒同步 | 60000 毫秒异步 | 算法效率、异步卸载 |
| 标注超时 | 总计 120 秒 | 总计 120 秒 | 跨标注的超时预算 |
| API 调用(24 小时) | 因版本而异 | 不适用 | 集成批处理、缓存 |
设计在限制内完成的交易,即使在峰值负载下。通过将调控器限制的 70% 作为正常条件下的操作上限来建立利润,并为意外的峰值保留 30%。此缓冲区适应临时负载增加,通常不会达到硬限制。
#### 批量化模式
批量化是 Salesforce 的基本可扩展性模式。在单个事务中处理多个记录,而不是在单个记录操作中。批量化减少了调控器限制消耗,同时提高了吞吐量。每个 Salesforce 架构师必须掌握批量化模式,因为它们是所有可扩展解决方案的基础。
设计所有 Apex 触发器、批处理类和集成,以高效处理记录集合。首先收集记录标识符,然后使用单查询和 DML 语句处理所有记录。使用地图和集合进行高效的查找,而不是使用带有单个查询的嵌套循环。与逐条记录的方法相比,基于集合的处理提供了数量级的效率改进。
记录触发的自动化必须处理每个触发器调用 200 个记录,因为平台处理最多 200 个记录的批量触发器执行。Lightning 数据服务操作会自动批处理,但自定义组件必须在执行 DML 操作时明确实施批量模式。
#### 规模的异步处理
异步处理会跨时间分配工作,而不是在单个事务的调控器限制内尝试立即完成。当操作处理超过同步调控器限制的大数据量、依赖于响应时间可变的外部系统、可以容忍延迟完成或需要超出同步 CPU 限制的延长执行时间时,请使用异步模式。
Salesforce 异步功能及其架构适应性:
- **批量 Apex:**以每个执行方法最多 2,000 条记录的块形式处理大记录量。批次提供每个块的专用调控器和故障隔离 — 失败的块不会阻止其他块完成。这将启用部分成功和目标重试。通过跟踪 AsyncApexJob 对象上的失败块范围,并重新将目标批处理作业排队,为暂时失败实施自定义重试逻辑。将批处理用于数据迁移、计划的批量更新和大规模数据处理。每个组织最多可以同时运行或等待执行的五个批处理作业。Apex 弯曲队列中的其他作业排队(最多 100 个处于保持状态的作业),并在空档打开时自动执行。
- **Queueable Apex:**使用链接功能执行异步作业,以启用多步骤工作流和复杂对象参数。Queueable Apex 与所有其他异步 Apex(批处理、未来和计划 Apex)共享组织范围内的 DailyAsyncApexExecutions 限制,即每 24 小时 250,000 次执行,而不是保留专用的Quueable 特定分配。将 Queuable Apex 用于需要顺序处理的多步骤编排和集成工作流,其监控效果优于 @future 方法。
- **平台事件:**平台事件用于将发布者与订阅者分离的发布-订阅事件架构。事件从 72 小时(3 天)的保留时段重放。超过 72 小时的延长保留作为付费加载项提供 — 在承诺履行依赖于延长重放的 SLA 义务之前,请验证最新的 Salesforce 平台事件文档中的当前[最大限制](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_event_limits.htm)和正式发布状态。将平台事件用于事件驱动的自动化、跨系统集成和实时数据流。平台事件提供了事务阶段之间的自然异步边界。
- **计划 Apex:**使用通过 System.schedule() 的 CRON 表达式,按固定计划执行作业。作业最多可以计划每小时运行一次 — CRON 秒和分钟字段必须使用固定值,而不是范围。通过将类似的操作合并到单个可计划类中,保持在每个组织最多 100 个计划的 Apex 作业的范围内。
#### 数据分区和碎片
当数据量超过实际处理限制时,即使使用批量化和异步模式,也要跨逻辑边界对数据进行分区,以启用并行处理。数据分区将大型顺序操作转换为较小的并行操作,这些操作完成速度更快,并且保持在调控器限制内。
- **基于日期的分区:**在时间窗口中处理数据,包括本月的交易或上一季度的个案。将历史数据归档到大对象或外部存储,以保持工作集可管理。大多数事务性查询关注最近的数据,这使得基于时间的分区自然高效。
- **记录类型分区:**独立处理不同的记录类型,包括合作伙伴个案与客户个案或企业客户与 SMB 客户。每种类型的单独批处理作业启用并行化。记录类型通常与证明独立处理的合理性的不同业务流程相关联。
- **基于所有者的分区:**按记录所有人分配处理,例如独立处理每个销售区域的业务机会。基于所有者的分区在与共享模式结合时尤其有效,因为安全性是通过现有机制强制执行的。基于所有者的分区支持处理负载的地理分布。
#### 容量计划
根据业务增长预测未来容量需求,而不是对限制耗尽做出反应。主动式容量规划可防止因平台资源不足而导致的可靠性事故。
- **用户许可证** \- 人数增长推动每个用户的 API 调用分配和存储权利
- **数据存储** \- 推动存储消耗的事务量和保留策略(名义上计划至少实现 10-20% 的年增长)
- **API 调用** \- 集成计数和频率驱动 24 小时 API 分配(每个新的集成模式都会增加重复消耗)
- **处理能力** \- 批处理作业数量和复杂性导致异步处理队列和并发执行限制
使用 Proactive Monitoring 持续评估组织容量使用情况。Proactive Monitoring 显示了容量风险,包括 API 使用接近请求限制峰值、存储接近限制以及批处理作业队列深度超出可持续水平。每周容量审查可在业务影响发生前为其他许可证或限制预留采购准备时间。
#### 负载测试
在生产部署前,通过负载测试验证可扩展性假设。负载测试揭示了低用量开发测试中不可见的调控器限制问题、集成瓶颈和容量约束。使用生产规模的数据量和并发进行测试,以验证在现实条件下的可靠性。
- **数据量测试:**在完全复制 Sandbox 中填充生产规模数据量,以通过实际数据偏差、关系深度和记录计数验证查询性能。在生产达到该规模时,使用 1000 多万条记录进行测试。随着数据量的增加,查询优化器的行为会急剧变化,这可能会导致误导性的小扩展测试结果。
- **并发用户测试:**模拟峰值并发用户负载,以验证事务吞吐量和竞争。在部署前,使用适用于合格组织的规模测试来模拟 Sandbox 环境中的生产工作负载。并发执行揭示了单用户测试中不可见的锁定问题。
- **API 负载测试:**生成峰值 API 容量,以验证集成可扩展性、速率限制处理和持续负载下的断路器行为。API 负载测试揭示了重试逻辑和错误处理是否在压力条件下正常工作。
- **扩展测试:**扩展测试是 Salesforce 产品,用于在完全复制 Sandbox 环境中模拟生产工作负载,并根据生产能力进行扩展。扩展测试针对 Hyperforce 上的完全复制 Sandbox 运行。您的生产实例无需在 Hyperforce 上即可使用。您可以在生产组织中创建测试计划,同时根据 Sandbox 执行测试。在主要部署前,使用扩展测试来验证调控器限制净空、异步处理吞吐量和峰值负载条件下的集成响应行为。
### 容错和恢复能力
#### 优雅降级模式
当非关键组件出现故障时,温和降级会保持核心功能。设计系统在故障期间优先考虑关键用户流而不是支持功能。并非所有功能都具有同等的业务重要性,架构应反映这些优先级。
定义功能关键度层次结构:
| 等级 | 描述 | 降级行为 | 示例 |
| :---- | :---- | :---- | :---- |
| 关键 | 收入或合规性 | 永不降级,完全冗余 | 付款处理、审计日志 |
| 重要 | 核心用户工作流 | 仅在主要事件期间降级 | 个案创建、业务机会更新 |
| 支持 | 增强体验 | 在任何集成失败期间禁用 | 推荐,丰富 |
| 可选 | 功能不错 | 在高负载期间主动禁用 | Analytics 小部件、社交摘要 |
这种层次结构使架构师能够设计即使在部分系统故障期间也能保持业务连续性的降级策略。用户更喜欢减少功能,而不是完全不可用。
#### 断路器模式
断路器模式防止集成不可用时的级联故障。检测失败模式并停止调用失败的系统,而不是累积消耗事务时间和调控器限制的超时。断路器提供快速故障,而不是缓慢故障。
断路器状态:
- **已关闭** \- 正常运行,请求按设计流向外部系统
- **打开** \- 超过失败阈值,请求立即失败,无需尝试外部调用,节省资源
- **半开放** \- 恢复测试期间,有限请求会探测外部系统,以在完全闭合电路之前检测恢复情况
使用平台缓存实施断路器,以存储所有事务可访问的电路状态。使用平台事件在组织中广播状态更改。断路器逻辑会在尝试外部调用前检查状态,避免浪费已知失败系统的标注限制。
#### 重试逻辑和指数回退
在分布式系统中,瞬态故障是正常的。网络中断、临时服务不可用和速率限制响应通常在几秒内解决。实施重试逻辑,在渐进式延迟后重复失败的操作,而不是立即失败。
指数回退可以防止使恢复系统淹没的重试风暴。第一次重试可以在 1 秒后发生,第二次重试可以在 2 秒后发生,第三次重试可以在 4 秒后发生,第四次重试可以在 8 秒后发生。无论指数增长如何,将最大延迟上限为 30-60 秒。这种回退模式为失败的系统提供了恢复时间,同时限制了重试的总持续时间。
将重试策略与失败类型匹配。
- **网络超时:**请稍作后退重试(操作可能未到达服务器)
- **流量限制错误 (429):**在重试后标题值后或速率限制重置时间后重试
- **服务器错误 (5xx):**使用指数回退重试,因为服务器可能暂时过载
- **客户端错误(4xx 除外 429):**请勿重试;修复请求,因为错误表示输入无效
- **管理者限制错误:**请勿在同一事务中重试;作为具有专用限制的异步操作重新排队,例如,发布异步订阅者在新的事务限制下重新处理的失败事件
#### 后备策略
回退策略定义了主要方法失败时的替代方法,允许在降级条件下继续操作。
- **替代数据源:**当实时 API 不可用时,从平台缓存会话或组织分区检索数据。在成功操作期间预填充缓存。缓存提供过时但可用的数据,这对许多用例来说比完全失败要好。
- **默认行为:**当个性化或丰富服务不可用时,应用标准业务规则。使用默认值处理,并在服务恢复时标记丰富。默认行为以精度降低为代价来保持吞吐量。
- **手动进程:**在自动化失败时启用手动操作完成。提供管理员界面,以完成停滞事务。当自动化受到损害时,手动回退可以防止数据丢失并保持业务连续性。
- **重试队列:**将操作存储在平台事件或自定义队列对象中,以便在外部系统恢复时进行处理。具有 72 小时标准保留的平台事件重放支持订阅者在临时故障后恢复,而不会丢失数据。
#### 超时配置
为所有集成标注配置适当的超时。Salesforce 强制执行每个事务最多 120 秒的总标注时间。在单个事务中的所有标注中预算该时间,以避免耗尽挂起连接的事务时间。
超时设计注意事项:
- **面向用户的同步标注:**使用最多 5-10 秒来维护响应式 UI,因为用户往往不会等待更长时间
- **后台异步标注:**使用 30-60 秒适应可变的外部性能,无需用户等待
- **批处理标注:**在没有用户等待响应时使用允许的**整**个 120 秒
- **每个事务的多个标注:**所有标注的预算总时间,例如 3 次标注,每次 10 秒,消耗 120 秒预算中的 30 秒。
更短的超时会更快地失败,使后备策略能够更快地参与进来。较长的超时提高了速度缓慢但功能正常的外部系统的成功率。平衡注意事项取决于用户是否正在等待响应,以及后备策略的可用性。
#### 错误处理架构
设计全面的错误处理,将故障从崩溃转化为受管降级:
- **快速失败:**在入口点验证输入和先决条件。在昂贵操作前,检查调控器限制消耗。立即检测故障,而不是通过多个处理层传播无效状态。早期检测减少了爆破半径,并简化了调试。
- **优雅地失败:**即使操作部分失败,也要维护用户功能。如果批次中的 200 个记录中有 3 个验证失败,则处理 197 个成功记录并报告 3 个失败,而不是整个批次失败。对于批处理操作,部分成功优于全部失败。
- **信息性失败:**使用事务 ID、用户上下文、输入参数和堆栈跟踪记录错误。错误上下文不足是快速解决事件的主要障碍。每个错误日志应使响应者能够了解失败的原因、原因以及如何复制。
- **安全失败:**确保失败不会损害数据完整性或安全性。回滚部分事务,而不是将数据留在不一致的状态。请勿向最终用户公开内部错误详细信息,因为堆栈跟踪显示了对攻击者有用的实施详细信息。
### 灾难恢复和业务连续性
#### 恢复时间目标 (RTO)
恢复时间目标定义了灾难后可接受的最长停机时间。RTO 推动了关于故障切换自动化、备份频率和恢复测试投资的架构决策。不同的业务能力证明不同的 RTO 投资是正确的。因为 RTO 是用户直接经历的停机时间,所以错过目标会转化为长期停机和客户 Trust 的削弱。
RTO 因业务能力而异:
| 功能类型 | 典型 RTO | 架构含义 |
| :---- | :---- | :---- |
| 收入关键型操作 | 分钟 | 自动故障切换、热备用 |
| 面向客户的服务 | 1-4 小时 | 温暖待机,脚本恢复 |
| 内部业务工具 | 4-24 小时 | 冷备用,手动恢复 |
| 历史报表 | 天数 | 按需从备份恢复 |
在设计灾难恢复架构之前,定义每个功能的 RTO。RTO 决定了技术选择、自动化投资和测试节奏。更激进的 RTO 目标需要在自动化和冗余方面加大投资。
#### 恢复点目标 (RPO)
恢复点目标定义了用时间测量的最大可接受数据丢失窗口。RPO 确定备份频率、复制策略和同步模式。更严格的 RPO 需要更频繁的数据复制,增加了复杂性和成本。因为 RPO 是您的业务吸收的数据丢失,所以错过目标可能意味着丢失交易和记录中无法恢复的缺口。
| 数据类型 | 典型 RPO | 复制策略 |
| :---- | :---- | :---- |
| 财务事项 | 近零(秒) | 每个提交时的事件驱动异步复制 |
| 客户记录 | 接近零(分钟) | 变更数据捕获、异步复制 |
| Analytics 数据 | 小时 | 计划批量同步 |
| 临时工作流状态 | 天数 | 无需复制 |
平衡 RPO 要求与成本和复杂性。近乎零的 RPO 需要连续的数据复制,并需要大量的基础设施投资。每日备份提供 24 小时 RPO,复杂性最低。对于非财务数据,大多数组织可以容忍一些数据丢失。
#### 备份策略
平台基础设施冗余可以防止基础设施故障,但它复制了用户错误、部署缺陷和集成缺陷的结果,这些缺陷会导致大多数数据丢失。存在备份是为了从这些应用程序层故障中恢复,而不是为了补偿平台的可靠性。实施涵盖数据、元数据和文件的备份策略,因为每个策略都需要不同的备份方法:
- **数据备份:**实施针对数据和元数据的全面备份策略。使用本地数据导出服务导出关键对象数据 — Enterprise、Performance 和 Unlimited Edition 每 **7 天**导出一次;Professional 和更低版本每 **29 天导出**一次。导出文件在发送通知电子邮件后的 **48 小时内**可用,不包括自动删除前的周末设置自动下载流程,以便文件不会永久丢失。使用元数据 API 和 Salesforce CLI(sf 项目检索)对 Git 等源控制系统中的组织配置、自定义代码和声明自动化进行版本控制。将元数据备份视为标准 CI/CD 漏斗的一部分。使用专用备份和恢复服务补充数据备份,例如 **Own** 用于时间点恢复、粒度记录级恢复和超出本地导出节奏的保留。本地数据导出不支持时间点还原,如果您的 RTO/RPO 需要精细的恢复窗口,则需要第三方工具。定期测试还原程序;从未还原的备份是未经测试的假设。
- **元数据备份:**使用 Git 存储库中的 Salesforce DX 源格式,版本控制所有元数据。元数据版本控制允许在损坏或意外更改后快速恢复配置。每个部署都应可从源控制中复制。Git 中的元数据为配置提供了时间点恢复。
- **文件备份:**将 ContentVersion 记录、附件和文档导出到外部存储。Salesforce 最适合活动数据,而不是长期文件归档 - 将文件导出到外部存储进行监管保留。对于超出平台功能的法规保留要求,实施自动文件导出。
- **验证:**定期将备份恢复到临时组织或开发人员 Sandbox,以验证程序和备份完整性。由于备份范围不完整或归档损坏,未经测试的备份通常会在需要时失败。计划每季度一次的还原验证,以便在灾难发生之前发现问题。除了恢复验证之外,还要监控备份的新鲜度。当最近的成功备份早于其预期的节奏时发出警报 - 例如,当每周导出超过 8 天未完成时。通过此验证,静默失败的备份作业会立即显示,而不是在下一次演练时。
#### 数据复制策略
设计适合 RPO 和多组织要求的复制:
- **变更数据捕获(CDC):**订阅被跟踪对象的变更事件。CDC 提供具有更改字段值的创建、更新、删除和取消删除事件。以最少的开发工作量为支持的对象(包括标准和自定义)提供近乎实时的复制。取决于基于版本的每日交付分配。
- **平台事件:**用于复制业务事件和状态更改的自定义事件架构。比 CDC 更灵活,支持自定义负载和复杂的事件结构,但需要在触发器或进程中显式发布逻辑。72 小时重放窗口标准支持从临时订阅者失败中恢复。
- **计划 API 复制:**计划 API 复制是通过批量 API 2.0 按固定计划批量提取。这是最简单的实施,RPO 等于提取频率。计划 API 复制适用于不需要近乎实时执行的非关键数据,例如参考数据或历史分析。
- **MuleSoft 编排的复制:**对于复杂的多系统复制拓扑,MuleSoft Anypoint 平台提供编排、转换和监控。它的使用适合跨 Salesforce 和多个外部系统进行复制,这需要复杂的路由和转换逻辑。
#### 灾难恢复测试
使用共同验证人员、流程和技术的计划演练测试灾难恢复:
- **桌面练习:**该团队逐步了解灾难场景,讨论角色和决策点,而无需实际故障转移。这项活动成本低,而且揭示了程序上的差距和沟通上的失败。定期进行桌面练习,以在人员变化时保持团队准备就绪。
- **部分故障切换:**\- 测试特定的恢复程序,例如从源控制还原元数据、从备份服务还原数据或 Sandbox 刷新。这将验证对业务影响有限的技术程序。定期执行,轮流测试哪些程序,以涵盖每年的所有恢复功能。
- **完整故障转移演练:**完全故障切换是具有生产流量切换的灾难恢复环境的完全故障切换。它提供了最高的信心,但需要业务协调和用户沟通。每年对关键系统进行此演练。完整的故障切换钻取会验证整个恢复功能,包括切换程序和用户通信。
记录每次演练后吸取的经验教训。根据调查结果更新 Runbook。随着团队的变化和解决方案的发展,恢复功能可能会下降。将灾难恢复文档视为需要定期维护的活工件,而不是一次性交付品。
#### 业务连续性计划
业务连续性超出了技术恢复的范围,还包括人员、流程和供应商依赖性:
- **团队可用性:**文档升级程序和关键角色的后备人员。确保操作 Knowledge 中不存在单点故障。主要响应者可能在灾难期间不可用,这使得后备人员至关重要。
- **通信程序:**定义事件如何传达给用户、客户和管理人员。建立主要工具(例如,外部状态页面或短信通知系统)不可用时可用的通信渠道,包括 Salesforce 本身。
- **供应商依赖性:**映射对解决方案运营至关重要的外部供应商依赖性。记录每个重要供应商(包括 Salesforce、集成合作伙伴和 ISV 软件包提供商)的升级路径和合同 SLA。例如,了解哪些供应商提供全天候支持,哪些供应商的仅工作时间支持会影响恢复时间。
- **监管义务:**确定由长期停机触发的通知要求。金融服务、医疗保健和政府合同通常要求在特定时间范围内通知事件。不合规会产生监管和法律风险,这两种风险都会加剧灾害影响。
### 可靠性的监控和可观察性
#### 健康建模
定义健康模型,将多个信号聚合到整体系统健康状态。运行状况模型一目了然地显示运行状态,无需分析详细的度量。例如:
| 健康维度 | 信号 | 绿色 | 黄色 | 红色 |
| :---- | :---- | :---- | :---- | :---- |
| 服务运行状况 | 交易成功率 | >99.5% | 98–99.5% | <98% |
| 集成运行状况 | 外部系统可用性 | 所有响应 | 降级响应 | 断路器开路 |
| 数据运行状况 | 同步作业成功,数据质量 | 所有当前 | 落后于计划 | 失败或过时 |
| 容量运行状况 | 调控器限制消耗 | <70% | 70–85% | >85% |
设计立即显示运行状态的健康仪表板。健康状态指导操作响应,包括绿色状态下的正常操作、黄色状态下的强化监控和红色状态下的活动事件响应。
#### 平台监控
平台状态信号(之前在平台运行状况监控中介绍)显示 Salesforce 基础设施何时降级,但不会显示您自己的解决方案的性能。
通过特定于解决方案的观察性增强这些信号:
- **事件监控:**Event Monitoring 包括捕获 API 调用、页面视图、报表导出、登录活动和 Apex 执行的详细日志。EventLogFile 对象以 24 小时(每天)或 1 小时的频率传递日志 – 每小时传递需要 Event Monitoring 加载项或 Salesforce Shield。通过“设置”最多可以配置保留 365 天,但延长保留需要 Salesforce Shield 或 Event Monitoring 加载项。如果没有加载项,日志文件将保留 1 天。将事件路由到外部安全信息和事件管理 (SIEM) 系统或日志聚合平台,以进行相关性、警报和超出本机限制的保留。使用 Event Monitoring 检测异常 API 消耗模式,识别失控的 Apex 进程,并审计受管环境中的数据访问。
- **比例中心:**规模中心提供了对长时间运行的操作、行锁定竞争和资源密集型事务的事务级可见性。规模中心使架构师能够在导致面向用户的事件之前从特定的事务模式中识别可靠性风险。每周审查可以揭示优化业务机会。
- **主动监控:**Proactive Monitoring 支持持续评估组织运行状况,并显示性能和可扩展性风险。Proactive Monitoring 提供有关 API 请求限制峰值、并发 Apex 执行失败、SOQL 行限制问题和存储消耗趋势的警报。它适用于拥有**签名成功**(以前称为签名支持)权利的客户 — 它不是标准版本中包含的自助功能。
#### 应用程序性能监控
从用户角度而不是基础设施角度监控应用程序性能:
- **实时用户监控 (RUM):**通过 Experience Cloud 分析或自定义仪器测量实际用户体验。rum 捕获真实延迟,反映实际网络条件、设备性能和地理分布。合成监控无法复制这种变化。
- **合成监控:**从多个位置定期执行自动事务,以验证可用性和性能。综合监控会在用户报告前检测到问题。使用计划的 Apex 实施合成监控,执行关键操作,并通过平台事件报告结果。
- **交易跟踪:**对复杂的多步骤操作进行仪器化,以获取每个步骤的时间。接下来,确定五步工作流中的哪个步骤引入了延迟。不要将整个流视为黑匣子。步骤级时间揭示了聚合度量中不可见的优化机会。
#### 集成健康监控
使用错误率、延迟百分比和吞吐量监控所有外部集成。集成失败是可靠性事故的主要原因:
- **错误率** \- 返回错误的呼叫百分比(目标:<1% 表示正常集成)
- **Latency** \- 在 p50、p95、p99 测量的响应时间(根据超时预算设置每个集成的 SLO)
- **超时率** \- 超出配置的超时(目标:<0.1%)的百分比
- **断路器状态** \- 打开状态表示需要立即注意的持续故障
- **队列深度** \- 对于异步集成,不断增长的队列表示处理落后于生产速度
使用请求 ID、端点、响应代码和持续时间记录所有集成调用。当集成失败影响可靠性时,此数据可以快速进行根本原因分析。集成日志应启用聚合和趋势分析。
#### Proactive Monitoring和警报
在影响用户之前设计问题警报,实现主动响应:
- **可操作的警报:**每个警报都有定义的响应操作和分配的响应者。没有明确响应的警报会产生疲劳感,并模糊关键信号。警报设计应涵盖谁响应、他们检查什么以及如何补救。
- **适当的紧迫性:**呼叫呼叫人员,了解影响用户的故障。为性能下降发送电子邮件。在每日摘要中包含问题,以捕获有关趋势的信息。紧急程度不匹配会因过度升级而产生警报疲劳,或因升级不足而产生错过事件。
- **富上下文通知:**包括跨越的阈值、当前值、最近趋势,以及指向相关仪表板或 Runbook 的链接。使响应者能够立即开始诊断,而无需收集上下文。每个警报应包含足够的信息,无需额外查询即可分类。
- **风暴抑制:**在多个系统同时出现故障时,禁用冗余警报。一个指示集成平台失败的警报比 50 个掩盖根本原因的单个集成失败警报更具可操作性。
#### 异常检测
异常检测识别异常模式,并可以指示静态阈值警报不可见的新问题:
- **数量异常**:大大高于或低于预期的每日模式的事务量可能表明进程失控或用户访问问题。
- **错误率异常**:与上周同期基准相比,错误率升高会导致在阈值突破前逐步下降。
- **延迟异常**:响应时间在多天内向上偏移表示容量饱和或性能下降。
- **行为异常**:不寻常的登录模式、意外的 API 使用峰值和在计划窗口之外运行的批处理作业可能表明存在可疑的使用。
对于拥有签名成功权利的客户,Proactive Monitoring 无需额外配置即可提供平台级异常检测。使用特定于应用程序的异常检测来补充它,以检测导出到外部 Analytics 平台的自定义 SLI。使用异常信号来指导调查,而不是触发立即升级,因为异常检测的误报率高于阈值警报。
## 摘要核对清单
在架构审查期间、生产部署之前,使用此核对清单,并定期进行持续的可靠性评估。
**可靠性目标和 SLO**
- 在设计开始前,定义所有关键用户流的 SLO
- 建立与用户体验相关的可衡量SL,而不仅仅是基础设施度量
- 根据业务影响分析制定现实的可用性目标,而不是任意的目标
- 确保解决方案 SLO 没有平台 SLA 那么严格,以提供错误预算
- 在架构决策记录中记录可用性目标和理由
**高可用性架构**
- 在数据、应用程序和集成层设计冗余
- 通过 trust.salesforce.com 和实例状态 API 监控平台运行状况
- 实施独立于平台状态的应用程序健康检查
- 仅在业务需求明确证明复杂性时考虑多组织架构
- 使用经过测试的多组织模式 Runbook 设计自动故障切换
**可扩展性和容量规划**
- 在正常负载下,设计事务在调控器限制的 70% 内完成
- 在所有 Apex 触发器、批处理类和集成中实施批量化模式
- 对超过同步限制的操作使用异步处理
- 批处理所有 API 集成,而不是进行单个记录调用
- 在部署前对生产规模数据量进行负载测试
- 通过 OrgLimits API 或自定义 Apex 监控容量利用率,并在消耗接近 70% 的操作上限时发出警报
- 基于 12 个月增长预期的项目容量要求
- 按日期、记录类型或所有者对高用量数据进行分区,以在用量超过顺序限制时启用并行处理
**容错和恢复**
- 使用定义的功能关键度层设计优雅降级
- 为所有外部系统集成实施断路器
- 对暂时性失败应用具有指数回退的重试逻辑
- 配置适合操作类型的超时(5-10 秒面向用户,30-60 秒异步)
- 使用平台缓存和基于队列的模式设计后备策略
- 通过足够的诊断上下文实施结构化错误处理
**灾难恢复和业务连续性**
- 在设计前定义每个业务能力的 RTO 和 RPO
- 实施数据、元数据(源控制)和文件的自动备份
- 在非生产环境中每季度验证备份还原程序
- 监控备份新鲜度,并在计划备份过期时发出警报
- 设计符合 RPO 要求的数据复制策略
- 每年进行灾难恢复测试(桌面季度)
- 记录业务连续性程序,包括供应商升级路径
**监控和可观察性**
- 定义聚合服务、集成、数据和容量信号的运行状况模型
- 订阅 Salesforce 实例的平台状态通知
- 为关键 Experience Cloud 流实施真正的用户监控
- 通过错误率、延迟和断路器状态监控集成运行状况
- 设计具有定义响应程序和所有权的可操作警报
- 将 Event Monitoring 数据路由到外部平台进行长期保留和分析
- 使用 Proactive Monitoring 和规模中心进行连续的可靠性风险评估
- 对数量、错误率和延迟模式应用异常检测,以发现静态阈值错过的降级
分享您对良好架构框架的反馈。
# 可靠性 - 灾难恢复模式
了解有关架构良好的[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)的更多信息 → [灾难恢复和业务连续性](/docs/architect/zh-cn/well-architected/guide/reliability.html#disaster-recovery-and-business-continuity)
## 备份和还原
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 数据备份策略 | ✅ 使用数据导出服务或专用备份和恢复服务(例如 Own)每周或每月自动导出。导出频率匹配 RPO 要求。必要时,将关键对象数据导出到外部对象存储。 |
| 元数据备份策略 | ✅ 使用 Salesforce DX 源格式在 Git 中版本化的所有元数据。元数据更改仅从源控制部署。CI/CD 漏斗可以从存储库重新创建任何环境。通过 Git 历史记录提供的时间点恢复。 |
| 文件备份策略 | ✅ ContentVersion 记录、附件和文档按计划导出到外部存储。满足监管保留要求的自动文件导出。外部归档系统,适用于早于业务运营需求的文件。 |
| 备份验证 | ✅ 每季度将演练恢复到完全 Sandbox 或开发人员环境。Runbook 中记录的还原过程,以及逐步说明。测试还原会在灾难发生前验证备份的完整性和完整性。 |
| 恢复测试时间表 | ✅ 每季度进行部分还原测试(元数据、特定对象、文件子集)。具有完整环境恢复的年度完全恢复演练。每次测试后,都会记录经验教训并更新运行手册。 |
| 第三方备份服务 | ✅ 具有时间点还原功能的自动备份。定义 RPO/RTO 的服务级别协议。备份完成的每日自动验证。备份存储在多个区域的地理冗余。 |
| 自定义对象和字段 | ✅ 计划的数据导出服务运行中包含的自定义对象,公式和累计汇总字段值被重新计算,而不是导出(没有存储的值可以提取),文件或附件二进制文件通过单独的导出路径进行处理。在还原顺序中记录和测试的复杂字段类型和查找关系。 |
| 文件和附件 | ✅ ContentDocument 和 ContentVersion 对象使用文件二进制文件导出。备份的文档库包括文件夹结构和权限。导出的文件维护关键文档类型的版本历史。 |
| Sandbox 刷新策略 | ✅ 生产组织每季度刷新为完全 Sandbox,以进行负载测试和灾难恢复验证。Sandbox 刷新用作还原程序测试。刷新后应用的数据掩码保护测试环境中的敏感数据。 |
| 备份监控和提醒 | ✅ 在计划备份失败或延迟时自动提醒。显示备份作业成功率、完成时间和数据量趋势的仪表板。超过可接受延迟窗口的备份故障的随叫随到升级。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 备份策略 | 未配置自动备份,仅依赖平台基础设施备份。第三方备份服务已配置但未测试 - 备份可能已损坏或不完整。备份依赖于手动 Data Loader 导出(执行不一致、覆盖范围不完整、没有自动化)。 |
| 元数据版本 | 通过更改集部署的元数据更改,无需源控制。元数据历史没有 Git 存储库。时间点恢复不可能 - 在破坏性更改后,无法恢复上一个已知良好的配置。 |
| 备份验证 | 已配置但从未恢复到测试环境的备份。第一次还原尝试发生在实际灾难期间,显示了不完整的范围或损坏的归档。备份过程已记录,但未由备份人员测试。 |
| 备份范围 | 假设当公式和累计汇总字段值从不导出(动态重新计算,不存储)并且文件或附件二进制文件需要单独处理时,数据导出服务会捕获所有内容,从而仅在还原时发现差距。 |
| 恢复程序 | 恢复 Runbook 包含 2 年前架构中的过时步骤。由一位专家测试的恢复程序,该专家后来离开了公司。手动程序复杂到在压力下执行容易出错。 |
| 备份频率 | 在业务需求为 24 小时 RPO 时,每周备份关键交易数据。备份频率与业务关键度不一致 - 所有数据的备份计划相同,无论重要性如何。由于缺乏监控和警报,错过了备份计划。 |
| 法规遵从性 | 备份保留时间比管理法规要求更短。例如,HIPAA 合规文档(保单、风险分析、BAA、违约记录)在其 6 年 §164.316 保留前清除,或 SOX 监管的财务审计记录在其 7 年保留前删除。审计期间发现的合规性差距。 |
| 文件存储 | 存储在 Salesforce 中的大文件,没有归档策略。文件存储增长,直到组织接近限制。ContentVersion 记录没有备份 - 如果组织损坏,文件会丢失。依赖用户维护关键文件的个人副本。 |
| Sandbox 测试 | 完全 Sandbox 从未从生产环境中刷新 - 测试环境与生产环境完全不同。Sandbox 中的数据量是生产的 1%,阻止了现实的还原验证。Sandbox 刷新被视为不方便,而不是灾难恢复验证机会。 |
| 监视 | ⚏ 备份作业以静默方式失败,并且没有警报。几周后在灾难期间发现备份失败,此时需要备份。没有显示备份作业成功趋势的仪表板。仅在发票到达时监控备份服务运行状况。 |
| 加密密钥 | 将 Shield 加密的数据视为安全,而不保护密钥材料:仅轮换密钥会使先前的数据保持不变,但销毁租户密码(加密粉碎)或丢失自带密钥或仅缓存密钥材料会使加密数据永久无法恢复。恢复程序中省略了密钥管理。 |
| 跨组织依赖性 | 当解决方案依赖于连接的应用程序、外部集成或 SSO 时,单独备份主要组织:连接的应用程序密码、命名凭据和 OAuth 授权以及外部身份验证令牌不会被数据和元数据还原保留,必须在恢复的组织可以验证外部系统之前重新配置和重新授权。当外部 SSO 是唯一的登录路径时,不可用的身份提供商会阻止登录,甚至阻止登录完全恢复的组织。 |
## 业务连续性计划
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 恢复时间目标 (RTO) 定义 | ✅ RTO 按业务能力定义,而不是在整个组织中统一。收入关键型操作:几分钟到 1 小时。面向客户的服务:1-4 小时。内部工具:4-24 小时。历史报表:天数。经业务相关方批准的 RTO。 |
| 恢复点目标 (RPO) 定义 | ✅ RPO 基于每个功能的可接受数据丢失定义。财务交易:近零 RPO(秒,事件驱动的异步复制)。客户记录:接近零(通过 CDC 的分钟数)。Analytics 数据:小时(计划同步)。临时工作流状态:天数(无需复制)。 |
| 团队可用性和角色 | ✅ 所有重要角色的主要和后备人员都有记录。operational Knowledge 中没有单点故障。定义主要响应者、第一个备份、第二个备份的升级树。当 Salesforce 不可用时,可以访问系统中维护的联系信息。 |
| 来文程序 | ✅ 事件通信计划定义谁通知用户、客户、管理人员。托管在 Salesforce 外部的外部状态页面,用于在平台停机期间进行用户通信。当主要通信工具不可用时,适用于随叫随到团队的短信通知系统。记录的升级时间范围(何时从团队升级到经理到主管)。 |
| 供应商依赖性映射 | ✅ 所有重要的外部供应商都有文档记录,包括 Salesforce、集成合作伙伴、ISV 软件包提供商。记录了供应商 SLA 和支持窗口(全天候与仅限工作时间)。记录了供应商升级联系人和程序。为关键依赖性确定的替代供应商选项。 |
| 监管通知义务 | ✅ 每个行业(金融服务、医疗保健、政府)记录的强制性事件通知要求。为匹配每个治理条例的所需窗口而定义的通知时间范围。定义谁向哪些监管机构提交通知的责任矩阵。为快速监管通知准备的模板。 |
| 业务影响分析 | ✅ 每个业务能力按收入影响、用户影响和监管风险排名。基于业务影响排名的恢复优先级。分配给灾难恢复的资源与业务关键度成正比。随着业务优先级的变化,每年审查影响分析。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| RTO/RPO 定义 | 在没有可衡量的 RTO/RPO 目标的情况下,“系统应该可靠”。由 IT 团队定义的 RTO/RPO,无需业务相关方输入。所有功能的统一目标会忽略关键程度差异 (“所有功能都需要99.999%的正常运行时间”)。 |
| 团队就绪 | 单个 Salesforce 管理员了解灾难恢复过程,无需文档或备份人员。随叫随到的轮换包括从未执行恢复程序的人员。主要响应人员在灾难期间不可用(休假、生病、离开公司)。 |
| 通信计划 | 没有通信计划 - 发现需要在事件已经发生时通知用户。Salesforce 本身托管的状态页面在 Salesforce 停机期间不可用。尝试恢复时通知主管的等待时间。 |
| 供应商依赖性 | ⚏ 在发生灾难之前,不了解供应商 SLA 条款,并期望供应商提供全天候支持,并且仅提供工作时间服务。没有记录的供应商升级联系人。恢复需要 ISV 软件包提供商,但公司不再经营。 |
| 监管要求 | ⚠ 不知道强制性违反通知法律。在 48 小时后发现 24 小时通知要求。未准备模板 - 在事件响应期间起草监管通知,同时合规时间紧迫。 |
| 恢复优先级 | 尝试在灾难期间同时恢复所有功能,而不是优先考虑收入关键型操作。在解决面向客户的订单系统之前,花费 8 小时恢复内部报告功能。 |
| 测试和演练 | ⚏ 业务连续性计划从未通过演练测试。假设文档化的过程将在没有验证的情况下在压力下工作。尽管在实际灾难期间花费了几天时间从未发现的问题中恢复,但由于“时间不足”而避免了桌面练习。 |
| Knowledge 转移 | 灾难恢复 Knowledge 集中在一个没有文档的高级架构师身上。新团队成员未接受灾难恢复培训。假设每个人都知道灾难期间该做什么,而没有明确的训练或演练。 |
| 假设验证 | 恢复过程假设备份可在 15 分钟内访问,但从冷库检索备份需要 8 小时。假设团队在 30 分钟内可用,但未定义随叫随到的轮换或升级程序。基于从未通过测试验证的乐观假设的恢复时间估计。 |
## RPO/RTO
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| RTO 架构调整 | ✅ 架构决策与 RTO 承诺相匹配。分钟 RTO 需要自动故障切换和热备用。小时 RTO 需要脚本恢复和温暖待机。RTO 接受从冷备份手动恢复的天数。在业务无法证明复杂性的情况下,避免过度工程。 |
| RPO 复制策略 | ✅ 复制方法匹配 RPO 目标。近零 RPO:每次记录保存时通过平台事件异步事件流(传播延迟秒数,至少交付一次)。分钟 RPO:更改数据捕获异步复制。小时 RPO:计划批量 API 提取。天数 RPO:按固定计划手动备份。 |
| RTO 测试 | ✅ 在定时条件下测试的恢复程序。灾难恢复演练期间测量的实际 RTO。目标 RTO 与已实现 RTO 之间的差距已查明并得到解决。RTO 可由备份人员实现,而不仅仅是主要专家。 |
| RPO 验证 | ✅ 恢复测试期间测量的数据丢失。实际 RPO 与演练期间的目标比较。在生产中持续监控复制滞后。复制落后于 RPO 承诺时配置的警报。 |
| 特定于功能的 RTO/RPO | ✅ 不同的业务能力有不同的 RTO/RPO 目标,反映了业务的重要性。电子商务订单流:15 分钟的 RTO,接近零的 RPO(证明了多组织主动-被动的合理性)。内部Knowledge库:8 小时 RTO、24 小时 RPO(证明需要手动从备份还原)。 |
| 成本效益分析 | ✅ RTO/RPO 目标与实施成本平衡。更严格的目标要求投资呈指数增长。记录的业务个案表明停机成本证明灾难恢复投资是正确的。年度审查确认投资与业务价值之间的一致性。 |
| SLA 对齐 | ✅ 解决方案 RTO/RPO 目标考虑平台 SLA 基准。解决方案只能提供比多组织架构的平台基准更好的 RTO。将平台功能作为基础的现实目标集。 |
| 监控恢复功能 | ✅ 持续监控备份币种(备份帐龄与 RPO 目标)。当备份落后于计划时发出警报。自动验证恢复基础设施(辅助组织、外部存储)是否正常运行。 |
| 自动恢复与手动恢复 | ✅ 激进的 RTO 目标(分钟)需要自动化故障切换,人为干预最少。管理 RTO 目标(小时)允许通过人为启动进行脚本恢复。放宽的 RTO 目标(天数)接受按照记录的程序进行手动恢复。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 不切实际的目标 | ⚠ 承诺 15 分钟的 RTO,手动恢复程序需要 4 小时执行。在没有同步复制基础架构的情况下有望实现零 RPO。由 IT 部门制定的 RTO 目标,无需架构支持。 |
| 架构未对齐 | 30 分钟的 RTO 承诺,但没有完全手动的自动故障切换和恢复程序。零 RPO 承诺,但仅配置每日备份。攻击性目标,没有相应的自动化和冗余投资。 |
| 未测试的目标 | ⚏ RTO 从未通过定时灾难恢复演练验证。假设 2 小时 RTO 可实现,但在时间限制下从未实际恢复。在实际灾难期间发现记录 4 小时 RTO 实际需要 18 小时。 |
| 统一目标 | ⚏ 所有功能都分配了相同的 RTO/RPO,无论业务关键程度如何。内部批处理报告系统专为“五个 9”的可用性而设计,而收入关键的电子商务具有相同的目标。对非关键功能的大量过度投资以及对关键系统的投资不足。 |
| 忽略依赖性 | RTO 仅假设 Salesforce 组织还原,但解决方案依赖于外部身份提供商也不可用。RPO 假设数据备份充足,但集成凭据和配置未备份。恢复时间估计会忽略恢复依赖系统的时间。 |
| 复制差距 | ⚠ 承诺 15 分钟的 RPO,但变更数据捕获仅为 12 个关键对象中的 3 个配置。配置了平台事件复制,但没有监控事件传递延迟。复制基础架构损坏,在灾难发生前几周内无人发现。 |
| 成本无知 | ⚠ 承诺“五个 9”的可用性,而不了解实施成本。在没有成本效益分析的情况下制定的 RTO/RPO 目标。企业不愿意为已经向客户承诺的目标所需的基础设施提供资金。 |
| 静态目标 | 尽管业务增长和优先级不断变化,但 5 年前定义的 RTO/RPO 从未重新评估。随着解决方案的发展和重要性的变化,目标保持不变。缺少年度审查过程。 |
| 文档缺口 | 架构文档中记录的 RTO/RPO 目标,但未传达给业务利益相关者。业务不了解承诺的恢复功能。当业务预计 1 小时恢复,但架构仅支持 24 小时 RTO 时,发现了差距。 |
| 假精度 | 在监控基础设施无法测量到该精度时,承诺“99.97% 的可用性”。当基础分析是粗略估计时,以虚假精度定义的目标表明其严格性。 |
| 监控缺勤 | ⚏ 没有持续监控恢复功能。备份落后于计划 2 天,违反了 RPO 承诺,但没有警报。主动-被动架构中的次要组织未接收复制更新,但未配置健康检查。 |
| 不执行的计划 | ⚠ 美丽的灾难恢复计划,具有积极的 RTO/RPO 目标,但没有自动化、测试或验证的程序。为满足合规性复选框而创建的计划,但承诺背后没有操作现实。 |
## 冗余
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 数据冗余 | ✅ 平台自动提供基础设施备份。当业务需要更快的恢复时,应用程序级复制是对平台备份的补充。变更数据捕获或平台事件将关键数据连续复制到辅助存储。复制支持从基础架构备份无法解决的逻辑损坏或配置错误中恢复。 |
| 应用程序冗余 | ✅ 在单个事务失败后生存的无国籍应用程序逻辑。没有阻止水平缩放的服务器端状态。自定义元数据类型和配置的自定义设置在所有应用程序服务器中立即可用。任何应用程序服务器都可以处理任何请求,而无需依赖于特定的服务器状态。 |
| 集成冗余 | ✅ 断路器模式检测失败的集成。当外部系统不可用时,平台事件会将请求排队,而不是阻止用户操作。与面向用户的功能隔离的外部系统故障。为重要集成确定的多个外部供应商选项,可在供应商停机期间快速切换提供商。 |
| 关键工作负载的多组织模式 | ✅ 主动-被动模式:主要组织为所有流量提供服务,次要组织同步但空闲,主要区域停机期间故障转移。主动-主动模式:两个组织持续为生产流量提供服务,用户按地理位置或业务部门分配。多组织仅在业务需要超出平台功能的 RPO/RTO 时成立。 |
| 多组织数据同步 | ✅ 变更数据捕获为关键数据提供近乎实时的复制(15 分钟 RPO)。平台事件为关键事务提供事件流(近零 RPO)。参考数据的批量 API 2.0 计划复制(可接受 24 小时 RPO)。在两个组织中修改相同记录时,为主动-主动定义的冲突解决策略。 |
| 多组织主动-被动架构 | ✅ 美国东部地区的主要组织为所有生产流量提供服务。欧洲地区的次要组织通过 CDC 同步,但闲置。DNS 路由或身份验证层将用户定向到活动组织。当主要组织连续 10 分钟不可用时,自动健康检查会触发故障转移。 |
| 多组织主动-主动架构 | ✅ 根据用户简档区域字段,EMEA 用户在欧洲组织,AMER 用户在美国组织。共享参考数据(客户、产品)的双向复制。区域数据保留在各自的组织中(订单、个案)。冲突解决使用与客户主数据区域权威机构的“最后写入-赢得”权限。 |
| 地理分布 | Hyperforce 区域数据中心支持地理分布。单区域部署,平台受管冗余,可用性高达 99.9%。跨区域的多组织仅考虑 99.95% 以上的要求或监管数据驻留要求。 |
| 外部系统冗余 | ✅ 关键外部 API 具有主要和故障转移端点。当主要电路遇到持续故障时,断路器切换到故障切换端点。对于关键集成,地理位置冗余的外部服务优先于单区域提供商。 |
| 基础设施监控 | ✅ Trust.salesforce.com 通过状态 API 监控。订阅特定于实例的状态通知。解决方案通过减少降级期间的非关键负载来动态响应平台运行状况。规模中心会在影响冗余容量之前识别资源密集型操作。 |
| 故障切换自动化 | ✅ 对于激进的 RTO 目标,自动故障切换优先于手动故障切换。健康检查每 1-5 分钟运行一次,以检测故障。故障转移决策逻辑避免误报(需要持续故障,而不是暂时错误)。如果故障转移目标也不健康,则自动回滚。 |
| 单点故障 | ✅ 架构审查识别所有单点故障。评估每个已识别的 SPOF 的业务影响和缓解成本。通过冗余缓解了高影响力的 SPOF。低影响 SPOF 已接受,并有文件记录的风险接受和恢复程序。 |
| 测试冗余功能 | ✅ 计划的故障切换演练验证自动故障切换逻辑。在负载下测试的备份系统(不仅仅是空闲的暖备)。在主动-被动测试期间,验证次要组织容量以处理生产负载。从每个测试中吸取的经验教训提高了自动化程度和程序。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 单点故障 | ⚏ 整个解决方案取决于单个外部 API,没有回退。自定义域提供商是 SPOF - 如果提供商失败,用户无法访问 Experience Cloud。单个集成用户帐户 - 如果禁用,所有集成都会失败。 |
| 未经测试的冗余 | 多组织主动-被动架构已配置,但从未测试。次要组织不同步,但未配置健康检查。第一次故障切换尝试发生在实际灾难期间,表明次要组织损坏或无法正常工作。 |
| 数据同步差距 | 主动-被动多组织,为 30 个关键对象中的 5 个配置了 CDC 复制。发生故障转移,但次要组织缺少 80% 的所需数据。复制滞后监控缺失 - 次要组织落后于主要组织 3 天,但没有警报。 |
| 假冗余 | 假设两个组织实际托管在同一 Hyperforce 区域时采用多区域架构。实际使用相同上游提供商的“冗余”外部 API。多个集成路径,所有路径都通过相同的单点故障。 |
| 有状态架构 | 应用程序逻辑取决于阻止水平缩放的内存状态。单个应用程序服务器保持所有用户会话状态 - 服务器重新启动会注销所有用户。缓存在应用程序内存中的静态资源,而不是平台缓存,会在服务器之间造成不一致。 |
| 无断路器 | 外部集成失败,每个事务会等待完整的 120 秒超时。当单个外部系统不可用时,所有用户都会受到影响。无故障隔离 - 一个失败的集成会降低整个平台性能。 |
| 仅手动故障切换 | ⚏ 多组织架构,仅包含手动故障切换程序。在业务停机时,需要 2 小时的程序来启动故障切换。未实施自动健康检查。故障切换决策需要主管批准,以延迟恢复。 |
| 容量规划失败 | 主-被动架构中的次要组织,大小为生产负载的 20%。故障转移会发生,但次要组织无法处理完整的生产流量。两个组织都处于 85% 容量的主动-主动架构,在一个组织出现故障时不会留下冗余。 |
| 配置偏差 | 主要和次要组织会随着时间的推移而有所不同,因为部署不同步。部署到主要而非次要的元数据。故障转移显示运行 6 个月代码版本的次要组织。 |
| 过度工程 | ⚏ 具有主动-主动复制的多组织架构,适用于 5 人使用的内部管理工具。多组织的运营复杂性,无法用业务关键度来证明。批处理报告的可用性目标为99.999%,可接受率为99%。 |
| 地理上的误解 | 假设 Hyperforce "multi-region" 自动提供多组织功能。不理解单个组织总是在单个区域中,而多区域需要多个组织。基于地理位置的冗余对于单组织架构是不可能的。 |
| 集成耦合 | 所有集成同步,没有异步回退。外部系统不可用会阻止用户操作。无队列机制 - 如果外部系统暂时停机,事务会失败。在支持集成不可用时,用户无法继续。 |
# 可靠性 — 模式
可靠性支柱侧重于系统可用性、性能、灾难恢复和可扩展性,因此您的解决方案可以承受故障并根据需求进行扩展。这些模式将支柱的设计原则转化为具体的、可审查的实践:解决方案中寻找什么,好的是什么样子,以及破坏它的反模式。
## 设计原则
这些模式将可靠性支柱的设计原则付诸实践。有关每个[组件](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/reliability.md)背后的完整指导,请与可靠性支柱一起阅读。
- **通过批量化分配**工作量 — 批量处理,因此数量的激增不会耗尽调控器的限制。
- **假设一切失败** — 为每个依赖项的失败进行设计,而不仅仅是您预期的那些依赖项。
- **构建自恢复系统** — 从暂时故障中自动恢复,而不是需要手动干预。
- **首先设计业务需求** — 业务影响中的基础可用性和恢复目标,而不是任意的正常运行时间数字。
- **通过演练验证恢复** — 在您需要之前证明您的灾难恢复程序有效。
## 如何使用这些模式
每个类别将**模式**(看起来不错)与**反模式**(应避免的内容)配对,这样您就可以逐个地区查看解决方案。从您需要的可靠性结果开始:
- **设置或捍卫可用性和延迟目标?**在选择架构之前,从**可用性和性能**开始,将 SLO 建立在业务影响的基础上。
- **防止数据丢失或区域故障?**使用**灾难恢复**将备份、故障切换和业务连续性程序与您的 RPO/RTO 协调起来。
- **处理增长或峰值负载?**使用可**扩展性**来批量化工作负载,并在容量增加时保持在调控器限制内。
- **生产中的操作客服人员?**将**客服人员模式**用于后备链、超时处理和客服人员健康监控。
## 模式类别
### [代理模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/reliability-agentic-patterns.md)
客服人员系统的可靠性特定模式,包括后备策略、超时处理和客服人员健康监控。
### [可用性和性能](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/reliability-availability-performance-patterns.md)
高可用性、性能优化、缓存和负载管理的模式。
### [灾难恢复](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/reliability-disaster-recovery-patterns.md)
备份策略、数据恢复、业务连续性和故障切换程序的模式。
### 可[扩展性](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/reliability-scalability-patterns.md)
水平和垂直扩展、调控器限制管理和处理增长的模式。
## 相关资源
- [可靠性支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/reliability.md) — 这些模式实施的设计原则和架构指导
- [Agentic Enterprise 的可靠性](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-reliability.md) — 基于客服人员的解决方案的可靠性指导
- [架构良好的框架](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/framework.md) — 可靠性如何与其他支柱相结合
- [模式和反模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/patterns-and-anti-patterns.md) — 所有支柱的完整模式库
# 存储和 API 成本优化 - 模式
了解有关架构良好的[资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html) → [数据优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html#data-optimization)的更多信息
## 数据存储优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **数据模型**活动数据 | ✅ **有效数据优先存储** \- 定期为业务运营访问的数据保留在标准 Salesforce 对象中,具有完整的查询功能、工作流自动化和用户访问权限。活动数据证明存储投资合理,因为频繁访问需要立即可用
✅ 示例:当年业务机会和活动个案保留在具有完整功能的标准对象中 |
| **数据模型**温暖数据 | ✅ **温暖数据使用**中间存储策略 - 偶尔访问用于报告或参考的数据可能会保留在 Salesforce 中,带有启用筛选视图的归档标记,或者迁移到支持基于索引的检索的大对象,而没有工作流功能
✅ 示例:上一年标记为已归档但仍可查询的历史分析业务机会 |
| **数据模型**冷数据 | ✅ 归档到大对象或外部系统的**冷数据** \- 为合规性保留但很少访问的数据会移动到大对象(不计入标准数据存储限制)或外部归档系统。适用于高用量归档的大对象,具有可预测的访问模式。对数据仓库或对象存储的外部归档为合规性数据提供了成本最低的保留
✅ 示例:超过 36 个月的个案归档到大对象,具有基于索引的检索,以便进行合规访问 |
| **数据模型**过期数据 | ✅ 通过自动化生命周期流程删除的**过期数据** \- 没有业务价值的数据过去保留要求应通过自动化流程删除,而不是无限期累积。许多组织出于“如果我们有一天需要它”的考虑而从不删除数据,导致存储增长在没有业务理由的情况下消耗预算
✅ 示例:根据法规保留要求,数据保留策略会在 7 年后自动删除记录 |
| **设置** → 系统概览 → 数据存储
**设置** → 存储空间使用情况 | ✅ **模式**:容量仪表板按增长趋势的对象显示存储消耗,按与峰值模式的集成显示 API 使用情况,以及按预测显示处理能力利用率
✅ 在限制导致停机或意外超额费用前启用主动优化 |
| **无存储跟踪** → 年度惊喜 | **反模式**:在续订协商期间发现的存储过量,需要立即以保费价格购买,而没有时间评估归档策略
⚏ 组织每年购买额外的存储,而没有分析哪些数据消耗容量,或者归档是否会降低增长 |
## 文件存储优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **Salesforce Files** 大文件 | ✅ **外部文件存储**集成,大规模节省成本 - 将文件存储在 Amazon S3 或 Azure Blob Storage 等服务中,Salesforce 会维护链接到外部内容的参考记录。外部存储每月每 GB 成本为 0.02-0.05 美元,相比之下,Salesforce 文件存储每月每 GB 成本为 1-3 美元,这取决于版本,从而大规模节省了 10-20 倍的成本
✅ 示例:合同管理解决方案将有效合同(过去 24 个月)存储在 Salesforce Files 中,以便进行本机预览和协作,使用 Salesforce 链接自动将旧合同迁移到 S3,在保持访问权限的同时将文件存储减少 70%
✅ 权衡:外部存储集成需要开发工作量,并引入了对外部服务的依赖,但为文件繁重的用例节省了 10-20 倍的成本,在几个月内甚至达到了平衡 |
| **内容管理**文件生命周期 | ✅ **文件生命周期管理** \- 实施自动归档,将超过保留阈值的文件移动到外部存储或删除。初始创建后很少访问的文件,包括已完结个案和已替换文档版本的个案附件,是主要归档候选项
✅ 备注:文件存储包括 Salesforce Files、附件、文档和内容。具有大量文档用例的组织(包括合同管理、资产库和个案附件)接近文件存储限制的速度往往比数据存储更快 |
## Sandbox 存储优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **Sandbox 管理**部分复制模板 | ✅ **选择性数据模板优化** Sandbox 存储容量 - 当测试场景不需要完整数据量时,从部分复制模板中排除大量对象。实施特定于 Sandbox 的数据保留,删除超过测试要求的记录,为其他测试数据释放容量
✅ 示例:部分复制 Sandbox 模板包括过去 12 个月的业务机会和个案,但不包括归档的数据,提供 5 GB 容量内的代表性测试数据,而不是要求完整复制
✅ 权衡:定义选择性数据模板需要分析工作,但通过消除测试场景不必要的数据,可以使用成本更低的 Sandbox 类型 |
| **Sandbox 管理**刷新节奏 | ✅ **刷新节奏符合实际数据新鲜度要求** \- 使 Sandbox 刷新符合实际数据新鲜度要求,而不是任意计划。许多组织每月刷新一次完全复制 Sandbox,而每季度刷新一次就足够他们的测试模式了,这就浪费了可以支持其他 Sandbox 的刷新容量
✅ 示例:完全复制 Sandbox 每季度刷新一次,而不是每月刷新一次,为额外的部分复制 Sandbox 释放了刷新容量 |
| **Sandbox 管理**临时 Sandbox | ✅ 具有到期策略的**临时 Sandbox 管理** \- 通过记录的删除日期跟踪为特定项目创建的环境或峰值测试。临时 Sandbox 扩散是常见的废物来源,因为项目 Sandbox 毫无道理地转变为永久状态。实施需要续订理由的到期策略,以维护超出初始范围的临时环境
✅ 示例:创建的具有 90 天到期时间的项目 Sandbox,需要业务理由,才可以延伸到项目完成之后 |
## API 调用优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **集成监控**峰值使用情况分析 | ✅ **峰值使用分析**确定计划优化机会 - 确定每日和每周消耗模式。集中在工作时间的集成计划与用户发起的 API 调用竞争。在非高峰时段分发批处理集成优化了容量利用率,而不会增加限制
✅ 示例:从上午 9 点重新安排到凌晨 2 点的批量集成,减少了高峰时间 API 竞争,并实现了现有容量内的其他集成 |
| **自定义代码**批量 API 2.0 | ✅ **批量 API 2.0** 适用于任何处理数百条记录的操作 - 使用批量 API 2.0 适用于任何处理数百条记录的操作。与单独处理记录相比,每个作业最多可以处理 1.5 亿个记录,消耗的 API 调用最少
✅ 示例:夜间数据同步使用批量 API 2.0,以最少的 API 消耗处理 100,000 个记录,而不是每个记录的单个 API 调用 |
| **自定义代码**平台缓存 | ✅ **平台缓存**消除参考数据的重复查询 - 缓存频繁访问的参考数据,消除重复查询。缓存国家/地区代码、产品目录或配置数据减少了重复查询未更改参考数据的集成的 API 消耗
✅ 示例:产品目录缓存在平台缓存中,将 API 调用从每天 1000 次查询减少到单次缓存刷新 |
| **综合架构**变更数据捕获 | ✅ **变更数据捕获消除**了浪费的轮询模式----使用变更数据捕获进行数据同步,而不是轮询模式。CDC 仅在数据更改时发布事件,消除了浪费的 API 调用来检查未发生的更改
✅ 示例:客户数据同步在客户更新时使用变更数据捕获发布事件,仅消耗实际变更的 API 调用(每天 200 次),而不是每小时轮询每条客户记录(每天 120 万次查询)
✅ 权衡:事件驱动的架构需要平台事件或 CDC 实施工作,但将变更检测模式的 API 消耗减少 95% 以上,并在几周内达到平衡 |
| **无监控** → 反应式发现 | **反模式**:仅在出现限制异常时监控 API 消耗,在压力下创建反应性消防和紧急架构更改
缺少在限制约束业务运营之前启用优化的主动趋势分析 |
## 集成架构成本
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **集成模式**同步实时 | ✅ **同步集成消耗最高 API 容量** \- 实时集成消耗每个事务的一个或多个 API 调用。高用量事务流会消耗大量 API 容量。当即时数据一致性是强制性业务需求,但 API 消耗成本最高时,同步模式适用
✅ 示例:尽管 API 成本较高,但订单提交需要在 ERP 系统中立即进行库存检查和预订,证明同步模式是正确的 |
| **集成模式**批处理 | ✅ **批量集成与同步**相比,减少了 90% 以上的 API 消耗 - 批量处理记录,显著减少了每个记录的 API 调用。批量 API 2.0 在最少的 API 消耗内处理数百万条记录。与同步模式相比,当接近实时的同步满足业务需求并消除 90% 以上的 API 消耗时适用
✅ 示例:客户数据同步每小时批量运行一次,而不是实时更新,通过可接受的 1 小时数据延迟将 API 消耗降低了 95% |
| **集成模式**事件驱动 | ✅ **事件驱动模式**仅根据实际变化有效扩展消耗资源 -- -- 使用平台事件或变更数据捕获实现高效的事件分发,无需轮询开销。事件驱动的模式可以高效扩展,因为它们仅在实际发生更改时消耗资源,而不是重复检查未发生的更改
✅ 示例:业务机会阶段更改会发布下游系统消耗的平台事件,从而消除轮询,并将 API 消耗降低 98% |
| **集成平台** MuleSoft TCO | ✅ **MuleSoft 增加了平台成本,但可能会降低总集成 TCO** \- MuleSoft Anypoint 平台增加了平台许可成本(每年 2 万到 20 万美元以上),但可以通过智能缓存、连接池、批量优化和所有集成模式的统一治理来降低总集成 TCO
✅ 权衡:当集成计数超过 5-7 个连接时,中间件证明了投资的合理性,提供了可重用性和治理,从而降低了长期维护成本 |
| **第三方集成** API 定价 | ✅ 基于预测交易量的**第三方 API 成本** \- 基于反映实际使用的预测交易量而不是假设低用量的最低层来建模第三方成本。第三方 API 定价从免费等级到按通话计费到统一费率企业许可证不等
✅ 示例:付款网关的集成 TCO 模型包括 15000 美元的年平台费 + 每个交易 0.10 美元,估计每年 5 万个交易(5000 美元) + 25000 美元的集成开发 + 5000 美元的年度维护,第一年总计 5 万美元,持续 10000 美元 |
| **集成维护**点对点与中心 | ✅ **点对点集成成倍**增加维护工作量 - 每个集成点都包含初始构建、持续维护、错误处理演变以及任一端点更改时的适应。随着系统数量的增加,点对点集成使维护工作量成倍增加。五个具有点对点连接的系统需要 10 个集成维护流。十个系统需要 45 个流。通过集成平台的轮辐模式将指数增长缩减为线性增长
✅ 示例:具有 8 个连接的系统的组织从 28 个点对点集成过渡到 8 个轮辐连接,将维护流减少了 71% |
| **集成运营**支持成本 | ✅ **支持和故障排除**成本随集成数量的增加而增加 - 每个集成都会产生潜在的故障点,需要监控基础设施、警报配置、Runbook 文档和事件响应功能。在初始开发之后的集成 TCO 中包含持续支持成本
✅ 示例:集成支持成本按每年初始开发成本的 15-20% 建模,用于持续监控、故障排除和事件响应 |
## 存储和 API
**反模式**
| 何处查看 | 什么不好的样子 |
| ------------ | ------------------- |
| **所有历史数据会无限期保留在活动存储中** | 存储增长消耗预算,没有业务理由。组织每年购买额外的存储,而没有分析哪些数据消耗容量,或者归档策略是否会降低增长率
**补救:**定义具有生命周期阶段的数据保留策略:有效(0-12 个月)、温暖(12-36 个月)、冷(归档 36 个月以上)和过期(在监管保留后删除)。实施到大对象或外部存储的自动归档 |
| **部分复制模板包含所有对象,无需筛选** | 消耗 5 GB 的容量,历史数据与测试无关,当战略数据选择将以更低的成本启用部分复制使用时,迫使购买完全复制
**补救:**分析测试要求并创建选择性部分复制模板,仅包含过去 12-18 个月的数据,不包括测试场景不需要的大量对象 |
| **集成每 15 分钟轮询一次所有记录,检查更改** | 当 95% 的轮讯发现没有变化时,每天消耗 5M API 调用,将 API 容量浪费在不必要的查询上。产生达到 API 限制并阻止合法集成完成的风险
**补救:**使用变更数据捕获或平台事件替换轮讯模式,仅在实际变更时消耗 API 调用,将 API 消耗减少 95% 以上 |
| **集成按顺序为每个记录类型进行单独的 API 调用** | 与批处理方法相比,API 消耗增加了 5-10 倍。当单个复合调用足够时,订单处理消耗每个订单 8 次 API 调用
**补救:**将复合 API 批处理相关操作实施为单个 API 调用,将消耗从每个事务 8 次调用减少到每个事务 1 次调用(减少 87%) |
| **为每个开发团队购买的完全复制 Sandbox** | 当部分复制满足大多数测试要求时,乘法的成本是原来的 5 倍。完全复制的成本比部分复制高 5-10 倍,并且仅每月刷新一次,而不是每 5 天刷新一次
**补救:**保留完全复制,仅用于生产前 UAT 和性能验证。将 Developer Pro 用于开发和部分复制与集成测试的目标数据模板一起使用 |
| **基于"免费 API 层"批准的集成,无需体积建模** | ⚠ 预计交易量在第 2 个月超过免费层,导致意外的 15000 美元年度成本未包含在预算或 TCO 分析中
**补救:**根据预测的交易量对第三方 API 成本进行建模,包括按比例预测。在批准前,在集成 TCO 中包含平台费用、每笔交易费用和超额费用 |
| **仅在出现限制异常时监控 API 消耗** | 在压力下创建反应式消防和应急架构更改。限制会在确定优化业务机会之前创建停机
**补救:**通过集成级属性、峰值使用情况分析和增长预测,实施主动 API 监控仪表板。在示例利用率阈值(例如 70% 和 85%)设置警报,为优化提供提前期 |
| **构建自定义文档生成,因为“我们有开发人员可用”** | 当 AppExchange 选项以每个用户每月 15 美元的价格(对于 100 个用户,每年 18 万美元)提供更快的部署、供应商维护和更低的 5 年总拥有成本时,初始构建费用为 8 万美元 + 年度维护费用为 1 万美元进行自定义开发
**补救:**在商品功能的自定义开发之前,评估 AppExchange 解决方案。模型 3-5 年 TCO,比较构建与购买,包括维护、平台兼容性和支持成本 |
| **临时项目 Sandbox 无正当理由地过渡到永久状态** | ⚏ Sandbox 扩散消耗预算,没有业务价值。当 10 个 Sandbox 通过适当的生命周期管理满足实际开发需求时,组织会累积 20 多个 Sandbox
**补救:**实施需要续订理由的 Sandbox 到期策略。通过记录的删除日期和到期审查的自动提醒跟踪 Sandbox |
## 相关资源
- [资源和成本优化支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guides/resource-and-cost-optimization.md)
- [资源和成本优化 - 许可证模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-license-patterns.md)
- [卓越运营支柱](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guides/operational-excellence.md)
---
**上次更新**:2026-06-08
# 安全开发生命周期 - 模式
了解有关 Well-Architected [Trust](/docs/architect/zh-cn/well-architected/guide/trust.html) → [安全开发生命周期](/docs/architect/zh-cn/well-architected/guide/trust.html#secure-development-lifecycle)的更多信息
安全性必须在开发生命周期中集成,从初始设计到部署和运营。这些模式支持向左轮班安全实践,解决常见漏洞,并保护您的部署漏斗。
## 轮班左侧安全性
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 开发 \| 工具 | ✅ IDE 安全扫描集成到开发人员工作流中 |
| 开发 \| 设计 | ✅ 使用 STRIDE 方法在设计阶段完成威胁建模 |
| 开发 \| 要求 | ✅ 用户数据趋势图中包含的安全要求和验收标准 |
| 开发 \| 源控制 | ✅ 提交前挂钩强制实施安全策略(秘密扫描、代码分析) |
| 开发 \| 培训 | ✅ 开发人员安全培训定期刷新,以反映不断变化的威胁 |
| 开发 \| CI/CD | ✅ CI/CD 漏斗中的自动安全测试失败基于重要发现 |
| 开发 \| 代码审查 | ✅ 身份验证、授权和数据访问代码需要安全同行审查 |
| 开发 \| 代码分析 | ✅ 通过棉签和静态分析强制执行安全编码标准 |
| 开发 \| 依赖性 | ✅ 依赖性漏洞扫描对每个提交运行 |
| 开发 \| 测试 | ✅ 渗透测试范围包含正式发布前的新功能 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 开发 \| 测试 | ⚏ 安全测试推迟到发布前手动审核 |
| 开发 \| 培训 | ⚏ 仅在入职期间进行一次安全培训 |
| 开发 \| 代码审查 | 安全团队在合并后审查代码 |
| 开发 \| 设计 | ⚏ 架构更改时威胁模型不会更新 |
| 开发 \| 源控制 | 禁用密码扫描以减少误报 |
| 开发 \| CI/CD | 发布截止日期临近时忽略的安全发现 |
## 适用于 Salesforce 的 OWASP 前 10 名
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 注入 | ✅ SOQL 查询使用绑定变量防止注入 |
| 注入 | ✅ 在 SOQL、SOSL 或动态查询中使用前,用户输入已验证和消毒 |
| 注入 | ✅ 动态 SOQL 仅限于受信输入 |
| 访问控制 | ✅ CRUD 和 FLS 权限使用 Security.stripInaccessible() 强制执行 |
| XSS | ✅ Lightning 组件在 UI 渲染中逃避用户生成的内容 |
| 注入 | ✅ 外部 API 集成验证和消毒所有输入 |
| 访问控制 | ✅ 来宾用户访问权限最小化和严重受限 |
| 身份验证 | ✅ 用于外部身份验证的命名凭据(非硬编码凭据) |
| 身份验证 | ✅ 使用 PKCE 正确实施 OAuth 2.0 流 |
| 会话管理 | ✅ 会话安全策略强制实施超时和 IP 限制 |
| 配置 | ✅ 安全健康检查每季度审查一次,高风险发现已修复 |
| 访问控制 | ✅ 审核自定义元数据和权限,防止过度使用 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 注入 | 使用带有用户输入的字符串连接构建的 SOQL 查询 |
| 访问控制 | 授予来宾用户简档创建、更新或删除权限 |
| XSS | Lightning 组件在模板中使用未转义的表达式 |
| 身份验证 | 外部集成在代码中使用硬编码凭据 |
| 记录 | 调试日志包含敏感数据,例如密码或 PII |
| 访问控制 | 忽略 FLS 和 CRUD 检查,因为“我们控制所有用户” |
| 配置 | 安全运行状况检查结果被忽略或无限期推迟 |
## 安全漏斗设计
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 漏斗 \| 源控制 | ✅ 分支保护规则强制实施所需的审查和状态检查 |
| 漏斗 \| 访问控制 | ✅ 部署漏斗使用具有最低所需权限的服务帐户 |
| 漏斗 \| 密码 | ✅ 存储在安全库中的密码(从不存储在源控制或环境变量中) |
| 漏斗 \| 部署 | ✅ 生产部署需要授权人员的手动审批权限 |
| 漏斗 \| 审计 | ✅ 部署日志通过批准跟踪捕获谁部署了什么 |
| 漏斗 \| 验证 | ✅ 部署前验证包含安全扫描和合规检查 |
| 漏斗 \| 访问控制 | ✅ 漏斗管理访问权限需要多重身份验证 |
| 漏斗 \| 监控 | ✅ 漏斗配置更改会触发安全团队通知 |
| 漏斗 \| 验证 | ✅ 部署后自动验证确认预期的安全控制处于活动状态 |
| 漏斗 \| 依赖性 | ✅ 部署前评估了安全影响的依赖更新 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 漏斗 \| 密码 | 提交到版本控制的密码(即使稍后移除) |
| 漏斗 \| 源控制 | 任何人都可以合并到主/生产分支,而无需审核 |
| 漏斗 \| 访问控制 | 部署漏斗以管理员级别权限运行 |
| 漏斗 \| 部署 | 生产部署完全自动化,无需审批门 |
| 漏斗 \| 审计 | 部署日志不会捕获谁发起或批准了更改 |
| 漏斗 \| 验证 | 忽略或绕过失败的安全扫描,以满足截止日期 |
| 漏斗 \| 监控 | 漏斗配置更改未跟踪或审核 |
| 漏斗 \| 验证 | 部署后验证仅检查功能正确性 |
## 安全测试策略
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 测试 \| 静态分析 | ✅ Salesforce Code Analytics 在开发人员 IDE 中运行以获得即时反馈,并作为自动网关在 CI/CD 漏斗中运行 |
| 测试 \| 渗透测试 | ✅ 对暴露在不可信用户的自定义应用程序进行渗透测试,特别是 Experience Cloud 站点和面向公众的 API |
| 测试 \| 单元测试 | ✅ 以具有不同权限简档的用户身份运行注重安全的 Apex 单元测试 |
| 测试 \| 依赖性 | ✅ 依赖性扫描会监控 AgentExchange 软件包和 JavaScript 库是否存在已知漏洞 |
| 测试 \| 安全审查 | ✅ 为每个 AppExchange 或 AgentExchange 安全审查提交准备静态分析报告 |
| 测试 \| 安全审查 | ✅ 在解决方案集成第三方 Web 应用程序或服务时准备的动态扫描(渗透测试)报告 |
| 测试 \| 依赖性 | ✅ 订阅和监控已安装软件包的安全建议 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 测试 \| 覆盖范围 | ⚏ 安全测试仅依赖于静态分析等单一技术 |
| 测试 \| 单元测试 | Apex 测试验证功能行为,但绝不以较低权限用户身份运行 |
| 测试 \| 安全审查 | 无需所需的静态分析或动态扫描报表即可准备 AppExchange 或 AgentExchange 提交 |
| 测试 \| 渗透测试 | 跳过面向公众的 Experience Cloud 站点和 API 的渗透测试 |
## 相关模式
另请参阅:
- [合规和监管模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/trust-compliance-patterns.md) — 平台治理和审计控制
- [身份和访问管理模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/trust-identity-access-patterns.md) — 身份验证和授权
- [事件响应模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/trust-incident-response-patterns.md) — 安全事件检测和响应
- [客服人员模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/trust-agentic-patterns.md) — 特定于客服人员的安全控制
# 客服人员企业的公平性

## 概览
当自主客服人员做出影响客户、员工和社区的决策时,公平性成为区分负责任自动化和有害自动化的架构质量。Agentforce 客服人员在有限的人力监督下运作,以前所未有的规模延续和放大偏见,将个人歧视模式转化为系统性的不平等。代理系统中的公平性是 Salesforce 平台上的一流架构问题,该平台将 AI 公平性、可访问性、人工监督、算法问责制和道德治理整合到统一的架构支柱中。
此页面解决代理架构特有的公平性挑战。核心公平原则、无障碍要求和道德治理框架在[公平](/docs/architect/zh-cn/well-architected/guide/fairness.html)支柱中涵盖。在这里,我们重点关注自主客服人员的注意事项:针对做出相应决策的客服人员的偏见检测和监督模式,旨在使问责成为实质性而非名义性的;透明度,允许受影响的用户质疑决策;平台功能,例如 Einstein Trust 层,通过数据控制和审计日志记录支持负责任的 AI 实践。
## 自治客服人员的 AI 公平性
Agentforce 客服人员从训练数据、检索源和真实交互中学习模式。当这些来源包含反映历史歧视或人口统计不平衡的偏见时,客服人员会在人类检测到模式之前,以算法效率影响成千上万用户来延续这种偏见。
### 客服人员系统中的偏见来源
- **基础模型偏差:**大型语言模型 (LLM) 使用包含种族、性别、年龄、残疾和其他受保护特征的社会偏见的互联网规模数据进行训练。这些偏见出现在客服人员的回复中,即使没有明确的歧视性说明,也不太可能仅通过即时工程或测试完全解决;它们反映了互联网规模培训数据的部分固有模式。例如,Agentforce 招聘客服人员可能会使用阳性语言模式描述领导角色。或者,服务代理可能会对名称表示非多数族裔或性别的客户做出不同回应,这是一个代表质量问题,可能会影响客户的体验,而与任何决策结果无关。
使用代表受保护群体的不同角色,系统地测试客服人员的人口统计偏见。生成相同的请求,仅更改人口统计信号,例如姓名、位置或通信风格。比较客服人员在角色间的回复,以了解质量差异、语气变化和结果差异。
- **训练数据表示差距:**如果贵组织的历史客户关系管理 (CRM) 数据未充分反映某些客户细分,则接受过该数据培训或基础训练的 Agentforce 客服人员在这些细分中的表现将不佳。一位接受过十年业务机会数据培训的潜在客户评分员系统地低估了来自销售团队历史上取消优先级的地理区域的潜在客户,从而形成了一个反馈循环,算法偏见加剧了人为偏见。
在使用 Salesforce 数据进行客服人员培训或检索扩充生成 (RAG) 基础训练之前,请审核人口统计表示。确定代表性不足的群体,并评估代表性差距是否反映了合法的商业差异或历史歧视。在部署客服人员之前,通过数据扩充或明确减少偏差来减少不平衡;一些残余偏差往往仍然存在,通常通过下游监控和监督来管理,而不是在部署前解决。
- **RAG 系统中的检索偏差:**Agentforce 客服人员在 Knowledge 库、Data 360 细分和 Salesforce 记录中使用 RAG 地面响应。当这些检索源包含有偏见的内容或不同人口统计组之间存在质量差异时,部署的客服人员可以将这种偏见带到受影响用户的体验中。为了降低这种风险,作为最佳实践,请在生产之前审核检索源。服务代理检索 Knowledge 文章,为企业客户提供详细的故障排除,但只为小型企业客户提供通用响应,这将使服务质量差异永久化,这在客户层与受保护的特征相关时是一个公平问题。
审计 Knowledge 库和检索源,以了解人口统计代表性差距和质量差异。对于难以弥合的差距,将这些限制视为客服人员适合的护栏。确保文档质量、完整性和准确性在所有客户群中具有可比性。在内容示例中包括不同的表示,而不是默认使用疏远代表不足的用户的多数文化引用。
- **交互模式偏差:**客服人员可以根据与受保护特征相关的对话提示来调整行为。即使在部署后,监控这种模式也是常见的做法,因为一些交互动态来自训练数据中没有的用户行为。沟通风格、语言复杂性和时间模式可以发出人口统计信息的信号。客服人员对待正式沟通风格的方式不同于临时风格,这可能无意中基于文化背景、教育程度或母语状态进行歧视。
监控客服人员跨人口统计组的互动,以了解行为一致性。分析回复长度、详细信息级别、礼貌标记和按用户特征分层的解决方案质量。差异表明存在交互偏见,需要进行调查。
- **反馈循环放大:**影响自己未来培训数据的客服人员会产生自我强化的偏见。例如,将较少高价值业务机会分配到特定销售区域的路由客服人员会为这些区域生成较少的成功数据。这反过来又降低了他们的预测成功概率,从而进一步减少了未来向他们路由的业务机会。如果没有干预,这种最初的偏见会随着时间的推移而加剧。
通过监控决策分配随时间的变化来检测反馈循环。当某些人口统计群体系统性地收到较少的积极结果时,调查客服人员的决策是否造成了差异,从而有理由做出未来的不利决策。通过人工审核边缘个案和定期重新平衡打破循环。
### 多客服人员编排和偏见复合
当多个 Agentforce 客服人员在编排链中一起工作时,一个客服人员的偏见会成为下游客服人员的输入,从而产生复合效应,其中初始的微小偏见会放大为显著的歧视性结果。
- **顺序客服人员链:**当客服人员 A 的输出成为客服人员 B 的输入时,客服人员 A 有偏见的决策会以一种永久或放大歧视的方式约束客服人员 B 的选择。
考虑潜在客户资格编排:
1. 研究客服人员从 Web 源和 CRM 历史记录收集客户智能。
2. 评分客服人员根据研究客服人员的调查结果分配潜在客户分数。
3. 路由客服人员根据得分将潜在客户分配到区域。
4. 参与客服人员根据所有先前的客服人员输出个性化拓展。
当研究客服人员系统地检索某些客户人口统计的不太全面的数据时(由于训练数据缺口或检索偏差),评分客服人员会将不完整的信息解释为消极信号。然后,路由客服人员会分配到优先级较低的区域,参与客服人员会提供个性化程度较低的拓展。复合效应产生的服务质量差异远远超过任何单个客服人员的偏见。
- **并行客服人员共识:**当客服人员共享训练数据或基础模型时,多个客服人员独立分析相同输入并汇总结果的模式提供了偏见放大机会。
如果 5 个客服人员分别对潜在客户进行评分,但他们都共享有偏见的训练数据或基础模型偏见,则共识不会纠正偏见,只会验证偏见。当所有五个客服人员都具有相同的系统偏见时,“五个客服人员达成一致”会对歧视性结果产生错误的信心。
**编排偏差的缓解策略:**
- **每个阶段的客服人员输出审计:**记录编配链中每个客服人员的完整输入和输出。当在最终结果中检测到偏差时,通过链向后追溯,以识别哪个客服人员引入了偏差,以及在哪个阶段发生了放大。
构建 CRM Analytics 仪表板,显示按人口统计细分的每个编排阶段的决策分配。确定差距在链中出现或扩大的位置。
- 客服人员培训和提示**的多样性**减少了相关误差,降低了偏差放大的可能性。在使用多客服人员共识模式时,最大化多样性:
- 在商业上可行和支持的情况下的不同基础模型,例如通过自带 LLM (BYOLLM) 配置
- 客服人员之间的不同检索源
- 不同的提示工程方法
- 不同的置信度阈值校准
- **拐点处的人工审核:**确定决策显著缩小下游选项的编排阶段。在这些转折点插入人工审核,即使单个客服人员的置信度很高。编排会创建单个客服人员置信度得分无法捕捉的紧急效果。
- **每个编排阶段的公平性度量:**不要只衡量最终结果的公平性。计算人口统计均等、平等机会和价值链每个阶段的差异性影响。
如果阶段 1 显示 90% 的人口统计均等,阶段 2 显示 85%,阶段 3 显示 78%,阶段 4 显示 70%,则每个阶段单独显示可以接受,但复合到无法接受的最终差异。在产生歧视性结果之前,阶段度量会捕获复合。
- 编配失败的**断路器 -** 配置编配逻辑,以在以下情况停止并升级为人工:
- 任何客服人员的置信度低于阈值,即使下游客服人员有信心
- 编配阶段之间的输出分配显著变化
- 决策链遇到未在训练或验证集中表示的数据
- 用户明确质疑或质疑中间决策
多客服人员编配支持复杂的推理,但会产生不透明的决策链,问责会扩散,偏见会加剧。从架构上关注分阶段的公平监控和战略性的人力监督,可以防止编配成为偏见放大机制。
### 客服人员决策的公平性度量
在部署任何 Agentforce 客服人员对用户做出相应决策之前,请计算人口统计组之间的公平性度量。使公平性评估成为强制部署网关,其权限相当于安全审查。
- **人口均等:**受保护人口群体之间的阳性结果率必须大致相等。如果客服人员以 60% 的速度批准 A 组的服务请求,但以 40% 的速度批准 B 组,则违反人口统计对等。当没有正当理由导致各组之间的结果率差异时,人口统计均等是适当的。
通过将人口划分为人口细分、衡量每个细分的阳性结果率和比较细分之间的比率来计算人口均等。记录指定批准人和理由的奇偶性差距。
- **平等机会:**真阳性率在各组之间保持可比性。无论人口统计特征如何,客服人员都能同样准确地识别合格的个人。当基础信用度相似时,预测模型会以相似的比率在受保护群体中识别有信用的申请人。
平等机会往往是比人口统计均等更合适的指标,用于决定个人资格,而基本费率可能合法地不同。监控客服人员是否系统地错过了代表性不足小组的合格候选人。如果缓解后仍存在差异,客服人员可能不适合此用例。
- **等概率:**真阳性率和假阳性率在小组中相等。这是一个严格的定义,它限制了人口统计中的真阳性和假阳性率。平均机率可以防止错过的业务机会集中在特定小组,以及虚假指控集中在特定小组。
实现平均化概率通常需要每个人口统计组单独的决策阈值。在美国,对于与就业相关的决定,[第七章](https://www.eeoc.gov/statutes/title-vii-civil-rights-act-1964)(1964 年民权法)禁止按受保护阶级调整分数或设定不同的截止分数,因此在招聘中不能以这种方式追求均等化。在其他情况下,在其他法域,这会产生关于明确差别待遇的法律问题,因此在执行特定群体门槛值之前,请咨询法律顾问。
- **不同的影响率:**[五分之四规则](https://www.eeoc.gov/laws/guidance/uniform-guidelines-employee-selection-procedures)提供了筛选阈值:如果任何小组的阳性结果低于表现最佳的小组的 80%,请调查偏见。75% 的比例(例如,45% 的批准率与 60% 的批准率)低于五分之四的阈值,表明存在潜在的歧视,需要说明理由或减轻歧视。
差别性影响分析是就业法的标准,并越来越多地应用于人工智能系统。当定额低于 80% 时,记录调查和补救步骤;当补救没有提高比率时,团队可能会得出结论,用例不适合。
- **个人公平性:**无论小组成员如何,类似的个人都会收到类似的预测。两个具有相同信用度、购买历史和参与的客户会收到类似的信用额度建议,而不论人口统计差异如何。
个人公平在哲学上很重要,但在操作上具有挑战性,因为“相似性”是主观的,并且依赖于上下文。将个人公平性用作指导功能选择和测试的设计原则,而不是严格的数学约束。
### 捕获偏见检测数据
两个平台功能可以捕获偏见检测的数据。Einstein Trust 层记录每个 Agentforce 交互的生成式 AI 审计跟踪:发送到模型的提示、返回的响应、使用的基础源以及毒性分数等 Trust 信号。Agentforce 会话跟踪记录每个决策背后的逐步推理。它们共同提供的数据支持偏见检测和公平性监测;对这些数据的解释是人为的工作,通常需要经过培训的审查者和专门的时间。
- **响应日志记录:**Trust 层记录每个生成式交互的提示、模型响应和 Trust 信号。使用此数据分析人口统计组的预测分布。构建 CRM Analytics 仪表板,按客户细分比较批准率、推荐模式和风险分数。
**定期查询 Trust 层日志**:使用以下提示:向我显示过去 30 天内按客户行业、地区和客户规模分组的所有高价值业务机会预测。预测在细分之间的分布是否一致,或者某些细分是否系统地得分更高/更低?”
- **跟踪捕获的原因:**对于 Agentforce 客服人员,Agentforce 会话跟踪记录客服人员如何作出决定,而 Trust 层审计跟踪捕获提示、响应和基础来源,包括检索哪些 Knowledge 文章和 Salesforce 记录。当用户报告偏见时,查看两者,以了解哪些数据源、检索模式或推理步骤可能引入了偏见。
与传统系统相比,推理跟踪使临时公平性审计更加精细,更容易执行。按人口统计组分层的 100 个客服人员决策示例,并让审核人员评估推理质量是否在组之间具有可比性。
- **异常检测:**在客服人员决策模式显著偏离基准时配置警报。如果特定客户群的批准率每周下降 20%,将触发调查。突然的分布轮班可能表示数据质量问题、模型偏差或需要立即注意的新偏差。
**构建自定义监控,以提醒公平信号:**“当 Agentforce 服务代理连续三天的平均对话长度超过总平均值的 1.5 倍时,将发出通知。”长度差异可能表明某些群体得到的服务效果较差。
- **公平仪表板模板:**构建可重复使用的 CRM Analytics 仪表板模板,跟踪常见客服人员用例的公平性度量。包括人口统计均等计算、平等机会度量、不同影响比率和显示度量随时间演变的趋势图。在客服人员开发团队之间共享模板,标准化公平性监控。
### 偏见缓解策略
在检测到偏见时,根据根本原因在适当阶段应用缓解措施。
- **预处理数据干预:**在客服人员培训或 RAG 索引之前,请纠正数据级别的偏差。对培训数据中代表性不足的人口群体进行过度抽样,确保代表性平衡。在真实数据不足时,使用合成少数过度抽样技术 (SMOTE) 等技术,为代表性不足的群体合成其他数据。请注意,SMOTE 会内插数字、列表式特征,因此它适用于结构化 CRM 训练数据,而不是用于 RAG 基础训练的非结构化文本。
在使用 Salesforce CRM 数据进行模型训练之前,审核其人口统计差距。如果历史业务机会数据过度表示某些客户类型,请重新平衡训练集或使用抽样权重,以防止客服人员将过度表示作为决策信号。
- **正在处理的算法约束:**在模型训练期间应用公平约束,同时优化准确性和公平性。这可能会降低原始准确性 2-3%,同时显著提高组之间的公平性。在您控制模型训练的地方,公平约束的训练通常是最有效的缓解方法。
对于使用基础模型的 Agentforce 客服人员(您无法修改培训),请通过系统提示约束客服人员行为:"以同等的专业精神和细节对待所有客户人口统计。无论客户沟通风格或背景如何,都要提供长度和质量相当的解释 。 "
- **后处理阈值调整:**在合法的情况下,调整每个人口组的决策阈值可以均衡模型训练后的结果率。例如,批准客服人员可能对一个组应用 80% 的置信度阈值,而对另一个组应用 75% 的置信度阈值,以抵消潜在的模型偏差。反歧视法严重限制了这一手段,一些司法管辖区对某些决定直接禁止(见下文)。
阈值调整具有争议性,因为它明确以不同方式对待群体,而许多法域的反歧视法限制或禁止它。在美国,对于与就业相关的决定,直接禁止:第七编(1964年民权法)禁止按受保护阶级调整分数或使用不同的截止分数,而且无论有多少书面理由都使这种做法合法化。其他司法管辖区会强加自己的约束,因此请确认适用于用户的规则。在允许的情况下,在实施特定于群体的阈值时记录法律理由,并验证阈值是否提高了公平性,而不会造成其他歧视性影响。
- **代理功能检测和移除:**识别与受保护特征相关的特征,并作为间接识别机制。常见代理包括:
- 种族、族裔和收入水平的**邮政编码**代理
- 性别和种族的**名称模式**代理
- 宗教和护理责任的**沟通时间**代理
- 收入级别的**设备类型**代理
- **区域分配**可以代表人口组成
计算所有模型特征与受保护特征之间的相关系数。对于高度相关的特征,评估合法的预测值是否有理由包含,或者替代特征是否可以在没有代理效应的情况下提供类似的预测。
## 客服人员决策的人工监督
Agentforce 客服人员可以在人工监督下操作,旨在使审查具有实质性,而不是名义性。适当的监督级别取决于决策风险、可撤销性和监管要求。
### 适用于高峰值的人工在环
在执行前,通过人工审核路由相应的决策。决策是否风险高到足以进行人工审核是基于风险的判断:权衡潜在伤害的严重性和伤害发生的可能性。结果决策通常出现在监管领域,例如医疗保健、金融服务和公共部门,但它们也出现在监管领域之外。常见的高风险上下文包括:
- **雇用决策** \- 雇用、晋升、解雇、报酬、绩效审查
- **信贷和金融服务** \- 信贷审批、限额变更、账户关闭、定价
- **医疗保健** \- 诊断建议、治疗建议、承保范围决策
- **法律权利**----合同解释、争议解决、获得服务
- **住房** \- 租户筛选、租赁批准、驱逐建议
在这些上下文中设计 Agentforce 客服人员来分析、推荐和准备决策,同时在执行之前需要人工批准。将客服人员定位为增强人类判断力的决策支持工具,而不是取代人类的自主决策者。
### 基于置信度的升级
配置基于客服人员不确定性触发人工审核的置信度阈值:
- **高置信度 (>90%)** \- 客服人员自动处理完整审计日志
- **适度自信 (70-90%)** \- 客服人员在操作前进行人工审核后推荐
- **低置信度 (<70%)** \- 客服人员完全服从上下文摘要
使用生产数据校准阈值。“70% 置信度”预测在验证时成功了大约 70% 的时间。校准错误的置信度分数会破坏对升级机制的Trust。
通过在每个置信区间抽样客服人员决策并计算实际成功率来测试校准。如果“高置信度”决策仅在 75% 的时间内成功,请重新校准阈值或改进模型置信度估计。
### 有时间限制的升级
如果 Agentforce 无法在定义的限制内解决请求,请升级为人工。检查升级目标是否有容量提供帮助 - 路由到超载的队列不会减少危害。
设置升级触发器:
- **对话轮次** – 在 5-7 次轮次未解决后,升级
- **经过的时间** – 在 10 分钟没有解决后,升级
- **用户情绪** – 当用户表示沮丧时,升级
- **重复检测** – 当客服人员重复相同的响应时,上报
配置全方位,将升级的个案路由到具有完整对话上下文的适当基于技能的队列。培训人工客服人员高效处理升级,而无需用户重复已向客服人员提供的信息。
### 使用理由覆盖机制
使授权人员能够随时使用记录的理由覆盖任何 Agentforce 决定。覆盖具有多种目的:
- **纠错:**人工更正客服人员可能伤害用户或违反策略的错误。覆盖功能为在边缘情况不可避免的复杂环境中运行的自主系统提供安全阀。
- **偏见检测:**如果人员覆盖某些人口统计的 Agentforce 拒绝次数比其他人员更频繁,请调查这两种可能性:客服人员可能系统地使该群体处于不利地位,人员可能正在纠正它,或者覆盖者可能引入了新的偏见。第一个模式指向审查客服人员;第二个模式指向审查人员培训。
- **客服人员改进:**带有理由的覆盖将成为客服人员改进的训练数据。示例覆盖的决策,并分析人类与客服人员意见不一致的原因。将覆盖模式纳入快速细化或模型重新训练。
- **问责制:**覆盖会分配责任。覆盖客服人员决策的人员对决策的结果负责。明确的问责制防止在每个人都认为 AI 是负责任的、没有人当家作主的情况下分散责任。
### 责任分配
在部署前而不是事件发生后分配责任:
- **模型所有者:**数据科学主管负责模型公平性、准确性和行为。批准部署,响应公平警报,授权更新。模型所有者是架构决策记录中记录的命名个人。
- **决策所有人:**产品所有者负责为特定用例选择部署 AI,并负责对客户的真实影响。决策所有者不能将责任委托给 AI 系统。
- **上诉机构:**道德审查委员会或指定团队处理来自认为客服人员决定不公平的用户的申诉。上诉流程必须可访问、及时,并有权撤销客服人员的决定。
- **审计机构:**定期审计验证客服人员的合规团队在公平性参数范围内运行,并可以在补救前暂停未达标的客服人员。
记录所有角色的名称,而不仅仅是头衔,确保通过组织变革来保持问责制。
## 透明度和可解释性
当 Agentforce 客服人员做出影响用户的决策时,这些用户应该得到与决策影响相称的可以理解的解释。
### 解释级别
构建服务于不同受众的多个解释层:
- **面向用户的解释:**无需技术专业知识即可理解的纯语言推理。"您的服务请求需要经理批准,因为请求的金额 (12,000 美元) 超出了您的授权限制 (10,000 美元)。经理批准通常在 24 小时内完成,或在商定的服务级别协议 (SLA) 内完成。
- **业务解释:**运营用户可以看到业务上下文中的关键决策因素。"潜在客户得分:73/100.主要积极因素:公司规模(500 名员工)、活跃的网站参与度(30 天内 12 次访问)、行业匹配 (SaaS)。主要负面因素:没有 MQL 参与,在目标区域之外。"
- **技术解释:**数据科学家可以查看模型详细信息:特征权重、置信度校准、模型版本、训练日期、输入分布。技术解释支持调试和偏见调查。
- **审计解释:**合规团队可以看到完整的决策跟踪:模型版本、决策时的确切输入值、咨询的所有数据源、推理跟踪、配置状态。审计解释支持需要精确重建的监管调查和公平性审计。
### 说明跟踪和审计跟踪的原因
Agentforce 会话跟踪记录客服人员决策背后的逐步推理,而 Einstein Trust 层捕获提示和响应审计跟踪,包括基础来源。它们共同允许您在适当的详细信息级别提供透明度:
- **实时透明度:**Agentforce 做出决定时,向用户显示汇总推理:"我根据您的购买历史(3 次类似购买)、当前促销(8 折)和库存可用性(库存、明天发货)推荐了产品 A。"
- **按需详细解释:**提供“您为何推荐此?”链接,使用户能够查看完整的推理,包括检索的所有 Knowledge 文章、咨询的 Salesforce 记录和决策逻辑。详细的解释建立Trust,使用户能够识别错误或偏见。
- **历史重建:**当用户在几周或几个月后质疑过去的决策时,检索会话推理跟踪和 Trust 层审计历史,以便精确解释历史决策。历史重建支持上诉和监管调查。
- **聚合模式分析:**按人口统计组分层的示例推理跟踪,分析决策质量是否一致。查看来自每个客户细分的 100 个跟踪,并评估推理深度、源质量和逻辑是否在小组之间具有可比性。
### 置信度沟通
以用户适当的术语显示预测置信度,避免用户误解原始概率分数。
而不是“73% 的置信度”,将置信度传达为:
- **高置信度** – " 我相信基于类似个案的建议是合适的"
- **适度自信** – " 此推荐可能合适,但建议经理审核"
- **信心不足** – " 这种情况不同寻常。我要升级为专家,提供更好的指导"
解释置信度级别对可靠性的含义:“基于历史验证,高置信度推荐在大约 95% 的时间内是正确的。”
对于中等或低置信度决策,解释将进行哪些额外审查:"由于此请求超出了我们的标准参数,因此将由高级专家审核,批准通常在 24 小时内完成,或者在您商定的服务级别协议 (SLA) 内完成。"
### 反事实解释
在适当时,向用户显示什么会改变结果。反事实使用户能够通过具体行动改善结果,而不仅仅是通知他们已经做出的决定。
例如:"您的潜在客户得分会随着已验证就业信息(+8 分)和额外的信用参考(+5 分)而增加。提供此文档会将申请移到优先级审查队列 。 "
反事实是一种强大的透明机制,但需要仔细设计。避免提供鼓励系统博弈或无意中揭示受保护特征作为决策因素的反事实。“如果你年轻10岁,你的申请分数会更高”是非法的歧视,无助于透明度。
### AI 披露
在一些司法管辖区,明确披露用户正在与机器人交互是一项法律要求,而不仅仅是设计最佳实践。明确指示用户何时与 Agentforce 客服人员交互,而不是与人工客服人员交互。披露必须突出和持续,不能在服务中隐藏,或者在交互开始时只显示一次。
显示持续可视指示符:
- 客服人员头像明确标记为“AI 助手”
- 显示“您正与 Agentforce 服务代理聊天”的标题
- “与人工客服人员联系”选项在整个对话中可见
披露尊重用户自主权,允许对交互模式进行知情选择。喜欢人际互动的用户必须拥有该选项,而不会受到摩擦或服务质量处罚。
## 算法问责制
Salesforce 平台功能,例如 Event Monitoring 和 Field Audit Trail,早于客服人员 AI,将算法问责制扩展到单个客服人员的决策。
### 不可变的审计跟踪
- **客服人员操作的事件监控:**Event Monitoring 通过 Salesforce 控制的完整性捕获客服人员数据访问、API 调用和系统更改。将 Event Monitoring 日志流式传输到外部 SIEM,以便长期保留和篡改证据,从而满足相应决策的监管要求。
配置 Event Monitoring 以跟踪:
- 显示客服人员系统交互的 API 事件日志
- 客服人员服务帐户的登录事件
- 客服人员访问批量数据时的报表导出
- **AI 影响数据的字段审计跟踪:**标准字段历史记录将数据更改保留 18 个月(通过 API 保留 24 个月)。字段审计跟踪允许您无限期地保留字段历史 — 最多在 18 个月后归档,然后保留归档的数据,直到您将其删除 — 支持长期的公平审计和监管调查。在存储客服人员决策或受客服人员决策影响的对象上启用字段审计跟踪,从标准对象字段审计跟踪支持以及任何启用了字段历史跟踪的自定义对象中进行选择(每个对象最多 200 个字段)。
对于信贷决策、就业决策和其他高风险用例,多年保留可能是监管要求。保留期因制度而异。确认用例的适用要求。
- **为最高风险屏蔽 Event Monitoring:**Shield Event Monitoring 通过结构化事件字段提供了增强的审计功能,并与合规报告工具集成。事件日志文件数据默认为 Event Monitoring 和 Shield 客户保留一年。对于审计跟踪完整性至关重要的最高风险客服人员决策,使用 Shield。
### 决策重建功能
存储足够的信息来精确重建任何历史客服人员决策:
- **模型版本:**记录每个决策的模型版本(基础模型、提示版本、微调模型 ID)。模型版本经常变化,并产生不同的输出。精确的版本跟踪可在发现偏差时进行根本原因分析。
- **输入功能值:**在决策时存储准确的输入值,而不是可能已更改的当前值。输入快照允许您测试决策是否与当前数据不同,或者根据当时可用的信息确认原始决策是否正确。
- **配置状态:**记录阈值、业务规则和参数设置在决策时处于活动状态。配置更改会影响结果。配置历史允许确定决策偏差是反映模型变化还是配置变化。
- **环境背景:**捕获相关上下文:用户身份、时间戳、对话历史、会话上下文。上下文会影响客服人员行为,必须保留上下文才能准确重建。
### 持续公平性监控
偏见检测必须是连续的,而不是在部署前的一次性验证。客服人员通过提示更新、基础模型版本更改和转移数据分配进行发展。
- **公平度量仪表板:**构建 CRM Analytics 仪表板,从 Einstein Trust 层日志中跟踪公平度量。持续监控人口统计均等、平等机会和差别性影响率。在度量违反定义的阈值时配置警报。
创建仪表板,显示:
- 按客户人口细分的决策分布(条形图)
- 一段时间内的公平性度量(带有警报阈值的趋势线)
- 具有五分之四规则指标的不同影响率计算
- 有助于决策的热门预测因素,其中基础模型揭示了这些因素
- 按人口统计组的覆盖率
- **分布轮班检测:**监控客服人员的输入分配,了解指示潜在公平问题的更改。如果接收客服人员决策的用户的人口统计组成与训练数据人口统计显著不同,模型公平性可能会下降。
在输入分配更改时提醒:Agentforce 潜在客户路由的客户细分分布在过去 30 天内向企业转移了 15%。查看路由逻辑是否对现在接受不同服务模式的 SMB 客户公平 。 "
- **用户反馈集成:**使用户能够通过可访问的机制报告感知的偏见。用户报表显示定量度量缺失的定性问题。
将“报告关注”选项添加到 Agentforce 聊天界面。将报表路由到具有完整对话上下文的道德审查委员会。通过所需的调查工作流和文档化的解决方案,跟踪自定义对象中的报表。
### 外部审计支持
设计客服人员架构,期待监管机构、民权组织或需要算法问责演示的客户进行外部审计。
- **导出功能:**构建导出功能,使合规团队能够提取具有人口统计分层的完整决策数据集,供外部审计员审查。出口商必须遵守数据隐私条例,同时为公平性验证提供足够的透明度。
- **审计文档:**维护当前文档:
- 客服人员目的和预期用例
- 训练数据人口统计和已知限制
- 部署前和生产中计算的公平性度量
- 应用的偏见缓解策略
- 人员监督配置
- 监控方法和警报阈值
- 责任分配(模型所有人、决策所有人、上诉机构)
- **算法影响评估:**在部署客服人员做出相应决策之前,请进行影响评估,以评估利益相关者群体的潜在积极和消极影响。影响评估显示了监管机构重视的尽职调查和主动风险管理。
## 用户代理和同意
用户保留对 Agentforce 如何影响体验的有效控制。
### 同意客服人员交互
- **选择加入相应客服人员:**做出对用户有重大影响的决策的客服人员需要明确选择加入,而不是默认启用。信用决策客服人员、就业筛选客服人员和服务资格客服人员仅在用户同意后激活,并清楚地了解客服人员将如何影响他们。
- **粒度同意:**启用每个客服人员用例的同意,而不是全面 AI 同意。客户可能会同意 Agentforce 服务客服人员,同时拒绝 Agentforce 销售客服人员。支持用例级同意跟踪的架构是一个输入;测试和定期审计强制逻辑有助于确认同意门在实践中成立。
- **新功能的动态同意:**在部署影响现有用户的新的 Agentforce 功能时,请主动征求新用例的同意,而不是依赖没有考虑特定应用程序的原始同意。影响用户的每项全新客服人员功能都会触发同意检查,并附上明确解释。
- **同意撤回并立即生效:**使用户能够立即停止客服人员处理,随时撤销同意。撤销同意必须像批准同意一样容易,不需要支持联系人或官僚程序。
### 控制客服人员行为
- **首选项管理:**使用户能够在定义的范围内配置客服人员行为:
* 沟通风格(简洁与详细解释)
* 主动性级别(仅在询问时响应,而非主动建议)
* 升级首选项(优先使用 AI 分辨率,而非快速使用人工)
在用户记录自定义字段中存储首选项。客服人员系统提示中的引用首选项:"用户更喜欢详细的解释。通过支持推理提供全面的回答 。 "
- **按需手动切换:**在整个 Agentforce 交互中,提供持续的“与人工客服人员联系”选项,而无需用户完成客服人员交互或解释他们为何更喜欢人工。
配置即时切换路由:当用户选择“人工客服人员”时,路由到全方位,带有完整的对话上下文和指示用户首选项的优先级标志。选择人工交互不会降低服务或等待时间处罚。
- **透明度指标:**使用持续可视标志清楚地标记客服人员交互,使用户能够保持对交互模式的认识。忘记与客服人员交互的用户可能会有不切实际的期望,或者在出现限制时感到欺骗。
## 客服人员设计中的不歧视
设计客服人员,通过有意的架构选择,在受保护的人口群体中产生公平的结果。
### 受保护的特征独立性
做出相应决定的客服人员不得基于受保护特征(包括种族、性别、年龄、残疾、宗教、国籍或性取向)进行歧视,除非出于特定目的(例如残疾便利)具有法律正当理由。
- **功能审计:**查看客服人员推理中用于受保护特征内容的所有数据源。CRM 数据、Data 360 细分和 Knowledge 库可能包含客服人员在某些决策中不应考虑的人口统计信息。
当这些特征在法律上对决策类型不成立时,从客服人员输入中删除或屏蔽受保护的特征。对于信用决策,排除残疾状态,因为这无关紧要。对于残疾住宿请求,残疾状况至关重要,必须包括在内。
- **不歧视的提示工程:**在客服人员系统提示中包含明确的不歧视说明:
"您是客户服务代理。以同等的专业精神对待所有客户,无论他们的姓名、位置、沟通风格或任何其他特征如何。向所有客户提供同等质量和细节的推荐。不要根据人口统计特征对客户进行假设 。 "
- **使用人口统计角色进行测试:**在生产部署之前,测试客服人员,他们具有代表受保护小组的不同角色。生成相同的请求,仅改变人口统计信号(包括表示不同种族的名称、表示不同区域的位置,以及表示不同教育程度的通信风格)。
比较客服人员在角色间的回复,以了解质量、长度、专业性和结果。差异表明偏见需要缓解。
### 服务质量公平
跨客户人口统计监控 Agentforce 服务质量,确保体验可比性:
- **按细分的解决率:**计算按客户细分划分的首次接触解决率。如果 Enterprise 客户达到 75% 的解决率,而 SMB 客户达到 55% 的解决率,请调查 Knowledge 库质量、客服人员培训或产品功能是否因细分而异。
- **按细分的响应质量:**跨细分的客服人员对话示例,并让审核人员评估一致的维度上的回复质量:准确性、完整性、专业性、帮助性。评级人之间的可靠性测试确保评审人应用一致的标准。
- **按细分的升级率:**跟踪客服人员升级为按客户人口统计分层的人员的频率。某些细分的升级率越高,客服人员对这些用户的效果越差,从而造成服务质量差异。
- **按细分的满意度:**调查所有人口统计组中的用户,并比较满意度分数。总体满意度高可能会掩盖少数群体被多数人满意度淹没的不良经历。
### 客服人员体验中的可访问性
Agentforce 界面必须为符合 [WCAG 2.2](https://www.w3.org/TR/WCAG22/) AA 标准的残疾用户访问。参考 [Salesforce Lightning 设计系统](https://www.lightningdesignsystem.com/2e1ef8501/p/355656-patterns)组件和模式库,了解可重复使用、可访问的 Agentforce 组件和设计模式。这些模式使客服人员体验可访问、一致和可学习。
- **屏幕阅读器兼容性:**提供 Agentforce 聊天界面的 Lightning 消息传递组件在按设计使用时包括基准可访问性。自定义聊天实施需要手动无障碍实施:
- 具有正确标记的语义 HTML 结构
- ARIA 实时区域宣布新消息
- 键盘导航消息历史记录
- 明确交互式元素的重点指标
在整个开发过程中,使用 JAWS、NVDA 和 VoiceOver 屏幕阅读器辅助技术进行测试,而不仅仅是自动扫描。
- **认知可访问性:**客服人员回复对一般受众使用简单的语言。避免使用行话,并为不可避免的技术术语提供词汇表。使用标题构建长回复,并酌情使用项目符号或编号列表来帮助理解。
- **语言公平性:**Agentforce 通过基础模型多语言功能支持多种语言。通过母语者评估,而不仅仅是缺少文化细微差别的自动化度量,验证回复质量在不同语言之间具有可比性。
对于为不同语言群体提供服务的关键业务用例,配置特定于语言的处理(语言变量、本地化提示和按语言筛选 Knowledge 文章)并验证每种语言的质量,而不是仅仅依赖基础模型跨语言转移,这可能会使资源较少的语言的质量下降。
## 摘要:公平实施路线图
在与客服人员部署成熟度一致的阶段中,为 Agentforce 实施公平性。
**阶段 1:基础(在任何生产客服人员之前)**
- 建立具有执法权限的道德审查委员会
- 文档责任分配(模型所有人、决策所有人、上诉机构)
- 启用 Einstein Trust 层审计捕获
- 为客服人员操作配置 Event Monitoring
- 在 CRM Analytics 中创建基线公平性监控仪表板
- 定义强制部署网关:数据审计、公平度量、影响评估
**阶段 2:第一个生产客服人员**
- 对用例进行全面影响评估
- 对人口统计代表性的审计培训/RAG 数据
- 跨人口统计组计算公平度量
- 实施人工监督模式(人工在环、信任升级或有时限的)
- 为用户配置偏见报告机制
- 文档模型版本、配置和决策重建方法
**阶段 3:持续监控**
- 每周监控公平仪表板,在 24 小时内调查阈值违规(或贵组织的商定响应 SLA)
- 每月进行覆盖模式分析,找出系统问题
- 每周查看用户偏见报告,其中包含记录的调查结果
- 为高风险客服人员执行季度全面公平审计
- 随着客服人员的发展,通过提示更新或模型更改更新文档
**阶段 4:规模和治理**
- 为常见客服人员类型创建可重复使用的公平仪表板模板
- 构建客服人员决策重建工具,支持合规团队自助服务
- 标准化所有新客服人员的同意管理模式
- 在 CI/CD 漏斗中实施自动公平回归测试
- 安排第三方每半年进行一次外部公平审计
- 保持监管监控并适应积极和新出现的义务,包括[欧盟 AI 法案](https://eur-lex.europa.eu/eli/reg/2024/1689/oj)(逐步实施到 2025-2027 年 ) 、 州法律和行业法规
公平性是 Salesforce 平台上代理系统的核心架构问题。将 Agentforce 设计为一流架构的组织将自己定位在法规要求之前,同时构建所有用户可以Trust和有效使用的解决方案。存在平台功能。问题是架构师是否会使用它们。
分享您对良好架构框架的反馈。
# 客服人员可靠性模式
了解有关架构良好的[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)的更多信息 → [Agent Enterprise 可靠性](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-reliability.html)
## 客服人员故障模式检测
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 平台缓存 | ✅ 实施断路器,在平台缓存中跟踪 LLM 服务运行状况,进行低延迟实时读取,并以阈值和配置的自定义元数据类型为后盾;由于平台缓存已尽力而为,因此在持久存储(例如自定义对象)中保持打开/跳闸状态,而不仅仅是缓存。在调谐的故障阈值上打开电路(例如,五个连续的推理故障),并路由到后备模式 |
| 平台 \| 平台缓存 | ✅ 在平台缓存中存储验证的响应模式,以便根据预期结构快速验证客服人员的响应 |
| Agentforce \| 提示模板 | ✅ 当响应验证失败时,使用细化的提示重试,包括验证错误和正确结构的示例(最多 3-5 次重试) |
| Agentforce \| 会话跟踪 | ✅ 使用 Agentforce 会话跟踪推理跟踪检查客服人员的推理路径,并检测输出中的幻觉 |
| Data 360 \| 矢量搜索 | ✅ 需要客服人员引用 Data 360 矢量搜索源,以便在操作执行之前将声明与检索到的来源进行交叉引用 |
| 平台 \| Proactive Monitoring | ✅ 对于拥有签名成功权利的客户,依赖 Proactive Monitoring,Salesforce 员工可在其中监控组织是否存在新出现的问题;这不是自助可配置的提醒 |
| 平台 \| 比例中心 | ✅ 使用比例中心识别接近调控器限制的特定客服人员操作 |
| Agentforce \| 操作 | ✅ 在检索大型记录集合的客服人员操作中实施分页 |
| Agentforce \| 操作 | ✅ 设计具有硬限制的客服人员操作(每个父级最多 200 个子级),并在超过限制时实施抽样策略 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 自定义元数据类型 | 允许在没有断路器的情况下进行无限推理重试,并在 LLM 服务降级时创建无限重试循环 |
| Agentforce \| 提示模板 | 重试失败的客服人员响应,而不在重试提示中包含验证错误和预期结构 |
| Agentforce \| 操作 | 允许客服人员请求无边界上下文(例如“所有历史”),而每个父级记录的子级没有硬性限制 |
| Agentforce \| 操作 | 设计客服人员操作,在不分页的情况下检索大型记录集合,导致调控器限制峰值 |
| Einstein \| Trust 层 | 信任客服人员响应,无需交叉引用基础数据源的声明,允许幻觉到达操作执行 |
| 平台 \| 组织 | 将 LLM 服务可用性视为与 Salesforce 平台可用性相同,而不是将其作为单独的依赖性进行监控 |
## 优雅降级
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 设计多层后备链:全上下文客服人员 → 还原上下文客服人员 → 确定性规则引擎 → 通过全方位进行人工切换 |
| Agentforce \| 客服人员配置 | ✅ 使用精简上下文(过去 30 天与所有历史、前 5 个向量搜索结果与前 20 个)配置辅助客服人员,以减少失败概率 |
| 平台 \| 流 | ✅ 在平台事件触发的编排流或 Apex 中实施回退逻辑,记录哪层成功查看失败模式 |
| 平台 \| 流 | ✅ 构建确定性流或 Apex 逻辑,在客服人员推理失败时将常见场景作为后备处理(例如,标准验证规则、基于规则的分数计算) |
| Agentforce \| 全方位 | ✅ 为人工切换配置基于技能的路由,确保升级达到适当的专业知识 |
| Agentforce \| 全方位 | ✅ 将完整的对话上下文传递到人工队列,包括尝试的策略、客服人员置信度分数和失败原因 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 设计具有单个执行路径的客服人员,该路径在任何组件降级时完全失败 |
| Agentforce \| 客服人员配置 | ⚠ 使用相同的完全上下文代理配置进行后备尝试,而不是逐步简化上下文 |
| Agentforce \| 全方位 | ⚏ 路由到人工切换,而不传递对话上下文、尝试的策略或失败原因,迫使客服人员从头开始 |
| 平台 \| 流 | ⚠ 不记录哪个回退层成功,失去对失败模式和回退有效性的可见性 |
## 平台事件弹性
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 平台事件 | ✅ 在多步骤客服人员工作流中的每个成功步骤后发布检查点事件,并在事件负载中存储相关性 ID、完成的步骤和继续所需的状态 |
| 平台 \| 平台事件 | ✅ 将客服人员工作流设计为松耦合的事件链,其中每个客服人员可以独立失败并重试,而不会阻止整个工作流 |
| 平台 \| 平台事件 | ✅ 使用负载中具有重试计数的平台事件,实施具有指数后退延迟的重试队列(30 秒、2 分钟、8 分钟、30 分钟) |
| 平台 \| 平台事件 | ✅ 在最大重试次数(通常是 5 次)用完后,路由到死信队列和警报操作 |
| 平台 \| 平台事件 | ✅ 在所有相关事件中包含相关 ID;使用平台事件重放 API 重建完整的工作流历史进行调试 |
| 平台 \| 平台事件 | ✅ 利用高用量平台事件可用的 72 小时重放保留窗口(标准用量事件保留 24 小时),通过组织维护窗口或部署停机保留重试队列 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 平台事件 | 无需检查点即可构建多步骤客服人员工作流,当任何中间步骤失败时,需要完全重新执行 |
| 平台 \| 平台事件 | 重试失败的客服人员请求,而不进行指数回退,对恢复服务产生惊人的群效应 |
| 平台 \| 平台事件 | 设计紧密耦合的顺序工作流,其中单个客服人员故障会阻止所有下游处理 |
| 平台 \| 平台事件 | 忽略事件中的相关 ID,使其无法跟踪和调试完整的工作流执行 |
| 平台 \| 平台事件 | ⚠ 在没有最大重试次数或死信队列的情况下无限重试,在永久失败的操作上消耗平台资源 |
## 异步处理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Apex | ✅ 使用批处理 Apex 进行客服人员操作,分析 1,000 多条记录,利用异步调控器限制(200 次 SOQL 查询、150 次 DML 操作、每次执行 60 秒 CPU) |
| 平台 \| Apex | ✅ 将可查询 Apex 链用于需要多次外部 API 调用或延长处理时间的多步骤客服人员工作流;跟踪自定义对象中的进度,以便在失败时恢复 |
| 平台 \| Apex | ✅ 在允许失败的情况下,使用 @future 方法进行轻量级的“救火-忘记”客服人员操作(通知、外部日志、非紧急更新) |
| 平台 \| Apex 作业 | ✅ 通过 Apex 作业页面(设置 → Apex 作业)和 Apex 弯曲队列监控异步处理能力:最多 5 个并发批处理作业(弯曲队列中的额外作业队列,最多 100 个处于保持状态),以及组织范围内的异步 Apex 执行每日限制 (DailyAsyncApexExecutions)(取较大者为 250,000 或 200 × 每 24 小时用户许可证数量),在批处理、可队列、未来和计划 Apex 中共享 |
| 平台 \| 组织 | ✅ 在异步消耗方法限制时发出警报,以在客服人员处理被阻止前启用主动容量管理 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Apex | 在同步客服人员事务中处理 1000 多条记录,而不是移动到批量 Apex,仅在一些记录后达到 100 条 SOQL 查询限制 |
| 平台 \| Apex | 使用可排队链,而不跟踪自定义对象中的进度,防止故障时恢复功能 |
| 平台 \| 组织 | ⚏ 未监控 5 个并发批处理作业限制或共享每日异步 Apex 执行限制(DailyAsyncApexExecutions — 批次、可排队、未来和计划 Apex 之间每 24 小时 250,000 或 200 个用户许可证中较大者),导致客服人员处理静默排队或失败 |
## 客服人员可靠性测试
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 在具有生产规模数据量的完全复制 Sandbox 中加载测试客服人员性能;模拟匹配峰值需求的并发对话 |
| 平台 \| 组织 | ✅ 测量负载下的 p95 和 p99 延迟,识别压力下的性能下降;验证峰值负载下的调控器限制消耗保持在阈值以下 |
| Agentforce \| 客服人员配置 | ✅ 执行故障注入:在断路器监控的服务层模拟 LLM 推理故障,注入 SOQL 异常测试错误处理,损坏响应测试验证逻辑 |
| Agentforce \| 客服人员配置 | ✅ 在测试期间引入数据偏差(包含 10,000 多个子级的客户),以验证分页逻辑处理最坏情况 |
| 平台 \| 平台事件 | ✅ 进行混沌工程:随机禁用平台事件订阅者测试重放恢复,终止异步作业中执行测试检查点重新启动 |
| 平台 \| 组织 | ✅ 随着客服人员的发展,在保持弹性的暂存环境中安排定期混乱日 |
| 平台 \| 组织 | ✅ 执行长时间运行的稳定性测试(72 小时以上)监控依赖于时间的故障:累积错误并逐渐降低性能 |
| 平台 \| 组织 | ✅ 跟踪 CPU 时间趋势和长期堆消耗,检测上下文管理中的逐步降级 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | ⚏ 在数据量减少的部分复制 Sandbox 中进行负载测试,提供误导性信心,因为数据量直接影响客服人员的性能 |
| Agentforce \| 客服人员配置 | ⚠ 仅测试幸福路径,而不故意引入失败来验证断路器、重试逻辑和超时处理 |
| 平台 \| 组织 | ⚠ 仅运行短期测试,缺少仅在持续 72 小时以上运行下出现的依赖于时间的故障(累积错误、逐渐降级) |
| 平台 \| 平台事件 | ⚠ 从不测试平台事件重放恢复或检查点重新启动,保持弹性机制未验证 |
## 客服人员 SLI 监控
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 在构建客服人员之前而不是在生产失败之后建立 SLO;定义每种客服人员类型的对话成功率目标(通常为 95-99%) |
| 平台 \| 组织 | ✅ 跟踪对话成功率作为主要客服人员的可靠性度量:没有错误或超时完成的对话的百分比。将优雅地移交给人员视为成功,因为升级是设计的最终后备层;仅根据度量计算失败或意外的升级 |
| 平台 \| 组织 | ✅ 按客服人员类型和用例分别跟踪成功率,因为客服人员目的之间的成功标准不同 |
| 平台 \| 组织 | ✅ 计算每个客服人员类型的平均故障间隔时间 (MTBF),以识别需要优化投资的最不可靠的客服人员 |
| 平台 \| 组织 | ✅ 测量平均恢复时间 (MTTR);通过平台事件重放和断路器自动恢复,实现比手动干预更快、更不容易出错的恢复 |
| Einstein \| Trust 层 | ✅ 随机客服人员响应示例,根据 Data 360 源验证索赔,以测量接地精度;调查准确性何时降至 95% 以下 |
| 平台 \| 平台事件 | ✅ 通过订阅者侧日志记录模式监控平台事件重放差距(错过或未送达的事件),该模式将每个事件的重放 ID 和相关 ID 记录到自定义对象 |
| 平台 \| 组织 | ✅ 当任何 SLI 低于其定义的 SLO 阈值时发出警报操作 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 文档 | 构建客服人员,无需先定义 SLO,仅在生产失败后建立可靠性目标 |
| 平台 \| 组织 | 在所有客服人员类型中使用单个聚合成功率,而不是按客服人员类型和用例单独跟踪 |
| 平台 \| 组织 | 仅依赖传统的 Salesforce 监控 (trust.salesforce.com),不跟踪特定于客服人员的 CLI,例如对话成功率、MTBF、MTTR 和基础训练准确性 |
| 平台 \| 组织 | 需要手动干预所有客服人员故障,而不是使用平台事件重放和断路器自动恢复 |
| Einstein \| Trust 层 | ⚠ 从不采样试剂响应进行接地精度验证,允许在生产中检测不到幻觉 |
## 可靠的客服人员设计
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 从初始设计开始,将重试模式、后备链和升级阈值设计到客服人员工作流中,而不是事后考虑 |
| Agentforce \| 操作 | ✅ 在客服人员操作中批量化上下文准备和分页大型记录集合 |
| 平台 \| 平台缓存 | ✅ 在平台缓存中缓存频繁访问的参考数据,减少客服人员上下文准备期间的冗余查询 |
| 平台 \| 比例中心 | ✅ 使用规模中心确定需要优化的资源密集型客服人员操作 |
| 平台 \| 平台事件 | ✅ 使用平台事件作为耐用的重试队列设计自恢复工作流,断路器保护外部依赖性 |
| Agentforce \| 客服人员配置 | ✅ 始终将人工切换作为每个客服人员降解链的最终后备 |
| 平台 \| 组织 | ✅ 当度量下降到 SLO 以下时,监控客服人员 SLI 持续报警 |
| Agentforce \| 客服人员配置 | ✅ 通过适当的监督平衡自主能力:在信心下降或出现边缘个案时,从暂时故障中自我恢复 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 添加可靠性机制(重试、回退、升级)作为事后考虑,而不是从一开始就设计它们 |
| Agentforce \| 操作 | 未批量化上下文准备,导致真实查询模式下的调控器限制失败 |
| 平台 \| 组织 | 未主动监控 API 消耗和平台事件分配,仅在客服人员失败时发现限制 |
| Agentforce \| 客服人员配置 | ⚠ 将无需人工切换的客服人员链设计为最终后备,在用尽所有自动化选项时不保留恢复路径 |
| Agentforce \| 客服人员配置 | ⚏ 为低置信度情况或边缘个案授予客服人员完全自主操作,没有升级阈值 |
# 成本治理和决策 - 模式
了解有关架构良好的[资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html)的更多信息 → [成本监控和治理](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html#cost-monitoring-and-governance)
## 成本监控和可见性
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **设置** → 公司设置 → 系统概览
**报表和仪表板** → 成本利用率文件夹 | ✅ **模式**:创建主管仪表板,显示分布在 1200 个许可证(每周活动 68%)、450 GB 存储(容量 72%)和 15 个 Sandbox(有效使用 11 个)中的 Salesforce 年投资 210 万美元
✅ 仪表板通过操作度量显示无效许可证和未使用 Sandbox 中的 40 万美元优化业务机会 |
| **报表和仪表板** → 投资仪表板
**设置** → 公司信息 | ✅ **模式**:投资仪表板显示按业务部门或成本中心划分的支出、按开发团队划分的 Sandbox 和环境成本、带有利用率度量的附加产品成本
✅ 基于当前增长趋势的项目支出,有助于预算问责和分配讨论 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 仅**会计系统** → 发票记录 | **反模式**:财务团队有显示总支出的发票可见性,但没有显示利用模式或优化业务机会的操作度量
如果没有操作仪表板,就无法识别无效许可证、未使用的 Sandbox 或容量浪费 |
## 预算控制和警报
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **报表和仪表板** → 许可证预算提醒
**设置** → 许可证分配 | ✅ **模式**:许可证预算按部门确定分配目标,并在接近容量时发出警报
✅ 通过 Proactive Monitoring,防止不受控制的配置造成仅在续订时发现的预算超支 |
| **设置** → 存储空间使用情况 → 提醒规则
**流** → 存储警告自动化 | ✅ **模式**:存储利用率达到 70% 的自动警报触发器,在达到限制之前提供 4 个月的准备时间来实施归档策略
✅ 通过具有足够响应时间的主动通知,防止紧急数据删除或昂贵的超额费用 |
| **系统概览** → API 使用警报
**事件监控** → API 阈值警告 | ✅ **模式**:API 预算根据限制跟踪消耗,并在示例利用率阈值时发出警报,例如 70% 和 85%
✅ 在限制导致集成失败或用户中断后,启用主动优化,而不是反应性应急响应 |
| **设置** → Sandbox 管理 → 预算控制
**流** → Sandbox 请求批准 | ✅ **模式**:Sandbox 预算通过其他环境的分配限制和审批流程来控制环境的扩散
✅ 防止团队在没有正当理由的情况下创建向永久状态过渡的无限临时环境 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **无预算控制** → 不受控制的支出 | **反模式**:没有许可证预算或批准工作流,允许在没有支出模式可见性的情况下在部门间无限制地配置
⚏ 当由于不受控制的增长导致总支出超过计划投资 30-40% 时,续订时发现的预算超支 |
| **无存储警报** → 反应性超额 | **反模式**:在续订协商期间发现的存储过量,需要立即以保费价格购买,而没有时间进行归档评估
⚠ 缺少可在超额发生前实施归档的提前警告,导致成本增加 2-3 倍 |
## 成本分配和按存储容量使用计费
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **报表和仪表板** → 显示报表
**报表** → 按业务部门划分的成本 | ✅ **模式**:季度展示报表显示 Sales Cloud 消耗 45% 的许可证投资,Service Cloud 30%,运营 25%
✅ 支持主管讨论投资分配是否符合业务价值优先级和战略重点领域 |
| **财务系统** → 按存储容量使用计费分配
**报表** → 部门成本分配 | ✅ **模式**:分配规则适当地分配成本:按用户部门分配的许可证成本,按拥有开发团队分配的 Sandbox 成本
✅ 按消耗集成服务的业务流程分配的集成成本,按请求项目资金来源分配的开发成本 |
| **报表和仪表板** → Sandbox 成本报表
**设置** → Sandbox 使用情况(按团队) | ✅ **模式**:Sandbox 和环境成本由拥有环境管理直接问责制的开发团队分配
✅ 团队看到他们的 Sandbox 投资支持有关环境请求和生命周期管理的明智决策 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **仅限 IT 预算** → 没有业务部门可见性 | **反模式**:分配到 IT 预算的所有 Salesforce 成本,没有业务部门可见性
业务利益相关者将平台视为“免费”,并在没有成本意识或投资优先级讨论的情况下提出请求 |
| **无使用属性** → 无法优化 | **反模式**:总支出可见,但无法归因于做出优化决策的业务部门、项目或团队
⚠ 无法识别哪些投资交付价值,哪些消耗预算而没有成比例的回报 |
## FinOps 和成本意识文化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **协作** → FinOps 团队
**会议** → 每月成本审核 | ✅ **模式**:财务、架构和业务利益相关者之间的跨职能协作确保成本决策在考虑支出影响的同时考虑业务价值
✅ FinOps 将财务专业知识带到架构讨论,将技术理解带到预算规划,创建平衡的决策 |
| **日历** → 优化审核
**进程** → 常规节奏 | ✅ **模式**:通过每月异常审查、每季度利用率审计和每年全面 TCO 评估,持续优化节奏
✅ 定期审核周期防止成本漂移,并通过系统分析验证支出增长与业务价值增长是否对应 |
| **工具** → 许可证成本计算器
**架构** → TCO 模型 | ✅ **模式**:FinOps 团队为架构师提供许可证成本计算器,显示不同许可证类型选择的总拥有成本影响
✅ 在架构阶段支持成本感知的设计决策,而不是在部署后发现更改成本高昂的成本 |
| **培训** → 成本意识计划
**文档** → 成本影响指南 | ✅ **模式**:成本意识教育确保团队了解架构决策如何影响总拥有成本
✅ 架构师设计更好的解决方案来平衡能力和投资;开发人员编写更高效的自动化,遵守调控器限制和 API 消耗 |
| **自动化** → 成本监控脚本
**仪表板** → 自动生成的报表 | ✅ **模式**:自动监控利用率、优化业务机会和支出报表减少了手动工作
✅ 具有组织复杂性的规模,没有线性人数增长,能够在不断增长的平台足迹中实现成本意识 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **仅限年度** → 无反馈循环 | **反模式**:成本可见性仅限于年度续订讨论,不提供反馈循环
架构团队无法在更改成本最低时了解或优化设计阶段的支出模式 |
| **孤岛决策** → 无跨职能输入 | **反模式**:在没有资金投入的情况下做出的架构决策,在没有技术理解的情况下做出的预算决策
在没有业务理由或预算削减的情况下,导致解决方案超出预算,从而消除了提供关键价值的能力 |
| **免费教育** → 不知情的决策 | **反模式**:团队在没有了解成本影响的情况下做出架构决策,因为没有培训或可见性
⚠ 通过数千个微观决策累积废物,这些决策看似微不足道,但却增加了大量支出 |
## 架构审查成本集成
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **文档** → 架构决策记录
**流程** → ADR 模板 | ✅ **模式**:客户入口网站的架构决策记录包括许可证分析:10,000 个拥有 Customer Community Plus 许可证的外部用户(每个用户每月 6 美元 = 每年 720 万美元)
✅ 与带有 API 集成的自定义 Web 应用程序进行比较(初始价值 250 000 美元 + 年度维护价值 50 000 美元),推荐具有 2 年投资回报的自定义应用程序 |
| **治理** → 架构审查委员会
**流程** → 成本审查条件 | ✅ **模式**:架构审查委员会包含成本视角以及功能和非功能需求,从而做出更一致的投资决策
✅ 成本是架构决策的一个输入,确保组织在重要的功能上进行适当投资,同时避免浪费 |
| **文档** → ADR 成本部分
**模板** → TCO 预测 | ✅ **模式**:在架构决策记录中包含成本影响评估,记录主要设计选择
✅ 对于超过定义投资阈值(10 万美元或组织策略)的解决方案,需要 TCO 预测,并包含书面假设 |
| **流程** → 许可证影响审查
**架构** → 高级功能分析 | ✅ **模式**:在解决方案设计期间评估许可证含义,确定设计是否需要高级许可证或加载项
✅ 在承诺影响 API 消耗或中间件许可要求的模式之前,评估集成成本影响 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **无成本考虑** → 紧急重新设计 | **反模式**:未考虑成本的架构设计,在实施计划时发现建议的方法需要 72 万美元的年度投资
在时间压力下导致紧急重新设计,与从一开始就意识到成本的设计相比,结果较差 |
| **设计后成本发现** → 浪费精力 | **反模式**:在成本分析揭示方法超出预算 3 倍之前完成架构
⚏ 在项目开始时就知道的预算限制范围内进行团队重新设计时,浪费了设计精力并延迟了交付 |
## 构建与购买决策框架
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **AppExchange** → 解决方案评估
**分析** → TCO 比较 | ✅ **模式**:文档生成解决方案评估:AppExchange 选项,每个用户每月 15 美元(100 个用户每年 18 万美元),而自定义开发,初始构建 8 万美元 + 年度维护 15 万美元
✅ AppExchange 在 5 年内实现突破,部署速度更快,商品功能风险更低 |
| **AppExchange** → 战略与商品
**架构** → 功能分类 | ✅ **模式**:从 AppExchange 购买的商品功能(文档生成、电子签名、地址丰富),解决方案成熟且审核性强
✅ 专有定价算法提供竞争优势 构建自定义,完全控制路线图和差异化 |
| **电子表格** → 3-5 年 TCO 模型
**分析** → 成本预测 | ✅ **模式**:构建 TCO 模型,预测 3-5 年的总成本,揭示初始费用之外的完整投资情况
✅ AppExchange 支持复合年度订阅,但包含维护;自定义需要一次性开发,外加 15-20% 的年度维护 |
| **集成分析** → 自定义与平台
**TCO** → 集成比较 | ✅ **模式**:自定义集成开发:15 万美元的初始构建 + 3 万美元的年度维护 + 团队学习曲线与 MuleSoft 许可证:每年 75 万美元 + 更快的集成交付
✅ MuleSoft 在所有集成中提供可重用的模式,随着产品组合的增长降低每个集成的成本 |
| **文档** → 构建与购买 ADR
**流程** → 评估框架 | ✅ **模式**:架构决策记录文档构建与购买评估,其中包含对战略价值、TCO、时间线、能力和退出成本进行加权的评分矩阵
✅ 创建审计跟踪,以便在需求变化或供应商情况发生变化时进行未来重新评估 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **始终构建** → 浪费开发 | **反模式**:构建自定义文档生成解决方案,因为“我们有开发人员可用”,无需建模 5 年 TCO
⚠ ️ AppExchange 为商品功能提供了更好的价值;自定义开发将容量浪费在无区分的功能上 |
| **始终购买** → 缺少差异 | **反模式**:从 AppExchange 购买所有功能,包括战略优势,因为“部署更快”
使用相同 AppExchange 解决方案的竞争对手获得了相同的功能,从而消除了平台投资的竞争优势 |
| **单次会议决策** → 无分析 | **反模式**:在没有系统评估或文档的情况下,根据初始成本比较,在单次会议上做出构建和购买决策
缺少战略价值评估、TCO 预测、时间表要求、能力评估和退出成本分析 |
| **不完整成本模型** → 隐藏成本 | **反模式**:构建自定义集成,因为“我们已经有开发人员”而没有建模 5 年的维护负担
维护通常每年消耗初始开发成本的 15-20%,加上初始决策中不可见的平台兼容性工作 |
## 决策框架系统评估
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **流程** → 战略价值评估
**分析** → 差异矩阵 | ✅ **模式**:通过一致的评估将构建与购买决策系统化,防止基于不完整分析的临时决策
✅ 先评估战略价值:核心竞争优势保证定制投资;商品能力有利于以更低的总成本购买成熟的解决方案 |
| **AppExchange** → 解决方案成熟度审查
**分析** → 供应商稳定性检查 | ✅ **模式**:评估可用的 AppExchange 选项,审查解决方案的成熟度、客户评级、ISV 稳定性、功能一致性和定价模型
✅ 客户较少的不成熟解决方案风险较高;优先考虑审核有力且供应商财务状况稳定的成熟解决方案 |
| **电子表格** → 灵敏度分析
**TCO** → 假设文档 | ✅ **模式**:模型 3-5 年 TCO,适用于所有成本类别:许可证/订阅、实施工作量、维护负担、增强开发、平台兼容性
✅ 使用电子表格对假设进行敏感性分析,显示如果增长率或利用率与预测不同,结果如何变化 |
| **时间线** → 市场时机分析
**策略** → 价值实现时间评估 | ✅ **模式**:评估时间线要求,显示自定义开发需要几个月到几年,这取决于复杂性,而 AppExchange 部署需要几周时间
✅ 当竞争压力或业务机会需要即时能力时,尽管长期成本较高,但市场时机可能会推动购买决策 |
| **分析** → 退出成本评估
**风险** → 供应商锁定评估 | ✅ **模式**:评估退出成本和供应商集中风险,询问如果所选选项证明不足,切换的难度
✅ 如果要求发生变化,考虑供应商收购或停产的风险和解决方案的可移植性,宁愿降低退出成本,提供战略灵活性 |
| **能力** → 诚实评估
**团队** → 维护能力审核 | ✅ **模式**:诚实地考虑组织能力,评估自定义解决方案是否可以长期保留
✅ 自定义解决方案需要持续的内部专业知识进行维护和演进;缺乏这种能力的组织应该购买,尽管成本可能更高 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **没有框架** → 不一致的决策 | **反模式**:构建与购买决策因项目团队的首选项而异,没有一致的评估标准
⚏ 一些团队总是在构建,而其他团队总是在购买,这造成了架构上的不一致,以及跨平台的次优投资 |
| **构建一切** → 无差别的努力 | **反模式**:构建一切自定义内容,因为“我们想要控制”,而不区分商品能力和战略优势
将开发能力浪费在成熟的 AppExchange 解决方案以更低的总成本提供的无差别功能上 |
| **仅初始成本** → 不完整分析 | **反模式**:仅基于初始成本比较的决策:"AppExchange 是 20000 美元,自定义构建是 20005 美元,所以我们将构建"
缺少 3-5 年的 TCO,显示自定义解决方案的初始维护成本为 1500 美元 + 每年维护成本为 3000 美元,而 AppExchange 包含订阅中的所有维护 |
| **优化功能** → 失败的维护 | **反模式**:选择自定义开发假设团队可以维护解决方案,尽管没有当前的能力或专业知识
技术债务会随着维护的推迟而累积;解决方案最终变得无法维护,需要昂贵的更换 |
# 持续改进 - 模式
了解有关架构良好的[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)的更多信息 → [持续改进](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html#continuous-improvement)
## 操作度量和 DORA
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| DORA | ✅ 跟踪部署频率;移动最快的团队按需部署,通常每天多次 |
| 平台 \| DORA | ✅ 变更的提前期是从代码提交到生产部署来衡量的;子天的提前期表示高性能交付,子小时表示卓越的能力 |
| 平台 \| DORA | ✅ 变更失败率被跟踪为导致需要补救的生产事故的部署百分比,并保持在较低的水平 |
| 平台 \| DORA | ✅ 衡量失败的部署恢复时间;一小时以下的恢复表示交付成熟 |
| 平台 \| DORA | ✅ 部署返工率作为生产事件导致的计划外部署的比率进行跟踪 |
| 平台 \| DORA | ✅ 度量分为吞吐量(提前期、部署频率、失败部署恢复时间)和不稳定(变更失败率、返工率)因素 |
| 平台 \| 度量 | ✅ DORA 度量持续测量并随时间变化趋势,改进轨迹的权重高于绝对值 |
| 平台 \| 仪表板 | ✅ 在整个组织可见的运营仪表板中跟踪度量,实现运营绩效的透明度 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| DORA | 低部署频率反映了团队避免的部署难题,并造成了一种恶性循环,即不频繁的部署会使每次部署的风险更高 |
| 平台 \| DORA | ⚏ 较长的提前期反映了过多的流程开销、自动化不足或组织功能失调 |
| 平台 \| DORA | ⚏ 更改失败率高反映了测试不足、部署验证不足或更改仓促而没有适当的质量检查 |
| 平台 \| DORA | 恢复时间长反映了部署验证不足、缺乏自动回滚或生产事件的所有权不明确 |
| 平台 \| DORA | ⚠ 高返工率表明生产事件经常推动紧急部署,表明生产前测试、发布验证或更改管理中存在差距 |
| 平台 \| 度量 | 度量被捕获为时间点快照,而不是随时间变化的趋势,隐藏运营性能是改善还是下降 |
## 回顾和审查
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 进程 | ✅ 定期进行冲刺回顾(每次冲刺或每月),为反思创造节奏,而不是等待危机 |
| 平台 \| 进程 | ✅ 回顾使用结构化格式(开始/停止/继续、疯狂/悲伤/高兴、时间线),鼓励参与和可操作的结果 |
| 平台 \| 进程 | ✅ 主持人轮换,以防止任何人主导讨论 |
| 平台 \| 进程 | ✅ 回顾性见解转化为具体的操作项目,包括所有者和完成日期,为每个会话带来少量改进 |
| 平台 \| 进程 | ✅ 跨回顾跟踪操作项目的完成情况,使团队对跟进负责 |
| 平台 \| 操作 | ✅ 运营审查每季度或每月评估一次总体运营状况,检查趋势数据并与目标进行比较 |
| 平台 \| 操作 | ✅ 运营审查让领导层参与进来,以确保为与功能开发竞争的运营改进工作提供资源 |
| 平台 \| 操作 | ✅ 审查包括运营度量:按旅程划分的可用性与目标、按百分位数划分的延迟趋势、按严重性划分的事件计数与平均检测和解决时间、部署频率和成功率,以及运营负载,例如随叫随到的页面和工作时间 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 进程 | ⚠ 追溯等待危机的发生,而不是定期发生 |
| 平台 \| 进程 | ⚠ ⸏ 回顾会产生冗长的讨论,但没有行动,浪费时间并滋生犹 ⁇ |
| 平台 \| 进程 | 操作项目的定义没有所有者或完成日期,因此讨论了改进,但从未实施 |
| 平台 \| 进程 | 操作项目完成情况永远不会跨回顾跟踪,导致跟进未知 |
| 平台 \| 操作 | ⚏ 运营被视为仅在危机期间受到关注的不可见后台工作,没有定期的业务审查 |
| 平台 \| 操作 | 运营审核缺乏领导参与,因此改进工作在资源分配时会败给功能开发 |
## 操作就绪审查
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 操作 | ✅ 运营就绪审查评估新功能或系统在生产发布前是否满足运营要求 |
| 平台 \| 操作 | ✅ 在生产发布新解决方案、主要功能或具有运营影响的架构更改之前进行审查 |
| 平台 \| 操作 | ✅ 审查时间是平衡的,因此实施是足够完整的,可以评估,而不会因为操作问题来得太晚而无法解决 |
| 平台 \| 监控 | ✅ 审核确认有足够的度量,存在失败场景的警报,仪表板显示健康状态 |
| 平台 \| 文档 | ✅ 审核确认常见操作存在运行手册,为响应者记录架构,升级程序清晰 |
| 平台 \| 部署 | ✅ 审核确认部署执行可靠,存在回滚过程,并且部署已在暂存中验证 |
| 平台 \| 性能 | ✅ 审核确认性能目标在现实负载下得到验证,存在增长空间,并评估调控器限制风险 |
| 平台 \| 安全性 | ✅ 审核确认安全审核完成,满足审核要求,访问控制匹配要求 |
| 平台 \| 依赖性 | ✅ 审查确认外部依赖性已识别,集成合作伙伴有服务级别协议,并且存在依赖性失败的后备行为 |
| 平台 \| 治理 | ✅ 生产启动在审核完成时关闭,使运营成为部署要求,而不是尽力而为 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 治理 | ⚏ 新功能在未进行运营就绪评估的情况下发布到生产环境,累积运营债务,使未来实现卓越运营变得越来越困难 |
| 平台 \| 操作 | 审查进行得太晚,因此操作问题就像是部署障碍,并造成跳过修复的压力 |
| 平台 \| 治理 | ⚠ 运营就绪被视为尽力而为,而不是部署要求 |
## 反馈循环和学习文化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 文化 | ✅ 心理安全允许诚实地讨论问题、错误和近乎错误,而不必担心受到惩罚 |
| 平台 \| 文化 | ✅ 心理安全是通过无可指责的死后、庆祝问题发现和通过讨论自己的错误来构建领导力建模的脆弱性 |
| 平台 \| 度量 | ✅ 测量通过运营度量、事件趋势、DORA 指标和用户满意度分数使运营状态可见,从而客观地确定改进工作的优先级 |
| 平台 \| 操作 | ✅ 工程能力专为运营改进、技术减债、工具和自动化投资预留 |
| 平台 \| 操作 | ✅ 反馈环路将运营经验与设计决策联系起来,因此事件推动了架构改进,监控驱动器优化,部署失败推动了测试覆盖率的提高 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 文化 | 缺乏心理安全的团队隐藏问题,直到它们变成灾难,阻止早期干预 |
| 平台 \| 操作 | ⚏ 团队将所有容量花在功能上,而没有时间进行运营改进,累积了技术和运营债务,最终导致危机响应 |
| 平台 \| 操作 | ⚏ 运营经验没有反馈到设计中,因此相同的弱点会重复出现,运营会逐渐降级而不是改善 |
# 数据保护模式
了解有关 Well-Architected [Trust](/docs/architect/zh-cn/well-architected/guide/trust.html) → [数据保护和隐私](/docs/architect/zh-cn/well-architected/guide/trust.html#data-protection-and-privacy)的更多信息
## 数据分类
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 数据分类方案 | ✅ 分类方案按级别记录(公用、内部、机密、受限)
✅ 为每个分类级别提供的业务示例
✅ 符合监管义务的分类方案(HIPAA、PCI DSS、GDPR)
✅ 数据建模人员经过培训,能够在设计期间一致应用分类
✅ 分类为数据建模过程一部分的新字段,不追溯 |
| 字段级分类 | ✅ 在字段级别应用分类,而不仅仅是对象级别
✅ 单个对象中的字段可能有不同的分类
✅ 字段级安全性反映分类差异
✅ 未分类数据默认设置为最高适当保护级别
✅ 分类推动保护控制(加密、访问、保留) |
| 自定义对象和字段 | ✅ 所有自定义对象都有文档化的数据分类
✅ 敏感字段(工资、SSN、PHI、付款数据)分类为机密或受限
✅ 公用字段(公司名称、网站)记录为公用
✅ 字段描述中捕获的分类元数据
✅ 在代码审查和 ARB 期间审查的分类 |
| 标准对象 | ✅ 根据分类方案评估的标准对象字段
✅ 为受限标准字段启用 Shield Platform Encryption
✅ 应用于机密标准字段的字段级安全性
✅ 报表和列表视图已筛选,以防止敏感标准字段泄露 |
| 集成数据 | ✅ 通过实施前分类的集成流动的数据
✅ 外部系统数据敏感度评估并记录
✅ 使用基于证书的身份验证处理受限数据的集成端点
✅ 跨系统边界保留数据分类 |
| 合规性映射 | ✅ HIPAA PHI 字段已识别并标记为受限
✅ 尽可能避免在 Salesforce 中使用 PCI 持卡人数据 — 通过付款网关进行令牌化以减少范围;在必须存储时,使用 PCI DSS 控制下的加密自定义字段
✅ GDPR 个人数据已识别并受隐私控制
✅ SOX 财务数据分类,并须遵守职责分工 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 统一保护 | ⚠ 适用于所有字段的相同保护,不论敏感程度如何
低价值数据过度保护(浪费资源),而高价值数据保护不足
上市公司信息与 PHI 或付款卡数据相同
⚠ ⸏ 每个字段加密“只是为了安全”而没有分类依据 |
| 追溯分类 | ⚏ 部署到生产后分类的数据
通过合规审计而不是设计审查发现的敏感数据
⚏ 仅在安全事件后分类的数据
⚠ 开发期间的默认设置是“我们稍后会找出分类” |
| 仅对象级分类 | ⚠ 当字段具有不同的灵敏性时,整个对象被统一分类
授予对象级访问权限,但没有敏感字段的字段级安全性
客户或联系人对象上的所有字段假定具有相同的分类
对象权限用作混合敏感对象的唯一访问控制 |
| 部落Knowledge | 分类未记录,仅存在于关键人员的 Knowledge 中
开发人员依赖于“只知道”哪些字段敏感
没有可供所有数据建模人员访问的书面分类方案
⚠ 新团队成员未接受分类培训 |
## 加密
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 静态加密 | ✅ 所有数据通过 Hyperforce 在基础设施级别加密
✅ 为受限数据启用 Shield Platform Encryption
✅ 根据查询和唯一性要求选择的加密方案(概率性、确定性、区分大小写确定性)
✅ 在数据模型设计期间评估加密权衡 |
| Shield Platform Encryption策略 | ✅ 大部分受限字段使用概率加密(支持所有查询操作)
✅ 确定性加密用于需要精确匹配 WHERE 子句或唯一性的字段
✅ 区分大小写的确定性用于区分大小写对业务逻辑很重要的情况
✅ 在生产部署前测试的加密字段行为
✅ 对加密字段的公式字段引用已适当处理(如果需要,移到 Apex) |
| 密钥管理 | ✅ 钥匙轮换程序记录并自动化
✅ 灾难恢复演习期间测试的关键销毁场景
✅ 评估客户受管密钥 (BYOK) 的合规性,需要明确的密钥控制
✅ 密钥撤销过程已记录
✅ 根据合规要求管理的加密密钥生命周期 |
| 正在加密 | ✅ 所有集成都需要 TLS 1.2 或更高版本
✅ 基于证书的相互身份验证,适用于处理受限数据的集成
✅ 为 Experience Cloud 站点配置的 HSTS 标头可防止协议降级
✅ TLS 证书过期已监控,并配置自动续订
✅ 弱密码和协议被禁用 |
| 代码和配置 | ✅ 从未嵌入代码、配置文件或版本控制的凭据
✅ 用于集中管理身份验证的命名凭据和外部凭据
✅ 架构中内置的凭据轮换功能
✅ 命名凭据从代码中抽象身份验证,无需更改代码即可实现更新 |
| AppExchange 软件包 | ✅ 安装前评估软件包安全要求
✅ 加密字段仅在业务合理时可供软件包访问
✅ 通过 Event Monitoring 监控的软件包数据访问模式
✅ 需要访问受限数据的软件包,需要增强审核 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 无评估加密 | 在所有字段上启用概率加密,无需测试
生产中发现的关键报表失败,因为加密字段无法聚合
在公式字段源上启用加密,但不了解影响
⚏ SOQL LIKE 查询中使用的字段加密,无需切换到确定性加密 |
| 嵌入凭据 | 嵌入代码、自定义设置或版本控制的凭据
在 Apex 类中硬编码的 API 密钥、密码和证书
提交到源控制存储库的凭据
存储在自定义元数据或自定义设置中的凭据,无需加密 |
| 弱协议或原有协议 | 接受 TLS 1.0 或 1.1(已弃用和易受攻击)
在 JWT 不记名可用时允许用户名-密码 OAuth 流
生产集成中接受自签名证书
禁用证书验证“以使集成正常工作” |
| 无密钥管理 | 启用 Shield Platform Encryption,无需密钥轮换程序
⚠ 没有记录的密钥销毁场景
⚠ 使用的默认密钥没有评估客户管理的密钥的合规性
⚏ 从未测试过的密钥轮换和撤销程序 |
| 过度加密 | ⚏ 公共或内部分类数据加密,增加了成本,但没有好处
在每个字段上启用 Shield Platform Encryption,造成不必要的复杂性
在合规性不需要时使用 BYOK(增加运营开销)
⚠ 在数据分类无法证明的情况下强制加密 |
## 数据屏蔽
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Sandbox 策略 | ✅ 受限数据永远不会进入开发或测试环境
✅ 部分 Sandbox 复制不包括受限对象和字段
✅ Sandbox 模板定义按环境类型包含哪些对象和字段
✅ Data Mask 为需要类似生产的数据的 Sandbox 配置 |
| Data Mask 规则 | Data Mask 规则在保留数据特征的同时模糊敏感字段
✅ 模式保持引用完整性(相同的输入产生相同的屏蔽输出)
✅ 电子邮件地址已屏蔽,但仍为有效测试格式
✅ 电话号码已屏蔽,但保持有效格式
✅ 转移的日期一致保持相对关系
✅ 在现实范围内随机化的数字字段 |
| 合成数据 | ✅ 开发环境使用合成数据生成
✅ 合成数据具有现实特征,可实现有效测试
✅ 开发不需要生产数据
✅ 开发漏斗中的测试数据自动生成 |
| 非生产环境 | ✅ 生产数据从未复制到个人开发人员组织
✅ 使用屏蔽或合成数据的屏幕捕获和演示
✅ 培训环境使用合成数据或严重屏蔽的生产数据
✅ 承包商和供应商对非生产数据的访问权限仅限于仅供业务使用分类 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Sandbox 中的生产数据 | 使用未屏蔽的生产数据刷新的完整 Sandbox,用于开发
⚏ 为方便起见,将受限数据复制到 Developer Sandbox
开发人员被授予对生产数据 Sandbox 的广泛访问权限
使用敏感数据刷新的 Sandbox“因为使用真实数据测试更容易” |
| 无合成数据 | 所有测试仅依赖生产数据
无需为开发环境生成合成数据
假设“我们需要真实数据”,而没有评估合成替代方案
⚠ 自动生成时创建的手动测试数据 |
## 按设计划分的隐私
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 数据最小化 | ✅ 仅收集声明业务目的所需的数据
✅ 每个字段添加都面临着“什么架构决策需要这些数据?”的挑战
✅ 数据不再用于收集目的
✅ 可选字段标记清楚,无需业务证明即可使用
✅ 历史数据保留符合法律依据,而不是“永远保留一切” |
| 目的限制 | ✅ 权限集根据作业功能目的限制数据访问
✅ 市场营销用户无法访问没有文档证明的支持个案详细信息
✅ 销售用户无法访问客户服务历史记录,除非作业需要
✅ 跨职能数据访问需要明确批准和监控
✅ 权限集描述中记录的数据访问目的 |
| 同意管理 | ✅ 在个人级别捕获的同意,用于市场营销、分析、可选处理
同意是粒度的(特定于目的),而不是二元一揽子同意
✅ 同意撤销工作流在集成系统中传播
✅ 使用时间戳、版本和机制跟踪同意决策
✅ 同意 UI 清楚地解释了用户同意的内容 |
| 数据主体权利 | ✅ 访问请求工作流在为您的部署设置的管理法规的期限内提供数据副本
✅ 纠正工作流通过审计跟踪纠正不准确之处
✅ 擦除工作流会在法律允许的情况下删除数据(考虑保留义务)
✅ 可移植性工作流以机器可读的格式导出数据
✅ 定期测试数据主体权利工作流,以验证时间线
✅ 工作流自动化可确保始终满足监管时间表 |
| 隐私控制 | ✅ 隐私控制在技术上强制执行,而不仅仅是通过策略
✅ 共享规则实施目的限制
✅ 字段级安全性保护敏感属性
✅ 审计跟踪捕获隐私相关事件
✅ 隐私控制在 CI/CD 漏斗中验证 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 收集所有内容 | ⚠ ⸏ “收集所有可能的数据,我们有一天可能需要它”方法
添加的字段没有记录的业务目的
⚏ 数据无限期保留,没有保留理由
通过使字段成为必填字段收集的可选数据 |
| 完全同意 | ⚠ ⸏ 出于所有目的的单一“同意条款”同意
⚏ 市场营销同意与单个复选框中的服务交付相结合
⚠ 在目的可分时同意“全有或全无”
同意书以 20 页的条款和条件嵌入 |
| 没有强制执行的策略 | 隐私政策描述了技术上未强制执行的理想实践
依赖用户培训来防止不适当的数据访问
无需实施技术控制即可记录隐私原则
⚠ 假设没有监控和验证的策略合规性 |
| 手动数据主题请求 | 通过手动 IT 票证处理的 GDPR/CCPA 请求需要几个月时间
⚠ 没有关于访问、纠正、擦除、可移植性的文件化程序
错过了部署管理法规集的请求完成窗口
请求在审计期间发现的工作流不存在 |
| 数据共享过多 | ⚠ 授予跨部门的广泛数据访问权限,无需任何正当理由
市场营销允许访问支持个案详细信息
⚏ 销售允许访问客户服务历史,无需记录需求
用于包含个人数据对象的公共读/写 OWD |
## 数据驻留
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Hyperforce 区域部署 | ✅ 在 Hyperforce 区域中配置的组织满足数据驻留要求
✅ 数据存储和处理发生在所需的地理边界内
✅ 在配置前记录并验证区域要求
✅ 必要时通过多组织架构满足多区域要求 |
| 数据流映射 | ✅ 数据流映射数据来源、传输和驻留位置的文档
✅ 根据法规确定和评估跨境数据传输
✅ 国际转让的标准合同条款或具有约束力的公司规则
✅ 评估驻留合规性的数据传输路径,而不仅仅是存储位置 |
| 数据驻留范围 | ✅ 数据存储位置(Hyperforce 区域)
✅数据处理位置(计算区域)
✅ 备份存储位置
✅ 记录和审计跟踪存储位置
✅ 评估跨境数据移动的集成传输路径 |
| 多组织架构 | ✅ 在单个组织内无法满足监管要求时使用的多组织架构
✅ 每个组织在其数据的适当区域中配置
✅ 集成模式遵守数据驻留约束
✅ ADR 记录了运营复杂性权衡 |
| 合规性验证 | ✅ 按管辖区记录的数据驻留要求
✅ Hyperforce 区域选择在配置前根据要求进行验证
✅ 定期审计确认数据保持在要求的边界内
✅ 对居住条例的更改会触发架构审查 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 驻地监督 | 合规审计期间发现的数据驻留违规
⚠ 配置的组织未评估区域要求
假设“云是云”,而不考虑数据位置法规
⚠ 添加的司法辖区未审查居住义务 |
| 忽略居住地的中转 | 仅考虑存储位置,忽略传输路径
⚏ 通过合规边界之外的区域路由的数据
⚏ 在不兼容区域使用的集成中间件
⚏ 存储在与主数据不同区域的备份 |
| 不必要的多组织 | 在具有 Hyperforce 区域的单个组织足够时,使用多组织架构
⚏ 操作复杂性、许可成本和集成开销成倍增加,无需监管
⚠ 多组织实施的“只是为了安全”而没有特定的合规要求
在数据分类和访问控制足够时,默认使用多组织 |
# 更改日志
[查看框架](/docs/architect/zh-cn/well-architected/guide/framework.html),了解适用于 Salesforce 的架构良好的框架。
此页面跟踪对架构中心内容的所有更新。定期查看,以了解最新指导。
## 2026 年 9 月 9 日
**框架**
| 已发布 | 架构良好的框架:Salesforce 上架构质量的原则基础,围绕五个支柱(Trust、可靠性、运营卓越性、资源和成本优化以及公平性)组织,适用于传统和代理解决方案。 |
| 已发布 | 信任:通过分担责任模型,设计安全、合规的解决方案。涵盖身份和访问、数据保护、合规性、安全开发和事件响应。 |
| 已发布 | 可靠性:设计在调控器限制范围内扩展并从中断中恢复的可用、弹性解决方案。涵盖可扩展的数据模型、容错事务、可用性监控和灾难恢复。 |
| 已发布 | 卓越运营:构建通过定义的程序、自动化和持续改进管理的可观察解决方案。涵盖可观察性、部署安全性、DevOps 和事件准备。 |
| 已发布 | 资源和成本优化:设计解决方案,通过有效利用平台容量和对您购买的产品进行有意投资,实现单位成本的最大价值。涵盖 TCO 分析、正确规模、调控器限制和许可纪律。 |
| 已发布 | 公平性:确保解决方案是可访问的、非歧视性的和透明的,并且由人工监督自动决策。涵盖 WCAG 2.2 AA 可访问性、偏见检测、透明决策和道德治理。 |
| 已发布 | 客服人员企业:架构良好的框架的配套,解释当解决方案成为代理时会发生什么变化。涵盖人员、客服人员和平台如何在受管业务系统中协同工作,并指向逐柱指导。 |
| 已发布 | Agentic Enterprise Trust:管理客服人员可以执行的操作,并审核他们执行的操作。涵盖客服人员身份、范围权限和自主操作的全面审计跟踪。 |
| 已发布 | Agent Enterprise 的可靠性:设计可靠的 Agentforce 解决方案,预测非确定性故障。涵盖多层回退链、正常降级和从中断中自动恢复。 |
| 已发布 | 适用于客服人员企业的卓越运营:观察概率客服人员系统,并在客服人员开发生命周期中管理它们。涵盖客服人员的可观察性、跨质量维度的评估以及生命周期治理。 |
| 已发布 | Agent Enterprise 的资源和成本优化:保持客服人员的消费效率,支出与价值保持一致。涵盖批量化操作、严格的上下文窗口、基于消耗的定价模型和可变客服人员工作量的 TCO 建模。 |
| 已发布 | 代理系统的公平性:确保客服人员驱动的体验可解释、可竞争且公平。涵盖对相应客服人员决策的偏见检测、实质性人员监督和 Einstein Trust 层。 |
| 已发布 | 更改日志:跟踪对架构中心内容的所有更新,显示新增内容、更改内容和删除的内容。 |
**基本知识**
**决策指南**
| 增强 | 建筑表单:更新了架构良好的框架引用,从原有受信/容易/适应性模型到当前五支柱分类。 |
| 增强 | 数据集成:更新了架构良好的框架引用,从原有受信/容易/适应性模型到当前五支柱分类。 |
| 增强 | 事件驱动架构:更新了架构良好的框架引用,从原有受信/容易/适应性模型到当前五支柱分类。 |
## 2026 年 7 月 26 日
**基本知识**
| 已发布 | Data 360 文档 AI:从非结构化文档中提取结构化数据并将其基于 Data 360,使文档内容在 Analytics、自动化和 Agentforce 中可用。 |
| 已发布 | Field Service 的架构模式:大规模优化承包商共享和可见性:比较基于区域和基于客户的共享模式,以管理 Field Service 中的外部承包商网络。涵盖了如何平衡平台安全性与计划性能,并使用 Agentforce 为 AI 驱动的计划构建数据基础。 |
**决策指南**
| 增强 | Data 360 交互性:更新为新的决策指南格式;将零复制联合拆分为三种不同的模式(实时查询、加速查询缓存和文件联合),并根据查询频率、延迟和成本提供何时使用每种模式的指导。 |
## 2026 年 7 月 23 日
**基本知识**
| 已发布 | 代理集成模式:集成模式客服人员的架构蓝图取决于。涵盖如何设计处理模糊性、支持安全重复和故障可恢复的集成,以及 Salesforce 平台如何提供每个模式。 |
## 2026 年 6 月 10 日
**参考架构**
| 增强 | 参考图表:完成所有图表的刷新,以提高可访问性和可读性。已更新产品名称。其他增强功能。 |
## 2026 年 5 月 29 日
**基本知识**
| 增强 | 集成模式:传统工具被弃用,而支持流和平台事件。GraphQL 和发布/订阅 API 取代了 SOAP。OAuth 2.0 现在是标准的。Data Cloud 已扩展,包括 Data 360 和 Zero Copy 模式。事件中继将 Salesforce 与 AWS EventBridge 连接起来。 |
| 已发布 | Salesforce 数据同步:Salesforce 上数据同步模式的综合指南。涵盖批量同步、实时同步、双向同步和冲突解决策略,以便在系统中保持数据的一致性。 |
| 已发布 | Salesforce 数据虚拟化:无需将其复制到 Salesforce 即可实时访问外部数据的指南。涵盖 Salesforce Connect、外部对象以及与 Data Cloud 的零复制集成模式。 |
## 2026 年 5 月 06 日
**基本知识**
## 2026 年 5 月 01 日
**决策指南**
| 已发布 | 确定客服人员和传统工作流自动化:在自主客服人员和传统自动化之间进行选择的决策指南。根据用例特征(例如可变性、人为监督和集成复杂性)比较 Agentforce、Flow、Apex 和其他自动化工具。 |
## 2026 年 4 月 10 日
**基本知识**
**决策指南**
## 2026 年 4 月 08 日
**决策指南**
## 2026 年 4 月 02 日
**决策指南**
## 2026 年 4 月 01 日
**基本知识**
| 已发布 | 客服人员中的最终用户身份传播:客服人员对外部系统进行 API 调用时,如何维护最终用户身份上下文。涵盖 OAuth 令牌交换、命名凭据和模式,以确保客服人员使用适当的用户权限而不是服务帐户权限进行操作。 |
## 2026 年 3 月 23 日
**决策指南**
## 2026 年 3 月 19 日
**基本知识**
| 已发布 | Data 360 洁净室:使用 Data Cloud Clean Room 进行隐私保护数据协作的指南。支持跨组织边界的安全数据共享和分析,而不会暴露原始客户数据。 |
**决策指南**
**参考架构**
## 2026 年 3 月 12 日
**基本知识**
**决策指南**
## 2026 年 3 月 09 日
**决策指南**
## 2026 年 2 月 26 日
**决策指南**
| 增强 | 数据集成:添加了 Data 360 和 Data Cloud One 作为数据集成的选项。 |
**参考架构**
## 2026 年 2 月 22 日
**基本知识**
| 已发布 | Data 360 安全架构:保护 Data Cloud 实施的综合指南。涵盖统一客户数据平台的数据分类、静态和传输中的加密、访问控制、审计日志记录和合规注意事项。 |
| 已发布 | Data 360 集成模式:用于将 Data Cloud 与 Salesforce 云和外部系统集成的模式目录。涵盖接收模式、激活模式、联合模式和构建统一客户数据架构的最佳实践。 |
## 2025 年 12 月 22 日
**基本知识**
## 2025 年 12 月 02 日
**基本知识**
| 已发布 | 基于步骤的异步框架:用于在 Salesforce 上运行模块化、可扩展异步作业的框架。通过内置的可观察性、错误处理和恢复功能,提供将长时间运行的流程分为步骤的模式,以满足不断发展的业务需求。 |
## 2025 年 11 月 11 日
**基本知识**
# 架构模式
了解有关架构良好的[资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html)的更多信息 → [优化职责](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html#your-optimization-responsibilities)
此页面为架构问题提供全面的模式指导,包括功能单元、问题分离、状态管理、API 管理和消息传递。这些模式通过对服务边界、数据访问模式和组件责任的审慎设计决策来塑造长期的解决方案成功。
## 功能单元和组件设计
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **Apex 类** | ✅ 服务类遵循单一责任原则,名称明确表示目的(AccountService、OrderProcessor、InventoryManager)。每个服务类关注一个域或业务功能。服务类中的方法在 20 行下具有单一、集中的责任。 |
| **触发器** | ✅ 触发器委派给处理程序类,而不是直接包含业务逻辑。触发器处理程序模式与上下文中明确的方法名称一致使用 (handleBeforeInsert、 handleAfterUpdate)。处理器类按触发事件组织逻辑,每个方法具有一个责任。 |
| **Lightning Web组件** | ✅ 组件遵循单一责任原则,配置界面清晰。每个 LWC 关注一个 UI 问题(数据显示、用户输入、导航)。为组合设计的组件,而不是单片实施。 |
| **服务层** | ✅ 服务类封装了独立于入口点的业务逻辑(触发器、API、流、批次)。同一个服务类处理多个调用上下文,没有重复。服务层将业务规则与演示和数据访问问题分开。 |
| 可**重用组件** | ✅ 设计用于跨多个项目和团队重复使用的组件。使用自定义元数据类型的配置驱动的行为支持无需代码部署的行为更改。可调用操作将 Apex 逻辑公开为可用于流和外部编排的声明性构建块。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **上帝类** | 避免在一个类中累积过多的责任。将大类(>500 行)拆分为具有单一责任的重点类。当类处理多个不相关的问题时,重新组织它们(OrderProcessor 不应该也处理电子邮件发送和报告)。 |
| **混合关注** | 避免在单个类中混合触发器逻辑、业务规则和数据访问。在控制器中将演示逻辑与业务逻辑分开。将集成问题与核心域逻辑分开。 |
| **触发器中的触发器逻辑** | 避免直接在触发器文件中嵌入业务逻辑。请勿将 300 多行触发器与嵌套条件一起使用。始终通过触发器上下文委派给具有明确方法组织的处理程序类。 |
## 分离问题
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **业务逻辑** | ✅ 业务规则集中在服务类中,而不是分散在触发器、控制器和批处理类中。无论记录如何进入系统,域类都一致地封装了记录级行为(验证、默认值、派生值)。逻辑通过服务层重复使用,而不是在入口点之间重复。 |
| **数据访问** | ✅ 在存储库或选择器模式类后抽象的数据访问。SOQL 查询集中在选择器类(AccountSelector、OpportunitySelector)中,确保字段列表和 WHERE 子句的一致性。存储库模式支持使用模拟数据源进行测试,而无需更改业务逻辑。 |
| **界面合同** | ✅ 组件通过显式接口进行通信,而不是实施细节。Apex 接口定义了图层之间的合同。自定义元数据配置定义了行为边界。平台事件提供生产者和消费者之间的消息传递合同。 |
| **模块边界** | ✅ 边界上下文为数据模型和业务规则定义了明确的所有权边界。每个模块都有自己的数据、自动化和业务逻辑。模块通过定义的 API 进行交互,而不是直接共享数据库对象。文档清楚地标识了哪个团队拥有哪些对象和服务。 |
| **依赖流** | ✅ 依赖性单向流动(演示 → 业务 → 数据)。核心业务逻辑不依赖于任何外部因素,从而实现独立演进。基础设施问题(日志、缓存、外部 API)取决于通过接口的业务逻辑,而不是相反。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **逻辑复制** | 避免在触发器、API 端点和批处理类之间重复业务逻辑。集中到服务层,并在入口点之间重复使用。每当相同业务规则出现在多个类中时,提取到共享服务。 |
| **分散的数据访问** | 避免 SOQL 查询分散在字段列表和 WHERE 子句不一致的触发器、控制器和批处理类中。在选择器类中集中查询,确保模式一致,并在一个位置启用 LDV 优化。 |
| **触发器中的业务逻辑** | 避免验证规则、字段计算和工作流编排直接嵌入触发器代码。移动到服务类或域类。保持触发器精简,仅关注委派给适当的处理程序。 |
| **控制器中的业务逻辑** | 避免 Aura/LWC 控制器方法中的复杂计算、验证或数据操纵。控制器应编排对服务层的调用,而不是直接实施业务规则。 |
| **循环依赖性** | 避免带有循环依赖性的软件包或类,其中 A 依赖于 B,B 依赖于 A。通过将共享的关注提取到单独的模块中,颠倒依赖方向,或使用事件驱动的通信来打破耦合来解决。 |
## 状态管理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **平台缓存(组织分区)** | ✅ 组织分区中缓存的频繁访问参考数据,包括自定义元数据查找、选项列表值、配置设置和昂贵操作的计算结果。根据数据波动性配置的默认 TTL(每月更改参考数据的小时数,频繁更新配置的分钟数)。缓存密钥策略可防止不同数据类型之间的冲突。 |
| **平台缓存(会话分区)** | ✅ 存储在会话缓存中的用户特定首选项、计算个性化数据和会话范围状态。会话缓存不用于应在用户之间共享的数据。缓存无效策略会适当处理用户首选项更新。 |
| **Lightning数据服务** | ✅ LDS 为 Lightning Web 组件提供自动客户端记录缓存。标准 CRUD 操作使用 LDS,而不是自定义 Apex 控制器。LDS 消除了冗余的服务器往返,并提供乐观的 UI 更新。组件利用跨页面的共享 LDS 缓存。 |
| **自定义元数据类型** | ✅ 配置和行为规则存储在自定义元数据类型中,而不是硬编码在类中。可通过更改集或源驱动的开发跨环境部署的自定义元数据。对自定义元数据的更改不需要完整的部署周期。在平台缓存中缓存自定义元数据查询以提高性能。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **循环中的查询** | 避免在迭代循环中执行 SOQL。在循环外部的单个 SOQL 语句中查询所有需要的记录。按父级 ID 将结果组织到地图中,以便在迭代期间查找。这是最常见的 Salesforce 反模式。 |
| **重复查询** | 避免每次事务多次查询相同的自定义元数据、自定义设置或引用数据。查询一次,缓存在平台缓存或事务静态变量中,跨事务重复使用。 |
| **缺少缓存策略** | 避免在没有缓存的情况下重复查询频繁访问的参考数据。为自定义元数据、配置和计算结果实施平台缓存。根据数据波动性定义适当的 TTL。 |
| **无无效缓存** | 避免缓存数据而不考虑无效策略。定义适合更新频率的缓存 TTL。如果仅使用 TTL 是不够的,则在源数据更改时实施手动缓存清除。 |
| **非受管会话状态** | 避免在没有验证的情况下假设会话状态在页面导航中持续存在。Lightning 组件应处理页面加载时的状态刷新。使用 Lightning 数据服务进行自动状态同步。 |
## 架构策略和规划
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **解决方案架构规划** | ✅ 在重大构建投资之前进行架构规划,包括需求分析(功能和非功能)、预期数据量的调控器限制分析、适合需求的模式选择以及定义主要组件和界面的组件设计。 |
| **设计模式选择** | ✅ 经验证的 Salesforce 设计模式始终适用:用于业务逻辑重用的服务层模式、用于数据访问抽象的存储库/选择器模式、用于可交换算法的策略模式、用于记录级行为的域模式、用于一致触发器组织的触发器处理程序模式。 |
| **架构决策记录** | ✅ 版本控制中存储的 ADR 记录了重要的架构决策。ADR 捕获上下文(业务驱动因素、技术约束)、决策(选择的内容)、考虑的替代方案(为什么其他人拒绝)和后果(权衡、技术债务、重新访问触发器)。 |
| **构建与购买评估** | ✅ AppExchange 评估在自定义开发决策之前使用总拥有成本分析。评估标准包括战略价值(竞争优势与商品)、TCO 比较(构建工作量、维护、升级成本)、集成复杂性和退出成本(如果解决方案被证明是不够的)。 |
| **州长限制分析** | ✅ 架构规划确定了给定预期数据量和事务模式时,哪个调控器限制最约束设计。在峰值条件下,设计为消耗小于任何单个调控器限制的 80% 的事务。为增长、未来功能和意外使用模式构建的利润。 |
| **风险评估** | ✅ 为推进平台边界的架构方法识别的技术风险。为每个重大风险定义的缓解策略。原型或概念验证工作会在完全构建承诺之前验证高风险技术方法的假设。 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **无计划** | 避免在没有分析数据量、调控器限制影响或模式选择的情况下开始构建。架构规划研讨会应确定关键约束,选择模式,并在构建开始前根据调控器限制进行验证。 |
| **未记录的决定** | 避免在会议中做出架构决策,而不抓住上下文、理由、替代方案和后果。使用存储在版本控制中的架构决策记录为未来的团队成员保留决策上下文。 |
| **无构建与购买分析** | 避免在没有 AppExchange 评估的情况下构建自定义解决方案。在自定义开发前,评估前 3-5 个相关软件包。比较 TCO,包括实施工作量、维护、升级成本和退出成本。 |
| **工程不足** | 避免仅为当前数据量设计,而不考虑增长预测。预测 2-3 年内的数据增长。设计针对 5-10 倍当前卷进行选择性验证的查询模式。为增长构建架构利润。 |
## 打包和模块化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **第二代受管软件包 (2GP)** | ✅ 2GP,用于需要命名空间隔离、AppExchange 分发和 IP 保护的新受管软件包。带有模块化应用程序开发的源驱动的开发工作流。明确管理的软件包依赖性。使用语义版本发布的版本。 |
| **解锁的软件包** | ✅ 解锁软件包,用于需要模块化且没有命名空间约束的内部企业应用程序。没有依赖于组织的工件的软件包的独立部署。为正确部署顺序跟踪软件包依赖性。为内部软件包定义的版本策略。 |
| **模块边界** | ✅ 为每个软件包定义明确的所有权边界。每个软件包都有自己的数据模型、业务规则和自动化。软件包通过定义的界面进行交互,而不是直接的对象访问。文档标识软件包所有权和软件包间合同。 |
# 架构良好的框架
Salesforce 良好架构框架为架构师提供了共同的原则性基础,以做出有助于解决方案随着时间的推移取得成功的决策。它围绕五个支柱进行组织 — Trust、可靠性、卓越运营、资源和成本优化以及公平性 — 每个支柱都涵盖了从初始设计到长期运营和发展的解决方案生命周期的每个阶段中都很重要的质量维度。
该框架解决了架构师今天面临的现实问题:在受管业务系统中一起工作的人员、客服人员和平台。一个安全但在负载下易碎的解决方案,或者一个高效但在决策上不透明的解决方案,其架构并不好。这五个支柱相互协作,确保将质量作为一个整体对待,而不是作为一份独立关切的核对清单。
在设计审查、权衡对话和持续治理期间,架构师将框架用作一致的镜头。它没有规定一个正确答案。它为您提供了正确的问题、正确的模式和跨团队使用的常用词汇。
| [查看变更日志](/docs/architect/zh-cn/well-architected/guide/change-log.html),以查看架构中心文档的最近更新。 |
| :---- |
## 什么是架构良好的框架
Salesforce 良好架构框架是构建于 Salesforce 平台的解决方案的架构质量的意见指南。它编纂了原则、模式和权衡,将按比例调整的解决方案与累积技术债务或迫于压力而失败的解决方案区分开来。
该框架围绕五个支柱组织。每个支柱都定义了质量维度,阐明了核心设计原则,确定了共同的模式,并为传统平台功能和客服人员 AI 工作负载提供了明确的指导。这些支柱共同全面地涵盖了在 Salesforce 上构建良好内容的含义。
此框架不是产品手册或实施指南。它是一个架构决策框架 - 一种考虑质量的方式,无论解决方案使用哪些云、功能或工具,它都适用。
## Salesforce 为何需要自己的框架
来自超大规模云提供商的行业框架提供了有价值的一般指导,但它们主要是针对云基础设施和运营问题构建的,例如虚拟机、网络、存储和计算。Salesforce 架构师面临不同的限制和功能:具有调控器限制的多租户平台、Customer 360 中数十年的业务逻辑、复杂的集成解决方案、声明自动化、元数据驱动的配置和受管共享模型。这些以通用云指导无法解决的方式塑造了每个架构决策。
转向自主客服人员会引入更多注意事项。推理和行动的客服人员引入了非确定性、概率推理和人类在环监督模式,而早期框架最初没有涉及这些模式,尽管通用框架已经开始通过专用的 AI 镜头扩展到这一领域。Salesforce 架构良好的框架通过统一的镜头解决了传统平台架构和客服人员系统的问题。
## 谁应该使用此框架
此框架为 Salesforce 平台上负责架构质量的任何人提供服务:
- 设计新解决方案或扩展现有解决方案的 **Salesforce Architects**
- **Salesforce 管理员**配置和保护运行这些解决方案的组织
- **开发主管**为其团队建立标准和模式
- **顾问和合作伙伴**就平台最佳实践向客户提供建议
- **AI 和客服人员**专家构建和管理自主客服人员系统
无需此前在客服人员 AI 方面的专业知识。所有架构师都可以访问该框架,同时为从事自治系统前沿工作的人员提供了深度。
## 如何使用此框架
### 读取顺序
没有单一的正确读取顺序。根据您的角色和即时需求选择:
- **如果您是该框架的新用户:**请仔细阅读此概览文档,然后探索与当前项目最相关的支柱。
- **如果您正在设计新解决方案:**从 Trust 和可靠性开始(不容商榷的基础 ) , 然后解决卓越运营(您将如何操作它 ) 、 资源和成本优化(您将如何维护它)以及公平性(您将如何确保它公平地为所有用户服务 ) 。
- **如果您正在构建代理解决方案:**请先阅读[客服人员企业概览](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise.html),了解全面的客服人员架构指导。然后,阅读基础模式的核心支柱文档(上文链接),这些基础模式是客服人员解决方案所基于的分担责任模型、调控器限制、监控工具、TCO 建模、可访问性标准。最后,参考客服人员企业支柱变体(从每个支柱链接),了解每个质量维度上特定于客服人员的叠加。
- **如果您正在进行设计审查:**将支柱文档用作结构化审查核对清单。架构良好的解决方案对每个相关支柱中的关键问题都有明确的答案。
### 将框架应用于权衡决策
最重要的架构决策涉及支柱之间的权衡。该框架帮助您明确这些:
- **Trust与资源和成本优化:**加密和审计日志记录会消耗资源。该框架帮助您确定 Trust 要求在哪里是不容置疑的,哪里是您有灵活性的。
- **可靠性与资源和成本优化:**可用性越高,成本越高。SLO 定义帮助您将投资与实际业务需求相匹配,而不是默认设置为最大冗余。
- **卓越运营与速度:**全面的可观察性和测试需要时间来实施。该框架帮助您确定风险简档的最低可行可观察性。
- **公平与自主:**更大的客服人员自主权提高了效率,但产生了公平风险。以人为本的模式有助于您找到每种决策类型的正确平衡。
这些权衡没有普遍的答案。该框架帮助您提出正确的问题,并有意识地做出权衡,而不是在生产中发现它们。
## 框架原则
架构良好的框架本身在设计时考虑了这些原则:
- **特定于平台但与技术无关:**指导解决了特定于 Salesforce 的约束(管理者限制、多租户架构、元数据驱动的配置),而没有规定特定的产品或功能。架构师为其上下文选择正确的功能。
- **不带规范性的意见:**该框架对什么是质量采取了明确的立场,但没有规定单一的实施路径。它提供原则、模式和问题,而不是要求。
- **尊重现在的同时向前看:**该框架解决了新出现的模式(智能 AI、自主系统),同时与传统的平台解决方案仍然相关。这两个用例都受益于相同的基本原则。
- **生活,不是静态的:**该框架会随着平台、行业实践和客户需求的变化而变化。变更日志会跟踪更新,以便架构师了解最新指导。
- **在每个阶段均可操作:**无论您是设计新解决方案、进行审查还是改进现有实施,该框架都会提供相关指导。它不仅仅是一个认证核对清单,它还是一个有效工具。
这些原则确保框架在各种架构上下文中仍然有用,同时对架构质量对 Salesforce 解决方案的意义保持清晰一致的指导。
## 五大支柱
每个支柱都涉及建筑质量的基本层面。这些支柱共同提供了全面的覆盖范围 - 没有任何一个支柱本身是足够的,而支柱之间的权衡是最重要的架构决策所在。
### 框架支柱和客服人员企业:协同工作
以下 5 个支柱为**所有** Salesforce 解决方案提供了基本的架构指导 — 传统平台应用程序、集成和客服人员系统。[客服人员企业概览](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise.html)及其伴随的支柱变体提供了特定于客服人员的叠加:客服人员如何构建这些功能,系统自主运行时会发生什么变化,以及受管 AI 所需的架构模式。
**一起使用:**
- 从核心架构模式的支柱指导开始(例如,分担责任模型、调控器限制、监控工具、TCO 建模、可访问性标准)。
- 然后,参考相应的客服人员企业支柱,了解客服人员特定的注意事项(例如,客服人员权限和审计链、编排失败处理、客服人员开发生命周期、令牌优化、客服人员工作单位、可解释性和可竞争性)。
支柱不是“传统”与“代理”,而是代理解决方案所基于的基础架构。代理系统必须满足与任何其他企业解决方案相同的 Trust、可靠性、卓越运营、资源和成本优化以及公平性要求,并包含自主操作的其他注意事项。
此表提供了快速参考。以下是每个支柱的详细指导。
| 支柱 | 它解决了什么问题 | 客服人员角度 |
| :---- | :---- | :---- |
| [信任](/docs/architect/zh-cn/well-architected/guide/trust.html) | 安全、访问、隐私、治理 | 管理客服人员可以执行的操作并审核他们执行的操作 |
| [可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html) | 可用性、恢复、可扩展性 | 处理非确定性、编排失败和客服人员可中断性 |
| [卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html) | 可观察性、DevOps、自动化 | 观察概率系统和管理客服人员开发生命周期 |
| [资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html) | 效率、性能、成本、价值 | 令牌经济性、内存检索和基于消耗的客服人员工作成本 |
| [公平](/docs/architect/zh-cn/well-architected/guide/fairness.html) | 可访问性、透明度、监督 | 可解释性、可竞争性和公平的客服人员驱动体验、偏见 |
### Trust
通过现代安全性、最低权限访问、隐私控制和明确治理,保护您的解决方案、数据和用户。Salesforce 上的 Trust 通过**分担责任模型**:运作Salesforce 保护基础设施和平台,然后在此基础上构建安全的解决方案。您的职责范围:
- 身份和访问权限管理(角色、简档、权限集、MFA、SSO、OAuth)
- 数据治理(Shield Platform Encryption、对象/字段/记录级安全性)
- 集成安全性(API 身份验证、命名凭据)
- 安全开发实践(适用于 Salesforce、静态分析、CI/CD 安全门的 [OWASP 十大](https://owasp.org/www-project-top-ten/)标准)
**对于客服人员解决方案:**在客服人员自主操作时,Trust 要求会扩展到管理允许客服人员执行的操作、审核他们执行的操作以及保护客服人员到平台的边界(客服人员结构、Einstein Trust 层)。见[Agentic Enterprise Trust](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-trust.html)。
要了解更多信息,请参阅[Trust](/docs/architect/zh-cn/well-architected/guide/trust.html)支柱和[Agentic Enterprise Trust](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-trust.html)。
### 可靠性
设计用于持续可用性、从中断中快速恢复以及根据意外需求进行扩展的能力。可靠性要求了解平台保证(多区域基础设施、平台 SLA),同时设计在这些约束下保持可靠的解决方案。支柱涵盖:
- 具有 70% 操作上限指导的调控器限制
- 异步处理模式(批处理 Apex、可排队 Apex、平台事件)
- 用于外部集成的断路器
- 容量规划
- 负载测试
- 多组织模式
- 灾难恢复
- 健康建模
**对于客服人员解决方案:**客服人员驱动的系统引入了概率行为,需要新模式来处理编排故障,需要断路器来处理级联客服人员错误,还需要确定性客服人员图来处理业务结果需要可预测性的问题。请参阅[代理企业可靠性](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-reliability.html)。
要了解更多信息,请查看[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)支柱和[代理企业可靠性](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-reliability.html)
### 卓越运营
将全面的可观察性构建到您的解决方案中,并通过定义明确的程序和自动化来管理它。卓越运营跨越:
- 可观察性(事件监控、Proactive Monitoring、比例中心)
- DevOps 实践(源驱动的开发、CI/CD 漏斗、测试策略)
- 自动化(使用 Flow Builder 声明优先,使用 Apex 编程模式)
- 事件管理(严重级别、随叫随到的轮换、无可指责的事后分析)
- 持续改进(DORA 度量、运营审查)
**对于客服人员解决方案:**当系统行为是概率性的时,可观察性变得更加困难。客服人员开发生命周期 (ADLC) 通过五个阶段提供结构:意见和设计、开发、测试和验证(包括客服人员测试中心对准确性、一致性和指令遵守情况的评估)、部署和发布,以及监控和调整(包括 Agentforce 会话跟踪,以实现端到端的交互可见性)。请参阅[代理企业运营卓越](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-operational-excellence.html)性。
要了解更多信息,请查看[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)支柱和[卓越代理企业](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-operational-excellence.html)。
### 资源和成本优化
通过有效利用您拥有的资源,并有意投资于您购买的资源,为每一美元和每一单位平台资源带来最大的业务价值。在资源方面,这意味着要了解调控器限制(SOQL 查询、DML 语句、堆大小、CPU 时间),并通过 SOQL 优化、异步处理和防止数据偏差在它们中进行设计。在成本方面,这意味着对直接成本(实施、运营、维护)和间接成本(技术债务、治理开销)进行全面的 TCO 建模,这些成本通常超过直接许可证成本。支柱涵盖:
- 代码组织模式(触发器处理程序、服务层、选择器)
- 封装和模块化(受管 2GP 与解锁软件包,两者都是第二代封装类型,LWC 组成)
- 数据生命周期管理(归档策略、流优化)
- 性能监控工具(规模中心、查询计划工具、ApexGuru、Salesforce 代码分析器)
- 构建与购买分析(AgentExchange 评估)
- 许可证和 Sandbox 优化
- 成本监控和治理(仪表板、预算控制、显示与按存储容量使用计费模型)
**对于客服人员解决方案:**客服人员工作流增加了推理步骤、工具调用和数据检索的资源消耗,因此需要优化令牌使用、推理延迟和内存模式。代理系统还引入了基于消耗的成本(灵活信用、推理令牌),这比每个用户许可更难预测。客服人员工作单位 (AWU) 衡量客服人员实际完成的工作(完成的离散任务),而不是原始令牌消耗。请参阅[代理企业资源和成本优化](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-resource-and-cost-optimization.html)。
要了解更多信息,请参阅[资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html)支柱和[代理企业资源和成本](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-resource-and-cost-optimization.html)优化。
### 公平性
确保您的解决方案是可访问的、非歧视性的、包容性的和透明的,并对自动化决策进行适当的人为监督。公平建立在平台基础上。Salesforce Lightning 设计系统(SLDS)为标准组件提供内置的可访问性,而自定义组件需要明确的WCAG 2.1 AA实施(对于[WCAG 2.2 AA](https://www.w3.org/TR/WCAG22/),即截至2024年12月的当前W3C建议,建议进行新的工作)。支柱涵盖:
- 可访问性测试(轴心、sfdx 扫描仪)
- 不歧视模式(OWD、共享规则、带有 Shield Event Monitoring 的 FLS)
- 隐私架构(Data 360 同意管理、字段审计跟踪)
- AI 道德治理(审查委员会、公平大门、监管合规)。
**对于客服人员解决方案:**当客服人员做出影响人员的自主决策时,公平性风险会增加。可解释性(了解客服人员的行为原因)、可争议性(具有挑战性的决策)和人与人(按比例监督)变得至关重要。请参阅[代理企业公平](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-fairness.html)性。
要了解更多信息,请查看[公平](/docs/architect/zh-cn/well-architected/guide/fairness.html)支柱和[代理企业公平](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-fairness.html)。
## 支柱如何相互作用
没有孤立的支柱。一个支柱中的架构决策不可避免地会影响其他支柱:
- 更强的 Trust 控制(加密、审计日志记录)会消耗更多资源,增加成本(资源和成本优化),并增加影响可靠性的延迟
- 更高的可靠性(冗余、多区域)增加了成本(资源和成本优化)和运营复杂性(卓越运营)
- 更全面的公平性执行(人工监督、偏见监控)会降低客服人员的吞吐量(资源和成本优化)
- 更高的运营卓越性成熟度(全面的仪器)可以更好地执行 Trust 和更早地检测公平性问题
这些交互意味着建筑质量始终是一种平衡。该框架帮助架构师了解他们正在交易的内容,并有意进行这些交易。目标不是同时最大化每个支柱,而是为给定解决方案的要求、风险容忍和业务上下文实现正确的质量简档。
分享您对良好架构框架的反馈。
# 模式和反模式资源管理器
经过验证的架构模式 (✅) 和避免的常见陷阱 (⚠⸏),由良好架构框架的六个支柱组织。
---
## Trust
通过现代安全性、最低权限访问、隐私控制和明确治理,保护您的解决方案、数据和用户。
| Trust - 模式和反模式 |
| 身份和访问权限 |
数据保护和隐私 |
合规性和治理 |
| 事件响应 |
分担责任 |
|
---
## 可靠性
设计用于持续可用性、从中断中快速恢复以及根据意外需求进行扩展的能力。
| 可靠性 - 模式和反模式 |
| 可用性和性能 |
可扩展性和容量 |
灾难恢复 |
---
## 卓越运营
将全面的可观察性构建到您的解决方案中,并通过定义明确的程序和自动化来管理它。
| 卓越运营 - 模式和反模式 |
| DevOps 和发布管理 |
自动化和效率 |
可观察性 |
| 事件管理 |
|
|
---
## 资源和成本优化
高效使用资源,最大限度地减少延迟,保持系统的可组合性,随着时间的推移保持性能,并使您的支出与您提供的业务价值保持一致。
| 资源和成本优化 - 模式和反模式 |
| 代码质量和可维护性 |
架构和可编写性 |
许可证优化 |
| 存储和 API |
成本治理 |
代理模式 |
---
## 公平性
确保您的解决方案是可访问的、非歧视性的和透明的,并对 AI 驱动的决策进行适当的人为监督。
| 公平性 - 模式和反模式 |
| 可访问性和用户体验 |
AI 道德和治理 |
---
# 许可证优化 - 模式
了解有关架构良好的[资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html)的更多信息 → [许可和消耗](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html#licensing-and-consumption)
## 许可证大小正确
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 许可证类型与实际用户需求和使用模式匹配(不是职务) |
| 平台 \| 组织 | ✅ 仅访问自定义对象的用户会收到平台许可证,而不是完整的 Salesforce 许可证 |
| 平台 \| 组织 | ✅ 外部用户(客户、合作伙伴、社区成员)使用 Experience Cloud 许可证,而不是内部许可证 |
| 平台 \| 组织 | ✅ 仅需要身份验证而没有数据访问权限的用户会收到身份许可证 |
| 平台 \| 组织 | ✅ 季度许可证审计将仅访问自定义对象的用户识别为平台许可证候选人 |
| 平台 \| 组织 | ✅ 自动季度报表识别 90 天内登录次数为零的用户、仅访问自定义对象的用户以及拥有内部许可证的外部用户,以便进行系统调整大小 |
| 平台 \| 组织 | ✅ 许可证分配根据角色变化进行审查和调整,而不是多年保持不变 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | ⚏ 完整的 Salesforce 许可证根据职务而不是实际的系统使用模式分配给所有员工 |
| 平台 \| 组织 | 仅访问自定义对象的用户会收到完整的 Sales Cloud 或 Service Cloud 许可证,而不是 Platform 许可证 |
| 平台 \| 组织 | 外部用户消耗内部许可证容量,而不是 Experience Cloud 许可证 |
| 平台 \| 组织 | ⚏ 初始部署期间的许可证分配集在三年内保持不变,尽管角色发生了变化 |
| 平台 \| 组织 | ⚠ 从未进行许可证审计;40% 的许可证未使用或未充分利用 |
| 平台 \| 组织 | 每月登录次数少于 的用户不会识别为许可证回收的候选项 |
## 附加产品投资
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 安全性 | ✅ Shield 组件(平台加密、事件监控、现场审计跟踪)会根据它们是否满足特定的合规需求进行单独评估 |
| Data 360 \| 架构 | ✅ Data 360 投资基于对跨系统身份解析、实时客户数据访问或细分激活的要求 |
| AI \| 业务 | ✅ AI 投资要求在定义的测量期内展示 ROI,而不是假设未指定的值 |
| 平台 \| 行业云 | ✅ 根据自定义开发成本和上市时间要求评估行业云(金融服务、健康、制造、Net Zero) |
| 平台 \| 行业云 | ✅ Industry Cloud 评估承认标准工作流的实施速度提高了 40-60%,但考虑了自定义,从而节省了时间 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 安全性 | ⚠ 购买所有 Shield 组件时,不评估特定组件是否满足实际合规或安全需求 |
| Data 360 \| 架构 | 购买 Data 360 时没有评估更简单的集成方法是否满足要求 |
| AI \| 业务 | AI 投资缺乏可衡量的业务价值度量或 ROI 演示 |
| AI \| 业务 | AI 投资假设价值将在不定义特定测量期或成功标准的情况下交付 |
| 平台 \| 行业云 | ⚏ 购买 Industry Cloud 时,没有与自定义开发成本进行比较,也没有验证上市时间加速 |
## 许可证治理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 配置 | ✅ 新用户配置工作流会自动为仅访问自定义应用程序的用户分配平台许可证 |
| 平台 \| 配置 | ✅ 新用户配置工作流队列外部用户,用于基于电子邮件域的 Experience Cloud 许可证分配 |
| 平台 \| 配置 | ✅ 分配策略根据用户角色和平台使用要求定义许可证类型的明确标准 |
| 平台 \| 配置 | ✅ 批准工作流需要高级许可证类型的业务理由 |
| 平台 \| 配置 | ✅ 在配置时实施适当的许可证分配,而不是追溯性地纠正错误分配 |
| 平台 \| 组织 | ✅ 回收流程自动识别不活动用户(60-90 天),并回收未使用的许可证进行重新分配 |
| 平台 \| 组织 | ✅ 基于登录的报表根据组织策略识别 60-90 天内不活动的用户 |
| 平台 \| 组织 | ✅ 季度回收防止许可证浪费在员工更换角色或离开组织时累积 |
| 平台 \| KPI | ✅ 使用率监控仪表板跟踪登录频率、功能使用模式和许可证类型适当性 |
| 平台 \| 业务 | ✅ 与业务领导共享利用率数据,以在续订计划期间做出数据驱动的许可证投资决策 |
| **报表和仪表板** → 许可证利用率仪表板
**设置** → 用户 → 活动用户 | ✅ **模式**:许可证利用率仪表板显示活动许可证与非活动许可证、登录频率分布、按许可证类型划分的功能使用情况和许可证类型分布
✅ 使用率仪表板显示需要审查的非活动用户、过度许可用户和许可证类型不匹配 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 配置 | 许可证分配策略不存在;每个请求都是临时处理的 |
| 平台 \| 配置 | 批准工作流不需要对高级许可证类型进行业务论证 |
| 平台 \| 组织 | ⚠ 不活动用户识别是手动和不常见的,而不是自动化的 |
| 平台 \| 组织 | 许可证回收仅在年度续订期间进行,而不是每季度 |
| 平台 \| 组织 | ⚠ 许可证浪费会随着员工更换角色或离开而没有许可证回收而累积多年 |
| 平台 \| KPI | 使用率监控仪表板不存在;使用模式未知 |
| 平台 \| 业务 | ⚏ 业务领导在续订计划期间缺乏许可证利用率数据的可见性 |
## 合同优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 合同 | ✅ 用户数量承诺由业务计划支持,而不是乐观的预测 |
| 平台 \| 合同 | ✅ 停机坪计划将投资与实际用户加入时间表相匹配,而不是提前为未使用的容量付费 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 合同 | 过度承诺用户计数会立即造成浪费,因为未使用的许可证会消耗预算,而不会带来价值 |
| 平台 \| 合同 | 如果增长预测被证明不正确,签署多年期协议时没有评估灵活性需求 |
| 平台 \| 合同 | 调整时间与业务计划周期不匹配;调整落后于实际人数变化 |
| 平台 \| 合同 | ⚠ 组织携带了 200 个未使用的许可证,为期 18 个月,因为招聘计划会在承诺实现数量折扣后延迟 |
## 版本选择
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 架构 | ✅ 集成架构规划项目 API 消耗,并评估 Enterprise 或 Unlimited Edition 是否提供了更好的 TCO |
| 平台 \| 架构 | ✅ 版本成本比较模型每个用户保费与包含的功能(API 限制、存储、Sandbox 分配、Premier 支持) |
| 平台 \| 架构 | ✅ Edition 决策模型根据两个定价模型预测的使用情况,以及支持未来重新评估的文档化假设 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 架构 | 版本选择根据预算约束默认设置为最高或最低级别,而不分析架构要求 |
| 平台 \| 架构 | 选择 Enterprise Edition 是为了最大限度地减少每个用户的成本,而不会预测集成要求和 API 超额成本 |
| 平台 \| 架构 | ⚏ 部署后,集成要求超出限制,导致 API 超额加上架构返工的成本增加 2 倍 |
| 平台 \| 架构 | ⚏ 版本决策是在没有根据定价模型或文档假设对实际使用情况进行建模的情况下做出的 |
| 平台 \| 组织 | 版本选择仅基于每个用户的年订阅成本,没有建模架构约束 |
## 多组织许可证成本
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 架构 | ✅ 在采用多组织架构之前,评估单组织优化方法(共享规则、权限集、记录类型) |
| 平台 \| 架构 | ✅ 多组织 TCO 模型显示了 2-3 倍的运营成本增长,包括管理、发布管理、监控、事件响应和合规性 |
| 平台 \| 架构 | ✅ 多组织架构仅在监管要求(GDPR 数据驻留、财务分离)抵消增加的成本时采用 |
| 平台 \| 架构 | ✅ 多组织理由文档记录了具有权限边界的单个组织无法满足的真正隔离要求 |
| 平台 \| 合同 | ✅ 多组织许可证成本模型为每个丢失批量定价并需要重复管理许可证的组织建立单独的许可证池 |
| 平台 \| 架构 | ✅ 跨多个实施的多组织运营成本模型并行维护增加了开发和运营工作量 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 架构 | 采用多组织架构,因为业务部门“需要独立性”,无需建模成本倍增 2-3 倍 |
| 平台 \| 架构 | ⚠ 采用多组织时,没有评估具有共享规则的单个组织是否能够以很小的成本满足实际需求 |
| 平台 \| 架构 | ⚠ 多组织 TCO 模型不包括运营成本成倍增长(对于管理员、发布管理、监控、合规性而言是 2-3 倍) |
| 平台 \| 架构 | ⚠ 多组织架构缺乏有据可查的业务理由,证明价值超过永久性和复合成本倍增 |
| 平台 \| 合同 | 多组织许可证成本分析不考虑失去批量定价好处的单独许可证池 |
| 平台 \| 架构 | ⚏ 多组织操作负担未建模;部署后发现跨组织的并行维护 |
## 跨组织集成许可证影响
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 集成 | ✅ 多组织 TCO 包括 MuleSoft 许可(每年 20 万到 20 万美元以上)、集成开发、持续维护和 API 容量规划 |
| 平台 \| 集成 | ✅ 跨组织集成成本建模明确显示 MuleSoft 投资、开发工作和持续运营成本 |
| 平台 \| 架构 | ✅ API 消耗倍增模型:跨组织事务同时消耗多个组织 5-10 次 API 调用 |
| 平台 \| 集成 | ✅ 用于维护跨组织同步参考数据的数据一致性开销包括开发工作、监控和解决冲突 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 集成 | 多组织架构基于许可证成本比较进行批准,无需建模每年 24 万美元的集成成本 |
| 平台 \| 集成 | 跨组织集成成本没有明确建模;单个组织将完全消除这些成本 |
| 平台 \| 架构 | 容量规划不考虑跨组织调用的 API 消耗成倍增长 |
| 平台 \| 集成 | 同步参考数据的数据一致性开销不包括在多组织 TCO 模型中 |
## Sandbox 策略和资源管理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| **设置** → Sandbox → 环境策略
**DevOps** → Sandbox 分配计划 | ✅ **模式**:团队使用 Developer Pro Sandbox 进行模拟数据的功能开发,使用目标客户进行集成测试的部分复制
✅ 保留完全复制,仅用于生产前 UAT 和性能验证,在架构上需要完整数据量时 |
| **设置** → Sandbox → 平衡策略
**财务** → 环境预算 | ✅ **模式**:15 人的开发团队实施平衡的策略,包括 15 个 Developer Pro Sandbox(每月 750 美元)、3 个并行工作流部分复制(每月 900 美元)、1 个 UAT 完全复制(每月 3000 美元)
✅ 每月总计 4650 美元,符合实际开发模式,而不是为理论上的最大并行度过度配置 |
| **设置** → Sandbox 模板 → 数据选择
**设置** → 部分复制配置 | ✅ **模式**:部分复制 Sandbox 模板包含过去 12 个月的业务机会和个案,但不包括归档数据
✅ 提供 5 GB 容量内的代表性测试数据,而不是要求完全复制,通过战略性数据选择实现低成本 Sandbox 类型 |
| **进程** → Sandbox 生命周期
**设置** → 临时环境跟踪 | ✅ **模式**:临时 Sandbox 管理会跟踪为特定项目创建的环境,其中包含记录的删除日期
✅ 实施需要续订理由的到期策略,以维护超出初始范围的临时环境,防止永久状态偏移 |
| **设置** → Sandbox 刷新计划
**日历** → 刷新优化 | ✅ **模式**:刷新节奏优化使 Sandbox 刷新与实际数据新鲜度要求保持一致,而不是任意计划
✅ 当测试模式不需要每月刷新时,每季度完全复制刷新就足够了,为额外的 Sandbox 释放了容量 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| **过度配置** → 浪费的投资 | **反模式**:组织购买了五个完全复制 Sandbox,为每个开发团队提供专用环境
当部分复制满足大多数测试要求时,乘法的成本是原来的 5-10 倍;完全复制应该保留给需要完全生产保真度的场景 |
| **无策略** → 高级默认设置 | **反模式**:15 人团队购买高级策略,其中包含 30 个 Developer Pro 和 5 个完全复制 Sandbox(每月 $18,000),因为“环境越多越好”
⚠ 没有分析表明开发速度受到环境可用性的限制;平衡策略将以每月 4650 美元的速度提供 |
| **未筛选模板** → 强制升级 | **反模式**:部分复制模板包含所有对象,无需筛选,消耗 5 GB 容量,历史数据与测试无关
强制购买完全复制,因为战略数据选择能够以每个 Sandbox 5-10 倍的成本实现部分复制的使用 |
| **Sandbox 蔓延** → 永久临时 | **反模式**:在项目 Sandbox 无正当理由地过渡到永久状态时,临时 Sandbox 激增
⚠ 没有到期策略或续订要求,允许临时环境无限累积消耗预算 |
# 资源和成本优化

## 概览
资源优化和成本优化共同为贵公司实现最大成本价值。Salesforce 管理多租户基础设施,强制执行调控器限制,以保持平台对每个租户公平,并通过许可证和消费信用为访问权限定价。您优化的是您获得的价值:每支出一美元和每单位平台容量返回多少业务成果。资源优化是一种机制:它有效地利用您已经支付的东西。成本优化是结果:它有意将支出导向推动竞争优势的因素。此支柱将它们视为一个决策,因为它们是同一目标的两个视图。
此成本价值视图塑造了您的每个架构决策。当您了解总拥有成本时,您会在能力和投资之间做出更好的权衡。您可以调整解决方案的大小,以满足业务需求,而不是过度配置未使用的功能或对加速价值交付的功能投资不足。许可证、消耗信用、API 调用和 Sandbox 环境都是相同等式的输入。重要的是每个返回的值,而不是登录哪个分类帐。问题从来不是“这是成本还是资源”,而是“这种投入是否有适当的回报?”
忽视这一支柱会产生可预测的后果。公司累积未使用的许可证会消耗预算,而其他功能仍没有资金。低效架构将 API 容量、存储和开发精力浪费在更好的设计可以防止的问题上。随着时间的推移,资源的低效率以可预测的方式特别复杂:
- 随着数据量的增长,性能会下降。
- 当非选择性查询扫描整个表时,几十万个记录会出现查询超时。
- 当解决方案检索不必要的字段时,会出现堆限制异常。
- 当复杂计算同步运行时,会出现 CPU 超时。
- 当团队围绕每个新限制修补时,解决方法成倍增加。
这些故障中的每一个都是可靠性问题和成本问题,因为浪费的计算会消耗您为此付出的容量。最重要的是,团队错过了投资创新的机会,因为预算和工程能力被浪费而不是被战略举措消耗。
经济高效的解决方案通过以下方式实现价值最大化:
- 使用已购买的平台功能
- 使适当规模的许可和消费与实际使用保持一致
- 在承诺采用方法之前,对完整成本进行建模
- 根据业务结果持续监控支出
这些实践更加复杂。将成本意识和资源效率融入设计的团队比在支出已经增长后将优化视为清理工作的团队提供更高的每美元能力。
资源和成本优化直接连接到其他架构支柱。[卓越运营](/docs/architect/zh-cn/well-architected/guide/operational-excellence.html)通过减少手动操作的自动化降低了持续成本。[可靠性](/docs/architect/zh-cn/well-architected/guide/reliability.html)和[信任](/docs/architect/zh-cn/well-architected/guide/trust.html)通过业务连续性保证和监管合规价值证明了优质投资的合理性。这些支柱共同帮助公司自信地投资,因为它们的架构提供了最大的回报。
## 设计原则
使用这些原则来指导您在平台上进行资源和成本优化的架构决策。
- **针对总拥有成本进行优化。**总拥有成本 (TCO) 不仅包括订阅费,还包括消耗信用、实施成本、运营成本、集成费用和变更管理工作。使用 TCO 分析评估决策,以揭示解决方案生命周期内的完整投资情况。有时,较高的前期投资会显著降低持续运营成本,TCO 分析会表现出这种权衡。针对长期价值进行优化,而不是短期成本最小化。
- **将支出与业务价值保持一致。**将每项 Salesforce 投资与可衡量的业务结果联系起来。许可证支出支持通过采用和任务完成来衡量的用户效率。Data 360 投资支持通过转换和客户终身价值衡量的决策。Sandbox 成本资金开发速度通过部署频率和质量来衡量。当支出与价值保持一致时,您会自信地投资于推动成功的因素,并确定不再赚取回报的支出。
- **在平台限制内设计。**调控器限制定义了解决方案可以处理的每个事务。从一开始就将它们视为设计约束,而不是工作的障碍。设计在峰值负载和最大数据量下在限制内舒适运行的事务,并为未来功能、其他已安装软件包和意外数据模式创造利润。在概念限制内设计的解决方案具有可预测的性能,并避免稍后紧急重构。
- **优化您已经支付的资源。**在购买更多容量之前,请最大化已配置平台资产的吞吐量、效率和价值。高效的查询、批量处理记录(批量化)、缓存和严格的数据生命周期减少了解决方案所需的计算、存储和 API 消耗。这种资源效率是推动可持续成本优化的机制:从配置的资源中消除的浪费提高了性能和长期 TCO。
- **适合实际使用的许可和消费规模。**将每个用户与工作所需的许可证类型匹配,并设计自动化和客服人员,以高效调用计量服务。过度发放许可证和不受监督的消费信贷是最常见的、代价最高的废物来源。对角色、登录活动和功能使用情况的定期审计显示了权利化业务机会,以及对信用烧毁的清晰可见性使基于消耗的成本具有可预测性。
- **建立财务管理和成本意识文化。**通过积极监督和共同问责,将 Salesforce 支出作为战略投资进行管理。财务治理将成本效益分析引入设计决策,而不是在部署后发现成本。成本意识是业务利益相关者、架构师和开发人员的共同责任,他们权衡成本影响和功能要求,因此明智的投资决策发生在每个层面,没有集中的瓶颈。
- **实践持续优化。**优化是一个持续的实践,而不是一次性的工作。通过技术和业务利益相关者可访问的仪表板,监控支出和资源消耗。配置当消耗支出达到阈值时触发的警报,以避免失控消耗被忽视。定期检查发现逐渐累积的浪费,验证之前的优化投资是否实现了预期回报,并随着业务优先级和数据量的变化显示新的业务机会。
## 平台资源:Salesforce 管理的内容
了解 Salesforce 的操作有助于您将优化工作集中在您控制的内容上。该平台处理传统 IT 环境中需要专用团队的基础设施级资源管理:
- **多租户资源分配:**Salesforce 确保共享基础设施上所有客户的 CPU、内存和数据库连接公平共享,监控租户消耗,并实施限制,防止任何单个租户降低其他租户的性能。
- **管理者限制架构:**平台强制边界(每个同步事务 100 个 SOQL 查询,10 秒 CPU 时间,6 MB 堆大小)保护所有租户免受资源耗尽的影响。Salesforce 将这些限制校准为多租户基础设施容量。这些限制是架构边界,不是任意限制。
- **查询优化器和执行引擎:**Salesforce 查询优化器生成执行计划,维护数据分布的统计数据,并选择最佳查询路径。标准字段上的平台受管索引加速了常见的查询模式,优化器会自动适应数据量的变化。
- **基础设施扩展:**Salesforce 配置硬件容量,管理数据库集群,分配负载,并根据使用情况的增长扩展基础设施。您从未配置服务器、管理数据库复制或配置负载平衡器。
- **平台性能优化:**Salesforce 持续优化核心平台代码、查询执行、API 响应时间和 UI 框架性能,并通过定期发布提供基础设施改进,无需客户操作。
Salesforce 还管理平台的商业方面,这就是为什么许可和消费与计算和存储属于同一支柱的原因。该平台定义了购买容量的版本、许可证类型、加载项和消费信用模型,并计量了消耗这些信用的使用情况。您设置这些价格并不比配置服务器多,但您可以决定您使用每个服务器的数量:每个用户持有哪个许可证,自动化调用按流量计费服务的效率如何,有多少 Sandbox 保持活动状态。
这些平台操作是您构建的基础。因为 Salesforce 同时管理基础设施和定价模型,所以您的优化工作完全取决于您在它们之上做出的架构决策:您如何高效地使用配置给您的资源,以及您如何有意地引导配置这些资源的支出。
## 优化职责
共享责任模型意味着您在 Salesforce 中创建的所有内容都拥有资源效率。平台资源管理支持您的工作,但不会取代您的优化需求。高效的解决方案会从您已支付的计算、存储和 API 容量中返回更多业务价值,这是保持成本优化可持续性的机制,而不是一次性削减预算。相比之下,浪费的计算消耗了基础设施资源,而没有提供业务价值及其成本复合。随着数据量的增长,性能会可预测的下降,而随着团队在他们本可以设计的限制周围修补,解决方法会成倍增加。
您的优化责任跨越四个相互关联的领域:性能、代码组织、打包和数据。在成为技术性决策之前,每项决策都是按成本计算的价值决策。本节解释了如何做出这一决定,以及它为何如此重要。本节中引用的精确实施模式、代码级模板、设置导航和特定调整阈值位于资源和成本优化模式库中。
### 性能优化
性能优化从您看待调控器限制的方式的转变开始。它们不是工作的障碍。它们是架构约束,当从初始设计开始,它们会产生具有可预测的性能特征的解决方案。每个事务都在固定边界内执行,这些边界的存在是为了在平台上的每个租户之间强制实施公平的资源共享。Apex 事务消耗其 100 个允许的 SOQL 查询中的 95 个查询,这不会为未来的功能、其他团队添加的触发器或意外的数据模式留下任何余地。将事务保持在远低于限制一半的架构师构建的解决方案,可以在限制用尽时在不紧急重构的情况下增长。纪律是,在峰值负载和最大数据量下,在限制范围内很好地设计,这样添加功能或其他软件包的自动化就不会将事务推到边缘。常见且代价高昂的失败:该解决方案完美适用于 Developer Sandbox 中的 10 个记录,但在生产中达到了调控器限制。Developer Sandbox 仅复制配置,不包含数据。针对完全复制 Sandbox 中的实际卷进行测试会在客户之前暴露出可扩展性问题。
#### 查询选择性
查询选择性是决定解决方案是扩展到数百万条记录还是超时数十万条的最大杠杆。选择性查询使用索引有效地定位记录,而非选择性查询扫描整个表,消耗过多的数据库资源,并最终超时。该平台在定义的字段集上维护标准索引,并应用选择性阈值,该阈值在对象超过其前 100 万条记录时变紧。选择性架构意味着在索引字段上作为主要条件进行筛选,并在针对大对象进行部署之前使用查询计划工具进行验证,因为显示高用量对象上的表扫描的查询是等待发生的生产事件。选择性是您不必购买的容量:高效的查询以毫秒为单位返回,并将数据库资源留给您自己的组织中的每个其他租户和所有其他事务。
#### 批量化
批量化是区分大规模工作的 Apex 和达到限制的 Apex 的基本可扩展性模式。反模式(放在循环中的查询或 DML 语句)适用于小记录集,但在批量操作运行时违反调控器限制。补救措施是在循环外部的单个语句中查询所有需要的数据,将结果组织到 ID 键控的映射中,以便在迭代期间快速查找,并使用批处理 DML 处理整个集合。设计每个自动化,以处理标准的 200 个记录触发器批次,而不会接近限制,并且无论生产中的负载如何,相同的代码都会按比例变化。
#### 异步处理
对于不能或不应在用户事务的同步限制内完成的工作,存在异步处理。将该工作移动到异步上下文中大约会将其可用的调控器限制增加一倍,并防止长时间运行的操作阻止用户。这个空间是真实的,但它不是免费的,每当一个限制感觉接近时就达到异步是错误的。异步是一种有意的架构权衡:它引入了最终的一致性,因此工作的结果在请求它的事务中不可见,这迫使用户体验做出不依赖于即时确认的决策。它需要明确的错误处理和监控,因为故障出现在作业日志中,而不是出现在触发它的用户面前。当一个业务操作跨越几个交易时,它会使系统的心理模型复杂化。按成本计算的价值决策是权衡工作真正需要的容量和增加的复杂性,并在工作适合时保持同步。
当异步是正确的调用时,机制之间的选择遵循工作的形状,而不是限制的大小。批次 Apex 适用于*数量*。它通过将数百万条记录分成块来处理它们,每条都有其自己的独立调控器限制 — 这就是为什么数据迁移、数据归档和批量丰富属于这里的原因。可排队适用于*顺序*:它处理超出同步限制但不需要批量规模的多步骤工作流,并且它支持将一个作业与另一个作业链接起来,以处理必须按顺序运行的步骤。平台事件用于*解耦*:生产者在不了解或等待消费者的情况下发布事件。将此模式用于跨系统通知和分离不属于同一事务的工作,并考虑至少一次交付需要幂等订阅者。未来的方法涵盖了简单异步工作与原始输入的狭隘情况,最常见的是从同步触发器调出。它们无法链接或接受复杂对象,这正是它们不是通用异步工作的工具的原因。将异步机制与工作的形状相匹配。否则,您可以用调控器限制问题来换取一致性和监控成本,而成本大于收益。
#### 缓存
缓存会将重复的工作转换为您保留的工作量。平台缓存存储跨事务边界的可序列化数据,因此缓存命中可以避免重新执行产生值的查询或重新计算,直接降低 SOQL 和 CPU 消耗。决定缓存的创建或中断取决于您选择放入缓存的内容和持续时间。缓存读取频率远远超过更改频率的数据,例如自定义元数据、配置和选项列表值,并将生存时间设置为与数据的波动性相匹配,而不是单一的默认值。每月更改的参考数据可以安全地缓存数小时,而一天轮班的配置需要很短的窗口,因此缓存不会提供足够长的过时值。过于激进的缓存以性能为代价来换取正确性风险,而命中率低的缓存消耗存储空间而不返回容量,这就是为什么命中率是需要监控的指标,而不是假设的设置。分区选择是一项安全决策:将组织分区用于跨用户共享的数据,将会话分区用于必须保持隔离的用户范围数据,并且永远不要将个人身份信息放在每个用户都可以读取的组织分区中。Lightning 数据服务将相同的理念扩展到客户端:它在页面上的每个组件之间共享缓存的记录,并消除了冗余的服务器往返。每个缓存命中都是计算和 API 容量,您无需花费,只要它返回的值仍然正确。
#### 数据偏差
数据偏差是记录分配不平衡造成的性能热点。当单个父级记录累积超过 10,000 个子级时,查询性能会下降,并在并发操作期间出现行锁定冲突。阈值是设计信号,不是硬限制。它告诉您在多个父级之间分配负载,使用在任何父级接近边界时提醒的计划作业监控高用量对象,并按父级 ID 对批量负载进行排序,这样并发批次就不会为相同的行而争抢。所有权倾斜,集成用户拥有成千上万条记录,这会产生相同的锁定冲突,应该得到相同的负载分配。
#### 性能工具
Salesforce 提供工具,以在解决方案发展的过程中保持性能特征的健康。规模中心为长时间运行的操作、行锁定竞争和接近限制的事务提供事务级可见性,然后命名所涉及的特定触发器和对象。ApexGuru 将 AI 分析应用于生产运行时间遥测,以在达到规模之前显示反模式,Salesforce Code Analytics 在 CI/CD 漏斗中执行静态分析,因此当查询出现在循环中或检测到其他性能缺陷时,构建会失败。Event Monitoring 揭示了一段时间内的消费趋势,Proactive Monitoring 是一项签名成功计划功能,它不断评估组织的性能和可扩展性风险。
### 代码组织
代码组织是以可维护性表示的成本决策。对于成熟的解决方案,维护通常会消耗大部分开发能力,因此您选择的结构决定了未来工作量的变化,而不是返工。三个模式携带该值的大部分。触发器处理器模式将触发器逻辑集中在处理器类中,并将触发器文件本身减少到最小的委派点,这使得逻辑可独立于触发器上下文进行测试,并为递归控制提供单一主页。服务层模式将业务逻辑封装在类中,该类公开了可从触发器、REST 端点、流可调用或批处理作业调用的操作,因此业务规则存在于一个实施中,而不是在每个入口点之间重复和偏离同步。选择器模式集中了专用类中每个对象的 SOQL,这使得查询调整成为单点更改,并为每个查询提供明确的命名意图。
混合 DML 错误是一个独特的组织风险,值得明确设计。当一个事务在设置对象(例如用户和权限集)和非设置对象(例如客户和自定义对象)上执行 DML 时,就会发生这种情况,因为影响用户访问的设置更改必须在单独的事务中提交。在集成作业、测试设置和用户配置自动化中,故障会大规模出现。架构补救措施是使用异步处理或平台事件跨事务边界分离设置和非设置 DML,设计避免在一个业务步骤中合并两个操作的数据模型,并在测试中隔离设置 DML。
### 打包和模块化
打包选择决定了长期开发成本和您可以在公司内实现的重用。第二代受管软件包提供带有命名空间保护的源代码驱动的模块化开发,是通过 AgentExchange 分发的独立软件供应商 (ISV) 产品的正确选择。解锁的软件包为内部团队提供了相同的模块化和依赖性管理,没有命名空间开销,这适合需要独立部署但没有市场列表的企业应用程序。第一代受管软件包仍在用于现有产品,但缺少使新的模块化开发可维护的源驱动的工作流。
模块化扩展到您构建的组件。使用清晰的属性界面,围绕单一责任设计 Lightning Web 组件,优先考虑组成而不是继承,以便从小型关注组件中组合复杂的 UI,并使用自定义事件进行父级通信,而不是直接联系父级。将可重用 Apex 公开为可调用操作,以便管理员可以从开发人员构建的功能中撰写 Flow Builder 中的自动化,这减少了重复并桥接了声明性和编程性的世界。设计良好的模块化是让功能构建一次并重复使用,而不是在每个需要的地方重新实施和单独维护。
### 数据优化
非受管数据增长是性能逐渐下降的最常见来源,它同时提高了存储成本和 Sandbox 刷新时间。两个决策控制数据效率。第一个是数据模型设计。主-详细信息关系提供级联删除、汇总汇总和数据共享,代价是耦合更紧密。查找以自定义汇总逻辑为代价提供了灵活性,并且您筛选的字段上的谨慎索引策略会随着对象的增长保持查询的选择性。第二个是数据生命周期。定义从创建到归档的完整生命周期,而不是让对象无限累积记录,因为一个在没有归档策略的情况下增长到数百万的对象最终会产生查询超时、非选择性查询和超时的列表视图。
仅在解决合规性后选择归档机制。在选择机制之前,请确认数据驻留、擦除权或保留要求是否限制了您的选择。大对象在插入后无法修改,这使得仅删除已归档个人数据成为影响审计跟踪的删除和重新创建操作。大对象将大量历史数据集存储在独立于标准限制的存储中,适合日常工作不再需要的已完成事务和审计日志。外部存储通过 Salesforce Connect 保持数据可查询,同时减少组织容量,适合灵活的查询模式或与企业数据仓库集成。在对象级别监控存储消耗,以便在增长成为问题之前看到增长,使用 Salesforce Files 而不是原有附件,并根据合规性要求配置每个字段的字段审计跟踪保留,而不是应用浪费存储的一揽子最大值。
## 使用总拥有成本 (TCO) 确定成本
成本优化平衡了业务价值和解决方案的成本,它首先取决于确定准确的成本。为此,请考虑每个成本组件,因为查看单个组件(例如许可证成本)会导致对解决方案实际成本的理解不正确。适度的许可证费用会隐藏实施、运营、集成和变更成本,使其相形见绌。仅对可见数字所做的决定仅使用图片的一部分。总拥有成本是反映全貌的模型。它涵盖了与 Salesforce 解决方案在其生命周期中相关的所有成本,并将其分为直接成本和间接成本,前者与解决方案明显相关,后者真实存在,但容易被忽视。建模都将成本估算转化为明智的架构决策,该决策权衡长期价值,而不仅仅是初始成本。
### 直接成本组件
系统的实施、运行和维护会产生直接成本:
- **许可证和消费成本**是持续订阅费,因版本、用户类型和功能集而异,加上基于消费的信用。版本选择是一项基本的成本决策,因为每个用户的差异很大。消耗成本很难尽早建模,因此在做出设计决策时重新查看这些估计。
- **实施成本**涵盖解决方案的设计、开发、测试、数据迁移和培训。它们主要是一次性的,但会产生与复杂性成正比的持续维护义务。公司系统地低估了实施工作,因为它们侧重于开发,低估了测试和培训的价值。
- **运营成本**包括管理、用户支持、监控、事件响应和操作工具。它们随着解决方案的复杂性而增长,并且在规划中通常不可见,因为它们表现为内部努力,而不是外部发票。
- **维护成本**包括增强、技术债务补救、版本调整和配置更改。对于成熟的解决方案,维护通常会消耗 60–80% 的开发能力,这使其成为最大的持续成本类别。
- **集成成本**包括集成平台许可证、API 消耗、同步开发和持续维护。它们会随着生态系统的复杂性而增长,因为点对点集成维护会随着系统数量的增加而复杂化。
- **变更成本**涵盖业务流程重新设计、变更管理、采用和相关方协调。它们会随着业务单位和区域的拓展而增加,并经常被忽略,因为它们表现为业务团队的努力。
### 间接成本
间接成本在初始规划中不会立即可见,但在解决方案的生命周期中会显著累积,对于成熟的实施,它们通常会超过直接成本。一家只优化其直接成本而忽略间接支出的公司错过了其投资总额的大多数。有几个类别值得明确注意。
组织成本是推动 Salesforce 成功的投资,但不会显示在 Salesforce 发票上。它们包括管理员、开发人员和架构师的内部团队工资、版本控制和 CI/CD 工具等开发基础设施、培训和认证维护以及技能开发,以及分配给维护而不是创新的开发能力的机会成本。最后一个项目很难检测,因为它根本不显示为消耗。它显示为从未发货的创新。
技术债务利息是建筑快捷方式的复合成本。满足启动期限的快捷方式造成了维护负担,可能需要花费数倍于最初的努力来稍后解决,并且每次花费在解决债务上的精力都是一次无法提供新的业务价值的精力。将架构改进推迟足够的时间的团队最终发现他们大部分的能力都用在了维护上,而不是新功能上。
治理开销会消耗审批流程、协调会议和手动审查的时间。治理通过降低风险和一致性提供了真正的价值,但过度治理通过延迟决策和重复工作产生了隐藏的成本,这就是为什么设计系统的目的是促进安全的自主性,而不是要求每次更改都存在集中的批准瓶颈。
未使用的功能会在功能实施但从未完全采用时累积。部分部署的解决方案消耗了持续维护,而没有提供成比例的价值,许可证利用率和功能采用监控显示了进一步投资或停用以重定向容量的能力。
全面的成本可见性需要确定直接行项目和这些间接项目的属性,因为只有整体情况支持正确的投资决策。
### 构建 TCO 模型
在承诺采用方法之前,请为基准和优化的架构备选方案构建 TCO 模型。通过预测 3-5 年成本与文档假设的模型,您可以系统地比较各种选项。对最重要的假设进行敏感性分析,以确定成本估算的差异和边界。计划随着条件的变化重新做出决策。将假设写下来是价值的一部分,因为它使以后的重新评估成为基于证据的比较,而不是新的论据。
### 构建与购买分析
使用全面的 TCO 比较而不是仅初始成本,根据自定义开发评估商业可用的解决方案。构建与购买的决策通过持续订阅费或持续维护义务来塑造长期投资,而这两种途径的投资状况根本不同。
AgentExchange(以前称为 AppExchange)是来自 Salesforce ISV 社区的现成解决方案的主要来源。其投资状况有利于速度和共享维护。部署以周为单位,而不是以可比自定义构建所需的月为单位。供应商无需客户努力即可维护功能,包括平台版本兼容性。现有客户群证明了其功能,从而降低了实施风险。专业化能力受益于供应商领域的专业知识和研究投资,这些投资超过了单个公司单独提供的资金。支持可用性因 ISV 而异,通常具有针对问题的已定义升级路径,并且建模需要持续订阅成本。
自定义开发有利于适应和控制。它精确地与独特的组织要求保持一致,而不会影响通用解决方案模式,完全控制功能和路线图优先级,除了基础平台许可证之外,没有持续订阅,并且可以通过使用相同现成解决方案的竞争对手所不具备的功能来创造竞争优势。权衡利弊在于,公司全权负责维护和保持解决方案与每个 Salesforce 版本的兼容性。
长期 TCO 比较将这些简档转化为决策。现成的解决方案需要支付复杂的年订阅费,但包括供应商提供的维护、增强和兼容性更新。自定义解决方案需要一次性开发投资,但需要持续维护成本,以及发布兼容性的全部责任。项目 3-5 年合计,以便比较反映完整的投资,而不是初始费用,初始费用通常有利于在第一天看起来更便宜的选项。
除了原始成本之外,四个因素决定了构建与购买的决策。
- 战略差异化决定了能力是值得构建的竞争优势,还是购买更好的商品。
- 当立即需要一种能力来捕获业务机会或应对竞争压力时,就需要时间来评估购买的价值,因为大量的自定义功能需要几个月的时间。
- 组织能力倾向于仅在存在有能力的内部团队并有能力长期维护和发展解决方案的情况下进行建设,而倾向于在缺乏这种能力时进行购买。
- 退出成本倾向于保留灵活性的选项,因为通过专有格式或大量自定义创建深度锁定的解决方案存在风险,如果要求发生变化。
将决策系统化,以便基于一致的评估,而不是临时判断。
## 许可和消耗
许可和消费与计算和存储一样,都是成本价值等式的输入,也是最常见的废物来源。优化它们不是直接减少。它涉及将每个用户与适合其工作的许可证匹配,并高效调用每个计量服务。
### 许可证优化
许可证优化将每个用户与正确的许可证类型匹配。其核心是,将公司中的每个用户与他们的工作所需的许可证相匹配。过度许可,例如将完整平台许可证分配给只需要有限功能(只读访问权限或简单工作流批准)的用户,是公司最常见和代价最高的错误之一,除非有人查看,否则不可见。定期审计用户角色、登录活动和功能使用情况,通过在整个用户群中正确分配,可以显著节省成本。以节奏运行,而不仅仅是在更新时 — 随着角色的变化和人员在公司中的位置的变化,不匹配会悄悄增长。
### 消耗信用优化
随着公司采用 Agentforce、Data 360 和其他 AI 支持的功能,这些功能按使用情况而不是座位定价,消费信用优化变得越来越重要。当团队低效设计流程或没有监控使用模式时,信用池会惊人地迅速耗尽。与固定许可证计数不同,在没有做出任何配置决策的情况下,消耗可能会激增。建立信用烧毁率的清晰可见性,设置触发审查的消耗阈值,并设计自动化和客服人员高效调用计量服务的方式。将交易保持在调控器限制内的相同效率工作,可将计量服务保持在信用预算内。这是相同的成本价值理念,以消耗量表示。
### 环境和 Sandbox 策略
环境和 Sandbox 策略是一项具有直接成本后果的资源决策,成熟的 Salesforce 交付模型需要结构合理的环境策略。开发、测试、暂存和生产环境都服务于不同的目的,Sandbox 类型的正确组合允许团队在达到生产之前安全地构建和验证更改。挑战在于,如果没有审慎的治理,活动 Sandbox 的数量会迅速增加,特别是在大型或长时间运行的程序上,并且以令公司措手不及的方式推高成本。解决方法是,以与任何其他资源相同的意图对待 Sandbox 配置。刷新或取消配置不再有效使用的 Sandbox,而不是让它们闲置,让 Sandbox 类型的选择由实际的数据忠实性需求而不是便利性决定,并为所有权、刷新节奏和停用设置明确的策略,以便庄园保持适应工作的规模。
### 多组织成本系数
多组织架构会增加成本。单组织架构受益于整合的许可、共享的平台基础架构和减少的管理开销,因为管理、配置和维护更少。当所有业务部门在一个组织中运行时,集成是内部而不是跨组织的,数据共享是本地的,Sandbox、支持和治理工具的总占地面积按比例保持更小。多组织架构虽然有时对地理位置、法规遵从性或组织分离是必要的,但对某些成本类别会产生乘数效应。每个额外的组织都有自己的许可要求、自己的 Sandbox 资产、自己的集成开销和自己的管理工作,并且需要更复杂的工具来管理跨组织部署、身份联合和数据同步。在做出难以扭转且代价高昂的架构决策之前,了解每个额外组织的真正总拥有成本。
### API 和集成成本
API 和集成成本是 Salesforce 生态系统中最低估的成本驱动因素之一。将 Salesforce 连接到外部系统看起来简单明了,但复杂的集成要求会迅速累积中间件许可、开发工作、持续维护和每次数据交换产生的 API 消耗的成本。具有许多集成系统、高数据量或接近实时同步要求的公司尤其受到关注。架构方法在这里很重要。与设计良好的批量或事件驱动模式相比,频繁进行小型 API 调用的简洁、精细的集成成本更高、更脆弱,可以最大限度地减少往返次数,并且随着连接的应用程序的增多,差异性也越来越大。管理集成设计标准,尽可能整合集成平台,并定期审查现有集成是否仍像最初设计的那样高效运行。
## 成本监控和治理
可持续架构需要的不仅仅是初始设计优化。它要求持续监督和结构化问责制。成本监控和治理是将优化从一次性工作转化为持续运营实践的框架。一致的跟踪和清晰的所有权降低了意外成本超支的风险,这样花费的每一美元都与业务价值保持一致。
### 成本可见性和仪表板
通过技术团队和业务利益相关者都可以访问的仪表板创建支出模式的可见性,以便投资对话基于数据而不是发票。成本可见性会启动关于投资优先级和优化业务机会的数据驱动对话,并且在三种不同视图可用时效果最佳。许可证利用率仪表板显示无效用户、过度许可用户和许可证类型不匹配,这些优化机会隐藏在统一的人数中。容量仪表板显示了存储、API 和处理消耗以及增长趋势,以便团队在限制导致停机之前而不是之后进行优化。投资仪表板显示按业务部门划分的支出、按拥有团队划分的环境成本、附加成本及其利用率,以及基于当前增长的预测支出,这将预算对话转化为分配对话。
这些仪表板可以来自各种工具,包括 Digital Wallet 和查询元数据的自定义报表。该工具的重要性小于在决策时显示数据的纪律。与业务利益相关者和领导共享仪表板,为明智的投资讨论创造透明度,而不是被动的预算辩论。了解使用情况模式的财务团队可以优化支出。仅查看总发票的团队只能剪切它。
### 预算控制和警报
在整个公司实施支出意识,包括在超出限制之前标记优化的主动警报:
- **许可证预算**按部门设置分配目标,并在接近容量时发出警报,因此不会仅在续订时发现不受控制的配置。
- 当趋势预测在下一个更新周期之前超过限制时,**存储预算会**通过警报监控增长率。这些警报会发出预先警告,以便在发生超额前实施归档。
- **API 预算**通过示例利用率阈值(例如 70% 和 85%)的警报跟踪消耗,因此优化是主动的,而不是在限制导致失败后的应急响应。
- **Sandbox 预算**通过分配限制和审批流程控制环境的扩散。
预算控制在不阻止必要投资的情况下培养成本意识。警报阈值提供预警,可实现周到的优化,而不是反应性扰乱。
### 按存储容量使用计费和显示模型
成本分配在业务部门之间创建了问责制和明智的决策,公司通过两种不同的模式之一来实施它,这两种模式在问责程度上有所不同。在不应用实际财务费用的情况下,按业务部门显示报表成本。它创建了透明度,并促进了成本意识的讨论和优化优先级,而没有内部计费的争议,这适合更喜欢协作成本管理而不是财务问责制的公司。按存储容量使用计费将实际成本分配给业务部门,并为消费决策建立直接的财务问责制。它推动了更强的优化行为,因为成本直接影响部门预算,但它需要一种准确的分配方法,以防止关于谁为什么付费的争议。无论哪种方式,分配规则都遵循相同的逻辑:按用户部门划分的许可证成本,按拥有开发团队划分的环境成本,按消耗集成的业务流程划分的集成成本,以及按为工作提供资金的倡议划分的开发成本。当这些规则不存在时,每个成本都会落在中央 IT 预算中,业务利益相关者会将平台视为免费,这正是在没有成本意识的情况下产生请求的条件。
### 适用于 Salesforce 的 FinOps 实践
使云 FinOps 实践适应 Salesforce Platform Economics,以创建持续优化功能,而不是定期清理。五种实践具有影响力。
- 财务、架构和业务利益相关者之间的跨职能协作可确保成本决策权衡业务价值和支出。它将财务专业知识引入架构讨论,并将技术理解引入预算规划。
- 持续的优化节奏防止了定期审查周期的成本偏差:每月一次的异常审查,发现支出高峰;每季度一次的利用率审计,验证许可证分配和容量使用情况;以及每年一次的全面 TCO 评估,使支出与战略优先级保持一致。
- 数据驱动的投资决策使用利用率数据和 TCO 模型,而不是假设或历史习惯。这些决策用对当前支出是否提供最佳价值的分析取代了“我们一直这样做”。
- 成本监控的自动化减少了跟踪利用率、确定优化业务机会和生成报表的手动工作,因此实践会随着组织复杂性的增长而扩展,而不会实现人员线性增长。
- 成本意识教育帮助团队了解架构决策如何影响总拥有成本,因为了解成本的架构师和了解平台经济学的开发人员可以更好地权衡利弊。
### 成本感知架构审查
将成本意识集成到架构审查过程中,以便投资影响与功能和技术注意事项一起可见,而不是在部署后发现。在架构决策记录中包含成本影响评估,记录主要设计选择。对于超过定义投资阈值的解决方案,需要 TCO 预测。在设计期间评估许可证的含义,确定一种方法在承诺之前是否需要高级许可证或加载项。在采用影响 API 消耗或中间件许可的模式之前,请评估集成成本。架构审查委员会将成本视角与功能和非功能需求联系起来,做出更一致的投资决策。将成本视为架构决策的一个输入,而不是其唯一的驱动因素,这样公司就可以在重要的事情上进行适当的投资,同时避免在无关紧要的事情上浪费。
## 可持续性
云计算可持续性的重点是通过有效利用资源来最大限度地减少数字基础设施对环境的影响,并且与每成本的价值自然保持一致:降低资源消耗的效率也降低了成本。Salesforce 和架构师共同负责可持续发展结果。Salesforce 管理数据中心基础设施,包括电力使用效率优化、冷却效率和硬件生命周期管理,以及多租户资源池和平台级效率改进。您会在该多租户环境中影响解决方案的资源消耗模式。
单个解决方案与数据中心排放之间的关系是间接的,准确无误非常重要。单个租户的优化不会直接减少数据中心的排放。他们所做的是促成聚合效应:所有租户的效率提高让 Salesforce 以更高的利用率运行其基础设施,并推迟容量扩展。因此,资源效率度量,包括 SOQL 查询、CPU 时间、堆消耗和存储,是可持续性的代理指标。消除计算浪费可以提高性能和成本,并有助于实现平台范围的效率目标。该支柱中的设计原则,包括批量化、选择性查询、缓存、异步处理和严格的数据生命周期,创建了消耗更少资源的解决方案。可持续性不是一项单独的计划,而是固定于架构之上。当根据环境影响而不是财务成本来衡量资源效率时,这就是资源效率。
一些架构实践承载了大部分可持续性价值,并且每个实践还提高了性能或成本,这就是为什么它们属于同一个支柱。
### 消除未使用的自动化
非活动自动化会消耗基础设施资源,而不会提供任何业务价值。处理不相关记录的触发器、执行不必要操作的工作流和在不存在工作时运行的预定作业会浪费计算、存储和能源。补救措施是每季度进行一次自动化审计,对哪些内容被视为未使用有明确的标准:过去 90 天内没有执行,批处理作业始终处理零条记录,自动化被更新的实施取代,但从未停用。记录每次停用,以便在业务需求重新出现时回滚。一家公司有几十个以前实施留下来的进程构建器,大多数在过去一年中没有执行过,它付费评估每个相关的记录保存。
### 优化计划处理
在非高峰时段计划资源密集型操作会在时间窗口之间分配负载。在多租户环境中,这一纪律提高了平台在工作时间的响应能力,并且总的来说,让 Salesforce 以更高的平均利用率运行基础设施。为低用量窗口计划批量归档、丰富和清理,错开作业,而不是在午夜启动 20 个并造成处理高峰,并且更喜欢事件驱动的模式,而不是计划的轮询,这样就不会花费周期来检查不存在的工作。
### 减少冗余计算
重复计算相同值会浪费 CPU 周期和基础设施容量。计算一次,缓存结果,并在事务和用户之间重复使用。平台缓存为重复查询的参考数据提供服务,缓存的累计值避免了近乎实时准确性的实时聚合查询,公式字段在记录访问时动态重新计算,而不是存储值并需要自动化来维护它,Lightning 数据服务消除了客户端上的冗余服务器请求。每个避免的计算都是返回到平台的容量。
### 管理数据生命周期
数据存储会消耗基础设施资源,并随着增长降低查询性能。归档或删除活动操作不再需要的数据的保留策略保持活动表较小,查询速度更快。将陈旧记录归档到计划作业中的大对象或外部存储,在合规时硬删除,而不是依赖继续消耗存储空间的软删除,并配置每个字段的字段审计跟踪保留,而不是应用存储远远超过合规要求的历史的最大值。与计划处理一样,单个归档决策不会直接减少数据中心的能源使用,但聚合所有租户的数据生命周期纪律可以提高平台效率并推迟存储基础架构的扩展。
### 提高集成效率
外部集成会消耗 Salesforce 及其连接的系统中的资源。变更数据捕获和其他事件驱动的模式消除了重复检查变更而一无所获的轮询调用,从而减少了 API 消耗、好处调控器限制并消除了浪费的计算。复合 API 模式将多个操作聚合到单个调用中,批量 API v2 处理大量操作的效率远远高于数千个单独的 REST 调用,并且带有指数回退的重试逻辑避免了使外部系统举步维艰。每五分钟轮询一次并且大部分时间里什么也没做的一个集成纯粹是浪费,而由变更事件驱动的同一个集成只处理真正的变更。
### 适当大小的客服人员上下文和模型
客服人员架构通过大型语言模型推理来消耗计算资源,并且相同的效率思维也适用。最小化提示长度,总结对话历史,而不是携带无限增长的完整逐字记录,使用适合任务的最小模型,而不是默认设置为最有能力的模型,并缓存参考数据和确定性响应。在仅评估 5 个矢量搜索结果时检索 50 个矢量搜索结果会消耗推理和检索资源,并且没有增加值,因此配置检索限制以匹配实际使用。
可持续性与该支柱的其余部分一样,需要持续监控,而不是一次性的,因为资源消耗模式会随着解决方案的发展、数据量的增长和用户数量的增加而变化。只有在触发操作时,监控才重要。为每个度量定义可操作的阈值(每个事务超过目标的 SOQL 查询计数、超过每月百分比的存储增长或低于目标的缓存命中率),并记录首先进行哪些优化。将精力集中在高用量事务和频繁执行的自动化上,在这些方面,效率的提高会产生最大的聚合影响。进程构建器于 2025 年 12 月 31 日结束支持,将剩余进程构建器迁移到流;不要只是停用它们。
## 摘要核对清单
使用此核对清单来评估解决方案是否返回每个成本的最大值。它将该支柱的资源效率和成本纪律做法合并为一项审查,因为这两项是单一决定。
**价值和成本建模**
- 将每项重要的 Salesforce 投资与可衡量的业务成果联系起来。
- 在承诺采用方法之前,请对直接、间接、一次性和持续类别的总拥有成本进行建模。
- 比较基准和优化架构备选方案在 3-5 年内的总拥有成本。
- 应用一致的构建与购买评估,权衡战略差异化、价值实现时间和退出成本,而不是依赖临时判断。
**资源效率**
- 将事务设计为在峰值负载和最大数据量下的调控器限制内舒适运行。
- 在针对大型对象部署前,使查询对索引字段具有选择性,并使用查询计划工具进行验证。
- 批量化所有数据操作,并在同步限制需要时有意选择异步处理。
- 通过平台缓存和 Lightning 数据服务缓存参考数据,以避免重复查询和重新计算。
- 通过分配负载和监控高用量对象来防止数据偏差。
- 集中触发器、服务和选择器逻辑,以便业务逻辑保持可测试和更改成本低廉。
- 定义从创建到归档的完整数据生命周期,并在对象级别监控存储消耗。
**许可和消费**
- 将每个用户与工作所需的许可证类型匹配,并定期审核角色、登录活动和功能使用情况。
- 建立对消耗信用烧毁率的可见性,并设计自动化和客服人员来高效调用计量服务。
- 通过明确的所有权、刷新节奏和停用策略,管理 Sandbox 配置。
- 在添加组织之前,了解完整的多组织成本乘数,并青睐批量或事件驱动的集成,而不是聊天模式。
**监控和治理**
- 提供可供技术团队和业务利益相关者访问的成本和容量仪表板。
- 为许可证、存储、API 消耗和 Sandbox 设置预算提醒,以便优化是主动的,而不是被动的。
- 建立展示或按存储容量使用计费,以便成本分配在业务部门之间形成问责制。
- 采用 FinOps 节奏:每月异常审查、每季度利用率审计和每年全面 TCO 评估。
- 将成本影响评估集成到架构审查和架构决策记录中。
**持续优化和可持续性**
- 将优化视为持续实践,并验证之前的优化投资是否实现了预期回报。
- 通过定期审计,消除未使用的自动化和冗余计算。
- 跟踪一段时间内的资源消耗,并定义可操作的阈值,当度量超过阈值时触发优化。
分享您对良好架构框架的反馈。
# 资源和成本优化 - 客服人员模式
了解有关架构良好的[资源和成本优化](/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.html)的更多信息 → [代理企业资源和成本](/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-resource-and-cost-optimization.html)优化
## 客服人员工作量调控器限制
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 操作 | ✅ 接受集合的设计操作。客服人员处理 50 个个案更新会调用个案 ID 集合的单个操作,而不是 50 个单独的调用 |
| Agentforce \| 操作 | ✅ 使用关系查询检索单个 SOQL 语句中的父级和子级数据,以跨操作链管理 SOQL 预算 |
| 平台 \| 平台缓存 | ✅ 在平台缓存中缓存参考数据,消除同一对话中操作之间的重复查询 |
| 平台 \| Apex | ✅ 将超出同步限制的客服人员操作移到可排队或批量 Apex。 |
| 平台 \| Apex | ✅ 使用 Apex 执行日志加载的简档操作。在接近同步限制时,将计算繁重的处理移到异步上下文 |
| Agentforce \| 操作 | ✅ 针对数据偏差场景,设计具有硬子记录限制和分页的操作 |
| Agentforce \| 操作 | ✅ 当数量超过客服人员的阈值时实施抽样,客服人员可能会不可预测的请求“所有历史” |
| 平台 \| 比例中心 | ✅ 使用规模中心事务跟踪来确定哪些操作消耗了过多的查询 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 操作 | ⚠ 为每个记录调用单独的操作(例如,50 个单独的调用,用于 50 个个案更新),而不是接受集合 |
| 平台 \| Apex | ⚠ 在 10-15 个操作的复杂工作流中,每个操作运行 5-10 个 SOQL 查询,接近 100 个同步 SOQL 限制 |
| 平台 \| Apex | 在操作中同步运行大型处理,而不是在异步上下文中(例如,在同步 Apex 中评分 1,000 多个潜在客户) |
| Agentforce \| 操作 | 允许客服人员从拥有 15000 个业务机会的客户或拥有 5000 个活动的个案中检索无限的子记录,而无需防御性编码 |
## API 消耗
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Event Monitoring | ✅ 在试点阶段监控 Event Monitoring 中的 API 消耗,以在全面推出前了解实际使用情况 |
| Data 360 \| 配置 | ✅ 设置向量搜索的前 K 个限制,以仅检索实际使用的结果数量 |
| Data 360 \| Analytics | ✅ 在 Data 360 Analytics 中监控矢量搜索结果利用率,以调整前 K 个参数 |
| 平台 \| 平台事件 | ✅ 在条件需要客服人员干预时发布平台事件,而不是无论工作存在与否都计划轮询消耗 API 调用 |
| 集成 \| 操作 | ✅ 使用复合模式:创建单个 MuleSoft 体验 API,以并行聚合多个系统检查(库存、定价、信用),客服人员调用 1 个外部操作,消耗 1 个标注 |
| 集成 \| 操作 | ✅ 设计执行所有下游更新的单个 MuleSoft 流,而不是每个客服人员交互的多个顺序流 |
| Agentforce \| 客服人员配置 | ✅ 使用标准组件将客服人员嵌入 Lightning 页面,避免每次交互时消耗 API 调用 |
| 业务 \| 计划 | ✅ 根据预计的客服人员交易量评估 MuleSoft 许可模型(基于交易与平台许可),以确定最佳经济效益 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Data 360 \| 配置 | 仅使用前 5 个矢量搜索结果时检索前 50 个矢量搜索结果,浪费 90% 的计算和上下文预算 |
| 平台 \| 计划作业 | 无论工作是否存在,计划轮讯消耗 API 调用(例如,每 5 分钟检查一次,发现 80% 的时间没有工作) |
| 集成 \| 命名凭据 | 使用 3 个消耗 3 个标注的单独操作,而不是聚合多个系统调用的单个复合 API |
| 平台 \| Apex | 当标准 Lightning 组件可以避免这种情况时,自定义 LWC 发出明确的 API 请求会消耗 API 调用 |
| 集成 \| 外部系统 | 外部系统轮询 Salesforce 的状态更改,消耗数百次每日 API 调用,而不是订阅 CDC 事件 |
| 集成 \| 操作 | 对于每个步骤(查询客户、查询产品、检查库存、创建订单、更新库存、通知发货),进行顺序 API 调用会消耗每个事务 12 次以上的调用,而复合模式会降低消耗 75% |
| 集成 \| 客服人员配置 | 跨多个系统编排客服人员操作,而不评估每个系统交互是否必要,将 API 消耗与每个添加的系统相乘 |
## 客服人员响应延迟
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 提示模板 | ✅ 最小化提示长度:删除繁琐的说明、冗余的示例、不必要的上下文。选择性上下文会改善延迟和质量 |
| 平台 \| Apex | ✅ 将选择性 SOQL 与索引筛选器一起使用。利用查询计划工具识别导致全表扫描的缺失索引 |
| Agentforce \| 客服人员配置 | ✅ 在不存在依赖性时使用并行操作执行。同时检索客户详细信息和业务机会会使延迟比顺序检索减少一半 |
| 平台 \| 平台缓存 | ✅ 缓存频繁访问的参考数据(产品目录、区域映射、定价规则),消除重复的 SOQL |
| 平台 \| 平台缓存 | ✅ 实施语义缓存匹配类似的查询,为重复的请求提供服务,而无需新的推理 |
| 平台 \| Apex | ✅ 使用丰富的异步调控器限制异步处理非紧急请求(状态更新、批处理、报表生成) |
| 平台 \| Apex | ✅ 现实数据量下的简档操作。无论 LLM 推理是否快速,采取 3 的操作都会成为瓶颈 |
| Agentforce \| 操作 | ✅ 在操作中实施批量化,以最小化每个操作的执行时间 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 提示模板 | 包含添加噪音的穷举上下文,而不是改善延迟和质量的选择性上下文 |
| Agentforce \| 客服人员配置 | 在不存在依赖性时按顺序执行操作(例如,客户查询 2s + 业务机会查询 2s = 4s 按顺序执行,而不是 2s 并行) |
| 平台 \| Apex | ⚠ 运行全表扫描,因为缺少索引,而不是使用带有索引筛选器的选择性 SOQL |
| 平台 \| 平台缓存 | ⚠ 重复查询 Data 360(每次调用 1.5 次),以了解可以缓存的常见数据(距离平台缓存 50 毫秒) |
| Agentforce \| 客服人员配置 | ⚠ 需要同步完成非紧急操作(状态更新、批处理、报表生成) |
## Data 360 集成效率
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Data 360 \| 配置 | ✅ 将 Knowledge 文章、产品文档、个案历史分解为具有语义意义的 250-750 个单词段 |
| Data 360 \| 配置 | ✅ 根据客服人员查询模式验证块大小。平衡精度(较小的块)与上下文完整性(较大的块) |
| Data 360 \| 配置 | ✅ 使用匹配客服人员查询模式的嵌入。根据衡量检索精度和召回的代表性查询验证选择 |
| Data 360 \| 配置 | ✅ 通过元数据筛选器增强向量相似性,确保业务约束(例如,筛选到活动产品,排除停用的项目,而不管语义相似性如何) |
| Data 360 \| 配置 | ✅ 使用统一简档将来自多个来源的客户数据聚合到单个视图中。在单个查询中访问完整的上下文(属性、见解、参与、预测) |
| Data 360 \| 配置 | ✅ 启用身份解析,提供准确的跨系统客户匹配 |
| Data 360 \| 配置 | ✅ 在匹配数据驻留合规性监管要求的区域配置 Data 360 实例 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Data 360 \| 配置 | 使用过大的块,其中包含不相关的信息,稀释了向量搜索结果的相关性 |
| Data 360 \| 配置 | 仅依赖语义相似性,没有元数据筛选器,返回中断或低质量的结果 |
| Data 360 \| 配置 | 编排多个单独的源查询,而不是使用 Data 360 统一简档来获取完整的客户上下文 |
| Data 360 \| 配置 | 使用不匹配客服人员查询模式的嵌入模型(例如,用于问答相似性的文档分类嵌入) |
| Data 360 \| 配置 | 在非 European Data 360 实例上处理欧洲客户数据,违反数据驻留要求 |
## 上下文窗口管理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 明确确定上下文的优先级:最近对话历史(最高)、关键业务数据/记录状态/权限(第二)、历史上下文(最低,仅在空间允许时) |
| Agentforce \| 客服人员配置 | ✅ 在 10 到 15 个回合后,将早期对话总结为简洁的概述,在没有完整逐字记录的情况下维护关键事实 |
| Data 360 \| 配置 | ✅ 在 Data 360 或自定义对象中存储扩展上下文,而不是在每次 LLM 调用中存储完整历史记录。按需查询使提示关注当前需求 |
| Agentforce \| 操作 | ✅ 仅返回操作响应中的基本字段。客户检索返回与当前任务相关的字段,而不是所有 50 个字段 |
| Agentforce \| 客服人员配置 | ✅ 为上下文窗口分配设计明确的优先级逻辑与任意截断 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 在没有显式优先级逻辑的情况下任意截断上下文 |
| Agentforce \| 客服人员配置 | ⚠ 将完整的逐字记录对话历史记录保持在 10 到 15 轮之外,耗尽上下文预算 |
| Agentforce \| 客服人员配置 | 在每个 LLM 调用中包含完整历史记录,而不是在外部存储扩展上下文并按需查询 |
| Agentforce \| 操作 | 当只有子集与当前任务相关时,返回客户检索中的所有 50 个字段,消耗上下文预算 |
| Agentforce \| 客服人员配置 | 分配上下文预算,而不保留足够的空间来生成响应 |
## 可组合客服人员设计
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 操作 | ✅ 开发涵盖记录 CRUD、批准、通知、报告、验证的集中操作库。平台团队保持行为、安全性和性能的一致性 |
| Agentforce \| 客服人员配置 | ✅ 创建具有深厚领域专业知识的专注专家客服人员(个案管理服务代理、业务机会指导销售代理) |
| Agentforce \| 客服人员配置 | ✅ 使用客服人员生成器编排,协调跨域需求的专家客服人员 |
| Agentforce \| 提示模板 | ✅ 在提示生成器中维护验证的提示模式。模板捕获经过验证的 RAG 查询形成、多步骤推理、响应格式化方法 |
| Agentforce \| 提示模板 | ✅ 版本提示模板支持 A/B 测试改进 |
| Data 360 \| 配置 | ✅ 在 Data 360 中维护共享 Knowledge 库,为多个客服人员提供服务。单一产品 Knowledge 库为销售、服务和合作伙伴入口网站客服人员提供基础服务 |
| Agentforce \| 客服人员配置 | ✅ 从经过验证的构建块中撰写新客服人员:定义目的、选择操作、配置提示(自定义构建的天数与周数) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 提示模板 | 为每个客服人员创建临时提示,而不是重复使用经过验证的提示模板库 |
| Agentforce \| 操作 | 为每个客服人员重新实施操作,而不是使用集中的可重用操作库 |
| Agentforce \| 客服人员配置 | 构建尝试所有场景的通用客服人员,而不是拥有深厚领域专业知识的专注专家客服人员 |
| Data 360 \| 配置 | 为每个客服人员重复 Knowledge 库,而不是共享一个让多个客服人员成为基础的 Knowledge 库 |
## 客服人员版本和测试
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 自定义元数据类型 | 使用自定义元数据类型和提示生成器控制行为,无需更改代码。管理员修改提示模板和推理参数,无需开发周期 |
| Agentforce \| 客服人员配置 | ✅ 将子集路由到实验版本,比较质量度量、满意度、完全推出前的任务完成情况(例如,10% 到 v2,90% 到 v1) |
| Agentforce \| 客服人员配置 | ✅ 在 A/B 测试中发现问题时,监控验证期并保持回滚能力 |
| Agentforce \| 操作 | ✅ 定义组件之间的明确接口合同:操作指定输入、输出、错误、性能预期 |
| Agentforce \| 客服人员配置 | ✅ 在多周推出期间逐步扩展成功版本(10% 到 25% 到 50% 到 100%) |
| Agentforce \| 操作 | ✅ 在保留界面合同时,无需客服人员修改即可替换操作实施 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Apex | 需要更改代码来修改客服人员行为,而不是使用配置驱动的方法(自定义元数据类型、提示生成器) |
| Agentforce \| 客服人员配置 | ⚠ 完全推出新的客服人员版本,无需对比较质量度量和满意度的子集进行 A/B 测试 |
| Agentforce \| 操作 | 客服人员取决于操作实施详细信息,而不是界面合同,在实施更改时中断 |
| Agentforce \| 客服人员配置 | 立即为 100% 的用户部署新版本,无需逐步推出 |
| Agentforce \| 客服人员配置 | 在实验版本测试期间,在没有回滚功能的情况下运行 |
## 灵活信用消耗
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 以尽可能少的客服人员操作解决每个请求 — 每个操作消耗 Flex Credit,因此将多步骤逻辑整合到一个操作中会直接降低成本 |
| Agentforce \| 客服人员配置 | ✅ 根据文档化的灵活信用消耗率和预期交互量,对每月成本预测进行建模,从而支持预算规划 |
| Einstein \| 监控 | ✅ 按客服人员、用例和用户群体监控 Flex Credit 消耗,以确定需要优化的高消耗模式 |
| Einstein \| 监控 | ✅ 将实际消耗与预测进行比较,为未来规划提供信息,并确定优化机会 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 将许多小操作链接在一起,其中一个合并操作可以解决请求,使每次交互的灵活信用消耗成倍增加 |
| 业务 \| 计划 | 发现 Flex 信用消耗仅在生产部署后超过预测,因为没有执行每个交互成本建模 |
## 对话优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 设计会话边界和超时,以便对话适当持续,而不会过早终止并强制进行新的可计费对话 |
| Agentforce \| 客服人员配置 | ✅ 将客服人员的能力集中在首次对话的解决上,以便在初始对话中完成任务,而不是需要可计费的跟进 |
| Einstein \| 监控 | ✅ 跟踪首次对话解决率,作为每次对话定价下的成本效益度量 |
| Agentforce \| 客服人员配置 | ✅ 在现有对话上下文中处理相关问题,而不是打开单独的对话,每个对话产生固定的费用 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 通过短会话超时提前终止对话,迫使用户开始新的可计费对话以完成单个任务 |
| Einstein \| 监控 | ⚠ 仅监控总对话量,不跟踪首次对话解决率,缺少每次对话定价下的主要成本杆 |
## 利用率优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 推动采用,以便获得许可的用户积极参与客服人员,因为未计量的每用户定价价值来自使用情况,而不是最小化每次交互 |
| Einstein \| 监控 | ✅ 跟踪利用率,以确定低使用率的许可用户,以便进行有针对性的培训或许可证重新分配 |
| 业务 \| 文档 | ✅ 按用户群体将客服人员交互与业务结果联系起来,以便高价值用例证明每个座位的投资是合理的 |
| 业务 \| 计划 | ✅ 节奏审查用户群体,以便许可证与实际使用保持一致,而不是过度许可 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | ⚠ 配置没有采用计划的每用户许可证,为很少与客服人员接触的用户支付固定的每座席成本 |
| Einstein \| 监控 | ⚠ 从不按用户群体审查利用率,让许可证流向浪费传统席位的过度许可 |
## 混合架构
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 实施分类客服人员,使用简单逻辑处理初始路由,仅在复杂性要求时将用户定向到专用客服人员 |
| 平台 \| 流 | ✅ 对于基于规则的逻辑足够的确定性场景,回归流自动化,为真正需要的不明确场景保留客服人员推理 |
| Data 360 \| 客服人员配置 | ✅ 有选择地检索基础数据,仅在客服人员的推理需要时调用向量搜索和文档检索,而不是每次交互时 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 将每个请求直接路由到专门的客服人员,对简单分类逻辑可以处理的请求进行昂贵的复杂调用 |
| 平台 \| 流 | 将客服人员推理用于基于规则的确定性工作流,流将以更低的成本执行,而不会消耗变量 |
| Data 360 \| 客服人员配置 | 检索每个交互的基础数据,无论推理是否需要,都会增加不跟踪真实需求的 Data 360 消耗 |
## Data 360 消耗
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Data 360 \| 客服人员配置 | ✅ 使用定义的刷新节奏(例如 24 小时)缓存产品目录嵌入,从缓存中检索常规问题,并仅查询 Data 360 以获取新的或特定于客户的数据 |
| Data 360 \| 客服人员配置 | ✅ 实施缓存策略,减少常见请求的重复查询,平衡成本优化和数据新鲜度要求 |
| Data 360 \| 组织 | ✅ 将前期数据接收和处理成本(协调、身份解析、嵌入生成)与增量增长成本分开建模 |
| Data 360 \| 客服人员配置 | ✅ 在添加检索扩充生成之前,评估 RAG 开销是否有理由对特定用例进行质量改进 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Data 360 \| 客服人员配置 | 尽管大多数查询是相同的常见问题,但没有实施缓存,为重复相同的响应消耗 Flex Credit |
| Data 360 \| 组织 | 实施激进缓存,不考虑数据新鲜度要求,为用户提供过时信息 |
## Sandbox 和开发成本
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 将部分复制 Sandbox 和目标客户数据示例用于客服人员开发,并将完全复制 Sandbox 专用于生产前验证 |
| 平台 \| 组织 | ✅ 预先计划开发基础设施成本,包括 Data 360 容量、用于快速测试的灵活信用和集成连接 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | ⚏ 每个开发人员为客服人员开发配置完全复制 Sandbox,Sandbox 成本增加 5 倍 |
| 平台 \| 组织 | 依赖临时手动测试提供的覆盖范围不足,仅在生产中发现质量问题 |
| 业务 \| 计划 | 使开发基础设施成本在规划期间不可见,在实施期间导致重大意外成本 |
## TCO 建模
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 构建涵盖所有六个成本类别的综合 TCO 模型:开发、推理 (Flex Credits)、基础设施 (Data 360 + MuleSoft)、运营、治理和变更管理 |
| 业务 \| 文档 | ✅ 创建电子表格 TCO 模型,预测 3-5 年的成本,并记录互动量、信用消耗率和增长轨迹的假设 |
| 业务 \| 文档 | ✅ 执行敏感性分析,揭示哪些假设对投资总额影响最大,从而保证验证工作的针对性 |
| 业务 \| 文档 | ✅ 将持续运营成本建模为成熟客服人员每年开发成本中有意义的经常性部分,它来自通用 AI 客服人员行业基准,而不是固定的 Salesforce 数字 |
| 业务 \| 计划 | ✅ 包括经常被低估的变更管理成本(用户培训、业务流程调整、组织变革) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | ⚠ 仅包括客服人员业务个案中的开发成本,而不对持续消耗进行建模(Flex Credits、Data 360、运营),在部署后发现大量计划外的年度成本 |
| 业务 \| 计划 | 忽略治理开销(安全审查、人员监督基础设施、审计日志、合规验证),这些开销会随着客服人员的自主权和风险级别而增加 |
| 业务 \| 计划 | 低估变更成本,尤其是对于创建大量工作流轮班的客服人员,导致预算短缺 |
## 构建与购买
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 通过全面的 3 年 TCO 比较(包括维护成本)评估预构建 Agentforce 客服人员与自定义开发 |
| 业务 \| 文档 | ✅ 架构决策记录中的文档构建与购买决策,支持未来在成本和功能变化时重新评估 |
| Agentforce \| 客服人员配置 | ✅ 考虑通过提示生成器和操作配置自定义预构建客服人员,作为现成和完全自定义之间的中间环节 |
| 业务 \| 计划 | ✅ 成本之外的因素决策标准:实现价值的时间、组织发展能力、战略差异化价值和供应商依赖性容忍度 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | 构建自定义客服人员,因为“我们想要控制”而没有建模 3 年 TCO,显示预构建选项可能便宜得多 |
| 业务 \| 计划 | ⚠ 仅根据第一年成本选择构建或购买,而不预测多年持续维护、信用消耗和供应商更新的好处 |
## 比较分析
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 在部署前将客服人员 TCO 与传统自动化替代方案(流、Apex、手动流程)进行比较,验证投资合理性 |
| 业务 \| 文档 | ✅ 建立手动流程基准,包括满负荷员工成本、错误率、处理时间和吞吐量能力,以揭示潜在的节省 |
| Agentforce \| 客服人员配置 | ✅ 部署客服人员,以处理需要自然语言理解、自适应推理或传统自动化无法匹配的高场景变化的任务 |
| 平台 \| 流 | ✅ 将流自动化用于具有明确规则的确定性工作流,以更低的成本提供等效结果,而无需变量推理消耗 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 部署客服人员执行简单的确定性路由任务,当 Flow 在不增加成本的情况下提供同等功能时,每年消耗 1500 美元信用 |
| 业务 \| 计划 | 对于所有自动化,默认使用客服人员方法,而不评估传统自动化是否以较低的总成本提供同等结果 |
## 实时成本跟踪
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Einstein \| 监控 | ✅ 构建灵活信用消耗仪表板,按客服人员、用户群体、时间段和交互类型显示消耗,以快速识别消耗峰值 |
| Einstein \| 监控 | ✅ 实施将信用消耗与业务交易联系起来的每个交互成本归因(每个已解决个案的成本、每个合格的潜在客户的成本、每个已处理订单的成本) |
| Einstein \| 监控 | ✅ 按客服人员和用例配置示例阈值的预算提醒,例如 70% 和 85%(不仅是组织范围),以便在超支之前进行主动干预 |
| Einstein \| 监控 | ✅ 实施异常检测,识别异常消耗模式(突然峰值表示提示效率低下、意外使用模式或滥用) |
| 业务 \| 文档 | ✅ 与业务利益相关者和技术团队共享成本仪表板,创造透明度,实现成本感知客服人员的使用 |
| 业务 \| 文档 | ✅ 进行季度预算审查,将实际消耗与预测进行比较,评估业务结果,并根据展示的价值调整分配 |
| 业务 \| 计划 | ✅ 为实验和意外消费增长预留 10%-15% 的信贷预算,防止创新瓶颈 |
| 业务 \| 计划 | ✅ 根据客服人员采用趋势、新部署和扩大用例创建多年预测,支持容量规划和供应商谈判 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Einstein \| 监控 | ⚠ 仅通过每月发票审核监控信用消耗,在续订前发现预算超支 6 周而没有时间进行优化 |
| Einstein \| 监控 | 仅在组织级别配置预算警报,缺少指示优化业务机会的按客服人员和按用例消耗峰值 |
| 业务 \| 计划 | 需要增加紧急预算,因为消费监控没有及早实施,无法主动识别和解决超支问题 |
| 业务 \| 计划 | ⚠ 在会计年度开始时设置年度预算一次,无需审核,使高价值客服人员渴望获得信用,而低投资回报率客服人员消耗分配 |
| 业务 \| 计划 | 为实验分配零预算储备,迫使团队在任何探索之前通过冗长的批准来证明每个新用例的合理性 |
## 客服人员成本分配
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Einstein \| 监控 | ✅ 按客服人员实例跟踪消耗,支持跨客服人员类型和用例进行比较,揭示哪些客服人员提供最佳 ROI |
| 业务 \| 文档 | ✅ 将消费与业务流程(潜在客户资格、个案解决、订单处理)联系起来,使业务领导能够评估战略调整 |
| Einstein \| 监控 | ✅ 按部门、角色或用户细分跟踪消耗,揭示客服人员采用率最高和成本最集中的地方 |
| 业务 \| 计划 | ✅ 使用季度成本审查来比较不同产品组合的客服人员投资回报率,并根据展示的价值将投资从低投资回报率重新分配到高投资回报率客服人员 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | 将所有客服人员成本分配到 IT 预算,而不考虑业务部门属性,防止业务领导评估支出是否符合优先级 |
| 业务 \| 计划 | 将客服人员消耗视为无差别成本,而不将消耗与业务结果联系起来,因此无法计算 ROI |
## 按存储容量使用计费模型
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 实施展示性报告,提供业务部门的消费可见性,培养成本意识,从而做出明智的使用决策,而不会引起有争议的退款争议 |
| 业务 \| 文档 | ✅ 对高用量生产客服人员使用带按存储容量使用计费的混合分配,对实验性或低用量客服人员使用带展示的混合分配,平衡问责制与创新灵活性 |
| 业务 \| 文档 | ✅ 进行季度审查,讨论消耗是否与交付的价值一致,从而做出优化承诺 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | ⚠ 对实验代理实施完全计费,通过立即对新生用例强制实施预算问责来阻止创新和探索 |
## 提示优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 提示模板 | ✅ 消除系统提示中不必要的繁琐性 识别每个额外的令牌会增加所有交互的预填充计算和延迟 — 将系统提示调整为客服人员实际使用的内容 |
| Agentforce \| 提示模板 | ✅ 通过选择性上下文检索仅包含相关信息,相关性排名确保最高价值的信息适合上下文限制 |
| Agentforce \| 提示模板 | ✅ 为常规交互指定简洁的响应格式,通过避免请求复杂的格式或广泛的解释来最小化完成标记 |
| Agentforce \| 提示模板 | ✅ 在相似客服人员之间重复使用标准化提示模板,在创造一致性和效率的同时分摊提示优化投资 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 提示模板 | ⚏ 在未经优化的情况下以对话方式编写提示,每次交互消耗 2K 以上的令牌,包括客服人员很少引用的详细指令和大量示例 |
| Agentforce \| 提示模板 | 检索上下文的所有潜在相关数据,而不是有选择地仅包含相关信息,从而增加提示令牌消耗 |
| Agentforce \| 提示模板 | 为每个客服人员创建唯一的提示模板,而不是标准化模式,增加了提示工程的工作量,而没有成比例的质量优势 |
## 缓存策略
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| Agentforce \| 客服人员配置 | ✅ 缓存常见客服人员对常见问题的响应,直接从缓存为重复查询提供服务(缓存命中率超过 30% 表示存在重大优化机会) |
| Data 360 \| 客服人员配置 | ✅ 缓存稳定的 Knowledge 上下文(产品目录、策略文档、参考材料),减少引用常见信息的每次交互的检索开销 |
| Agentforce \| 客服人员配置 | ✅ 在用户会话中实施对话缓存,跨轮次维护上下文,无需重新发送完整历史记录,减少多轮次交互中的令牌消耗 |
| Agentforce \| 客服人员配置 | ✅ 根据内容波动性定义缓存无效策略(产品信息缓存小时/天,实时数据不应缓存) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| Agentforce \| 客服人员配置 | 尽管 60% 的查询是相同的常见问题,但没有实施缓存,这不必要地消耗了重复相同响应的 Flex Credit |
| Agentforce \| 客服人员配置 | 缓存需要新鲜度的实时数据(库存水平、定价、可用性),提供导致客服人员响应不正确的过时信息 |
| Agentforce \| 客服人员配置 | 始终不会刷新缓存的响应,从而在产品、策略或流程更改时导致答案过时 |
## 投资审批框架
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 需要业务个案,包括预测的 3 年总拥有成本、带有测量方法的预期业务结果、与替代方案的比较和风险评估 |
| 业务 \| 文档 | ✅ 定义批准阈值,将部门可以授权的投资与需要主管批准的投资分开,以便较高投资或较高风险的客服人员接受相称的主管审查 |
| 业务 \| 文档 | ✅ 在全面生产投资前,要求试点部署验证假设(消耗、质量、采用) |
| 业务 \| 文档 | ✅ 在客服人员建议书中包含 ROI 计算(例如,通过解决个案和手动处理成本节省显示 4:1 的退货率) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | 部署没有业务个案的客服人员,发现 3 倍的预测信用消耗,同时提供不明确的业务价值,在没有记录 ROI 的情况下创造计划外的年度消耗 |
| 业务 \| 计划 | 跳过试点部署,直接进入全面生产,错过了在提交全面预算之前验证消耗假设的机会 |
| 业务 \| 计划 | 批准客服人员投资,无需与可能以较低成本提供同等价值的替代方法(手动流程、传统自动化)进行比较 |
## 客服人员产品组合优化
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 业务 \| 文档 | ✅ 进行年度产品组合审查,评估所有客服人员的成本、使用情况、业务价值和战略一致性,以揭示客服人员审查错过的优化机会 |
| 业务 \| 文档 | ✅ 定义日落标准(采用率低、投资回报率低、功能过时、成本过高),防止低价值客服人员累积消耗预算 |
| 业务 \| 计划 | ✅ 实践持续投资重新分配,将资源从低绩效客服人员转移到与不断变化的业务优先级一致的高价值业务机会 |
| 业务 \| 文档 | ✅ 按 ROI 等级对客服人员进行分类(例如,前 2 名以 50% 的成本交付 70% 的价值 = 优秀;中间 4 名以 35% 的成本交付 25% 的价值 = 可接受;后 2 名以 15% 的成本交付 5% 的价值 = 日落候选人) |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 业务 \| 计划 | ⚏ 部署的客服人员无限期地留在生产中,没有利用率或价值审查,累积了低价值的客服人员,消耗了本可用于资助高价值业务机会的预算 |
| 业务 \| 计划 | ⚏ 仅单独评估客服人员,没有产品组合视角,缺少一些客服人员提供最大价值的见解,而许多客服人员消耗的资源不成比例 |
# 资源和成本优化 — 模式
资源和成本优化支柱重点关注高效的架构、代码质量和优化的资源利用率,以最大限度地提高平台功能,以及治理和成本意识,从而将支出与交付的业务价值保持一致。这些模式将支柱的设计原则转化为具体的、可审查的实践:解决方案中寻找什么,好的是什么样子,以及破坏它的反模式。
## 设计原则
这些模式将资源和成本优化支柱的设计原则付诸实践。与[资源和成本优化](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.md)支柱一起阅读它们,了解每个支柱背后的完整指导。
- **优化总拥有成本** — 评估整个生命周期成本的决策,而不是短期成本最小化。
- **使支出与业务价值**保持一致 — 将每项投资与可衡量的业务结果联系起来,以便您可以发现不再获得回报的支出。
- **在平台限制内设计** — 将调控器限制视为初始设计中包含的架构约束,并有增长空间。
- **优化您已经支付**的资源 — 在购买更多容量之前,最大限度地提高配置的资产的吞吐量和效率。
- **将许可和**消耗与实际使用相匹配 — 将每个用户与工作所需的许可证相匹配,并设计自动化以高效调用计量服务。
- **建立财务治理和成本意识文化** — 将成本效益分析作为一项共同责任纳入设计决策,而不是部署后发现。
- **持续优化** — 持续监控支出和消耗,因为废物会逐渐累积,优先级也会发生变化。
## 如何使用这些模式
每个类别将**模式**(看起来不错)与**反模式**(应避免的内容)配对,这样您就可以逐个地区查看解决方案。从您需要的优化结果开始:
- **设计高效的解决方案形状?**使用**架构**实现可扩展的架构、数据模型设计和集成效率。
- **收紧代码本身?**使用**代码质量**进行批量化、调控器限制优化和性能最佳实践。
- **控制许可证支出?**使用**许可证管理**进行许可证优化、用户分配和权利管理。
- **减少存储和 API 消耗?**将**存储和 API 优化**用于数据归档、存储效率和 API 调用减少。
- **建立成本监督?**将**治理**用于成本跟踪、预算控制、使用情况监控和构建-购买决策。
- **生产中的操作客服人员?**将**代理模式**用于令牌效率、模型选择、信用消耗和客服人员成本监控。
## 模式类别
### [代理模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-agentic-patterns.md)
客服人员系统的资源和成本优化模式,包括令牌效率、模型选择、客服人员资源管理、信用消耗、TCO 建模和客服人员成本监控。
### [架构](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-architecture-patterns.md)
可扩展架构、数据模型设计、集成效率和系统优化的模式。
### [代码质量](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-code-quality-patterns.md)
高效代码、批量化、调控器限制优化和性能最佳实践的模式。
### [许可证管理](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-license-patterns.md)
许可证优化、用户分配、功能许可和权利管理的模式。
### [存储和 API 优化](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-storage-api-patterns.md)
数据归档、存储效率、API 调用减少和集成优化的模式。
### [治理](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization-governance-patterns.md)
成本跟踪、预算控制、使用情况监控、成本分配和构建与购买决策的模式。
## 相关资源
- [资源和成本优化](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/resource-and-cost-optimization.md)支柱 — 这些模式实施的设计原则和架构指导
- [客服人员企业资源和成本](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/agentic-enterprise-resource-and-cost-optimization.md)优化 — 基于客服人员的解决方案的优化指导
- [架构良好的框架](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/framework.md) — 资源和成本优化如何与其他支柱相结合
- [模式和反模式](https://architect.salesforce.com/docs/architect/zh-cn/well-architected/guide/patterns-and-anti-patterns.md) — 所有支柱的完整模式库
# 身份和访问权限管理 - 模式
了解有关 Well-Architected [Trust](/docs/architect/zh-cn/well-architected/guide/trust.html) → [身份和访问管理](/docs/architect/zh-cn/well-architected/guide/trust.html#identity-and-access-management)的更多信息
## 身份为主要周边
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 架构 | ✅ 访问控制在每个请求上明确验证身份,与网络位置或设备无关 |
| 平台 \| 架构 | ✅ 基于身份的安全控制取代了基于网络的Trust假设 |
| 平台 \| 组织 | ✅ 访问决策考虑谁在请求访问(身份验证)、他们被授权做什么(授权)以及上下文(设备、位置) |
| 平台 \| 文档 | ✅ 安全架构将身份记录为主要 Trust 边界,而不是网络周边 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 架构 | ⚏ 假设公司网络或 VPN 上的用户是可信的,并仅根据网络位置授予更广泛的访问权限 |
| 平台 \| 架构 | 访问控制依赖于网络周边,而不是身份验证 |
| 平台 \| 组织 | 访问决策不考虑上下文信号(设备、位置、时间、行为模式) |
| 平台 \| 文档 | 安全架构将网络位置视为主要 Trust 边界 |
## Salesforce 四层访问模型
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 解决方案利用所有四个 Salesforce 访问层:组织(许可证、功能)、对象 (CRUD)、字段 (FLS)、记录(共享) |
| 平台 \| 组织 | ✅ 自上而下设计访问模型(组织 → 对象 → 字段 → 记录),并自下而上验证 |
| 平台 \| 组织 | ✅ 对于包含敏感数据的对象,组织范围的默认值 (OWD) 设置为专用 |
| 平台 \| 组织 | ✅ 设置为“公用只读”的 OWD 仅限于参考对象(产品、价格手册),在这些对象中,广泛的可见性支持业务而不暴露风险 |
| 平台 \| 组织 | ✅ 组织级约束(许可证、IP 范围、登录时间、功能权限)定义了用户群的基线功能 |
| 平台 \| 组织 | ✅ 对象权限(通过简档和权限集)控制对用户细分的每个对象的创建、读取、编辑和删除访问权限 |
| 平台 \| 组织 | ✅ 字段级安全性保护敏感字段,即使授予对象访问权限 |
| 平台 \| 组织 | ✅ 记录级共享使用基于记录业务需求的角色层次结构和共享规则 |
| 平台 \| 组织 | ✅ 访问权限在限制性基准的基础上有意扩展,在允许默认设置后不受限制 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | 访问模型没有利用所有四个层(组织、对象、字段、记录) |
| 平台 \| 组织 | ⚠ ⸏ OWD 设置为公用读/写,以便在开发期间不受限制地计划 |
| 平台 \| 组织 | 随着数据量的增长和业务流程的结晶,提前设置的过度宽松的 OWD 变得越来越难以限制 |
| 平台 \| 组织 | 未配置字段级安全性,仅依赖对象或记录级访问控制 |
## 身份验证架构
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 对访问生产环境的所有用户强制实施多重身份验证 (MFA)(UI 访问权限强制实施) |
| 平台 \| 组织 | ✅ MFA 扩展到特权操作,包括批量数据导出、权限更改和管理配置 |
| 平台 \| 组织 | ✅ 单点登录 (SSO) 使用 SAML 2.0 或 OpenID Connect 协议 |
| 平台 \| 组织 | ✅ 会话超时配置正确:标准用户为 2 小时,管理员和访问受限数据的用户为 15-30 分钟 |
| 平台 \| 组织 | ✅ 对管理简档和集成用户强制实施 IP 限制 |
| 平台 \| 组织 | ✅ 登录时间将服务帐户限制为预期操作窗口 |
| 平台 \| 组织 | ✅ 本地设备激活会验证从无法识别的设备登录;MFA 和 IP 限制增加了对高权限帐户的保护 |
| 平台 \| 组织 | ✅ 如果启用了 SSO,批准的管理员用户具有直接登录访问权限(打破常规程序) |
| 平台 \| 组织 | ✅ 登录 Salesforce 的用户和实体之间的关系是 1:1(没有共享用户帐户) |
| 平台 \| 组织 | ✅ API 访问控制阻止用户通过未经授权的连接的应用程序进行身份验证 |
| 平台 \| 命名凭据 | ✅ 命名凭据和外部凭据通过轮换功能集中管理身份验证 |
| 平台 \| 命名凭据 | ✅ 命名凭据从代码中抽象身份验证详细信息,无需更改代码即可实现凭据更新 |
| 平台 \| 命名凭据 | ✅ 凭据从不嵌入代码、配置文件或版本控制 |
| 平台 \| Apex | ✅ 执行身份验证的方法使用命名凭据来处理用户名/密码流 |
| 平台 \| Apex | ✅ 没有用户名或密码以可读的格式显示在代码中(没有硬编码的值或字符串) |
| 平台 \| Aura | ✅ 执行身份验证的方法使用命名凭据来处理用户名/密码流 |
| 平台 \| Aura | ✅ 没有用户名或密码以可读的格式显示在代码中 |
| 平台 \| Lightning Web 组件 (LWC) | ✅ 使用命名凭据执行身份验证的方法 |
| 平台 \| Lightning Web 组件 (LWC) | ✅ 代码中不显示用户名或密码 |
| 集成 \| API | ✅ OAuth 2.0 JWT 不记名流用于可信环境中的服务器到服务器集成(生产集成的首选) |
| 集成 \| API | ✅ OAuth 2.0 Web 服务器流用于需要用户上下文的服务器到服务器集成 |
| 集成 \| API | ✅ OAuth 2.0 设备流用于无头设备;CLI 和 CI/CD 工具使用 Web 服务器流(`sf org login web`)或 JWT 不记名流(`sf org login jwt`)——自 2025 年 8 月 28 日起,默认 Salesforce CLI 连接的应用程序的设备流被阻止 |
| 集成 \| API | ✅ 不使用用户名-密码 OAuth 流;依赖它的现有集成迁移到 JWT 不记名或客户端凭据流 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | ⚏ 未对生产环境访问权限强制执行 MFA |
| 平台 \| 组织 | 登录配置不符合 Salesforce MFA 要求 |
| 平台 \| 组织 | ⚏ MFA 未扩展到特权操作(批量导出、权限更改、管理配置) |
| 平台 \| 组织 | 会话超时未配置或权限过大(>24 小时) |
| 平台 \| 组织 | 会话策略不区分标准用户和访问受限数据的管理员/用户 |
| 平台 \| 组织 | 未对管理简档和集成用户强制执行 IP 限制 |
| 平台 \| 组织 | ⚏ 服务帐户的登录时间限制在预期的操作窗口 |
| 平台 \| 组织 | ⚠ 高权限帐户仅依赖于设备激活 — 未添加 MFA 或 IP 限制 |
| 平台 \| 组织 | ⚠ ⸏ 如果启用了 SSO,则任何批准的管理员用户都没有直接登录访问权限(没有破解程序) |
| 平台 \| 组织 | 用户和实体之间的关系不是 1:1(存在共享用户帐户) |
| 平台 \| 组织 | 未启用 API 访问控制 |
| 平台 \| 命名凭据 | 凭据直接嵌入代码、配置文件或版本控制 |
| 平台 \| Apex | 用户名和密码以可读的格式显示在代码中 |
| 平台 \| Apex | 身份验证是临时处理,没有一致的实施 |
| 平台 \| Aura | 身份验证是临时处理的,没有命名凭据 |
| 平台 \| Aura | 用户名和密码显示在代码中 |
| 平台 \| Lightning Web 组件 (LWC) | 身份验证是临时处理的,没有命名凭据 |
| 平台 \| Lightning Web 组件 (LWC) | 用户名和密码显示在代码中 |
| 平台 \| 业务 | 用户配置和取消配置 SLA 和要求不存在 |
| 集成 \| API | 当更安全的 OAuth 流可用时,使用用户名-密码 OAuth 流 |
| 集成 \| API | OAuth 范围权限过大(在有限范围足够时具有完全访问权限) |
| 集成 \| API | ⚠ 客户端凭据(客户端 ID、客户端密码)不安全地存储在代码或配置文件中 |
## 授权和访问控制
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 角色层次结构深度最大为 5-7 级(避免性能开销和故障排除复杂性) |
| 平台 \| 组织 | ✅ 权限集和权限集组提供灵活的附加访问权限,不会增加简档 |
| 平台 \| 组织 | ✅ 权限集授予对特定工作职能、应用程序或临时提升权限的访问权限 |
| 平台 \| 组织 | ✅ 权限集小组将相关权限集与异常禁用功能相结合 |
| 平台 \| 组织 | ✅ 所有功能访问权限通过权限集和权限集组(而非简档)授予,随着工作角色的发展提供灵活性 |
| 平台 \| 组织 | ✅ 事务安全性策略通过实时上下文评估扩展授权 |
| 平台 \| 组织 | ✅ 事务安全性策略检测并阻止异常行为(批量数据下载超过模式、从意外地理区域登录、更改窗口外部的权限更改) |
| 平台 \| 组织 | ✅ IP 限制针对高度敏感的操作或数据访问进行配置 |
| 平台 \| 组织 | ✅ 为每个集成配置唯一的仅 API 集成用户 |
| 平台 \| Apex | ✅ 所有访问数据的代码都使用 WITH USER_MODE、 WITH SYSTEM_MODE 关键字或 Security.stripInaccessible() 方法强制执行 CRUD 和 FLS |
| 平台 \| Apex | ✅ SOQL 查询根据业务需求明确使用 WITH USER_MODE 或 WITH SYSTEM_MODE 关键字 |
| 平台 \| Apex | ✅ DML 操作在插入/更新/更新插入操作之前使用 Security.stripInaccessible() 进行访问强制 |
| 平台 \| Apex | ✅ 数据库 DML 语句明确声明数据操作的用户或系统模式 |
| 平台 \| Apex | ✅ 数据库操作使用 stripInaccessible() 方法来筛选查询和子查询结果 |
| 平台 \| Apex | ✅ 共享关键字(带共享、不带共享、继承共享)根据业务安全要求适当使用 |
| 平台 \| 设计标准 | ✅ 授予提升权限的用例(修改所有数据、查看所有数据)有明确的业务理由文档 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | ⚏ 角色层次结构比 5-7 级别更深,在共享计算和故障排除复杂性方面会产生性能开销 |
| 平台 \| 组织 | 角色层次结构授予广泛的访问权限,无需业务证明 |
| 平台 \| 组织 | ⚏ 简档会重复复制,以进行少量权限更改,从而创建几十个区分不清的简档 |
| 平台 \| 组织 | 简档包含元数据的访问控制(应使用权限集) |
| 平台 \| 组织 | 未实施事务安全性策略来检测异常行为 |
| 平台 \| 组织 | ⚏ IP 限制未针对高度敏感的操作或数据访问进行配置 |
| 平台 \| 组织 | 仅使用 API 的用户未配置或在多个集成之间共享 |
| 平台 \| 组织 | 查看所有数据或修改所有数据权限是在没有书面说明的情况下授予的 |
| 平台 \| Apex | ⚏ SOQL/SOSL 查询和 DML 操作在默认系统模式下运行,没有显式的访问权限检查 |
| 平台 \| Apex | CRUD 和 FLS 实施不一致或缺失 |
| 平台 \| Apex | SOQL 依赖于 WITH SECURITY_ENFORCED,它已被删除,现在会导致编译错误(用 USER_MODE 替换) |
| 平台 \| Apex | 共享关键字的使用不一致或根本不使用 |
| 平台 \| 设计标准 | 授予提升权限的用例没有明确记录 |
## 基于属性的访问控制 (ABAC) 和 Data 360
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| Data 360 | ✅ RBAC(角色、简档、权限集)控制平台访问权限(谁可以使用 Data 360),ABAC 控制数据访问权限(他们根据属性看到什么数据) |
| 平台 \| Data 360 | ✅ AI 客服人员在请求用户的上下文中执行(代表),因此客服人员生成的查询受该用户访问权限的约束,而不是以系统级访问权限运行 |
| 平台 \| 文档 | ✅ 数据分类分类包含属性定义、实施规则和业务理由 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| Data 360 | ⚏ 必须遵循数据分类的访问权限是通过角色层次结构和共享来强制的,角色层次结构和共享不能表达数据分类,而不是达到基于属性的访问控制 |
| 平台 \| Data 360 | FLS 绕过:没有字段级访问权限的用户通过不强制实施 FLS 的 API 或 SOQL 查询检索数据 |
| 平台 \| Data 360 | AI 客服人员查询数据,而不在请求用户的上下文中执行;客服人员生成的查询绕过对象、字段和记录级别的访问控制 |
| 平台 \| Data 360 | 客服人员执行上下文不包括用户代表属性;客服人员使用系统级访问权限操作 |
| 平台 \| 文档 | 数据分类分类没有记录;属性定义因团队而异,导致实施不一致 |
## 关键影响客户
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 组织 | ✅ 在资产库存中识别和跟踪关键影响客户(系统管理员、集成用户、自动化流程客户) |
| 平台 \| 组织 | ✅ 重要影响客户代表高价值目标,因为提升的权限提供了广泛的平台访问权限 |
| 平台 \| 组织 | ✅ MFA 需要硬件安全密钥或身份验证应用程序(非短信,这容易受到 SIM 交换的影响) |
| 平台 \| 组织 | ✅ 登录 IP 范围仅限于已知管理位置 |
| 平台 \| 组织 | ✅ 启用登录提醒和权限更改通知 |
| 平台 \| 组织 | ✅ 每季度使用记录证明进行访问审查 |
| 平台 \| 组织 | ✅ 存在使用后审计的紧急访问的打破玻璃程序 |
| 集成 \| 服务客户 | ✅ OAuth 流用于集成和服务帐户(不要使用用户名-密码) |
| 集成 \| 服务客户 | ✅ 对集成用户强制实施 IP 限制 |
| 集成 \| 服务客户 | ✅ 实施凭据轮换计划(每季度或每份保单) |
| 集成 \| 服务客户 | ✅ 通过 Event Monitoring 监控异常 API 使用模式 |
| 集成 \| 服务客户 | ✅ 每个集成都有一个具有最低所需权限的专用服务帐户(不是具有广泛访问权限的共享“集成用户”) |
| 集成 \| 服务客户 | ✅ 服务帐户应用的权限最低,因为它们在无人参与的情况下操作 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | 重要影响客户(管理员、集成、自动化)未被识别、跟踪或清点 |
| 平台 \| 组织 | 系统管理员使用基于 SMS 的 MFA,而不是硬件安全密钥或身份验证应用程序 |
| 平台 \| 组织 | 重要影响客户没有登录时间或 IP 限制 |
| 平台 \| 组织 | 没有为特权帐户的登录或权限更改配置警报 |
| 平台 \| 组织 | 重要影响客户访问权限从不定期审核或审核(非每季度) |
| 平台 \| 组织 | ⚠ 没有用于紧急访问的破碎玻璃程序 |
| 集成 \| 服务客户 | ⚠ 单个“API 用户”帐户在多个集成中共享,并具有修改所有数据权限 |
| 集成 \| 服务客户 | ⚠ 服务帐户在 OAuth 可用时使用用户名-密码身份验证 |
| 集成 \| 服务客户 | ⚠ 服务帐户凭据使用多年不变的静态密码(无轮换) |
| 集成 \| 服务客户 | ⚠ 服务帐户的权限超出集成要求 |
| 集成 \| 服务客户 | 不监控服务客户的异常 API 使用模式 |
## 身份生命周期管理
**模式**
| 何处查看 | 好样的 |
| --- | --- |
| 平台 \| 进程 | ✅ 身份生命周期包括:配置(使用基准访问权限创建)、访问权限调整(在角色更改时授予/撤销)、定期重新认证(每季度验证)、取消配置(立即撤销) |
| 平台 \| 组织 | ✅ 实施 SCIM(跨域身份管理系统),用于身份提供商的自动配置 |
| 平台 \| 进程 | ✅ 配置创建具有匹配作业功能的基准访问权限的客户,由 HR 系统事件触发 |
| 平台 \| 进程 | ✅ 访问权限调整会在角色扩展时授予额外权限,并在角色更改时撤销权限 |
| 平台 \| 进程 | ✅ 每季度定期进行重新认证,经理可为其团队审核和验证访问权限 |
| 平台 \| 进程 | ✅ 取消配置会在雇用结束或角色不再需要 Salesforce 时立即撤销访问权限 |
| 平台 \| 组织 | ✅ 自动检测识别 90 天内未登录的用户,并触发访问审查工作流 |
| 平台 \| 组织 | ✅ 即时 (JIT) 配置在适当时自动从 SSO 创建用户 |
**反模式**
| 何处查看 | 什么不好的样子 |
| --- | --- |
| 平台 \| 组织 | 尽管有身份提供商集成,但 SCIM 配置没有实施 |
| 平台 \| 进程 | ⚏ 无需标准入职程序即可手动创建新用户 |
| 平台 \| 进程 | 初始用户访问权限不一致或基于复制现有用户 |
| 平台 \| 进程 | ⚏ 角色更改或转移的访问权限更改延迟或未完成 |
| 平台 \| 进程 | 离职被延迟;前员工在终止后保留访问权限(非当天停用) |
| 平台 \| 组织 | 用户配置没有自动化(仅限手动用户创建) |
| 平台 \| 进程 | 不存在访问权限重新认证市场活动(没有季度或年度审核) |
| 平台 \| 进程 | 不会删除在重新认证期间发现的不必要访问权限 |
| 平台 \| 进程 | ⚏ 对特权帐户、跨组织访问权限、外部用户的访问权限重新认证不严格 |
| 平台 \| 组织 | ⚏ 休眠帐户(90 多天内未登录)累积,无需审核或停用 |
# 适用于客服人员企业的卓越运营

## 概览
客服人员系统的卓越运营扩展了传统的 DevOps 实践,以解决 AI 客服人员的独特特征:非确定性行为、依赖于上下文的推理和记忆、目标复杂性和可变的推理成本。常规应用程序遵循可预测的代码路径,但客服人员会根据上下文生成新颖的响应。传统监控跟踪已知度量,而客服人员可观察性需要了解语言模型推理和决策模式。标准测试会验证确定性输出,但客服人员验证会跨多个维度评估响应质量,包括准确性、相关性、安全性和公平性。
产品和系统会随着时间的推移而变化,因此应用以下五个设计原则,将卓越的运营嵌入您的运营方式:通过可观察性进行发展,标准化运营程序,拥抱 DevOps 文化,自动化提高效率,并从所有运营事件中学习。核心卓越运营原则“通过可观察性发展”对客服人员系统至关重要,因为客服人员行为来自提示、检索的上下文、模型行为和对话历史之间的复杂交互,而不是确定性代码执行。架构师无法在设计时预测每个客服人员响应,因为响应由模型、提示和实时上下文决定,所以设计时要考虑可观察性和防护。综合可观察性揭示了客服人员在实际条件下的行为方式。当客服人员产生意外的输出时,这种可见性支持数据驱动的改进和快速问题诊断。
“作为代码操作”为客服人员提供了新的维度。传统的基础设施即代码扩展到提示版本、模型配置管理和客服人员部署自动化。客服人员操作程序解决模型版本更改、提示演变和 Knowledge 库更新,以及常规部署和回滚操作。
通过客服人员系统,“从所有运营事件中学习”变得更有价值。客服人员事件通常显示微妙提示的工程问题、脚本和编排错误、Knowledge 库差距或意外的用户交互模式。验尸与客服人员遥测的系统分析相结合,将操作经验转化为随着时间的推移而复合的组织能力。
## 客服人员可观察性架构
### 对话记录和审计跟踪
完整的对话记录构成了客服人员可观察性的基础。捕获每个对话,包括用户输入、客服人员响应、推理步骤、调用的操作、检索的数据和最终结果。此遥测服务于多种目的:调试特定事件、跨许多交互的质量分析、合规性审计、模型改进和使用模式分析。
通过自定义构建的日志记录,使用本地会话跟踪模型。Agentforce 会话跟踪在 Data 360 的统一数据模型中捕获客服人员交互数据,而不是要求您构建并行遥测系统。会话跟踪数据模型 (STDM) 将对话记录为跟踪层次结构。每个会话包含交互(轮次),每个交互包含步骤(UserInputStep、LLMExecutionStep、FunctionStep),步骤包含消息(用户和客服人员通信)。STDM 使用标准 Data 360 对象,例如 AIAgentSession、AIAgentSessionParticipant、AIAgentInteraction、AIAgentInteractionStep 和 AIAgentInteractionMessage。交互携带分布式跟踪标识符 (TelemetryTraceId 和 TelemetryTraceSpanId),步骤携带跨度标识符 (TelemetryTraceSpanId),反映了 OpenTelemetry 风格的跨度模型。
将客服人员对话建模为跟踪和跨度是客服人员可观察性的行业标准方法,重复使用本机模型可以避免手动构建对象遇到的规模问题:存储多轮对话、大型 JSON 负载和快速数据增长。构建自定义事务对象来记录对话是一个蓄意的例外 — 例如,一个轻量级的自定义对象,将客服人员行为与业务结果相关联,而不是与主要记录基底相关联。
会话和对话元数据捕获关键上下文,包括会话和交互标识符、用户身份、客服人员身份、开始时间和结束时间。STDM 还将每个交互步骤链接到其大语言模型 (LLM) 调用记录(通过 GenerationId 和 GenAiGatewayRequest/Response 引用)。令牌使用情况、模型和提示详细信息可通过这些联接获得,而不是存储为会话字段。元数据支持为模式分析筛选和聚合对话。
交互和步骤级详细信息捕获每个轮次,包括用户输入、客服人员响应、推理解释(在可用时)、置信度分数、检索的上下文、尝试的操作和遇到的错误。步骤级跟踪支持详细的事件调查,以准确重建推理链中每个点发生的情况。
操作步骤会记录客服人员采取的每个操作,包括 API 调用、数据修改、外部系统交互和调用的集成。操作记录回答了“此客服人员更改了什么?”和“此客服人员访问了哪些系统?”等问题。这些答案支持安全调查和合规要求。STDM 将本地捕获操作作为交互步骤。
Atlas 推理引擎中的原因跟踪揭示了客服人员的决策过程,有助于诊断客服人员选择具体行动或生成特定响应的原因。会话跟踪会将计划员的步骤记录为每次交互的一部分。公开推理的深度取决于模型和规划器,但在可用时,这些跟踪会显著提高可调试性。
Einstein Trust 层生成式 AI 审计跟踪会捕获每个生成式 AI 交互、提示和响应文本(包括个人身份信息 (PII) 屏蔽版本)、检索的基础数据、响应安全和毒性分数以及 LLM 模型详细信息,所有这些都会流式传输到 Data 360 并存储在 Data 360 中。打开 Einstein 生成式 AI 和反馈数据收集和存储,以便在 Data 360 中捕获审计和反馈数据,您可以在 Data 360 中通过 Data 360 报告对其进行查询和分析,以便长期保留。
> **示例:**
>
> 良好:存储在自定义 Salesforce 对象中的对话日志,其中包含用户输入、客服人员响应、采取的操作、令牌消耗和对话结果的字段。仪表板按客服人员和用例显示对话成功率。更好:综合日志记录包括显示客服人员决策过程的推理跟踪、显示基于什么信息的响应的检索上下文以及表示不确定性的置信度分数。最佳:对话分析将客服人员行为与业务结果相关联,通过模式分析确定改进机会,并使用带有质量标签的示例提供持续学习漏斗。
### 客服人员绩效监控
监控运营绩效,确保客服人员满足服务级别,并在预期参数内运营。
**响应延迟**跟踪从用户输入到客服人员响应的端到端时间。延迟直接影响用户体验。以百分位数 (p50、p95、p99) 衡量延迟,揭示典型性能和最糟糕的情况。当 p95 延迟超过阈值表示性能下降时发出警报。
客服人员的延迟因素包括模型推理时间、数据和上下文检索持续时间、外部工具和操作执行以及网络延迟。分别检测每个阶段,以便在整体延迟超过目标时实现有针对性的优化。
**令牌消耗**衡量每个对话、每个客服人员和每个用例使用的令牌。令牌消耗会增加推理成本,并影响响应时间(更多的令牌需要更多的推理计算)。跟踪令牌分发,揭示实际使用是否与预测匹配。检测消耗过多令牌的异常对话,提示提示问题或滥用。
令牌度量包括提示令牌(模型的输入)、完成令牌(模型输出)和总令牌(提示和完成的总和)。提示令牌比完成令牌更容易控制。优化提示和检索的上下文,减少提示令牌消耗,同时保持质量。
**吞吐量监控**会跟踪并发对话、每秒请求和对话量趋势,并有助于项目容量和扩展要求。将当前吞吐量与在接近阈值时提醒的已知速率限制或容量基线进行比较。
**错误率跟踪**按类型监控失败,包括特定于模型的错误、超时错误、拒绝权限错误和外部集成失败。错误模式显示了需要补救的系统问题。计算错误率占请求总数的百分比,以便在客服人员和时间段之间进行比较。
区分需要不同响应的错误类别。特定于模型的错误可能需要及时调整或切换到更好的模型。权限错误需要更改安全配置。集成错误需要外部系统调查或断路器激活。
**可用性监控**衡量客服人员的正常运行时间和成功操作周期。将可用性计算为客服人员成功响应请求的时间百分比。根据服务级别目标 (SLO) 跟踪可用性,在可用性低于目标时主动响应。
**Proactive Monitoring** 评估您的组织是否存在平台异常和资源利用问题,这些问题会影响客服人员基础设施的健康。它会在信号升级为用户可见的问题之前显示它们。使用它保持领先于基础设施级条件(例如异常 API 活动或资源消耗趋于平台限制),这些条件可能会降低客服人员的性能。根据客服人员的正常工作基线查看其信号,以便您可以区分可操作的异常和预期的变化。
### 质量度量和评估
持续监控响应质量,在影响业务结果之前检测降级。在平台提供内置评估工具时,使用它们,而不是自定义或手动流程。从本地测试和评估工具开始。Agentforce 测试中心允许您维护可重用的测试用例集,并针对它们批量运行客服人员,检查客服人员是否选择了预期的主题和操作,并产生了可接受的响应,而不是构建和运行自己的测试工具。它还支持本地评估者,包括现成的质量维度和用于对对话质量进行评分的 LLM 作为判断者的方法,并允许为特定于组织的标准编写自定义评估者。在测试集中使用代表对话,以便评估反映真实使用情况。
**回复准确性**衡量客服人员回复是否包含正确信息。准确的评估需要已知答案声明或人工审核。对于具有已知答案的事实问题,自动评估会将客服人员的回答与正确回答进行比较;将这些回答作为测试用例保存在测试中心,以便进行可重复的评估。对于开放式问题,人工评估员会评估抽样对话的准确性。跟踪一段时间内的准确性趋势,揭示提示性更改、模型更新或 Knowledge 库修改是提高还是降低性能。
**回复相关性**衡量客服人员的回复是否适当地解决了用户问题,即使它们并不完全准确。相关回复了解用户意图,并提供帮助信息,即使不可能提供完整的答案。通过本地评估器(如果可用)、对抽样对话的人工审核和用户信号来评估相关性。对于基于 Knowledge 库的客服人员,本地检索质量分析可以评估回复的上下文相关性、答案相关性和忠诚度(基于)。
**防护**系统会检测不安全、不适当或有害的响应,包括偏见、攻击性内容、危险建议和超出范围的响应。Einstein Trust 层在运行时将毒性检测应用于 LLM 交互,这是您的第一道防线。通过内容筛选、手动审查抽样、用户报告机制和公平性审计来改善安全监控,从而评估人口统计组之间的结果分布。
**用户满意度**度量捕获主观体验质量。Agentforce 反馈流入 Einstein 的生成式 AI 审计和反馈数据模型(Data 360 中的 GenAIFeedback/GenAIFeedbackDetail)。这些模型从人或系统源捕获明确的用户信号(拇指向上/向下、接受/拒绝、编辑和逐字评论),以及网关请求和生成数据。在您需要的地方捕获明确的反馈(在升级前、对话结束后和通过跟进调查询问),并将明确和隐式信号结合起来以获得全面的质量视角。
### 模型漂移检测
Salesforce 提供各种模型表面。生成层提供运行在以下对象的对话推理客服人员:Agentforce 托管的模型在 Salesforce Trust 边界内提供现成的推理,并将您自己的 LLM (BYOLLM) 链接带到外部 LLM 或提供商。预测层为客服人员提供基于以下内容的决策的结构分数:BYOM 从外部托管的平台提取零复制预测分数,本地 Einstein 模型对 CRM 对象产生自动评分和分类。这些表面共同允许自主客服人员使用自然语言进行推理,同时将其工作流基于结构化的统计数据。
模型漂移的监控器,它指示性能随时间下降或条件变化需要调整。在每个主要版本投入生产之前,查看发行说明并在 Sandbox 中测试关键用例。使用发布矩阵和 Sandbox 预览窗口,以尽早发现兼容性问题。
当客服人员的准确性、相关性或安全性随时间下降时,会出现**性能偏差**。随着时间的推移跟踪质量度量,以检测具有统计学意义的下降。性能漂移可能由模型退化、Knowledge 库过时、提示与不断变化的使用模式不一致或输入与目标输出之间的关系发生变化的概念漂移引起。
在初始客服人员部署后立即建立基准性能,衡量代表性测试用例的准确性、相关性、安全性和满意度。根据相同的测试用例定期重新评估,揭示与使用模式变化无关的性能变化。
当质量度量下降超过可接受的阈值时发出警报。根据业务影响容限定义阈值。一些用例容忍适度的质量下降;其他用例需要立即响应任何下降。
当用户输入模式从训练或调整数据分布中发生显著变化时,会出现**分布漂移**。当客服人员遇到并非设计用于处理的输入类型时,分发偏差会降低性能。监控输入特征,包括问题长度、主题分布、语言复杂性和检测显著变化的领域术语。
将当前输入分布与历史基准进行比较。大型分发轮班可以指示新的用例、不断变化的用户行为或不断发展的业务流程。分发轮班可能需要即时更新、Knowledge 库扩展或客服人员功能增强。
当客服人员响应模式意外改变时,会出现**行为偏差**。监控响应特征,包括平均响应长度、操作调用率、升级频率和错误模式。重大行为更改可以指示提示问题、模型问题或基础系统更改。
在生产早期建立行为基准,捕获正常操作特征,例如常规性能模式、工具使用和决策路径。这些基准成为稍后异常检测评测的基准。将正在进行的行为与基线进行比较,并在偏差超过预期变化时发出警报。
**自动警报**支持主动漂移响应。配置在漂移度量超过阈值时触发调查和潜在补救的警报,包括及时调整、Knowledge 库更新、测试集扩展或 BYOM 模型重新训练。
### 异常检测和警报
自动检测需要调查的异常客服人员行为。
**成本异常**,包括令牌消耗峰值、推理率增加或总成本加速。成本飙升可能表示提示问题导致令牌生成过多、滥用或误用导致意外使用,或基础设施问题导致冗余调用。
监控令牌消耗分配,检测异常对话。调查消耗典型令牌计数 10 倍的对话,以了解它们是否代表合法的边缘个案或需要修复的问题。
**错误率峰值**,包括故障率的突然增加、基线中不存在的新错误类型或影响特定用户、客服人员或用例的局部错误集中。错误峰值通常在客户看到质量下降问题之前出现。主动检测可在广泛影响前进行补救。
**响应模式变化**,包括响应长度、操作调用频率或升级率变化的突然变化。模式更改可能表示提示问题、模型行为更改或演变的使用模式。
当用户以更高的速度放弃对话时,**对话放弃增加**,这表示质量下降、延迟增加或功能不足。按对话阶段跟踪放弃情况,确定用户是在初始交互、对话中还是在尝试任务完成后放弃。放弃模式显示了特定的改进机会。
设计警报架构,平衡快速通知和警报疲劳。将关键客服人员故障立即路由到随叫随到的工程师。在工作时间将质量下降警告发送给产品团队进行调查。将微小的异常汇总到每日摘要中,以便进行趋势分析。
## 客服人员生命周期和机器学习操作
### 提示版本控制和管理
版本控制提示、配置和模型元数据支持回滚、A/B 测试和审计跟踪维护。
**提示模板**是在提示生成器中创建的可重用提示,用于定义客服人员的目标、约束和品牌准则,以及动态基础数据的占位符,例如客户或产品详细信息。将提示模板与应用程序代码一起存储在 Git 中,将提示视为关键应用程序逻辑,应与代码一样严格。提示更改通过代码审查、测试和受控部署。
使用提示生成器进行具有版本历史和测试功能的迭代提示开发。将提示模板用作客服人员操作时,请在提示生成器中预览模板,以确认合并字段解析正确。然后,使用测试中心运行端到端测试,确认客服人员选择操作并生成正确的输出。
将生产就绪提示导出到版本控制,在提示生成器开发和源控制的部署漏斗之间创建同步。
**配置管理**跟踪型号选择、温度设置、检索配置和功能标记。将配置存储为代码,以便您可以使用特定于环境的值、自动化部署并检测配置偏差。
**语义版本**适用于客服人员版本。主要版本表示破坏性更改,例如修改的输入/输出合同或显著更改的行为。次要版本表示功能添加或改进,以保持兼容性。补丁版本表示缺陷修复。版本号会向运营团队和用户传达变更影响。
为客服人员组件实施语义版本,包括提示模板、客服人员配置和 Knowledge 库。日志中的版本号允许事件与特定部署关联。
**变更文档**记录了提示变更、配置修改和模型更新的理由。记录更改的内容、更改的原因、验证更改的测试以及存在哪些回滚程序。变更文档加快了事件调查和Knowledge转移。
### 模型注册表和部署跟踪
维护模型版本、提示、配置和部署历史的全面注册表。
**模型注册表**记录部署哪些模型版本,包括模型系列、特定版本、微调状态、部署环境(生产、暂存和开发)、部署日期和负责团队。注册表为客服人员基础设施状态提供了单一的真实来源。
**部署跟踪会**记录每个客服人员部署,包括部署的版本、环境、部署时间戳、部署用户、获得的批准和部署结果。使用部署历史记录在出现问题时评估影响(例如,“哪些客服人员在此事件开始前已部署?”),并支持合规报告。
**依赖性跟踪**映射客服人员、提示、Knowledge 库、操作和集成之间的关系。当共享 Knowledge 库更新时,依赖性跟踪会揭示哪些客服人员受到影响。当外部集成更改时,依赖性跟踪会识别受影响的客服人员。
明确记录依赖性,而不是在事件期间发现它们。创建通过开发和部署流程维护的依赖关系图。
**弃用策略**定义了模型版本的生命周期,包括支持持续时间、弃用时间表和迁移要求。明确的弃用策略管理技术债务,防止无限期支持旧模型版本。制定弃用计划,提前足够时间传达时间表,以便进行计划的迁移,而不是对强制弃用做出应急响应。沟通良好且策略支持的最小通知期为重要更改提供了足够的迁移时间。
通过**回滚程序**,团队可以快速从有问题的部署中恢复。记录每个客服人员的回滚程序,并包含以下内容:
- 触发回滚的条件
- 还原到哪个版本
- 如何执行回滚
- 谁授权和执行回滚
- 哪些测试确认回滚成功,以及通知哪些团队。
在非生产环境中定期测试回滚程序,以便在生产事件期间依赖它们之前确认它们是否正常工作。通过模拟部署进行演练,以便团队确切知道要做什么。未经测试的回滚程序通常在最需要的时候失败。
### 持续训练和域适应
通过持续培训、微调和细化工作流,保持客服人员质量。
**反馈收集**系统收集用户反馈、人工审核更正、质量评估和结果评测。反馈为改进提供原材料。如果没有系统收集,改进就变成了猜测。通过在升级前、对话结束后或通过跟进调查提问来收集明确的反馈。通过完成率、升级频率和重试模式收集隐式反馈。组合显式和隐式信号,提供全面的质量视角。
**数据策划**通过策划、质量审查和偏见检查来维护高质量的训练数据集。训练数据质量直接决定模型质量。糟糕的数据会产生不可靠的模型;出色的数据会产生卓越的性能。
通过以下方式将对话日志纳入训练数据集:
- 筛选质量 - 包括高评级对话和成功结果
- 删除有问题的例子 - 包括违反安全和错误
- 确保代表性 - 包括不同的场景和边缘个案
- 重复数据消除 - 删除几乎相同的示例
**使客服人员适应**您的领域 -- -- 专门的词汇、独特的业务流程、特定于组织的 Knowledge -- -- 主要通过基于 Data 360 的检索扩充生成和提示调整 -- -- Salesforce 本地路径。
Salesforce 中没有对生成模型进行微调;您可以通过 AI 模型和提示生成器选择和配置模型。当接地不足时,从外部微调,然后通过 BYOLLM 连接。
使用提示生成器根据性能数据迭代**改进提示**。提示工程是持续的实践,而不是一次性的实践。随着使用模式的发展、业务流程的变化和用户期望的变化,提示需要调整以保持最佳性能。
建立定期的提示审查节奏,检查最近的对话、质量度量和用户反馈,以确定改进机会。通过 A/B 测试在全面推出前验证改进,逐步实施提示性更改。
**评估自动化**对等待的测试集运行质量评估,从而快速评估改进候选人。自动评估提供了客观的测量,补充了主观的人的评估。
维护测试集,涵盖幸福之路、边缘个案、对抗性输入和历史问题场景。设置测试自动化,以定期运行测试场景。包括自动结果监控、阈值和通知,以提醒管理员异常。这种自动测试对于检测外部因素(例如模型漂移)的不利影响至关重要。
在生产中出现新的边缘个案时,不断扩展测试集。测试自动化是关键,但也要定期运行手动抽查、一次性测试和大猩猩测试,以确保您的客服人员部署抵御边缘个案。
### 逐步推出和 A/B 测试
逐步部署客服人员变更,并在全面推出前监控质量,以限制问题的爆发半径。当更改跨越多个区域时(提示、模型配置、操作、基础训练、集成),它会以测试没有发现的方式降低行为。当出现这种情况时,导致的质量回归很少指向单一、明显的根本原因。一次运送一个小的更改,以便回归可以追溯到其来源,并首先将每个更改释放到有限的流量层,以便在您诊断时控制影响。
通过部署在配置后禁用功能的客服人员,**功能标记**可将部署与发布分离。使用逻辑或自定义元数据类型或自定义设置实施功能标记。功能标记支持在生产环境中进行测试,而无需向用户公开功能、向特定用户群逐步推出、比较实施的 A/B 测试,以及通过禁用标记而不重新部署来即时回滚。
对客服人员的重大更改使用功能标记,其中故障的爆发半径可能很大,例如影响业务关键客服人员的更改、生产行为不确定的新推理模式与外部系统的集成,其中交互模式可能与测试不同。
在更广泛的推出之前,**金丝雀部署**会先将客服人员更改为小用户子集,以监控错误率、质量度量和性能。使用权限集控制金丝雀部署 — 将客服人员访问权限限制为用户子集,或根据用户属性在编排逻辑中进行筛选。
监控和衡量成功率、回复质量和用户反馈。将金丝雀度量与使用上一个客服人员版本的对照组进行比较。仅在金丝雀展示同等性能或改进性能时扩展推出。
**A/B 测试会**比较评测质量、成本和用户满意度的客服人员变体。A/B 测试为改进决策提供了经验证据。将变体部署到随机选择的用户子集,确保统计有效性。跨多个维度(准确性、满意度、成本和延迟)衡量结果,提供全面的比较。
在开始 A/B 测试之前,定义成功条件和假设。明确的标准可以防止一些度量提高而其他度量降低时出现不明确的结果。成功标准应与业务目标保持一致(例如,“变量 B 必须与变量 A 的准确率在 2% 以内匹配,同时降低成本 15%”)。
与当前冠军版本相比,**冠军挑战者测试**会将改进的客服人员版本部署到流量子集。拥护者-挑战者模式通过将经过验证的版本维护为后备版本来管理改进风险。如果挑战者表现不佳,请恢复为拥护者,而不会影响用户。如果挑战者表现优异,请将其升级为新冠军。
建立客观的促销标准,包括统计有效性的最小样本量、挑战者必须超过的质量阈值以及促销决策前的评估持续时间。记录促销决策,创建客服人员版本更改原因的审计跟踪。
## 客服人员失败的事件响应
### 事件检测和分类
通过全面监控,建立事件检测,快速识别客服人员操作问题。
**客服人员失败模式**与传统应用程序失败不同。常见故障模式包括:
- 幻觉 - 生成似是而非的信息
- 主题外回复 - 误解用户意图
- 成本消耗过多 - 令牌生成失控
- 超时失败 - 推理耗时过长
- 权限错误 - 尝试未经授权的操作
- 集成失败 - 外部系统不可用
- 安全违规 - 生成不适当的内容
通过对错误率、质量度量下降、成本异常、延迟增加和用户升级的自动监控提醒来检测故障。通过用户自报告机制进行补充,包括反馈请求,以及关于反馈方式和位置的明确指导,以便您可以修复报告的自动化差距。
**严重性分类**以适当的紧迫性将事件发送给适当的响应者。关键事件表示影响许多用户的生产不可用、客服人员操作的数据损坏风险、安全妥协或需要立即响应的安全违规。严重性高表示影响业务关键客服人员的质量下降或成本大幅超支。中等严重性表示孤立的问题或接近阈值,需要在工作时间进行调查。低严重性表示在事件管理流程之外跟踪的小问题。
根据用户影响、爆炸半径、数据完整性风险和恢复紧迫性,客观地定义严重性标准。客观标准可以防止低估实际问题和过度低估次要问题。维护事件解决结果的文档,以持续改进流程。
**初步反应程序**指导立即采取行动稳定局势。程序包括:
- 禁用故障客服人员 - 断路器激活
- 将用户路由到后备选项 - 人工切换、更简单的客服人员、静态响应
- 收集诊断信息 - 最近对话、错误日志、资源度量
- 通知利益相关者 - 随叫随到的工程师、产品所有者、受影响的用户
- 启动事件通信 - 状态页面更新、内部协调渠道
- 将初始响应程序记录为 Runbook,无需特定于事件的调查即可快速执行。
- Runbook 必须由没有深厚客服人员专业知识的随叫随到的工程师执行。
### 断路器和后备模式
在客服人员事件期间,防止级联故障并维护部分功能。
**断路器模式**会自动禁用出现故障的客服人员,防止在解决问题时出现重复故障和用户影响。实施断路器,在错误率超过持续时间的阈值时监控错误率和断开(禁用代理)。
使用错误阈值、持续时间窗口和恢复测试配置断路器。例如,50% 的错误率,滚动窗口为 5 分钟,定期试用,要求测试客服人员是否恢复。在电路打开时,将请求路由到后备选项。在超时后,电路转换到半开状态,允许通过试用请求。当试用请求始终成功时,关闭电路,恢复正常操作。
当主要客服人员失败时,**后备层次结构**提供了温和的降级。设计后备序列,尝试越来越简单的选项,直到实现可接受的响应。后备层次结构示例:主要复杂客服人员 → 更简单的备份客服人员 → 静态常见问题解答 → 人工切换。
在编排层中实施后备逻辑,而不是在客服人员中实施后备逻辑,以便在客服人员生态系统中实现一致的行为。定期测试后备路径,以验证在需要时是否有效。
当 AI 客服人员无法处理请求时,**人工切换会**升级为人工客服人员。设计切换工作流,保留对话上下文,传达切换原因,路由到具有相关专业知识的适当人工客服人员,并跟踪切换频率,揭示改进机会。
按主题、客服人员和失败原因监控升级率。较高的比率表明客服人员的能力差距需要迅速改进、Knowledge 库扩展或用例优化。
在降级操作期间,**温和降级会**保持部分功能。当复杂的推理失败时,回到更简单的逻辑。当实时数据不可用时,对缓存的数据进行操作。当外部集成失败时,以只读模式操作。通过温和降级,系统能够以较低的容量运行,而不是完全失败。
### 事件后分析和学习
进行无可指责的事件后审查,重点关注系统改进,而不是单个错误为诚实评估创造心理安全。
**时间线重建**从初始条件到第一个信号、检测、确认、调查、响应操作、恢复和验证创建详细的顺序。为每个事件添加时间戳,从而对每个阶段的持续时间进行分析,揭示事件响应延迟的位置。
在时间线中包含以下内容:
- 最近部署了什么(提示、配置、模型、集成)?
- 在使用模式方面观察到哪些变化(流量突然增加、新的对话类型)?
- 哪些外部因素造成了影响(第三方服务降级、平台更新)?
- 是什么使检测速度不理想?
**根本原因识别**决定了直接的技术原因。区分直接原因(模型超时)和影响因素(在特定对话模式下,提示设计超出令牌限制)。根本原因分析会阻止简单化的结论(“客服人员有错误”),而支持导致有效补救的特定发现。
使用“五个为什么”技术,从症状到根本原因进行深入挖掘。
**表面示例:**“客服人员产生了不正确的信息” → “为什么?检索的上下文包含过时的数据”→“为什么?Knowledge 库未使用最近的产品更改进行更新" → "为什么?产品团队没有触发 Knowledge 库更新的流程" → 根本原因:缺少将产品发布连接到 Knowledge 库维护的工作流。
**影响因素**揭示了支持或扩大事件影响的组织、流程或架构条件。常见因素包括监控使问题持续时间超过检测到的时间的差距、测试使故障场景未被揭示的差距、文档差距减慢快速诊断的速度、自动化差距迫使手动恢复步骤以及架构差距,例如单点故障或缺少冗余。
影响因素分析揭示了直接根本原因修复之外的改进机会。大多数事件都有多个影响因素,每个因素都会扩大影响。
**检测分析**检查事件是如何检测的,以及检测是否更快。许多客服人员事件首先由用户报告,而不是由自动监控报告,这表明存在监控差距。确定:什么信号应该更早地检测到问题?什么监控可以加快检测速度?什么警报标准会适当地触发?
检测分析改进包括:添加缺失的监控覆盖范围,调整警报阈值以消除假阴性,丰富警报上下文以加快分类,并改进仪表板以主动识别问题。
**响应评估**会评估哪些进展顺利,哪些进展缓慢或难以完成。回复评估问题:Runbook 是否有帮助和准确?升级路径是否清晰有效?回滚程序是否已测试并准备就绪?工具是否提供了必要的诊断信息?沟通是否及时有效?
响应评估的改进包括:使用吸取的经验教训更新运行手册,澄清升级标准,定期测试回滚程序,添加诊断工具,以及改进事件通信模板。
**操作项目**指定具体的、分配的、有时限的改进,以防止重复或改进未来的响应。避免模糊的操作项目,例如“改进监控”,以有利于特定任务,例如“为客服人员在 10 分钟内的错误率超过 5% 添加提醒”,分配:亚历克斯,由于:2 周。"
在后续审核中跟踪操作项目的完成情况,确保持续改进实际发生。在每次事件后审查期间,审查以前事件的未处理操作项目。完成率低表明持续改进过程失败需要关注。
**Knowledge 共享**文档在共享 wiki、Knowledge 库或协作空间中进行事件后审查,并带有标签,支持跨多个事件的模式分析。事件回顾应该可以按故障模式、受影响的组件和时间段进行搜索,使未来的响应者能够从历史事件中学习。
在直接事件响应者之外,广泛共享事件后审查。组织学习需要信息传播。考虑在团队会议或边吃边学的会议中介绍重大事件学习,以传播 Knowledge 并建立集体能力。
## 客服人员治理和批准
### 部署审批流程
在部署生产客服人员之前需要批准,以确保审查、风险评估和利益相关者的一致性。
**部署前核对清单**验证就绪情况,包括:
- 完成全面测试 - 功能、质量、安全、性能
- 安全审查已批准 - 权限边界、数据访问、操作授权
- 合规性已验证 - 监管要求、策略遵守
- 文档完成 - 运行手册、回滚程序、升级路径
- 已配置的监控 - 质量度量、错误率、成本跟踪
- 获得相关方批准 - 产品所有者、安全性、合规性
核对清单为客服人员提供了一致的评估标准。根据客服人员的重要性、数据敏感性和自主性级别,调整客服人员风险简档的核对清单,使其具有不同的深度。
**风险评估**评估客服人员故障的潜在影响,包括:
- 爆破半径 - 受故障影响的用户数量
- 数据灵敏性 - 数据客服人员访问的内容
- 操作权限 - 客服人员可以进行哪些修改
- 集成依赖性 - 哪个系统代理会影响
- 恢复复杂性 - 回滚有多难
- 合规性影响 - 适用哪些法规
风险评估确定批准要求。高风险客服人员需要主管批准、安全审查和逐步推出,而低风险客服人员可能需要同行审查和标准测试。
**批准工作流**通过适当的审查者路由部署请求。使用 Salesforce 审批流程或外部部署工具实施审批工作流。自动化、跟踪和审计批准工作流,以支持合规报告和事件调查。
记录批准决定,创建谁批准部署、批准时需要哪些信息、应用了哪些条件或限制以及做出了哪些监控承诺的审计跟踪。
在正常审批流程延迟关键修复时,**紧急绕过程序**可在生产事故期间快速部署。紧急程序需要行政批准,包括理由文件,并触发部署后快速审查,以验证紧急变化。
从标准版本单独跟踪紧急部署。高紧急部署频率表示需要调查的进程问题。
### 质量门和测试
定义客服人员在生产部署之前必须通过的质量门,以防止有问题客服人员联系用户。
**功能测试**验证客服人员在代表性场景中正确执行预期任务。测试涵盖典型交互的幸福路径、涵盖不常见但有效场景的边缘个案、测试客服人员是否正常处理无效输入的错误路径,以及检查客服人员是否在调控器限制、令牌限制和数据量限制内的边界条件。
客服人员的功能测试与传统测试不同,因为非确定性输出会阻止精确匹配。测试输出特征(包含所需信息、保持适当语气、包含必要引用),而不是精确文本。
**响应质量测试**评估测试场景之间的响应准确性和相关性。质量测试需要人工评估或具有预期输出的基础真相数据集。建立客服人员必须满足的最低质量阈值(例如,“坚持测试集的准确率为 95%,安全违规为零,公平审计显示人口统计差异不超过 5%”)。随着新边缘个案的发现,持续维护和扩展测试集。
**安全测试**验证客服人员拒绝危险、不道德或超出范围的请求。安全测试尝试对抗性输入,包括:
- 提示注入尝试 - 尝试覆盖指令
- 越狱尝试 - 尝试绕过安全约束
- 请求升级 - 请求越来越敏感的操作
- 超出范围的请求 - 尝试未经授权的任务
将安全测试分配给未参与构建客服人员的独立团队成员。对于高风险客服人员,请引入红色团队专家。
**性能测试**验证延迟、吞吐量和成本是否满足预期。在实际负载下测试,包括并发对话、典型对话长度和预计使用量。性能测试揭示了单用户测试中不可见的调控器限制问题、资源约束和可扩展性瓶颈。
在性能测试期间测量测试环境消耗,并将其用于预测生产能力需求。
**安全测试**验证权限边界、数据访问控制和操作授权。安全测试确认:客服人员无法访问未经授权的数据,客服人员无法执行未经授权的操作,提示注入无法升级权限,审计日志记录捕获所有客服人员活动。
使用 Salesforce 代码分析器将静态代码安全扫描集成到部署漏斗中,该分析器扫描 Apex、Flows、Lightning 和 Visualforce 的安全漏洞,并可以通过命令行界面 (CLI) 或 GitHub 操作在持续集成/部署 (CI/CD) 中运行。使用专门的 AI/客服人员安全测试来检测提示注入漏洞和敏感数据泄露风险,因为这些是静态代码分析范围之外的运行时 LLM 输入的威胁。
### 变更管理纪律
将变更管理纪律应用于客服人员部署,确保变更被记录、审查和传达。
**变更文档**捕获:
- 发生了什么变化 - 提示修改、配置更新、模型更改
- 为何进行此更改 - 质量改进、成本优化、缺陷修复
- 哪些测试验证了该更改 - 测试结果、质量分数、安全扫描
- 存在什么回滚过程
变更文档支持事件调查、合规报告和 Knowledge 转移。记录更改会创建一个学习型组织,它基于以前的经验,而不是重新发现经验教训。
**通信计划会**通知相关方客服人员的变化,包括受影响的用户、运营团队、支持团队和业务相关方。沟通应描述:正在变化的内容、何时部署变化、用户会看到什么好处、存在什么风险以及联系谁解决问题。
为不同的变更类型建立通信模板,标准化消息并降低部署准备开销。
**部署计划**时间由 Event Monitoring 数据显示实际使用模式,从而确定客服人员在低用量期间的部署时间。避免在使用高峰、月底结算、季度末结算或主要业务事件期间进行部署。传达部署窗口,包括预期持续时间和回滚决策时间线。
考虑将重大更改安排在周初至周中,并避免周末部署,以便使用充足的资源解决问题。优先考虑快速回滚和强大的部署后监控,而不是任何固定的日历规则。
**更改窗口和冻结**会保护关键业务周期。在主要业务活动(会计年度结束、产品发布和主要市场营销活动)之前建立变更冻结期,以防止在高风险期间出现部署引起的问题。
文档变更冻结日历每年提前通知限制期间,使团队能够相应地进行计划。过多的冻结会降低速度;冻结不足会产生业务风险。
## 客服人员的持续改进
### 反馈循环架构
建立反馈回路,将操作遥测连接到客服人员改进。
**用户反馈收集**通过问题或跟进调查收集明确的反馈。通过完成率、上报到人工客服人员、重试模式和表示不满意的跟进问题收集隐式反馈。组合显式和隐式信号,提供全面的质量视角。
内联收集反馈,仅在发生时,而不是稍后。延迟反馈收集降低了回复率,并引入了召回偏见。
**使用 Analytics** 会公开重复出现的主题、问题和趋势等真实对话模式。它们测试客服人员的复杂性是否得到保留,功能是否由于可发现性差而未使用,以及实际使用是否验证了原始设计假设。
查询对话日志,按主题分析问题类型、对话长度、成功率,按对话特征分析用户满意度。使用模式分析指导快速细化、Knowledge 库扩展和功能优先级。
**错误模式分析**确定了需要补救的系统质量问题。按错误类型、受影响的用户、对话模式和时间分布分析错误日志分组。错误模式显示提示问题、Knowledge 库差距、集成问题或需要处理的边缘个案。
按频率和影响确定错误补救的优先级。影响许多用户的高频错误需要立即关注。根据业务影响和补救成本,低频错误可以代表可接受的边缘个案。
**质量趋势监控**会跟踪准确性、相关性、安全性和满意度,并随着时间的推移在恶化之前检测其恶化情况。在初始客服人员部署后,建立质量基准。根据基线监控持续质量,并在趋势下降超过可接受阈值时发出警报。
质量监控揭示了提示性更改、模型更新或 Knowledge 库修改是提高还是降低了性能,从而支持数据驱动的改进决策。
### 实验跟踪和 A/B 测试
通过经验证据系统地跟踪实验,为改进决策提供信息。
**实验框架**为测试改进提供了一致的结构,包括:
- 假设 - 预期改进的内容
- 实验性设计 - 如何部署变体
- 度量 - 测量什么结果
- 样本大小 - 统计有效性所需的交互次数
- 成功标准 - 什么结果证明升级是正确的
在执行前记录实验,防止对结果的解释不明确。预定义的成功标准支持清晰的升级决策,避免对结果是否“足够好”进行冗长的辩论。
**变体跟踪**日志记录了哪些用户收到了哪些变体支持结果关联。在对话元数据中跟踪变体分配,支持按变体分析质量、成本和满意度。
**统计有效性**确保实验运行时间足够长,样本量足够大,得出可靠的结论。根据预期效应大小、统计功率要求和可接受的错误率,在实验前计算所需的样本大小。样本不足会产生噪声结果,导致决策不当。
在实验期间,**多臂强盗优化**会将更多流量动态分配给性能更好的变体。多武装强盗方法减少了对劣质变体的暴露,同时仍然为统计分析收集了足够的数据,从而降低了实验的机会成本。
**实验目录**记录每个实验的变体、结果和决策。它阻止团队重新测试失败的方法,在整个组织中传播学习,并建立实际工作的共享记录。
## 汇总
代理系统的卓越运营需要扩展传统的 DevOps 实践来解决独特的 AI 特征。全面的可观察性能够理解紧急客服人员行为。系统的生命周期管理可确保质量、安全和成本控制。事件响应程序解决客服人员特定的失败模式。持续改进将运营经验转化为组织能力。
客服人员系统中卓越运营的关键实践:
- 记录完整的对话,包括输入、输出、推理跟踪、操作和结果。
- 通过准确性、相关性、安全性和满意度度量,持续监控响应质量。
- 通过基线比较和异常检测,检测模型漂移和行为变化。
- 支持回滚和 A/B 测试的版本控制提示、配置和模型。
- 使用功能标记和限制爆破半径的金丝雀部署实施逐步推出。
- 设计断路器和后备层次结构,防止级联客服人员故障。
- 进行无可指责的事件后审查,重点关注系统改进。
- 建立质量大门和审批流程,防止有问题的客户进入生产环境。
- 构建反馈回路,将操作遥测与客服人员改进联系起来。
- 使用经验证据系统地跟踪实验,以指导增强决策。
为客服人员卓越运营投资的组织通过可靠的高质量 AI 功能获得可持续的竞争优势,这些功能会随着业务需求的不断发展而变化。
分享您对良好架构框架的反馈。