Files
conti-docs/Architecture-Diagram/architecture-diagram-explanation.md

25 KiB
Raw Permalink Blame History

Continental Retail APP Architecture Diagram 详细说明

本文用于解释 architecture-diagram.drawio 中的 3 张系统架构图,帮助产品、研发、架构、移动端、后端、集成、测试和评审人员快速理解这套系统为什么这样设计、每一页分别在说明什么、不同域之间的关系如何划分,以及关键访问链路和治理规则如何落地。

这 3 张图不是数据库设计图,也不是接口字段定义图,更不是某台服务器部署细节图。它们的定位是:

  • 用于统一架构认知。
  • 用于评审系统边界和责任归属。
  • 用于说明主访问链路和例外链路。
  • 用于帮助研发和测试理解关键业务运行方式。

1. 这 3 张图整体在表达什么

这套图表达的是一套“统一移动入口、主后台统一编排、历史后台保留独立边界、供应商能力受控接入”的系统架构。

它的核心目标不是把所有历史系统都并进一个后台,而是在保留实际业务边界的前提下,把移动端访问链路重新组织成一个清晰、可治理、可演进的体系。

3 张图分别承担不同职责:

  • System Overview 说明系统能力分别归谁拥有,重点是“谁负责什么”。
  • System Architecture 说明系统按层分布后的结构关系,重点是“系统怎么连接、怎么治理”。
  • Key Flows and Context Governance 说明关键业务链路在运行时如何流转,重点是“具体流程怎么走、异常和上下文怎么管”。

这 3 张图共同强调以下架构原则:

  • Mobile App -> App Backend 是唯一主访问链路。
  • App Backend 是 APP 的主后台和统一业务编排中心。
  • Mini Program Backend 继续保持独立后台域,不直接并入主后台。
  • F6 Supplier Domain 是供应商能力域,不被定义为 APP 主后台。
  • Mobile App -> F6 只允许发生在嵌入式 WebView 场景。
  • App Backend -> F6 APIs 必须经过 F6 Integration Adapter
  • 历史 Mini 直连链路只保留为兼容路径,不作为推荐默认方案。

2. 图例和颜色到底在表达什么

为了让读图的人在 3 页之间建立统一认知,这套图对颜色和线条语义做了固定约定。

2.1 颜色语义

  • 蓝色区域和蓝色节点 表示 APP 本身和 App Backend 主域相关能力。
  • 绿色区域和绿色节点 表示保留的 Mini Program Backend 历史业务域。
  • 橙色区域和橙色节点 表示 F6 Supplier Domain、WebView 入口、供应商接入和集成适配层。
  • 灰色区域和灰色说明 表示通用治理、跨域聚合、外部服务或非主业务实体说明。
  • 红色点线 表示历史兼容链路,只是过渡保留,不是推荐设计。

2.2 连线语义

  • 蓝色实线 表示主访问链路,也就是 APP 面向主后台的标准访问方式。
  • 橙色虚线 表示 F6 相关的例外链路,包括嵌入式 WebView、换票和供应商访问路径。
  • 灰色虚线 表示聚合访问、外部服务访问或跨域读取。
  • 红色点线 表示历史兼容直连,不建议在新功能中继续复制。

这组语义在 3 页中都保持一致。第三页底部的 Route Semantics 也用线段样例再次标注这些规则,避免读图时只靠颜色文字理解链路含义。因此这套图并不是 3 张孤立页面,而是一套统一的架构表达。


3. 第一页:System Overview 详细说明

System Overview 是能力归属图。它的重点不是展示某个接口先调谁、后调谁,而是回答一个更基础的问题:

“整套系统里,不同能力到底归哪个域负责?”

这一页把系统划分成 4 个主域和 1 个底部治理带:

  • Mobile App
  • App Backend
  • Mini Program Backend Domain
  • F6 Supplier Domain
  • External Services + Governance Rules

3.1 Mobile App:统一移动入口

左侧第一列是 Mobile App,代表用户真正使用的移动端容器。

这部分说明的是,APP 在架构中的职责主要是“承载、呈现、调用原生能力、维持当前会话”,而不是直接承担复杂跨系统编排。

它包含几个关键块:

  • Login / Agreement / App Shell 表示 APP 是唯一统一入口,用户从这里进入整个系统。
  • WebView + JSBridge 表示 APP 具备嵌入式 WebView 承载能力,但这里特别强调“只用于 F6 portal pages”,不是泛化的任意外部浏览器。
  • Native Capabilities 表示扫码、相机、上传、蓝牙、通知等设备能力由 APP 容器掌控。
  • Store-Aware Session Holder 表示 APP 本地会持有当前门店和角色上下文,但上下文本身的权威归属仍然在主后台。

换句话说,APP 主要负责:

  • 提供统一入口。
  • 承担页面容器。
  • 调度设备能力。
  • 保存当前会话状态。

但 APP 不负责:

  • 多系统聚合编排。
  • 供应商 API 直接调用。
  • 业务权限主判断。
  • 门店上下文主定义。

3.2 App Backend:主业务域和控制中心

中间第二列是 App Backend,这是整页最核心的部分。

这一列强调的是:APP 主后台不只是一个普通 API 服务,而是整个移动平台的控制面和编排中心。

它包含以下能力:

  • Auth and Token Center 负责登录、令牌签发、刷新、退出和身份可信控制。
  • Store Context + Menu + Permission + Config 负责当前门店、角色范围、菜单权限和配置下发。
  • Workbench Aggregation 负责首页工作台、提醒、摘要和多个系统结果的统一返回。
  • Business Orchestration 负责订单、采购、流程上下文和字段标准化。
  • WebView Ticket and Signing Entry 负责 F6 WebView 场景的换票、上下文准备和 trace handoff。

这一列的含义非常明确:

  • APP 所有主流程都应先到这里。
  • 这里决定用户是谁、当前在哪个门店、可以看什么菜单、有什么权限。
  • 这里负责把复杂的后端异构系统整合成移动端可用结果。
  • 这里也是所有供应商接入和链路治理的统一出口。

如果没有这一层,移动端就会变成一个多后台直连客户端,导致:

  • 门店和角色上下文不统一。
  • 权限边界难以收口。
  • 多系统异常无法统一处理。
  • 供应商接入逻辑扩散到多个模块。

3.3 Mini Program Backend Domain:保留独立边界的历史系统域

第三列是 Mini Program Backend Domain

这部分要表达的不是“历史系统不重要”,而是:

“这些系统仍然重要,但它们不是 APP 的统一主后台。”

图中列出了典型保留系统:

  • O2O
  • Warranty
  • Retail Store
  • ROOS

其中 Retail Store 对应“马上下单”体系中的门店注册、门店信息修改、店员管理等门店基础资料能力,不再使用容易被误解为交易订单的旧英文表述。

并通过说明卡强调:

  • 它们仍然拥有历史业务数据和流程。
  • 它们仍然可以是某些能力的 Source of Truth
  • 但面向 APP 的访问,原则上应通过 App Backend 聚合和标准化后暴露。

这部分架构表达非常重要,因为它避免了两个极端:

  • 一个极端是误以为历史系统可以被立刻彻底替换。
  • 另一个极端是继续把移动端做成多个小程序后台的直连入口。

正确做法是:

  • 保留历史系统边界。
  • 承认它们的业务归属。
  • 但将移动端访问统一收束到主后台。

3.4 F6 Supplier Domain:供应商能力域

第四列是 F6 Supplier Domain

这部分专门用来说明 F6 的定位:

  • 它是供应商域。
  • 它提供能力,但不是 APP 的主系统。
  • 它既包含页面能力,也包含接口能力。

图中分成两类:

  • F6 WebView Pages
  • F6 Capability APIs

并给出代表性示例:

  • WebView 例子:Sales, scan, settlement, inbound
  • API 例子:Procurement, activity, inventory sync

这里的核心意思是:

  • 页面可以在受控情况下嵌入到 APP WebView 中。
  • API 不允许 APP 前端直接调用。
  • 所有 API 级访问应通过 App Backend 内部适配层完成。

3.5 底部:External Services 和 Governance Rules

最底部是一条横向带,补充说明两件事:

  • 系统还会依赖外部服务。
  • 整套系统必须遵守统一治理规则。

外部服务示例包括:

  • SMS
  • Marketing / CRM
  • WeCom

治理规则则明确写出 4 条核心边界:

  • App -> App Backend is primary
  • App -> F6 only in Embedded WebView
  • F6 APIs go through Adapter
  • Mini direct access is legacy-only

这 4 条规则可以理解为第一页的结论。整张图不只是介绍组件,而是在告诉所有参与方:

“系统边界和默认访问方式已经定了,新需求不要再随意绕开它。”


4. 第二页:System Architecture 详细说明

System Architecture 是分层架构图。它建立在第一页能力归属基础上,进一步解释系统按层组织后的技术结构。

如果第一页回答的是“谁负责什么”,那么第二页回答的是:

“这些能力在逻辑架构上如何分层组织,链路如何穿过这些层?”

这一页分成以下层次:

  • Client Tier
  • Access & Security
  • App Backend
  • Integration Layer
  • Mini Program Backend
  • F6 Supplier Domain
  • External Services
  • Cross-Cutting

4.1 Client Tier:客户端层

最上层是 Client Tier

这里包含:

  • Store User Persona
  • Mobile App
  • Native Capabilities
  • WebView + JSBridge

这层说明的是:

  • 用户并不是直接面对多个后端系统,而是面对一个统一 APP。
  • 原生能力和 WebView 容器都属于客户端能力域。
  • 客户端负责发起请求、展示页面、承载设备能力和 WebView 容器。

这里再次强调:WebView + JSBridge 是一种容器能力,不等于前端可以直接把供应商接口当成主链路使用。

4.2 Access & Security:接入与安全层

第二层是 Access & Security

它包含:

  • API Gateway
  • JWT / Auth
  • WebView Allowlist

这层表达的是系统接入不能裸奔,所有访问必须经过入口控制和安全校验。

API Gateway

API Gateway 代表统一 API 接入入口,负责:

  • HTTPS / TLS 接入。
  • 路由分发。
  • 基础限流和治理。
  • 将移动端和后端实现细节隔离。

JWT / Auth

JWT / Auth 代表统一身份凭证体系,负责:

  • 令牌签发。
  • 令牌刷新。
  • 请求身份识别。
  • 为后续权限和上下文建立可信基础。

WebView Allowlist

WebView Allowlist 是这一层里很关键的一个治理点。

它表达的是:

  • 并不是任何外部 WebView 页面都可以被 APP 打开。
  • 嵌入式 WebView 域名必须是受控、登记和允许的。
  • 这既是安全规则,也是架构边界规则。

4.3 App Backend:主后台层

第三层是 App Backend,也是架构主域。

这里包含:

  • Identity & Store Center
  • BFF Orchestration
  • Workbench Aggregation
  • WebView Ticket Center

Identity & Store Center

这个模块负责:

  • 用户身份。
  • 门店主数据。
  • 角色范围。
  • 菜单权限。

它的意义是让系统具备统一上下文中心,否则每个后端域都按自己的方式解释用户和门店,会导致移动端体验严重割裂。

BFF Orchestration

这是面向移动端的统一 BFF 编排层,负责:

  • 统一接口形态。
  • 聚合和标准化多个后端返回。
  • 减少前端直接理解多个后端协议的复杂度。

在架构里它是非常重要的一层,因为 APP 实际看到的“后端世界”,应该优先由它统一封装,而不是暴露历史系统差异。

Workbench Aggregation

这个模块更聚焦首页和工作台聚合能力,典型包括:

  • 待办。
  • 提醒。
  • 门店经营摘要。
  • 多来源业务 tile 数据。

它说明首页不是由单一系统直接返回,而是由主后台整合多个来源后下发。

WebView Ticket Center

这个模块专门解决 F6 WebView 场景下的入口控制问题,负责:

  • 生成或换取 WebView 票据。
  • 绑定当前用户和门店上下文。
  • 传递 trace 信息。
  • 为嵌入式 WebView 提供受控启动入口。

这意味着 APP 打开 F6 WebView 时,并不是裸跳 URL,而是先由主后台准备好上下文和票据条件。

4.4 Integration Layer:集成适配层

第四层是 Integration Layer

这一层存在的意义,是把供应商接入复杂性控制在一个专门层里,而不是扩散进整个业务系统。

包含两个关键组件:

  • F6 Integration Adapter
  • Timeout / Retry

F6 Integration Adapter

它负责:

  • 换票。
  • 供应商访问上下文准备。
  • 将主后台调用收口到统一适配出口。

本质上它是主后台访问 F6 的统一适配出口。

Timeout / Retry

这部分表达的是供应商链路治理能力,包括:

  • 超时控制。
  • 重试策略。

因为 F6 是外部能力域,不稳定性和响应波动风险都比内部模块更高,所以这里保留最关键的超时和重试治理。

4.5 Mini Program Backend:历史后台层

第五层是 Mini Program Backend

这一层包含:

  • O2O Backend
  • Warranty Backend
  • Retail Store Backend
  • ROOS Backend

其中 Retail Store Backend 对应原“马上下单”相关的门店、人员、地址和资料维护能力,命名上按业务域表达为门店基础资料后台。

这层的架构含义不是“这些服务很次要”,而是:

  • 它们继续承担原有业务责任。
  • 它们可以是数据主来源。
  • 但移动端调用它们时,优先通过主后台聚合。

这页里灰色虚线从 BFF Orchestration 向下扇出,就是在表达:

  • 主后台聚合多个 Mini 域。
  • 主后台对外统一返回。
  • APP 不应把它们当多个主后台直接使用。

4.6 F6 Supplier Domain:供应商能力层

右侧是 F6 Supplier Domain

这里分成两个主要能力:

  • F6 WebView Pages
  • F6 Capability APIs

它们分别对应两种不同访问模式:

F6 WebView Pages

用于页面嵌入场景,例如:

  • 销售开单。
  • 扫码。
  • 结算。
  • 入库。

访问特点是:

  • 页面最终可能由移动端 WebView 直接打开。
  • 但打开前需要经过主后台准备票据和上下文。
  • 域名必须在 Allowlist 中。

F6 Capability APIs

用于系统间能力调用,例如:

  • 采购。
  • 促销。
  • ERP 补充能力。

访问特点是:

  • 前端不能直接调用。
  • 只能从 App Backend -> Integration Adapter -> F6 APIs 发起。

4.7 External Services:外部服务层

底部右侧是 External Services,包括:

  • SMS
  • Marketing / CRM
  • WeCom

这说明 APP 主后台除了对接历史内部域和供应商域外,也会调用一些外部平台服务。

这些服务通常承担:

  • 短信验证码。
  • 营销或客户关系数据。
  • 企业协同消息。

它们本质上也是外部依赖,因此在架构里被单独表达,而不是混在主后台内部。

4.8 Cross-Cutting:横切关注点

右上方还有一组 Cross-Cutting 模块:

  • Observability
  • Audit / Security
  • Config Center

这些不是某个独立业务流程,而是所有流程都必须共享的治理能力。

Observability

负责:

  • Trace ID
  • 日志
  • 指标

确保跨域链路可追踪。

Audit / Security

负责:

  • 敏感信息控制。
  • 关键行为留痕。
  • 审计证据保留。

Config Center

负责:

  • 菜单配置。
  • 开关配置。
  • WebView 入口策略。

这部分说明 APP 平台不是硬编码系统,而是需要较强配置化能力支撑运营和演进。

4.9 第二页想强调的核心结论

第二页最终想让读图人形成以下认知:

  • 客户端只有一个统一入口。
  • 安全和接入必须前置。
  • 主后台必须承担统一 BFF 和统一上下文职责。
  • 供应商接入必须通过适配层治理。
  • 历史 Mini 域继续存在,但面向 APP 的输出需要经由主后台整合。
  • 所有跨域链路都要可观测、可审计、可配置、可降级。

5. 第三页:Key Flows and Context Governance 详细说明

第三页是运行时流程图。它不是在重新画系统结构,而是在解释:

“当业务真实运行起来时,这套架构的关键行为是怎么发生的?”

这一页选了 4 条最关键的流程:

  • Flow 1 Login and Store Context Bootstrap
  • Flow 2 F6 WebView Launch and Session Rules
  • Flow 3 Home Aggregation and Mini Compatibility
  • Flow 4 Hybrid Procurement and Inbound Flow

同时底部补充统一治理规则。

5.1 Flow 1Login and Store Context Bootstrap

这条流程解释登录后的上下文建立过程。

流程步骤是:

  1. App Login
  2. Token Issue
  3. Store List + Default Store
  4. Menu / Permission / Config Baseline
  5. Context Established

这个流程在架构上的真正含义不是“登录成功返回 token”这么简单,而是:

  • 用户身份只是第一步。
  • 系统真正可运行还需要建立当前门店上下文。
  • 菜单、权限和配置要跟门店和角色一起确定。
  • APP 登录后不是只有一个用户态,而是一个“用户 + 门店 + 角色 + 菜单 + 配置”的完整工作上下文。

所以这条流程强调的是:

  • Store Context 是核心控制对象。
  • 登录完成不代表业务上下文完成。
  • APP 中很多行为都依赖这一步建立出的当前门店语义。

5.2 Flow 2F6 WebView Launch and Session Rules

这条流程解释 F6 WebView 嵌入为什么是“例外链路但仍然受控”。

流程步骤是:

  1. App asks for WebView entry
  2. Backend exchanges / prepares ticket
  3. Embedded open in WebView

并补充 3 条强规则:

  • Store switch invalidates WebView
  • Expired ticket needs refresh
  • Failure fallback shows safe message + trace ID

这条流程表达的重点有 4 个:

第一,WebView 入口必须由主后台签发

APP 不是拿到一个 URL 就直接打开,而是要先通过主后台获取受控入口。

第二,WebView 会话受当前门店上下文约束

如果用户切换门店,当前 WebView 会话不能继续沿用旧上下文,否则会造成门店数据串用和权限风险。

第三,票据是时效性的

过期票据需要刷新,而不是无限复用。

第四,失败时必须可支持排障

如果 F6 打不开,不能只给用户一个空白页或技术错误,而是要给出安全提示并带 trace 信息,方便客服、研发和集成排查。

5.3 Flow 3Home Aggregation and Mini Compatibility

这条流程解释首页工作台为什么一定是聚合页,而不是某个单体后端直接吐数据。

流程步骤是:

  1. Workbench request
  2. Backend aggregates O2O / Warranty / ROOS / Config
  3. Partial failure returns degradable tiles
  4. Legacy Mini direct access is compatibility only

这条流程的重点非常明确:

第一,首页是聚合结果

首页的数据来源天然分散,不可能全部只来自一个系统。

第二,主后台要负责标准化

不同 Mini 域返回结构、状态和错误处理方式可能不同,需要统一加工后再交给 APP。

第三,降级方式必须是“局部降级”

如果其中一个来源失败,不应该让整个首页白屏,而应该:

  • 哪个 tile 有问题就降级哪个 tile。
  • 其他可用部分继续返回。

第四,历史直连不是默认解法

即使某些 Mini 场景短期仍保留兼容直连,也应明确标记为历史兼容路径,而不是继续作为新功能访问方式。

5.4 Flow 4Hybrid Procurement and Inbound Flow

这条流程解释采购和入库为什么是“混合模式”。

流程步骤是:

  1. Retail store context + permission + normalization
  2. F6 owns procurement / promotion / ERP
  3. Inbound execution uses WebView or API path
  4. Historical data may still come from Mini aggregation

这条流程在业务上很关键,因为它说明采购和入库类能力并不是纯内部能力,也不是纯供应商能力,而是一个混合场景。

它的架构含义是:

  • 主后台负责上下文、权限和统一口径。
  • F6 负责其擅长和实际拥有的供应商能力。
  • 页面型操作可能通过 WebView 完成。
  • 接口型能力通过适配层访问。
  • 部分历史辅助数据可能仍来自 Mini 域聚合。

这也解释了为什么:

  • 不能把 F6 当主后台。
  • 也不能假装采购和入库完全脱离 F6。
  • 更不能让前端自己到处直连多个系统完成业务。

正确解法是由主后台掌控主流程,由供应商承接其能力边界内的部分。


6. 底部治理规则和线段语义在告诉我们什么

第三页底部的 Shared Governance RulesRoute SemanticsReview checks 不是补充装饰,而是整套架构落地的检查清单和读图规则。

6.1 Shared Governance Rules

这里明确了 4 条总规则:

  • Store context is owned by App Backend
  • F6 WebView is an embedded exception
  • Mini systems remain independent
  • Every degraded or supplier-facing failure returns a user-safe message and a trace ID

它们分别约束:

  • 上下文归属。
  • 例外链路边界。
  • 历史系统独立性。
  • 失败处理方式。

6.2 Route Semantics

这里用线段样例说明第三页所有关键链路的读法:

  • Primary App route 对应蓝色实线,表示 APP 到主后台的标准主链路。
  • F6 embedded / exception 对应橙色虚线,表示 F6 WebView 嵌入、票据换取或供应商例外链路。
  • Aggregation / external 对应灰色虚线,表示主后台向 Mini 域、外部服务或聚合来源发起的访问。
  • Legacy compatibility 对应红色点线,表示历史兼容路径,只能作为过渡保留,不能作为新功能默认链路。

这部分和第二页的图例保持一致,目的是让评审人员在看流程图时能直接区分“主链路、例外链路、聚合链路、历史链路”,避免把 F6 WebView 或 Mini 直连误解成默认访问方式。

6.3 Review Checks

这里的检查项可以直接作为评审问题来问:

  1. 门店切换是否会关闭当前供应商 WebView 会话。
  2. 首页失败是否按 tile 降级而不是整页失败。
  3. 采购和入库是否保持 F6-first 的供应商能力归属。
  4. Mini 直连是否被严格控制为过渡链路。

如果某个新需求或技术方案违反了这里的检查项,通常意味着它已经偏离当前架构原则。


7. 为什么必须这样设计

这套架构不是为了“画得好看”,而是为了解决当前业务现实中的几个核心问题。

7.1 解决多入口和多后台混乱

历史上不同能力分散在多个小程序和后台里,APP 如果继续直接对接多个后端,移动端复杂度会越来越高。

统一 App Backend 作为主后台后,可以:

  • 收敛前端访问入口。
  • 统一账号和门店上下文。
  • 统一权限和配置。

7.2 保留历史资产而不是强行推倒重来

Mini Program Backend 仍然保留业务边界,避免为了“统一”而做不现实的大拆大建。

这使系统具备:

  • 现实可落地性。
  • 渐进式演进能力。
  • 更低迁移风险。

7.3 把 F6 当成供应商能力,而不是主系统

这是整个架构中最重要的认知之一。

因为 F6

  • 不是自有主后台。
  • 协议和稳定性不完全可控。
  • 同时提供页面和接口两类能力。

所以必须:

  • 页面入口受控。
  • API 接口后端统一适配。
  • 供应商异常和主系统隔离。

7.4 支持真实业务运行中的上下文治理

系统不是“登录就结束”,而是多门店、多角色、多链路环境下持续运行。

因此必须把以下能力做成架构级规则:

  • 当前门店上下文。
  • WebView 会话绑定和失效控制。
  • 跨域链路可追踪。
  • 失败时可降级、可审计、可支持排障。

8. 读完这 3 页后应该形成的统一认知

如果要用一句话总结这 3 页图,它表达的是:

“Continental Retail APP 是一个以 App Backend 为统一主后台、以 Mobile App 为统一入口、以 Mini Program Backend 为保留独立历史域、以 F6 为受控供应商能力域的混合架构系统。”

更具体地说,所有参与方应形成以下共识:

  • APP 不是多个后台的并列客户端,而是统一入口。
  • App Backend 不是普通接口层,而是控制面和编排中心。
  • Mini 后台继续存在,但面向 APP 时应优先通过主后台聚合。
  • F6 是供应商域,页面和接口都要按受控方式接入。
  • 门店上下文是系统运行的核心治理对象。
  • 首页聚合必须支持局部降级。
  • WebView 是例外链路,不是默认业务通路。
  • 所有跨域链路都必须可治理、可观测、可审计。

9. 这份说明适合怎么使用

这份文档适合以下用途:

  • 架构评审时作为讲解稿。
  • 产品、研发、测试 onboarding 时作为系统认知材料。
  • 需求讨论时用于确认是否违反既定架构原则。
  • 接口联调前用于统一系统边界和责任分工。

如果后续需要,我还可以继续补两类配套文档:

  • 一份“面向评审汇报”的精简版讲稿。
  • 一份“按模块拆解”的实现说明,把图里的每个块映射到实际研发任务和接口边界。