1. 执行摘要
本案例研究记录了 互联网银行系统 的 大银行股份有限公司。该系统旨在允许个人银行客户通过网页浏览器和移动设备查看账户余额、查看交易记录并进行支付。
该架构遵循 C4 模型 (上下文、容器、组件、代码),从高层次抽象到部署基础设施,提供了系统的分层视图。
2. 第一级:系统上下文图
目标: 展示系统在其用户和外部依赖关系中的位置。
参考图: 图4(主要)和图1(简化视图)。
分析
该 互联网银行系统 位于 大银行股份有限公司 企业范围内。它作为 个人银行客户.

-
用户(参与者):
-
个人银行客户: 主要用户,通过系统查看余额并进行支付。
-
客户服务人员: 协助客户的银行员工(如图4所示)。
-
后台工作人员: 行政和支持人员(如图4所示)。
-
-
外部系统:
-
主机银行系统: 记录系统。它存储所有核心银行信息(客户、账户、交易)。网上银行系统依赖于此系统获取权威数据。
-
电子邮件系统: 内部的 Microsoft Exchange 系统,用于向客户发送通知(例如,密码重置、确认信息)。
-
ATM: 一个独立的软件系统,用于现金取款(如图4所示,用于展示更广泛的生态系统)。
-
关键关系: 客户与网上银行系统交互,该系统作为面向遗留主机系统的外观,用于检索数据和处理支付。
3. 第二层:容器图
目标: 展示高层次的技术选择以及系统中职责的分布情况。
参考图: 图2。
分析
第一层中的“网上银行系统”被分解为五个不同的容器(可部署单元)。

-
Web 应用程序(Java 和 Spring MVC):
-
角色: 作为网络用户的入口点。
-
功能: 通过 HTTPS 将静态内容(HTML/CSS/JS)和单页应用程序(SPA)交付给客户的浏览器。
-
-
单页应用程序(JavaScript 和 Angular):
-
角色: 在浏览器中运行的客户端逻辑。
-
功能: 提供完整的网上银行功能。它会向后端发起 API 调用。
-
-
移动应用程序(Xamarin):
-
角色: 移动设备的客户端应用程序。
-
功能:与网页应用相比,功能有限。它还会向后端发出API调用。
-
-
API应用(Java和Spring MVC):
-
角色:核心后端逻辑。
-
功能:提供JSON/HTTPS API。它处理身份验证、业务逻辑以及与外部系统(数据库、大型机、电子邮件)的通信。
-
-
数据库(Oracle数据库模式):
-
角色:数据持久化。
-
功能:存储用户注册信息、哈希后的凭据和访问日志。注意:核心银行数据仍保留在大型机中。
-
关键关系:网页应用(通过SPA)和移动应用均与API应用通信。API应用随后与数据库进行本地数据通信,并与大型机进行核心银行数据通信。
4. 第3层:组件图
目标:深入到特定容器(API应用)中,展示其内部构建模块。
参考图:图3。
分析
该图将API应用容器分解为逻辑组件。

-
控制器(Spring MVC Rest控制器):这些用于处理传入的HTTP请求。
-
登录控制器:处理用户身份验证。
-
重置密码控制器:处理密码恢复流程。
-
账户概要控制器:为用户检索账户数据。
-
-
组件(Spring Bean):这些包含业务逻辑。
-
安全组件:处理登录和修改密码。由登录控制器和重置密码控制器使用。
-
电子邮件组件:处理发送电子邮件。由重置密码控制器使用。
-
大型机银行系统外观:对外部大型机系统的封装。它将内部API调用转换为旧式大型机所需的XML/HTTPS格式。由账户概要控制器使用。
-
关键关系: 账户概要控制器 使用 大型机银行系统外观从外部大型机获取数据,展示了API层与集成层之间的关注点分离。
5. 第四层:部署图
目标:展示软件容器如何映射到物理基础设施。
参考图:图像5。
分析
该图展示了运行时环境。

-
客户端:
-
移动设备:运行移动应用程序(iOS/Android)。
-
计算机:运行Web浏览器(Chrome/Firefox/Safari/Edge),该浏览器托管单页应用程序。
-
-
Big Bank plc数据中心:
-
Web服务器(bigbank-web*):** 运行Ubuntu 16.04 LTS的节点Apache Tomcat 8.x.
-
托管Web应用程序和API应用程序.
-
-
数据库服务器(bigbank-db01/02):运行Ubuntu 16.04 LTS的节点Oracle 12c.
-
Oracle – 主数据库:主数据库。
-
Oracle – 备用数据库:用于冗余/高可用性的副本。
-
-
关键关系:移动应用程序和Web浏览器通过互联网连接到API应用程序托管在Tomcat上的API应用程序。API应用程序通过JDBC连接到Oracle数据库集群。
6. 应用的关键概念和指导原则
基于本案例研究,应用了以下C4建模原则:
-
抽象层次:该模型成功地从“谁在使用它?”(上下文)到“它由什么构成?”(容器)再到“它是如何组织的?”(组件),最后到“它在哪里运行?”(部署)。
-
作用域边界:
-
在第1级中,“Big Bank plc”边界清晰地区分了内部系统与外部参与者。
-
在第2级中,“互联网银行系统”边界封装了正在构建的特定软件,将其与遗留的大型机分离开来。
-
-
关注点分离:
-
前端与后端:单页应用(前端)与API应用(后端)的分离,使得它们可以独立开发和扩展。
-
数据分离:敏感的核心银行数据保存在大型机中,而互联网银行系统仅在其自身的Oracle数据库中缓存必要的用户访问数据。
-
-
技术中立性(在适当情况下):图表在与架构决策相关时指定了技术(Java、Angular、Oracle),但主要关注的是 关系和 职责块之间的
-
符号表示:使用标准的C4表示法:
-
人员:人物简笔画(或在此特定渲染风格中的圆圈)。
-
软件系统/容器/组件:带有不同颜色的圆角矩形(蓝色表示内部/主要,灰色表示外部/次要)。
-
关系:带标签的虚线箭头,用于描述协议(例如,[HTTPS]、[JSON]、[JDBC])。
-











