对账平台系统需求设计

一、背景

业务对账平台是一个用于管理和监控企业内部各业务系统之间数据一致性的平台。在分布式系统环境下,由于系统之间的网络通信不确定性,数据不一致性问题是一个普遍存在的挑战。这些不一致性问题可能会导致各种后果,例如订单错误、库存错误、支付错误、发票错误等等。如果不及时发现和解决这些问题,将会给企业带来不必要的损失和风险。

业务对账平台的作用是通过自动化的方式,定期对比各个业务系统之间的数据,并发现其中的不一致性问题。平台可以提供一个一致的数据源,并将检测到的问题通知到相关的业务团队,以便他们及时解决这些问题。同时,业务对账平台也提供了丰富的数据可视化和监控功能,以帮助企业管理者和业务团队更好地了解数据一致性的状况,并及时采取相应的措施来保障业务的正常运行。

业务对账平台通常是企业内部的一个中心化的服务,需要和各个业务系统进行集成,以便获取其数据,并进行对比和检测。平台本身需要具备高可用性、高性能、高扩展性等特点,以保证企业的业务连续性和稳定性。

二、挑战

那么一个业务对账平台,会面临着哪些挑战?

  • 1. 数据来源多样化:企业内部可能存在各种不同类型的业务系统,这些系统的数据格式、存储方式和获取方式都可能不同。因此,业务对账平台需要能够适配这些不同的数据来源,以获取和整合这些数据。
  • 2. 数据量大:企业的各个业务系统每天产生大量的数据,而业务对账平台需要处理和存储这些数据,以便进行后续的对比和检测。因此,平台需要具备高性能、高可扩展性和高容错性,以应对这些数据量的挑战。
  • 3. 数据一致性问题复杂多样:由于分布式系统中存在的不确定性和复杂性,导致数据一致性问题也十分复杂多样。业务对账平台需要能够识别并处理不同类型的数据一致性问题,例如数据格式不一致、数据缺失、重复数据、时间戳不一致等等。
  • 4. 异常处理能力:业务对账平台需要具备强大的异常处理能力,以处理数据源异常、网络异常、计算异常等各种异常情况,保证数据对账的准确性和完整性。
  • 5. 成本和效益:业务对账平台需要投入一定的人力和资源,同时也需要承担一定的运营和维护成本。因此,需要权衡成本和效益,确保平台的投入产出比合理,并为企业带来实际的价值和收益。
对账平台系统需求设计插图

核心诉求是业务对账平台设计的重要指导方针,其中包括了方便业务系统快速接入、处理海量数据和保证一定实时性的要求。这些要求将直接影响业务对账平台的系统设计。为了满足这些需求,平台需要具备高度的灵活性、可扩展性和可靠性,同时还需要有强大的数据处理和分析能力。在实现过程中,业务对账平台需要注意系统的设计和架构,确保平台能够支持多个数据源、分布式计算和高吞吐量的数据处理。同时,平台需要具备高效的数据存储和索引机制,以支持对大规模数据的快速检索和查询。通过这些措施,业务对账平台可以快速响应业务需求,并实现数据的实时对比和检测,从而为企业提供实际的价值和支持。

三、架构

业务对账平台的设计需要从局部到整体进行考虑,以解决业务方面临的三个核心问题:方便业务系统快速接入、处理海量数据和保证一定实时性。在局部设计方面,平台需要考虑以下几个方面:

  • 1. 数据采集:平台需要支持多个数据源的数据采集,并提供数据清洗和转换功能,以确保数据的一致性和准确性。同时,平台需要支持多种数据格式和协议,以适应不同的业务场景。
  • 2. 数据处理:平台需要支持分布式计算和高吞吐量的数据处理,以快速处理海量数据。为了提高数据处理效率,平台可以使用流式处理技术,通过异步消息队列来实现数据的实时处理。
  • 3. 数据存储和索引:平台需要具备高效的数据存储和索引机制,以支持对大规模数据的快速检索和查询。为了提高数据查询效率,平台可以使用分布式存储和分布式索引技术,以及缓存技术等。

在整体系统结构方面,业务对账平台需要具备以下几个关键组件:

  1. 数据采集组件:负责从多个数据源中采集数据,并进行数据清洗和转换。数据采集组件可以使用数据抓取技术或者数据同步技术来实现。
  2. 数据处理组件:负责对采集到的数据进行处理和分析,以实现业务对账的功能。数据处理组件可以使用分布式计算框架来实现。
  3. 数据存储和索引组件:负责存储和索引业务对账所需要的数据。数据存储和索引组件可以使用分布式存储和分布式索引技术来实现。
  4. 数据查询和分析组件:负责对存储的数据进行查询和分析,以提供给业务方所需的数据。数据查询和分析组件可以使用缓存技术和查询优化技术来提高查询效率。
  5. 监控和告警组件:负责监控平台的运行状况,并在出现异常或错误时进行告警和处理。

1、易于接入

我们认为所有的对账流程都可以分解为四个步骤,分别是“数据加载”、“转换解析”、“对比”和“结果处理”。为了适应多样化的业务场景,每个步骤都需要支持可编排的设计,能够放置各种不同的执行组件。在每一个流程节点,需要通过规则自由选择嵌入哪个组件。其次,需要把数据从原始格式转换为对账的标准格式,以便使用通用的对比器进行标准对比。总结起来,我们认为对账引擎需要具备能力:

  • 流程编排能力
  • 规则能力
  • 插件化接入能力

目前业务对账平台的对账引擎结构如下:

对账平台系统需求设计插图2

其中的 ResourceLoader 、 Parser 、 Checker 、 ResultHandler 均为标准接口,所有实现了对应接口的 spring bean ,都能被编排到对账流程之中,包括业务方自己实现的 plugin。这样就实现了插件化和可编排。每个流程节点的功能如下:

  • ResourceLoader :为了实现数据加载的灵活性和可编排性,我们提供了加载器工厂,用于基于各种数据源(如DB、FILE、RPC、REST等)提供加载器。通过加载器工厂,业务对账平台可以方便地加载各个数据源的原始数据,同时支持驱动加载、并行加载、多方加载等多种方式。此外,业务方也可以自己实现加载器,并利用流程编排能力将其嵌入到对账流程中,从而实现更高的定制化和灵活性。
  • Parser :在数据加载完成后,对账平台需要对原始数据进行建模,以便于后续的数据处理和对比。这个过程可以通过转换解析来完成,将原始数据转化为对账标准模型。为了适应各种业务场景的需求,我们可以利用规则引擎提供脚本化的转换方式,例如使用 Groovy 脚本来定义数据转换规则。通过这种方式,业务方可以自由地定义和修改数据转换规则,以满足不同的业务需求。同时,规则引擎还可以提供灵活的调用方式,以方便业务方对数据转换的调试和优化。
  • Checker :在对账流程中,系统会按照配置对指定字段、按指定规则进行比较,并产生对账结果。为了适应不同的业务需求,系统支持多种对比策略,包括findFirst和full等。其中,findFirst策略会在找到第一个不一致时即停止对比,而full策略则会找出所有不一致。通过这些灵活的配置,业务方可以根据自己的需求定制化对账流程,从而提高对账效率和准确性。
  • ResultHandler :结果处理是对账流程的最后一步,通过处理对账结果,可以对业务数据进行修复、优化和改进。在这一步中,我们使用指定的处理器对结果进行处理。常见的处理器包括将结果持久化到数据库或者消息队列中,发送报警邮件或短信通知相关人员,甚至直接对数据进行修复操作等等。这些处理器可以根据业务需求进行自由配置,同时也可以扩展自己的处理器来满足特定的业务需求。通过结果处理的方式,可以实现对业务数据的快速响应和处理。

业务对账平台通过统一的Facade将整个对账流程进行串联,利用流程编排能力嵌入各个组件。在执行不同节点时,根据配置选择不同的默认组件或者插件来执行。业务方可以在管理后台,对每个流程节点进行编排,灵活配置流程节点的组件。这样的设计使得业务对账平台可以适应不同的业务场景,满足各种对账需求:

对账平台系统需求设计插图4

2、高吞吐量

在一些离线定时对账场景中,单次对账的数据量可能会非常大,达到百万级甚至千万级。这对于对账平台的吞吐量提出了巨大的挑战。我们通常采用的应对策略是“拆”,即采用分布式任务拆分和单机内任务拆分等方式,将数据块变得更小。同时,也可以利用一些大数据工具来帮助我们处理海量数据,例如Hadoop、Spark等。这些工具可以帮助我们高效地处理大规模数据,提高对账平台的处理效率和吞吐量。

对账平台系统需求设计插图6

当前的对账任务通常有两种模式:一种是常规模式,数据平台包含所有需要进行对账的原始主键数据,将这些数据 push 到对账中心的 DB,然后通过分片策略,订单中心集群按分页分批加载数据进行对比。另一种模式则是针对数据量超过千万的情况,利用数据平台的 spark 引擎从 hive 表中获取数据,并将数据投递到 MQ,然后由其中一个 consumer 进行投递,这样可以将千万级别的数据分散到多个对账服务器执行。

一般情况下,对账任务会在业务量较小的凌晨进行,因为在对账过程中需要反查业务接口以获取实时数据。为了避免这种反查操作,最好的情况是能够对业务数据进行准实时同步,提前进入对账中心的 DB 集群。这样一来,在对账任务执行时就可以直接从对账中心的 DB 中获取数据,而无需反查业务接口。

对账平台系统需求设计插图8

业务数据进行准实时同步的主要思路是通过监控业务系统的变化,例如数据库变更或者业务系统自身的消息等,将数据同步到对账中心的 DB 集群中。对于数据库变更,我们可以通过监控数据库的 binlog 日志来实现数据同步;对于业务系统自身的消息,我们可以利用消息队列进行数据传输。无论是哪种方式,接下来的流程都是类似的,即将同步的数据进行加载、转换、对比和结果处理。这样,在对账时就可以直接从对账中心的 DB 中获取数据,而无需通过反查业务接口,提高了对账的效率和准确性。

3、高实时性

秒级对账是指对账流程的响应速度非常快,一般在几秒钟内完成。在某些特定的业务场景下,需要对关键业务进行实时监控和对账,以保证数据的准确性和实时性,避免数据的滞后和误差。比如,对于在线支付、物流配送等重要业务环节,如果出现数据不一致或错误,可能会给用户带来不便和损失。因此,秒级对账对于这些业务来说非常重要。

为实现秒级对账,需要对对账流程中的各个环节进行优化和加速。首先,数据的加载和转换需要快速高效,可以采用流式计算或者高速缓存等技术,尽可能减少数据加载和处理的时间。其次,在对比和结果处理环节中,也需要尽可能地利用并行计算、多线程等技术,提高对账流程的处理速度。最后,在架构设计上,可以采用分布式计算、异步处理等技术,提高对账系统的可伸缩性和高可用性,以保证秒级对账的稳定性和可靠性。

对于秒级对账,由于需要在事件触发后的短时间内执行完对账任务,因此需要采用高可用、高并发的架构来进行支持。

一般来说,可以采用消息队列来实现异步处理。当业务系统发生关键事件时,会将消息发送到消息队列中,由对账系统异步消费。同时,为了保证高可用性,可以采用集群化部署的方式来进行支持,当某一节点出现故障时,其它节点可以接替其工作,保证整个系统的稳定性和可靠性。

另外,在高并发的情况下,为了提高对账系统的吞吐量和性能,可以采用分布式任务调度和数据并行处理技术。将对账任务分成多个子任务,通过分布式调度器进行任务分配,让多个节点同时执行对账任务,从而实现对账任务的并行处理,提高系统的吞吐量和性能。

对账平台系统需求设计插图10

设计中,为了支持秒级对账场景,我们引入了 EventPool 来缓冲高并发的事件消息,同时在处理线程池之前增加了阻塞队列,实现了事件处理的异步化。具体地,我们将事件消息放入 EventPool 中,同时采用限流、取样、路由和处理的 pipeline 进行处理。事件处理线程从阻塞队列中获取任务来执行,并定时批量处理任务。为了支持延迟对账特性,我们还引入了延迟阻塞队列,根据情况,在事件发生后的一段时间内再触发对比。

这种设计能够有效地支持高并发的事件消息,并通过异步化和阻塞队列避免了线程资源耗尽的情况。同时,延迟阻塞队列的引入,也使得我们能够更好地处理不一致的情况。总的来说,这种设计能够满足秒级对账的需求。

4、整体设计

上面介绍了业务对账平台的各个局部设计,下面来看下整体结构。

对账平台系统需求设计插图12

这种分层架构的设计思路非常常见,可以有效降低系统的复杂度和耦合度,提高系统的可维护性和可扩展性。在这种架构中,调度层起到了任务触发和调度的作用,可以根据业务场景进行任务的拆分和分发,同时提供了统一的接口来管理和监控任务的执行情况。对账引擎则负责实际的对账逻辑,包括数据获取、比对、异常处理等等,同时还支持自定义的插件和组件来适应不同的业务场景。基础设施层则提供了一些通用的基础能力,比如规则引擎、流程引擎、泛化调用等等,可以帮助开发者更方便地开发和管理对账系统。

在具体实现时,可以采用各种技术和框架来支持不同的功能和需求。比如调度层可以采用 Quartz、Elastic Job 等调度框架;对账引擎可以采用 Spring Batch、Apache Spark 等数据处理框架;基础设施层可以采用 Drools、Activiti 等流程引擎。同时还需要注意系统的可用性和性能,比如可以采用缓存、分布式锁、消息队列等技术来提高系统的吞吐量和稳定性。

四、健康度

对账中心具备了对整个业务系统和链路进行全面监控的能力,通过对比业务数据的一致性来发现潜在的问题。同时,对账平台还可以对业务系统和链路进行健康度反馈,帮助业务系统及时发现并解决问题,提高整个系统的可靠性和稳定性。在监控方面,对账平台可以实时获取到业务数据的变化情况,并针对不同的业务场景进行监控,及时发现异常情况。在反馈方面,对账平台可以根据业务数据的一致性情况,及时给出反馈信息,帮助业务系统快速定位问题并采取措施。这些能力可以帮助企业保障业务系统的可靠性和稳定性,提高客户满意度。

对账平台系统需求设计插图14

五、共建

对账平台提供了标准的 API 接口,业务团队可以基于这些接口进行二次开发,实现自己的业务需求,并将其打包成插件。对账平台通过 SPI 技术,可以引入业务方的插件包,并加载到对账中心的 JVM 中执行,以实现与业务团队的共建。

具体而言,业务方只需要实现对应的接口,并将实现类打包成 jar 包,然后将 jar 包交给对账平台。对账平台会自动扫描 jar 包中的实现类,并将其注册到对应的接口上。在对账过程中,对账平台会根据规则引擎的配置,动态地选择调用哪个插件实现,以满足不同的对账需求。通过这种方式,对账平台可以为不同的业务系统提供高度灵活的定制化对账方案。

六、未来

业务对账平台的使命不断演进,从最初的离线数据分析处理,到利用应用系统的健康度数据帮助系统进行实时调整。随着业务和数据规模的不断扩大,对数据一致性的保障更加重要。在分布式环境下,数据一致性问题难以避免,这需要我们充满敬畏,不断交流心得,优化设计,以保证系统的稳定性和可靠性。未来,业务对账平台将继续发挥其数据密集型应用的优势,为公司各个团队提供更加稳定、高效、可靠的对账服务,助力业务的发展。

发表评论