了解如何构建运营数据层 (ODL),以解锁孤立的支付数据,从而为现代应用程序提供支持。
行业: 金融服务
产品和工具: MongoDB Atlas、MongoDB Enterprise Advanced、Atlas集群、MongoDB Change Streams、Atlas Search、Atlas Charts、Atlas审核和企业级安全、MongoDB Kafka Connector、Queryable Encryption、时间序列
解决方案概述
当今的支付行业日新月异,企业都在努力提供安全且易于使用的支付解决方案。这种需求是由新法规、客户期望和市场竞争等因素驱动的。金融服务组织可以使用MongoDB实现支付系统的现代化。
此解决方案展示了如何使用MongoDB构建ODL。您可以在传统系统之上部署ODL,对架构进行现代化改造,而不会遇到完全替换传统系统所带来的困难和风险。
支付系统现代化
多个因素正在推动支付系统的现代化:
实时支付:客户和企业希望立即处理付款。
监管变化:新的法律和法规(例如欧洲的 PSD2)鼓励建立更开放、更灵活的支付系统。
客户期望:人们希望支付流程顺畅并跨不同平台进行集成。
开放式银行业务:开放式银行业务提高了金融领域的竞争力和创新能力,从而有利于开发新的支付服务。
竞争: 金融科技初创公司提供新的支付解决方案,迫使传统金融机构更新系统。
现代化挑战
更新支付系统面临挑战,原因如下:
复杂的系统:支付系统涉及许多不同的参与方和法规,使得变更变得复杂。
旧技术:过时的系统减慢了创新速度,难以达到当前标准。
高成本:升级旧系统可能既昂贵又耗时。
技术债务:系统设计中之前采取的捷径可能会限制未来的增长和适应能力。
在此示例解决方案中,您可以学习;了解如何使用MongoDB实现支付系统的现代化。
现代化的途径
企业在更新系统时采用以下策略:
领域驱动设计:领域驱动设计使系统开发与业务需求保持一致,确保技术变更提供服务业务目标。
微服务架构:通过从整体架构过渡到微服务架构,您可以更高效地更新和扩展系统。
MongoDB 如何支持现代化
以下MongoDB功能支持支付现代化的努力:
灵活的文档模型:MongoDB 的文档模型允许您纳入新的支付类型和数据结构,确保您的系统可以与市场一起发展。
操作数据层: MongoDB引入了统一数据层,简化了跨各种服务的数据访问权限,这对于构建集成支付解决方案至关重要。
支持最佳实践: MongoDB为企业提供遵循行业最佳实践所需的工具,例如安全事务和实时分析。
参考架构
下图详细说明了该支付解决方案所使用的架构。如需进一步学习;了解如何与MongoDB配合使用,请访问我们的实时支付页面。

图 1. 支付方案架构图
数据模型方法
该解决方案侧重于用户帐户、交易、银行帐户和付款方式等实体之间的关系。它包括每个实体的数据属性和详细信息。
微服务架构
微服务架构将大型整体应用程序分解为较小的部分。它可以实现更快的开发、模块化、灵活性和可扩展性、韧性、组织协调和降低费用。
此解决方案中使用的微服务架构分为以下服务:
用户管理
事务处理
事务历史记录
账户调节
付款验证
报告
通知
用户管理
此服务促进用户和帐户交互。下图显示了帐户创建的流程。
该图涉及以下实体:
数据实体:用户账号、支付方式、银行账户
权限:读取/写入用户帐户、付款方式和银行帐户
输入:用户详细信息、支付方式详细信息、银行账户详细信息
输出:用户账户创建确认、支付方式添加确认、银行账户添加确认

图2。账户创建流程
事务处理
此服务管理与事务相关的操作,例如启动、完成或退款ACID 事务。下图中,您可以看到启动ACID 事务的主要流程。
该图涉及以下实体:
数据实体:事务、银行账户
权限:对交易进行读写,对银行账户进行读取
输入:交易详情,如金额、发送方和接收方
输出:事务状态更新,如待处理、已完成或已失败

图3.事务流程
该微服务还负责管理外部提供商事务。示例,该解决方案包括用户接受 PayPal 付款的演示。MongoDB 灵活的模式允许表示事务的文档存在变化。
下图显示了模拟 PayPalACID 事务的进程。

图4。外部事务流
事务历史记录
该服务负责ACID 事务记录和存档。它涉及以下实体:
数据实体:交易历史记录、用户账户
权限:读取事务历史记录,读取用户帐户
输入: 用户账户号码
输出:交易记录数据
账户调节
此服务验证帐户详细信息是否是最新的。它涉及以下实体:
数据实体:银行账户、事务
权限:读取/写入银行账户,读取事务
输入:事务详情、银行账户详情
输出:对账状态,调整后的账户余额
付款验证
此服务处理ACID 事务启动。下图显示了付款处理步骤,从服务对付款做出反应开始,到通知用户付款是被批准还是被拒绝为止。
该服务涉及以下实体:
数据实体:交易、用户账户、银行账户
权限:读取事务、读取用户帐户、读取银行账户
输入:事务详情、用户账户号码、银行账户详情
输出:验证状态(成功或失败)

图5.支付处理流程
报告
要创建付款数据的视图,您可以使用MongoDB Charts。
这涉及以下实体:
数据实体:交易历史记录、用户账户
权限:读取事务历史记录,读取用户帐户
输入:用户账号,报告条件(日期范围、事务类型)
输出:生成的财务报告
通知
此服务使用MongoDB Change Streams通知用户任何更改。
这涉及以下实体:
数据实体:用户账户、事务
权限:读取用户账户,读取交易
输入:用户账户详细信息、交易详细信息
输出:用户通知和警报
数据库架构和文档结构
以下文档结构和微服务构成了基于 MongoDB 的支付解决方案的主干,确保可扩展性、安全性和高效的数据管理。
用户(User)
users
集合中的文档具有以下结构:
{ "_id": ObjectId, "username": String, "email": String, "password": String, // hashed "linkedAccounts": [ { "accountId": String, "accountType": String, "externalDetails": { "apiEndpoint": String, "accessKey": String, "additionalInfo": String } } ], "recentTransactions": [ { "transactionId": String, "date": Date, "amount": Number, "type": String, // e.g., 'debit', 'credit' "status": String // e.g., 'completed', 'pending' } ] }
Accounts
accounts
集合中的文档具有以下结构:
{ "_id": ObjectId, "userId": ObjectId, "accountNumber": String, // Encrypted "accountType": String, "balance": Number, "limitations": { "withdrawalLimit": Number, "transferLimit": Number, "otherLimitations": String }, "securityTags": [String], "encryptedDetails": String }
事务
transactions
集合中的文档具有以下结构:
{ "_id": ObjectId, "account_id": ObjectId, "amount": Number, "date": Date, "type": String, // e.g., 'debit', 'credit' "status": String, // e.g., 'completed', 'pending', 'refund' "details": String, // Encrypted if sensitive "referenceData": { "sender": { ... }, "receiver": { ... }, "steps": [{ ... }], "relatedTransactions": [{ ... }], "notes": String, "reportingTags": [String] } }
通知
notifications
集合中的文档具有以下结构:
{ "_id": ObjectId, "relatedEntityId": ObjectId, "userIds": [ObjectId], "message": String, "createdAt": Date, "statuses": [ { "userId": ObjectId, "status": String // e.g., 'unread', 'read' } ] }
构建解决方案
本教程的代码可以在此 GitHub存储库中找到。要开始使用,请按照 README
说明进行操作。
本教程在不同服务中使用以下功能:
跨微服务架构
索引和可扩展性
JSON schema validation
权限和数据隔离
审核
用户和账户微服务
文档模型:利用 MongoDB 的灵活性,为不同帐户和用户配置文件创建用户和帐户结构。
Kafka Sink Connector:从外部源流式传输数据。
事务:保持帐户和用户数据符合ACID。
正在使用的加密:在数据的整个生命周期中保护数据。
全文搜索:搜索帐户 ID 和用户名。
支付微服务
通知微服务
变更流:变更流捕获通知,然后由 Websocket 推送通知。
报告
Atlas Charts:使用Atlas Charts对数据进行预处理和可视化。
关键要点
如果使用此解决方案,请考虑以下注意事项:
安全性与合规:遵守一般数据保护法规 (GDPR)、PCI DSS 和其他金融法规。
可扩展性和性能:确保高效的查询处理和数据处理。
审核和日志记录:全面记录付款以支持审核。
备份和恢复:使用 MongoDB Atlas 进行数据恢复的稳健计划。
作者
Pavel Duchovny,开发者关系,MongoDB
Shiv Pullepu,行业解决方案,MongoDB
MongoDB 解决方案架构师 Raj Jain
Jack Yallop,行业市场营销,MongoDB