摘要:本文介绍一套面向海外支付场景的计费中台架构实践,通过领域驱动设计(DDD)和配置化引擎,实现新业务接入成本降低 80%、代码复用率提升 70%、计费成功率 100% 的工程目标。
关键词:计费中台;领域驱动设计;配置化引擎;架构实践
1. 背景与问题
1.1 业务挑战
海外支付业务面临地域多样性、渠道复杂性、业务多元性、场景灵活性等挑战,各国监管政策、费率结构差异显著,计费逻辑需快速适配迭代。
1.2 架构痛点
传统计费架构采用分散式嵌入式设计,计费能力散落在路由系统(router)、网关系统(gateway)等多个子系统中:
核心问题:
代码重复:相同计费逻辑多系统重复实现,复用率低于 30%
一致性风险:路由估算与网关实际扣费存在偏差,对账困难
变更成本高:新增渠道需多系统协同发布,周期 2-3 周
追溯困难:计费日志分散,全链路定位问题成本高
1.3 解决思路
构建独立计费中台(billing),将计费能力从业务系统中剥离,统一收归至独立中台,实现能力复用、配置驱动、热更新。
2. 架构方案
2.1 架构演进
【改造前】 【改造后】 分散计费模式 统一计费架构 · 逻辑散落 → · 能力下沉 · 硬编码为主 · 配置驱动 · 需重启生效 · 热更新2.2 统一计费架构
2.3 分层设计
3. 领域建模
3.1 核心实体
基于 DDD 思想,对计费领域进行抽象建模:
3.2 实体定义
4. 核心设计
4.1 事件风暴
通过事件风暴识别计费领域核心业务事件:
4.2 聚合根设计
采用聚合根模式封装计费规则,确保业务一致性边界:
public class BillingRuleAggregate { private RuleId ruleId; private ConditionSpec condition; private FormulaSpec formula; private RateConfig rateConfig; public boolean matches(BillingContext context) { return condition.evaluate(context); } public BillingResult calculate(BillingContext context) { Decimal amount = formula.compute(context, rateConfig); return BillingResult.create(amount, getCalculationDetails()); } }4.3 配置化体系
支持多维度配置组合,实现"配置即开发":
采用Aviator作为表达式求值引擎,支持条件表达式、公式表达式、三元表达式、函数调用等:
4.4 算法模型
计费引擎支持固定费用和比例费用两种模式:
5. 关键实现
5.1 配置缓存架构
采用多级缓存 + 变更推送架构保障高性能:
多级缓存:Caffeine 本地缓存 + Redis 分布式缓存
变更推送:Redis Pub/Sub 实时通知各节点
缓存预热:服务启动时预加载全量配置
降级策略:缓存失效时降级至数据库
5.2 规则执行引擎
基于 Aviator 实现动态规则解析:
private static final Map<String, Expression> EXPRESSION_CACHE = new ConcurrentHashMap<>(); public Expression getExpression(String expressionStr) { return EXPRESSION_CACHE.computeIfAbsent(expressionStr, AviatorEvaluator::compile); }工作流程:表达式解析 → 字节码编译 → 缓存复用 → 环境注入 → 结果返回
5.3 结构化日志
日志支持全链路追溯与审计:
{ "traceId": "计费链路追踪 ID", "tenantId": "租户标识", "scenarioCode": "场景编码", "matchedRules": [{"ruleId": "规则 ID", "ruleName": "规则名称"}], "calculation": {"originalAmount": "原始金额", "rateApplied": "应用费率", "finalFee": "最终费用"}, "result": {"status": "计费状态", "feeAmount": "费用金额"} }6. 系统成效
6.1 核心指标
当前系统支撑近 20 家交易渠道、10 余条业务线、近 10 种交易场景的计费需求。
6.2 性能表现
6.3 稳定性表现
7. 架构扩展能力
7.1 清结算场景
计费引擎的算费能力可扩展至清结算领域,支撑商户结算、分润、服务费等场景:
7.2 插件化扩展
系统采用插件化架构,支持按需扩展新的计费场景:
8. 总结
核心经验
领域抽象:深入理解业务,提炼通用模型
配置驱动:变化部分配置化,提升灵活性
缓存保障:多级缓存策略保障高性能
日志基石:结构化日志支持全链路追溯