引言
1. 执行摘要
本案例研究分析了虚构金融机构“BigBank”的互联网银行系统的架构设计。该项目的目标是为个人银行客户提供安全、可访问且多渠道的账户访问(通过Web和移动设备),同时与现有的遗留核心银行基础设施集成。
该架构采用C4模型(容器图)进行记录,该模型可视化了高层次的技术选择以及系统中各个容器(应用程序、数据库等)之间的交互方式。

2. 业务挑战
-
遗留系统集成:银行拥有一个强大但较老的“大型机银行系统”,该系统保存着客户数据的核心信息。新系统需要暴露这些数据,但无需立即替换大型机。
-
多渠道访问:客户要求通过桌面浏览器和移动设备进行访问。
-
安全性:处理敏感的金融数据需要严格的认证机制和安全的通信通道。
3. 架构解决方案(C4容器视图)
该解决方案设计为一个解耦的系统,其中表示层与业务逻辑层和数据层分离。
A. 用户界面层(前端)
该系统为个人银行客户:
-
单页应用程序(SPA):
-
技术:JavaScript 和 Angular。
-
角色:它在客户的网页浏览器中运行。它提供了完整的互联网银行功能套件。它是一个动态、响应式的界面,能够与后端异步通信。
-
-
Web 应用:
-
技术:Java 和 Spring MVC。
-
角色:它是网络体验的入口点。它提供静态内容(HTML/CSS/JS),并托管单页应用。它充当 Angular 应用的“启动器”。
-
-
移动应用:
-
技术:Xamarin(支持跨平台开发,可能是 iOS 和 Android)。
-
角色:为移动设备提供“有限子集”的功能,经过优化。这表明复杂任务(如设置国际汇款)可能仅限于完整的 Web/SPA 界面,而常见任务(如查询余额)则可在移动设备上使用。
-
B. 业务逻辑层(后端)
-
API 应用:
-
技术:Java 和 Spring MVC。
-
角色:这是架构的中枢神经系统。它充当一个API 网关或前端后端(BFF).
-
功能:它向 Web 和移动客户端暴露一个JSON/HTTPS API。它处理身份验证、授权以及数据请求的编排。
-
C. 数据与集成层
-
数据库:
-
技术:Oracle数据库模式。
-
角色:存储互联网银行专用数据。其中包括用户注册信息,哈希认证凭据(安全最佳实践),以及访问日志。它不存储实际的银行余额(这些数据在大型机中)。不存储实际的银行余额(这些数据在大型机中)。
-
通信:API应用程序通过JDBC.
-
-
大型机银行系统:
-
角色:记录系统。它存储核心银行信息(客户、账户、交易)。
-
通信:API应用程序使用HTTPS上的XML。这表明大型机很可能是一个基于SOAP的遗留服务,或是一个需要结构化XML数据交换的旧系统。
-
-
电子邮件系统:
-
技术:Microsoft Exchange。
-
角色:处理通知。
-
通信:API应用程序通过SMTP发送到Exchange服务器,然后由该服务器将邮件发送给客户。
-
4. 关键数据流与用户旅程
场景 1:通过网页浏览器登录
-
该个人银行客户通过 HTTPS 访问
bigbank.com/ib使用 HTTPS。 -
请求到达Web 应用程序(Java/Spring MVC)。
-
Web 应用程序将单页应用程序(Angular)发送到客户的浏览器。
-
客户在单页应用程序中输入凭据。
-
单页应用程序发起一个 API 调用(
JSON/HTTPS)到API 应用程序. -
API 应用程序将凭据与数据库(通过 JDBC)。
-
成功后,单页应用程序请求账户余额。API 应用程序从大型机银行系统 (
XML/HTTPS获取此数据,并将其返回给单页应用程序。
场景 2:移动交易通知
-
客户通过移动应用程序(Xamarin)。
-
应用程序向 发送请求API 应用程序.
-
API 应用程序与 处理付款大型机.
-
API 应用程序通过向 发送 SMTP 请求来触发确认邮件电子邮件系统(Exchange)。
-
客户收到电子邮件通知。
5. 技术亮点与最佳实践
-
关注点分离:该图清晰地将“网上银行”专用数据(Oracle 数据库)与“核心银行”数据(大型机)分开。这可防止网页层直接访问核心财务账本。
-
协议转换:API 应用程序充当翻译器。现代前端使用 JSON,但旧版后端使用 XML。API 应用程序弥合了这一差距。
-
安全性:凭据在数据库中以“哈希”形式存储,确保即使数据库被攻破,原始密码也不会暴露。所有外部通信均使用 HTTPS.
-
可扩展性:通过使用单页应用(Angular)和解耦的 API,前端可以独立于后端逻辑进行扩展。













