电商管理系统之发票子系统设计 (二)
电商管理系统在执行订单的履行的过程中,离不开订单销售凭据也就是发票的开具。而面对千万甚至亿级 2C 订单,我们亟需一个高性能、高可用、高性能的发票子系统(后文简称发票系统)来支撑业务的扩张。基于此,本文主要从整体架构与流程上聊聊发票系统该如何设计。
一、发票系统介绍
发票系统主要负责订单成交时的发票开具,为商家收入结算与消费者报销提供法定票据凭证。一款优秀的发票系统不仅应该支持多种发票类型开具,而且需要具备高并发、高可用、高性能的开票能力以满足用户的开票需求,提升用户的购买体验,同时降低因发票无法及时开具而带来的客诉。
目前国家税务机关发行的发票主要包含以下四种类型:
根据 2020 年国家税务总局的最新政策,为了进一步普及发票的无纸化、数字化,增值税专用发票将向电子专票转型。所以发票系统在设计时应该充分考虑其扩展性。
电商业务场景主要面对消费者,面对数量众多的 2C 订单,能否及时为消费者提供有效发票对应商家而言极其重要。这不单单影响消费者的购买体验,同时直接关系到业务的增长。有许多商家因无法及时为消费者提供发票而带来无数客诉,致使店铺信誉等一落千丈,业务量无法进一步提升。
那么,我们该如何设计一款高并发、高可用、高性能的发票系统呢?
二、发票系统核心设计
为了简化系统对接与设计的复杂度,企业通常无法系统直接对接税局进行开票,而是通过对接第三方(如航信、百旺等)国有企业代理系统,由其对接税局进行发票开具。以下是笔者设计的一款发票系统部署架构图供参考:
发票系统主要包含发票管理模块集群与发票核心模块集群,以及其他基础组件集群与数据管理(访问与存储)集群。
发票管理模块集群:主要为用户访问、手工开具提供入口服务;
发票核心模块集群:包含发票数据的承接、封装、转发、回传接收等核心服务,可通过 MQ 集群机制实现发票高并发、高性能自动开具;
基础组件集群:为发票系统的业务功能模块提供基础服务支持,如缓存、注册机制、消息分发、分布式任务调度等;
数据访问与存储集群:通过分库分表、读写分离等方式为发票系统提供高可用的海量数据存储与访问,同时借助搜索引擎为发票系统提供高性能的用户交互能力。
发票系统连接交易系统,承接交易订单的发票开具,常见业务流程大致设计如下:
三、发票系统设计延伸
当然,一款优秀的发票系统设计远远不止上述内容,这里不一一展开,读者可以从以下几个方面思考:
海量发票文件的存储设计,如 pdf、ofd 等,一般可使用 NAS、OSS 等存储手段;
发票下载链接地址的短链接编码转换设计;
开票请求的幂等与合规设计,如交易系统重复提交请求与特殊开票场景(多订单合并开票、订单拆分开票);
开票请求与开票结果的自动补偿及结果通知机制设计;
代码层面抽象复用设计,如新增开票类型如何做到代码层面高度复用,减少重复代码,提高开率效率等;
......
四、结语
本文从发票系统的核心流程上(开票承接、数据封装、开票转发、回传接收等)对其设计思想进行了讲解阐述,同时给出发票系统设计的一些延伸点供大家思考发散。一款优秀的系统不是一蹴而就的,通常需要一段时间的迭代完善,当然前期设计能充分考虑后续业务的扩展性,这个成本是最低的。
版权声明: 本文为 InfoQ 作者【长沙造纸农】的原创文章。
原文链接:【http://xie.infoq.cn/article/632f22ff8be771364fcec1ce9】。文章转载请联系作者。
评论