Skip to content

画出系统全景图

另有 28 种语言版本

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A hand-drawn map of a region in ink and watercolor, half finished: towns, roads, a river and a rail line on one side, faint pencil lines on bare paper on the other.
图片由 AI 生成

第 4 个模块,共 6 个,属于 Data Architect 课程第 4 章理解企业数据。每个模块都可以单独阅读。 上一篇:Salesforce 周围的系统 · 下一篇:org 策略是全景层面的决定

**本模块回答的问题:**我如何画一张能显示数据去向的全景图?

给我一个新情景和一块空白的白板,我最先画的东西之一就是系统全景图。不求漂亮,不画每一个 API,也还不画数据模型。我想看到整个企业:用户是谁,涉及哪些系统,Salesforce 位于何处,它周围有什么,数据从哪里来、到哪里去。然后我要逐一走查那些箭头。一张好的全景图不是一幅方框的图画。它是一种暴露架构决定的方式。

我会让 CTA 考生练习这个。读情景,然后开始画。不要等到在脑子里全部解决了再画;画图本身会帮你解决问题。这就是为什么第一天之后的作业是先开始画全景图,再尝试画数据模型。先画数据模型,你就已经假设了什么属于 Salesforce。先画全景图,你就能看到应该影响这个决定的那些系统。

从高处开始,然后逐层深入:先是整个企业,再在重要的地方看细节。

Steve 的全景图布局 Steve 的系统全景图布局,还没有箭头。左边从上到下:内部用户、合作伙伴用户和客户。中间是带云朵的蓝色 Salesforce,即我们围绕它设计的 org,合作伙伴社区和客户社区在下方紧贴着它。上方:左上角是一个公共网站,Salesforce 上方是一个员工身份提供商和一个合作伙伴身份提供商,一个用于电子签名的 AppExchange 应用往右挪了一点。Salesforce 右边是集成层,Data 360 在它下方的同一列(近核心:在核心上管理,托管在核心之外;用户从不直接连接它,它会接触许多后端系统),然后是内部系统:ERP、财务、订单管理和数据仓库。下方是客户渠道:电子邮件、网页表单、电话和消息。右下角是数据进出:归档、数据加载,以及被引用而不是被复制的外部数据。六个步骤帧逐步搭建出这张图:先是空的区域,然后是人、Salesforce 和它的社区、上方的身份、集成层和内部系统,最后是渠道和数据。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

第 1 步,共 6 步:一张空白画布。只有区域。

画系统全景图的方式有很多。这只是我的方式,是我多年来不断打磨的,我分享它,是为了让你看到如何快速搭起一张全景图。我在每一张 Salesforce 全景图上都用它,它读起来像一句话:左边的人进入中间的 Salesforce,通过上方的系统获得信任,通过下方的渠道获得服务,并与右边的后台系统相连。

**人在左边,从上到下:内部用户、合作伙伴、客户。还不需要每一个用户画像;足够回答谁在试图接触这个架构?**就行。每个群体都指向自己的入口:内部用户指向 Salesforce,合作伙伴指向合作伙伴社区,客户指向客户社区。系统不会独自存在。总有某个人或某样东西在试图使用它们。

Steve 的全景图布局 Steve 的系统全景图布局,还没有箭头。左边从上到下:内部用户、合作伙伴用户和客户。中间是带云朵的蓝色 Salesforce,即我们围绕它设计的 org,合作伙伴社区和客户社区在下方紧贴着它。上方:左上角是一个公共网站,Salesforce 上方是一个员工身份提供商和一个合作伙伴身份提供商,一个用于电子签名的 AppExchange 应用往右挪了一点。Salesforce 右边是集成层,Data 360 在它下方的同一列(近核心:在核心上管理,托管在核心之外;用户从不直接连接它,它会接触许多后端系统),然后是内部系统:ERP、财务、订单管理和数据仓库。下方是客户渠道:电子邮件、网页表单、电话和消息。右下角是数据进出:归档、数据加载,以及被引用而不是被复制的外部数据。六个步骤帧逐步搭建出这张图:先是空的区域,然后是人、Salesforce 和它的社区、上方的身份、集成层和内部系统,最后是渠道和数据。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 内部用户 销售、服务、运营 合作伙伴用户 客户 人员 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

第 2 步,共 6 步:谁在试图接触这个架构?

**Salesforce 在中间。**一个朴素的方框。不是因为 Salesforce 是企业的中心(我们刚花了三个模块说它不是),而是因为它是我围绕着做设计的那个系统。它是锚点。

**社区紧贴在它正下方。**合作伙伴社区和客户社区是独立的端点,所以它们有自己的方框。但它们紧贴着 Salesforce,因为要接触它们不需要任何集成:它们运行在同一个 org 里。

Steve 的全景图布局 Steve 的系统全景图布局,还没有箭头。左边从上到下:内部用户、合作伙伴用户和客户。中间是带云朵的蓝色 Salesforce,即我们围绕它设计的 org,合作伙伴社区和客户社区在下方紧贴着它。上方:左上角是一个公共网站,Salesforce 上方是一个员工身份提供商和一个合作伙伴身份提供商,一个用于电子签名的 AppExchange 应用往右挪了一点。Salesforce 右边是集成层,Data 360 在它下方的同一列(近核心:在核心上管理,托管在核心之外;用户从不直接连接它,它会接触许多后端系统),然后是内部系统:ERP、财务、订单管理和数据仓库。下方是客户渠道:电子邮件、网页表单、电话和消息。右下角是数据进出:归档、数据加载,以及被引用而不是被复制的外部数据。六个步骤帧逐步搭建出这张图:先是空的区域,然后是人、Salesforce 和它的社区、上方的身份、集成层和内部系统,最后是渠道和数据。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 内部用户 销售、服务、运营 合作伙伴用户 客户 合作伙伴社区 客户社区 Salesforce 我们围绕它设计的 org Salesforce 社区 人员 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

第 3 步,共 6 步:Salesforce 在中间,社区紧贴在它正下方。

**身份在上方。**身份提供商放在顶部,也就是开发人员会忘记的那些:一个给内部用户,也许另一个给合作伙伴。AppExchange 软件包也放在上面,往右挪一点,因为它们是被引入 org 的能力,而不是与它交换数据的后台系统。公共网站放在左上角。

Steve 的全景图布局 Steve 的系统全景图布局,还没有箭头。左边从上到下:内部用户、合作伙伴用户和客户。中间是带云朵的蓝色 Salesforce,即我们围绕它设计的 org,合作伙伴社区和客户社区在下方紧贴着它。上方:左上角是一个公共网站,Salesforce 上方是一个员工身份提供商和一个合作伙伴身份提供商,一个用于电子签名的 AppExchange 应用往右挪了一点。Salesforce 右边是集成层,Data 360 在它下方的同一列(近核心:在核心上管理,托管在核心之外;用户从不直接连接它,它会接触许多后端系统),然后是内部系统:ERP、财务、订单管理和数据仓库。下方是客户渠道:电子邮件、网页表单、电话和消息。右下角是数据进出:归档、数据加载,以及被引用而不是被复制的外部数据。六个步骤帧逐步搭建出这张图:先是空的区域,然后是人、Salesforce 和它的社区、上方的身份、集成层和内部系统,最后是渠道和数据。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 内部用户 销售、服务、运营 合作伙伴用户 客户 公共网站 员工 IdP 单点登录 合作伙伴 IdP 单点登录 AppExchange 应用 电子签名 合作伙伴社区 客户社区 Salesforce 我们围绕它设计的 org Salesforce 社区 人员 身份、应用、Web © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

第 4 步,共 6 步:身份在上方,这是开发人员会忘记的方框。

**集成在右边,再往右是后台。**集成层,即 ESB 或 iPaaS(如果点名了,就是 MuleSoft),是紧挨在 Salesforce 右边的一根高高的竖条。内部系统在它后面:各个 ERP、财务、订单管理、遗留系统、数据仓库。现在整页从左往右读:人、Salesforce、集成、后台。

Steve 的全景图布局 Steve 的系统全景图布局,还没有箭头。左边从上到下:内部用户、合作伙伴用户和客户。中间是带云朵的蓝色 Salesforce,即我们围绕它设计的 org,合作伙伴社区和客户社区在下方紧贴着它。上方:左上角是一个公共网站,Salesforce 上方是一个员工身份提供商和一个合作伙伴身份提供商,一个用于电子签名的 AppExchange 应用往右挪了一点。Salesforce 右边是集成层,Data 360 在它下方的同一列(近核心:在核心上管理,托管在核心之外;用户从不直接连接它,它会接触许多后端系统),然后是内部系统:ERP、财务、订单管理和数据仓库。下方是客户渠道:电子邮件、网页表单、电话和消息。右下角是数据进出:归档、数据加载,以及被引用而不是被复制的外部数据。六个步骤帧逐步搭建出这张图:先是空的区域,然后是人、Salesforce 和它的社区、上方的身份、集成层和内部系统,最后是渠道和数据。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 内部用户 销售、服务、运营 合作伙伴用户 客户 公共网站 员工 IdP 单点登录 合作伙伴 IdP 单点登录 AppExchange 应用 电子签名 合作伙伴社区 客户社区 集成层(ESB) ERP 订单、发票 财务 付款 订单管理 数据仓库 分析 Salesforce 我们围绕它设计的 org Salesforce 社区 人员 身份、应用、Web 内部系统 集成层 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

第 5 步,共 6 步:先是集成,然后是后台。

**渠道在下方。**凡是与客户有直接联系的:邮件转个案(email-to-case)、网页转潜在客户(web-to-lead)、电话、消息。

**数据进出,在右下角。**外部数据源、归档、数据加载。

**Data 360 在右边,集成层的下方。**用户从不连接它,而它的租户会连接很多后端系统,所以它和数据管道放在一起,在那里这些连线保持很短:挨着内部系统、数据仓库和右下角的数据。数据团队确实会打开它的界面,但这些界面在 org 里:Data 360 是近核心,在核心之上管理,在核心之外托管(模块 1)。一条连回 Salesforce 的线表明谁在管理它。方框放在哪里,应该讲出它做什么的故事。

这些几何布局都不是神圣不可改变的。约定的价值在于,我不用每次都重新发明一套视觉语言,而看过我一张图的人,读下一张会更快。

Steve 的全景图布局 Steve 的系统全景图布局,还没有箭头。左边从上到下:内部用户、合作伙伴用户和客户。中间是带云朵的蓝色 Salesforce,即我们围绕它设计的 org,合作伙伴社区和客户社区在下方紧贴着它。上方:左上角是一个公共网站,Salesforce 上方是一个员工身份提供商和一个合作伙伴身份提供商,一个用于电子签名的 AppExchange 应用往右挪了一点。Salesforce 右边是集成层,Data 360 在它下方的同一列(近核心:在核心上管理,托管在核心之外;用户从不直接连接它,它会接触许多后端系统),然后是内部系统:ERP、财务、订单管理和数据仓库。下方是客户渠道:电子邮件、网页表单、电话和消息。右下角是数据进出:归档、数据加载,以及被引用而不是被复制的外部数据。六个步骤帧逐步搭建出这张图:先是空的区域,然后是人、Salesforce 和它的社区、上方的身份、集成层和内部系统,最后是渠道和数据。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 内部用户 销售、服务、运营 合作伙伴用户 客户 公共网站 员工 IdP 单点登录 合作伙伴 IdP 单点登录 AppExchange 应用 电子签名 合作伙伴社区 客户社区 Data 360 近核心:在核心上管理,托管 在核心之外 集成层(ESB) ERP 订单、发票 财务 付款 订单管理 数据仓库 分析 电子邮件 邮件转个案 网页表单 网页转潜在客户 电话 联络中心 消息 短信、聊天 归档 旧个案 数据加载 迁移 外部数据 引用,不复制 Salesforce 我们围绕它设计的 org Salesforce 社区 人员 身份、应用、Web 内部系统 客户渠道 数据进出 集成层 虚线:尚未上线,或仅引用 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

第 6 步,共 6 步:整个布局,还没有箭头。之后的每一张全景图都保持这些位置。

让表示法保持简单。每个系统都是一张卡片:它的名称、它的角色,以及一个说明它是什么东西的小图标:ERP、数据库、身份提供商、一群人。我刚才描述的那些区域画成浅色的带标签区域,这样布局本身就是可见的。底部的图例说明每个图标和每种线的含义。

不要在一个方框里塞太多东西。只有在非常复杂的全景图上,我才会把 Salesforce 拆开成几个部分(org 里的 Sales Cloud 和 Service Cloud,它们之间有箭头)。也不要发明十五种形状,除非每一种都在告诉读者一些东西。我希望有人看全景图三十秒,就开始理解这个架构。花哨帮不上忙。清楚才行。

不要等到详细设计时才考虑数据量。一个每晚搬运 500 个产品的箭头,和一个每天搬运 200,000 条 GPS 读数的箭头,在全景图上看起来可能一模一样。它们不是同一个问题。所以在画任何一个箭头之前,先数一数移动的是什么。从数量开始建立图背后的清单:每个重要的数据集一行,写上它的数据量。零的个数也许永远不会出现在箭头上,但你需要知道什么时候进入了大数字:一小时几千或几百万,几十万笔交易,甚至每秒几十到几百笔交易。

这些数字决定机制。每晚几百条记录是批处理。有人在等待的调用可以是同步的,如果数据量允许的话。每秒几十到几百条可能需要事件,比如平台事件,而不是每条记录一次调用。箭头看起来是一样的;由数据量决定用什么来承载它,所以把它记在清单里,也就是选择机制的地方。

机制甚至可以改变箭头的方向。每分钟发送几条记录,Salesforce 可以直接向外调用:箭头从 Salesforce 开始。发送多得多的记录,Salesforce 可能改为在事件总线上发布事件;外部系统订阅,并调用进来取走它们,于是现在箭头从另一端开始。再大一些,比如每晚同步几百万条记录,那就是批处理过程。所以在开始设计机制时就要尽早知道你的数量,因为数量可能会重画箭头。

数据量在两个地方重要,原因各不相同。在数据模型上,我需要它来留意大数据量并规划归档;第 2 部分会深入讨论这一点。在系统全景图上,清单里的大数字决定集成模式和机制的选择。模块 6 会把真实的零的个数放到 Steve Trucking 的全景图和清单上。有了这些数量,再画箭头。

系统就位后,把它们连起来,全景图就变成了架构。**方框是一个系统;箭头表示谁发起连接。**它从打开连接的那个系统开始,指向被它调用的那个系统:从客户端到服务器。标签说明移动的是什么,以及朝哪个方向。

这条规则是给系统全景图用的,在那里是系统在和系统对话。在数据流图上,箭头跟着数据走,正如你所预期的。不要把全景图的规则带到其他图里;那只会增加混乱。

加上箭头的全景图 同一张全景图,现在加上了箭头;每个箭头都从打开连接的系统开始,标签说明移动的是什么以及朝哪个方向。内部用户进入 Salesforce,合作伙伴用户进入合作伙伴社区,客户进入客户社区。每个身份提供商都与 Salesforce 共享一个证书,画成一条两端各有一个证书的绿色点线:表示信任,而不是直接调用,因为登录是以重定向的方式经由用户的浏览器进行的。员工身份提供商还向 Salesforce 发送用户更新。Salesforce 把文档发出到 AppExchange 电子签名应用,把订单发出到集成层,集成层把产品发送进 Salesforce。集成层把订单发出到 ERP,并从 ERP 取得产品;ERP 把订单状态发送进集成层;集成层从财务取得付款。集成层下方的 Data 360 打开它自己的连接:从 Salesforce 取出 CRM 数据,通过零拷贝访问数据仓库,并引用外部数据。在下方,电子邮件把个案送进 Salesforce,网页表单把潜在客户送进 Salesforce;Salesforce 把旧个案发出到归档;数据加载把记录送进来。 上方:身份、APPEXCHANGE、WEB 人员 右侧:内部系统 下方:客户渠道 右下:数据进出 内部用户 销售、服务、运营 合作伙伴用户 客户 公共网站 员工 IdP 单点登录 合作伙伴 IdP 单点登录 AppExchange 应用 电子签名 合作伙伴社区 客户社区 Data 360 近核心:在核心上管理,托管 在核心之外 集成层(ESB) ERP 订单、发票 财务 付款 订单管理 数据仓库 分析 电子邮件 邮件转个案 网页表单 网页转潜在客户 电话 联络中心 消息 短信、聊天 归档 旧个案 数据加载 迁移 外部数据 引用,不复制 Salesforce 我们围绕它设计的 org 共享证书 用户更新 共享证书 文档发出 订单发出 产品进入 订单发出,产品进入 订单状态进入 付款进入 CRM 数据发出 零拷贝 引用 个案进入 潜在客户进入 旧个案发出 记录进入 Salesforce 社区 人员 身份、应用、Web 内部系统 客户渠道 数据进出 集成层 虚线:尚未上线,或仅引用 从发起连接的系统开始;标签说明传输的内容 共享证书:信任,无直接调用 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

箭头放进来了。每个方框都在原来的位置;每个箭头都从打开连接的系统开始,它的标签说明移动的是什么以及朝哪个方向。

所以,如果集成层把产品推送进 Salesforce,箭头就从集成层指向 Salesforce,标注产品进入。如果是 Salesforce 向外调用去取产品,箭头就从 Salesforce 开始,标签仍然是产品进入。同样的数据,不同的对话,而这个区别告诉我谁需要凭据,谁必须处理失败。Salesforce 通过集成层发送订单:订单发出。ERP 的履约信息回传:订单状态进入。现在我能看到每段对话由谁发起,数据从哪里进入 Salesforce、从哪里离开,哪些数据流跨越了边界,所有权大概在哪里,以及我需要在哪里多问一些。

还要记住模块 1:每当我只看到一条数据流,我就会担心。在高层视图上,一个订单发出箭头依赖回流数据:客户进入、产品进入、价格。再往深里看,还有回程:接受、拒绝、状态、发票号、取消。箭头给了我可以质疑的具体东西。

在这里,全景图不再是 PowerPoint 里的装饰画。在评审会上,任何一个箭头都可能引来三个问题,我希望你都有答案:

  • **它如何认证?**OAuth、证书、命名凭据,还是别的什么?
  • **它是同步还是异步?**Salesforce 是等待 ERP,还是发布后继续做别的?业务需要多快拿到结果?
  • **机制是什么?**REST 调用、事件、文件、消息队列,经过 MuleSoft 还是直连?

然后:另一端宕机时会怎样?**每一个箭头都需要一个机制。**如果你解释不了它,这条线就是装饰。

而“fire and forget”(发出即不管)不是答案。它通常意味着“我还没设计发出之后会发生什么”。它到达了吗?被接受了吗?失败了吗?会重试吗?谁知道它卡住了?同一条消息到达两次会怎样?这些都不放在全景图上,否则全景图就没法读了。但箭头应该让你知道这些问题是存在的。

把任何一个箭头放大,都有一个客户端和一个服务器,各自负责自己的一半。客户端打开连接:它需要端点和端口,先从认证服务器获取令牌,调用服务器定义的协议和契约,并选择是否等待。只有客户端能看到整个往返过程,所以只有客户端能重试。服务器负责监听,定义协议、契约和数据载荷,验证进来的东西,并且只看到它自己那一部分。当我画一个箭头时,我已经知道哪端是哪端,这就告诉了我每个问题归谁负责。

每一个箭头都需要一个机制 把全景图上的一个箭头放大。客户端 Salesforce 带着它的命名凭据和外部凭据,把订单发出到服务器 ERP,ERP 有一个 External Client App(外部客户端应用)和一个仅限 API 的集成用户。一条虚线(OAuth 所必需)表示客户端先到签发令牌的认证服务器。下方逐行列出客户端处理什么、服务器定义什么。位置:客户端需要端点和端口;服务器在某个 URL 或 IP 地址的某个端口上监听。认证:客户端先获取令牌,处理过期并重新登录,端点保存在命名凭据中,认证信息保存在其外部凭据中;服务器信任来自其认证服务器的令牌,由它的 External Client App 和集成用户决定客户端可以做什么。协议和契约:客户端调用它们,服务器定义它们。数据载荷:客户端负责序列化和读取,服务器定义 JSON、XML 或二进制格式。时序:客户端选择等待、继续往下做,还是按计划运行;服务器必须跟得上。追踪:客户端看到整个往返过程,服务器只看到自己那一部分。错误和宕机:客户端处理各种错误,会重试,也知道自己何时卡住了;服务器验证进来的内容,无法重试。底部写着:这些都不放在全景图上,但每个箭头都有。 OAuth 所必需 认证服务器 签发令牌 订单发出 客户端 Salesforce 服务器 ERP 命名凭据 外部凭据 External Client App 集成用户(仅限 API) 客户端负责 服务器定义 位置 需要要连接的端点(URL 或 IP 地址)和端口。 在某个 URL 或 IP 地址的某个端口上监听(例如 443)。 认证 先从认证服务器获取令牌;处理过期并重新登录。命名凭据保存端点,其外部凭据 保存认证信息。 信任来自其认证服务器的令牌;由 External Client App 和仅限 API 的集成用 户决定客户端可以做什么。 协议和契约 调用正确的协议、方法和动词(SOAP 则导入 WSDL)。 定义协议(REST、SOAP、gRPC)和契约:方法、动词、参数、返回值。 数据载荷 按约定格式序列化请求并读取响应。 定义数据载荷:JSON、XML 或二进制。 时序 自行选择:等待答复(同步)、继续往下做(异步),或按计划运行(批处理)。 必须跟得上:每个调用一到就答复,或者批次来了就接收。 追踪 看到整个往返过程:发出了什么,返回了什么,花了多长时间。 只看到自己那一部分:调用到达、自身处理、答复发出。 错误和宕机 处理连接、认证、服务器和响应错误;会重试,也知道自己何时卡住了。 验证进来的内容并报告自身错误;它看不到整个往返过程,所以无法重试。 这些都不放在全景图上,但每个箭头都有。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

放大的一个箭头:客户端负责处理,服务器负责定义。这些都不放在全景图上,但每个箭头都有。

现在把箭头反过来。当 ERP 调用 Salesforce 时,Salesforce 就是服务器:它定义 API,运行自己的授权服务器,并通过一个 External Client App(外部客户端应用)和一个集成用户来决定调用方可以做什么。同样的问题,另一边。

Salesforce 作为服务器 同一个箭头反过来。客户端 ERP 持有一个客户端 ID 和一个密钥或证书,把订单状态发送进服务器 Salesforce,Salesforce 以一个仅限 API 的集成用户身份运行它。一条虚线(OAuth 所必需)表示 ERP 先到 Salesforce 自己的授权服务器,由它为 External Client App 签发令牌。下方逐行列出客户端处理什么、Salesforce 定义什么。位置:客户端需要 org 的 My Domain URL 和 API 版本;Salesforce 通过 HTTPS 在 My Domain 上监听。认证:客户端通过 External Client App 获取访问令牌,令牌过期时重新登录;Salesforce 信任自己签发的令牌,由该应用的策略和集成用户的权限决定客户端可以做什么。协议和契约:客户端调用 REST、SOAP 或 Bulk API;Salesforce 定义这些 API,org 的对象和字段就是契约。数据载荷:JSON 或 XML,Bulk 用 CSV。时序:客户端选择等待、继续往下做,还是分批加载;Salesforce 必须在 org 的 API 限制之内跟得上。追踪:客户端看到整个往返过程,Salesforce 只看到自己那一部分。错误和宕机:客户端处理连接、认证、限制和响应错误,并会重试;Salesforce 验证进来的内容并返回错误,无法重试。底部写着:这些都不放在全景图上,但每个箭头都有。 OAuth 所必需 Salesforce 授权服务器 为 External Client App 签发令 牌 订单状态进入 客户端 ERP 服务器 Salesforce 客户端 ID 和密钥,或 证书 集成用户(仅限 API) 客户端负责 服务器定义 位置 需要 org 的 My Domain URL 和 API 版本。 Salesforce 在 org 的 My Domain 上通过 HTTPS(端口 443)监听。 认证 通过 External Client App 从 Salesforce 的授权服务器获取访问令牌;处理过期并 重新登录。 信任自己签发的令牌;由 External Client App 的策略和集成用户的权限决定 客户端可以做什么。 协议和契约 调用 Salesforce 定义的 API:REST、SOAP 或 Bulk(SOAP 则导入 WSDL)。 Salesforce 定义 API 及其版本;org 的对象和字段就是契约。 数据载荷 按 API 要求的方式序列化请求,并读取响应。 为每个 API 定义数据载荷:JSON 或 XML,Bulk 用 CSV。 时序 自行选择:等待答复(同步)、继续往下做(异步),或分批加载(Bulk API)。 必须跟得上,并且不超出 org 的 API 限制。 追踪 看到整个往返过程:发出了什么,返回了什么,花了多长时间。 只看到自己那一部分:调用到达、保存及其自动化、答复发出。 错误和宕机 处理连接、认证、限制和响应错误;会重试,也知道自己何时卡住了。 验证进来的内容(验证规则、必填字段、共享)并返回错误;它无法重试。 这些都不放在全景图上,但每个箭头都有。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Salesforce 作为服务器:同样的问题,由 Salesforce 回答服务器那一半。

箭头画在全景图上,对话画在泳道里

Section titled “箭头画在全景图上,对话画在泳道里 ”

架构师毁掉一张好图的方式是:让一个产出物回答所有问题。全景图上加了 API 名称、数据载荷、重试、错误队列、转换、每一个回调,很快就没人看得懂了。不要这样。全景图是大图景:系统以及它们之间重要的数据流。

当我需要解释一次交互时,我会画第二张图,但不是为每个集成都画。如果系统 A 给 B 发了点东西,甚至问了一个问题并得到了答案,带标签的箭头就够了。当流程变成一场对话时,我才需要泳道:A 调用 B,B 向 C 核实,C 回答,B 创建了某样东西并回调 A,一个人审批,另一个系统接着处理。我的经验法则是:**超过一两次往返交互,这个顺序就要有自己的泳道。**箭头画在全景图上;对话画在泳道里。

还要注意,箭头在那里的含义不同。在全景图上,箭头是一个连接:谁打开它,移动的是什么。在泳道里,每个箭头是一段对话中的一条消息,按顺序读:一个请求往一个方向去,一个回复从另一个方向回来,然后是下一步。

箭头画在全景图上,对话画在泳道里 同样三个系统的两种画法。上方和全景图一样:Salesforce 把订单发出到集成层,集成层把订单号发送进 Salesforce,集成层再把订单发出到 ERP。下方每个系统变成一条泳道,对话沿页面向下分为六个编号步骤:1,Salesforce 把订单发送给集成层;2,集成层答复已接受,并附带一个参考号;3,集成层请 ERP 创建订单;4,ERP 创建订单;5,ERP 把订单号答复给集成层;6,集成层调用 Salesforce 更新订单。回复的颜色较浅。底部写着:在全景图上,一个箭头是一个连接;在泳道里,每个箭头是一条消息,按顺序排列。 在全景图上:谁连接,传输什么 在泳道中:按顺序的对话 Salesforce 集成层 ERP 订单发出 订单号进入 订单发出 发送订单 1 已接受:一个参考号 2 创建订单 3 创建订单 4 订单号 5 更新订单 6 在全景图上,一个箭头是一个连接。在泳道里,每个箭头是一条消息,按顺序排列。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

全景图上三个箭头;泳道里六个步骤。在全景图上,箭头是一个连接;在泳道里,每个箭头是一条消息,按顺序排列。

当全景图看起来基本完成时,逐个箭头地走查一遍。ERP 到 Salesforce:搬运的是什么,谁拥有它,如何认证,机制是什么,同步还是异步,必须多新?然后是下一个箭头,再下一个。缺口就是在这里出现的。“哦,我们从来没弄清楚那个合作伙伴到底是怎么发送的。”“我们把订单发给了 ERP,但还没设计被拒绝的订单怎么回来。”很好。你是在白板上发现了它,而不是在生产环境里。

图必须保持可读,所以细节放进它背后的清单里。你已经用数量开了个头;现在把它补完,每个重要的数据集或数据流一行:

列我想知道什么
数据集客户、产品、订单、配送、发票
类型主数据、参考数据、交易数据、分析数据、非结构化数据
所有者谁拥有它的含义和生命周期?
记录系统权威版本在哪里?
工作负载运营、分析、流式
数据量零的个数
org如果有多个,是哪个 Salesforce org?
认证连接如何建立信任?
机制和时序API、事件、文件、联邦访问;同步、异步、批处理
方式复制它、引用它,还是联邦访问它?

现在有了两个产出物:全景图让我看到架构,清单让我追问架构。

图背后的清单 全景图背后的清单,每个数据流一行,数据量列和机制列用同一种颜色标示。产品进入:归 ERP 所有,每晚约 500 处变更,经集成层的夜间批处理,使用 External Client App 和集成用户,复制。订单发出:归 Salesforce 所有,每天约 2,000 个,每分钟几个,近实时,由 Salesforce 通过集成层向外调用,使用 Apex 或 Flow 标注调用和命名凭据,复制。订单状态进入:归 ERP 所有,每天约 16,000 条,突发式,异步,由 ERP 推送到集成层,集成层再通过 REST API 更新 Salesforce,复制。付款进入:归财务所有,每天约 1,500 笔,通过 Bulk API 2.0 每小时批处理,复制。CRM 数据发出:归 Salesforce 所有,几百万条记录,由 Data 360 按计划从 org 摄取,近核心,复制到 Data 360。零拷贝:数据仓库的五年历史,几亿行,就地查询,联邦访问。引用:一个外部提供商,一次查一条,有人需要时读取,引用。底部写着:在全景图上,箭头看起来都差不多;数据量决定由什么来承载每一个箭头。 全景图上的数据流 所有者 数据量 机制和时序 认证 复制、引用还是联邦访问 产品进入 ERP 每晚约 500 处变更 批处理:集成层每晚加载 External Client App,集成用户 复制 订单发出 Salesforce 每天约 2,000 个,每分钟几 个 近实时:Salesforce 通过集成层向外调用, 使用 Apex 或 Flow 标注调用 命名凭据 复制 订单状态进入 ERP 每天约 16,000 条,突发式 异步:ERP 推送到集成层,集成层通过 REST API 更新 Salesforce External Client App,集成用户 复制 付款进入 财务 每天约 1,500 笔 批处理:每小时一次,经集成层和 Bulk API 2.0 External Client App,集成用户 复制 CRM 数据发出 Salesforce 几百万条记录,全部 Data 360 按计划从 org 摄取 近核心:在 org 中管理 复制到 Data 360 零拷贝 数据仓库 五年历史,几亿行 需要时就地查询 Data 360 到数据仓库的连接 联邦访问 引用 外部提供商 一次查一条 有人需要时读取 一个 Data 360 连接 引用 在全景图上,箭头看起来都差不多。数据量决定由什么来承载每一个箭头。 © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

ED-D42 背后的清单。箭头在全景图上看起来都差不多;由数据量决定用什么来承载每一个箭头。

这就是我喜欢这个产出物的原因:它帮助我思考。“我们如何跨 Salesforce 和 ERP 做报表?”这是模块 3 里的问题:**我的哪张图能漂亮地解决这个问题?**全景图。如果一切都在核心之上,就用标准报表。如果数据在 ERP 和数据仓库里,你立刻就能看出来。“这个客户属性应该在哪里主控?”看看哪些系统用它,哪个系统已经拥有客户。“Salesforce 需要每一条 GPS 读数吗?”谁产生它,谁消费它,工作负载是什么?也许 Salesforce 需要的是当前位置,而由另一个平台保留历史。全景图不会直接交给你答案。它给你的是看待问题的正确视角。

还有一条纪律。在一个已有的企业里,画出存在的东西,而不是你希望存在的东西。每周五用邮件发送的那份电子表格:画出来。合作伙伴放在 SFTP 服务器上的 CSV:画出来。因为历史原因绕过 ESB 的那个集成:画出来。在两个系统之间重新录入数据的人:标出来。不要在记录现实的同时把它美化。在设计目标全景图之前,你需要当前的全景图,而这正是我们在模块 6 中为 Steve Trucking 做的事。

**考试之外:AI 改变了什么。**全景图正在变成一张智能体地图。如果一个智能体要回答“我的货到哪儿了?”,全景图就必须说明答案来自 Salesforce、某个合作伙伴系统、车载远程信息、ERP,还是它们的组合。智能体不会消除系统边界;它们让知道哪个系统是权威的、以及如何安全地访问它,变得更加重要。

  • 哪些系统和用户群体属于全景图,以及它们的位置如何体现其角色。
  • 哪些数据流跨越系统边界,朝哪个方向,以及什么会回传。
  • 每一个连接如何认证,由什么机制承载,以及它是同步、异步、批处理还是联邦访问。
  • 什么时候一个带标签的箭头就够了,什么时候一次交互需要自己的泳道。
  • 图背后的清单要记录什么:所有者、工作负载、数据量、org、时序、认证,以及复制、引用还是联邦访问。

全景图不是我在架构完成之后才画的东西。它是我发现架构的方式。当你觉得它完成了时,不要欣赏它,去走查它。每一个你还解释不了的箭头,都在告诉你工作在哪里。