写点什么

电商管理系统之发票子系统设计 (二)

发布于: 2021 年 03 月 07 日
电商管理系统之发票子系统设计(二)

电商管理系统在执行订单的履行的过程中,离不开订单销售凭据也就是发票的开具。而面对千万甚至亿级 2C 订单,我们亟需一个高性能、高可用、高性能的发票子系统(后文简称发票系统)来支撑业务的扩张。基于此,本文主要从整体架构与流程上聊聊发票系统该如何设计。

一、发票系统介绍

发票系统主要负责订单成交时的发票开具,为商家收入结算与消费者报销提供法定票据凭证。一款优秀的发票系统不仅应该支持多种发票类型开具,而且需要具备高并发、高可用、高性能的开票能力以满足用户的开票需求,提升用户的购买体验,同时降低因发票无法及时开具而带来的客诉。

目前国家税务机关发行的发票主要包含以下四种类型:


根据 2020 年国家税务总局的最新政策,为了进一步普及发票的无纸化、数字化,增值税专用发票将向电子专票转型。所以发票系统在设计时应该充分考虑其扩展性

电商业务场景主要面对消费者,面对数量众多的 2C 订单,能否及时为消费者提供有效发票对应商家而言极其重要。这不单单影响消费者的购买体验,同时直接关系到业务的增长。有许多商家因无法及时为消费者提供发票而带来无数客诉,致使店铺信誉等一落千丈,业务量无法进一步提升。

那么,我们该如何设计一款高并发、高可用、高性能的发票系统呢?

二、发票系统核心设计

为了简化系统对接与设计的复杂度,企业通常无法系统直接对接税局进行开票,而是通过对接第三方(如航信、百旺等)国有企业代理系统,由其对接税局进行发票开具。以下是笔者设计的一款发票系统部署架构图供参考:


发票系统主要包含发票管理模块集群与发票核心模块集群,以及其他基础组件集群与数据管理(访问与存储)集群。

  1. 发票管理模块集群:主要为用户访问、手工开具提供入口服务;

  2. 发票核心模块集群:包含发票数据的承接、封装、转发、回传接收等核心服务,可通过 MQ 集群机制实现发票高并发、高性能自动开具;

  3. 基础组件集群:为发票系统的业务功能模块提供基础服务支持,如缓存、注册机制、消息分发、分布式任务调度等;

  4. 数据访问与存储集群:通过分库分表、读写分离等方式为发票系统提供高可用的海量数据存储与访问,同时借助搜索引擎为发票系统提供高性能的用户交互能力。

发票系统连接交易系统,承接交易订单的发票开具,常见业务流程大致设计如下:

三、发票系统设计延伸

当然,一款优秀的发票系统设计远远不止上述内容,这里不一一展开,读者可以从以下几个方面思考:

  • 海量发票文件的存储设计,如 pdf、ofd 等,一般可使用 NAS、OSS 等存储手段;

  • 发票下载链接地址的短链接编码转换设计;

  • 开票请求的幂等与合规设计,如交易系统重复提交请求与特殊开票场景(多订单合并开票、订单拆分开票);

  • 开票请求与开票结果的自动补偿及结果通知机制设计;

  • 代码层面抽象复用设计,如新增开票类型如何做到代码层面高度复用,减少重复代码,提高开率效率等;

  • ......

四、结语

本文从发票系统的核心流程上(开票承接、数据封装、开票转发、回传接收等)对其设计思想进行了讲解阐述,同时给出发票系统设计的一些延伸点供大家思考发散。一款优秀的系统不是一蹴而就的,通常需要一段时间的迭代完善,当然前期设计能充分考虑后续业务的扩展性,这个成本是最低的。


发布于: 2021 年 03 月 07 日阅读数: 37
用户头像

曾梦想仗剑走天涯,后来BUG太多没去! 2020.07.06 加入

还未添加个人简介

评论

发布
暂无评论
电商管理系统之发票子系统设计(二)