基于微服务的支付钱包架构设计:
专栏重点仅限于理解这些不同系统架构的架构、数据和控制流,欢迎加我好友一起交流学习。
基于微服务的架构具有模块性、可扩展性和灵活性,非常适合设计像 Google Pay 这样的支付钱包。
对于支付钱包系统,微服务架构可无缝处理大量交易、与第三方系统集成并持续部署更新。
像 Google Pay 这样的支付钱包通常支持
该系统的主要服务项目:
处理用户注册、认证和管理,负责:
管理钱包余额和操作,负责:
处理 P2P 和商家支付,负责:
与外部支付系统的摘要集成,负责:
向用户提供实时更新,负责:
监测和防止恶意活动,负责:
为业务和运营提供洞见,负责:
确保系统可靠性和调试,负责:
这些服务处理事件驱动的通信、与外部系统的集成或运行方面的问题:
可根据服务在架构中扮演的角色将其分类:
i. 用户侧: API网关、用户服务、通知服务
ii. 中间层: 钱包服务、交易服务、支付网关服务
iii. 支撑服务: KYC 服务、欺诈检测服务、分析服务、日志服务
iv. 基础设施层: Kafka 消息队列、银行/卡网络、管理后台
支付钱包架构:
用户注册成功后,用户服务会向 Kafka 发布 user.created 事件。
以上汇总的交互显示了该工作流程中跨服务映射的 API 和 Kafka 事件,清楚地说明了数据和控制是如何在系统中流动的。
用户引导工作流程图:
数据库:关系数据库(如 PostgreSQL、MySQL) 目的:存储用户配置、KYC 数据和偏好。
为何选择:具有定义关系的结构化数据、关键用户数据的 ACID 合规性、用于 KYC 验证的强大一致性。
// Stores basic user information.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
phone VARCHAR(15) UNIQUE,
password_hash VARCHAR(255) NOT NULL,
is_verified BOOLEAN DEFAULT FALSE
);
// Stores notification preferences.
CREATE TABLE user_preferences (
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
email_pref BOOLEAN DEFAULT TRUE,
sms_pref BOOLEAN DEFAULT TRUE,
push_pref BOOLEAN DEFAULT TRUE,
PRIMARY KEY (user_id)
);
// Tracks KYC verification status.
CREATE TABLE kyc_details (
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
kyc_status VARCHAR(50) NOT NULL,
kyc_document_type VARCHAR(50) NOT NULL,
kyc_document_url TEXT,
PRIMARY KEY (user_id)
);
前端到后端:
如果支付成功,钱包服务会更新数据库中用户的钱包余额,并触发下一步操作。
钱包服务向 Kafka 发布 wallet.fund_added 事件。
以上摘要概括了向钱包添加资金的工作流,如何以清晰和面向服务的方式协调 API 和 Kafka 事件之间的交互。
将资金添加到钱包工作流程:
数据库:NoSQL 数据库(如 DynamoDB、MongoDB)
目的:管理钱包余额和添加资金的交易日志。
为何选择该数据库?钱包更新的高吞吐量、资金交易的快速写入和模式灵活性。
wallets : Collection Tracks user wallet balance.
{
"user_id": "string",
"balance": "decimal",
"last_updated": "ISODate"
}
fund_transactions : Collection Logs fund addition transactions.
{
"transaction_id": "string",
"user_id": "string",
"amount": "decimal",
"status": "string",
"timestamp": "ISODate"
}
付款成功完成后,交易服务会向 Kafka 主题发布 transaction.completed 事件。
以上总结以清晰和以服务为导向的方式概括了 P2P 支付的端到端工作流程。
p2p支付工作流程:
API 交互:
Kafka 事件:
数据库:关系数据库 + NoSQL(用于交易日志)
目的:记录 P2P 支付详情并更新钱包余额。
为何选择该数据库?低延迟更新多个钱包,无模式设计,交易灵活。
wallets collection: Shared with Add Funds workflow
p2p_transactions collection: Logs sender and receiver details for P2P payments.
{
"transaction_id": "string",
"sender_id": "string",
"receiver_id": "string",
"amount": "decimal",
"status": "string",
"timestamp": "ISODate"
}
前端到交易服务:前台向交易服务发送 POST /refund 请求,并提供要退款的交易详情
从交易服务到钱包服务:
退款成功完成后,事务服务会向 Kafka 主题发布 transaction.refunded 事件。
以上摘要简明扼要地介绍了 Refund 工作流在服务、应用程序接口和事件之间的交互。
退款工作流程:
DB Design:
DB 设计:
*Database**: Relational Database Purpose: To track refunds and update wallet balances. Why chosen: Strong consistency required for refunds, Relational dependencies on original transactions.*
数据库:关系数据库 目的:跟踪退款和更新钱包余额。 为什么选择该数据库?退款需要较强的一致性,与原始交易的关系依赖性。
- refunds table: Logs refund details with references to transactions.
CREATE TABLE refunds (
refund_id SERIAL PRIMARY KEY,
transaction_id INT NOT NULL,
user_id INT NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
status VARCHAR(50) NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
完成支付流程后,交易服务会向 Kafka 发布 transaction.merchant_payment 事件。
以上明细清楚地概述了各项服务如何通过 API 调用和 Kafka 事件为商家支付工作流提供协作:
数据库:NoSQL 数据库(用于实时更新) 目的:记录商家付款并更新用户钱包。 为何选择该数据库?与 P2P 支付的需求类似,可灵活设置商家特定字段。
merchant_payments collection: Stores transaction details.
{
"payment_id": "string",
"merchant_id": "string",
"user_id": "string",
"amount": "decimal",
"status": "string",
"timestamp": "ISODate"
}
2.将交易服务转为日志服务(可选):
上述工作流程可确保向用户实时提供交易历史记录,并可通过日志服务灵活地纳入详细的分析:
此工作流程完全同步,不涉及基于 Kafka 的事件驱动通信。
事件消耗(欺诈检测服务):
2.标记可疑交易:如果发现异常,欺诈检测服务会标记该交易。
3.事件发布(欺诈警报):对于标记的交易,欺诈检测服务会向 Kafka 发布 fraud.alert 事件。
4.通知服务:通知服务消耗欺诈警报事件,并向相关用户或管理员发送警报。
5.日志服务:日志服务通过 Kafka 事件(fraud.alert)和直接 API 调用记录欺诈警报详情,用于审计和故障排除。
上述工作流程利用 Kafka 进行实时异常检测和事件驱动通知,同时确保通过 API 进行日志记录,以实现可追溯性和可审计性。
欺诈检测工作流程:
数据库:分析数据库(如 Elasticsearch、Snowflake)
目的:记录可疑交易并分析欺诈模式。
为何选择:全文搜索和异常情况高级查询、大型数据集快速查询。
- fraud_transactions index: Stores flagged transactions.
{
"fraud_transactions": {
"mappings": {
"properties": {
"transaction_id": { "type": "keyword" },
"user_id": { "type": "keyword" },
"merchant_id": { "type": "keyword" },
"amount": { "type": "double" },
"anomaly_score": { "type": "float" },
"timestamp": { "type": "date" }
}
}
}
}
- fraud_patterns index: Defines reusable fraud detection patterns.
{
"fraud_patterns": {
"mappings": {
"properties": {
"pattern_id": { "type": "keyword" },
"description": { "type": "text" },
"created_at": { "type": "date" }
}
}
}
}
根据用户偏好和通知类型,通知服务与外部网关进行交互:
上述工作流程可确保在整个系统内无缝传送各种事件的通知。
通知工作流程:
API
Kafka事件
构建支付钱包要求架构具有可扩展性和弹性,并且能够以最小的延迟每秒处理数百万笔交易。以下是我们选择微服务架构、Kafka 和特定数据库的原因:
模块化和隔离:每个核心功能(如支付、分类账、身份验证)都是独立开发、部署和扩展的,从而确保更快的开发速度和更容易的调试。
故障隔离:一项服务(如支付)的故障不会连锁到其他服务(如账簿或用户管理)。
技术不可知论:服务可根据自身需要使用最合适的技术堆栈(例如,用于实时查询的 NoSQL、用于事务一致性的关系数据库)。
实时更新:Kafka 可确保支付、账簿和通知等服务之间的实时通信。付款成功 "或 "余额更新 "等事件可即时传播。
解耦:服务通过 Kafka 异步交互,提高了灵活性和容错性。生产者(如支付服务)和消费者(如账本服务)是松散耦合的。
可扩展性:Kafka 的分布式特性支持高吞吐量场景,因此非常适合每天处理数百万个钱包事件。
可重播性:Kafka 存储和重放事件的能力有助于调试和故障恢复。
数据库选择:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。