一篇文读懂如何设计系统间数据对接传输
如果一个系统特别外向,喜欢与周边的系统互动,乐于参与交流,成为了一个热门的“社交明星”,那么它基本上扮演的是中台的角色。
但实际上,大多数系统都处于两种极端之间。就像人类社会一样,既需要自己生产,也需要参与交流——这在系统世界中体现为数据对接。
数据对接的核心目的是实现信息的有效传输。
在后端产品的世界里,系统间的对接,无论是子系统之间,还是与外部系统之间,都是非常常见的现象。
作为一名产品经理,理解数据来源,并清晰掌握数据获取后的处理流程,包括握手协议、运算逻辑、异常处理规则、容错机制和数据日志等,是非常关键的。
本文旨在探讨以下几个关于数据传输的关键话题:
- 数据传输的场景与意义:探讨数据传输发生的背景和它的重要性。
- 数据传输的方式:介绍不同的数据传输技术和方法。
- 数据传输的处理机制:分析数据在传输过程中的处理流程和机制。
- 数据传输的注意事项:指出在数据传输过程中需要注意的关键点。
通过以上内容的探讨,旨在为读者提供一个关于系统间数据传输的全面视角。
一、数据传输的场景及其重要性
数据传输的应用场景
前后端互动
在任何时间点,前端与后端之间都在进行数据的不断互动,这是为了确保信息能够在系统间无缝共享。例如,一旦某个系统部署完成,各个系统模块就需要协同工作,如订单系统需要将库存扣减数据同步给备货系统以便进行采购操作。
与第三方平台的集成
例如,当店铺入驻第三方销售平台,如淘宝天猫时,店主需要管理自己的订单数据,这就需要从淘宝天猫平台获取订单信息。
调用公共插件
为了避免“重新发明轮子”,许多开放性功能插件可供调用或集成,如集成百度地图API或微信小程序的二次开发等。
企业内部多套系统集成
为了避免“重新发明轮子”,许多开放性功能插件可供调用或集成,如集成百度地图API或微信小程序的二次开发等。
企业内部多套系统集成
- 例子:用友ERP系统与CRM销售系统 *
在企业内部,ERP (企业资源计划) 系统和CRM (客户关系管理) 系统的集成是提高运营效率和客户满意度的重要手段。例如,用友ERP系统主要处理企业的内部资源计划、财务管理、生产、库存等后端操作,而CRM系统则专注于管理客户信息、销售机会和营销活动。
集成这两套系统意味着销售团队在CRM系统中更新的客户订单信息可以自动同步到ERP系统,实现库存管理和订单履行的自动化。这样,不仅提高了处理订单的效率,还减少了因手动输入数据而导致的错误,确保了信息的一致性和准确性。
企业营销系统与外部经销商系统集成
- 例子:百威啤酒BEES营销云系统与经销商ERP系统 *
对于面向消费者的企业来说,如百威啤酒,其BEES营销云系统与各个不同经销商的ERP系统的集成是扩大市场覆盖和提升销售效率的关键。BEES系统作为一个先进的营销和销售平台,能够提供实时的市场数据、客户偏好和购买行为分析等信息。
通过将BEES系统与经销商的ERP系统集成,可以实现订单自动传输和库存管理,确保产品及时补货,同时还能根据市场需求动态调整营销策略。这种集成不仅加强了企业与经销商之间的协作,也为最终消费者提供了更加及时、个性化的服务。
数据传输的意义
资源与功能的有效利用
通过共享和传输数据,可以避免重复创建数据库,从而减少资源和功能的浪费。
统一数据源
统一数据的维护和生产源头,可以避免在相同公司的不同系统间数据不一致的问题,确保信息的准确性和一致性。
利用外部数据
有些数据是无法由自己产生的,因此需要利用现有的资源,如API或SDK,来共享他人的数据或功能,这不仅节省了时间,还可能因技术限制而无法自行开发的功能。
通过上述分析,我们可以看到数据传输不仅是技术层面的需求,也是确保企业运营效率和信息流通性的关键要素。在数字化时代,有效地管理和传输数据是保持竞争力的重要策略之一。
二、数据传输方式详解
在现代企业的IT架构中,数据传输扮演着至关重要的角色。产品经理将数据传输方式分为接口传输、中间件传输、消息方式传输等几类,每种方式都有其特定的应用场景和优缺点。以下是对这些数据传输方式的进一步解析和说明。
接口传输
常见形式
接口传输是最基础且广泛使用的数据传输方式之一,它支持客户端与服务器之间的交互模式。这种方式包括HTTP调用、Java远程调用、Web Services等,其主要区别在于传输协议和报文格式。
接口的作用
接口允许系统调用第三方功能插件(例如API接口),或者根据特定需求开发定制化接口解决信息传输问题(例如HTTP接口)。接口使得数据和功能的共享成为可能,增强了系统间的互操作性。
接口创建原则
- 谁负责创建接口? 数据传输的需求方通常是接口的请求方,而接口则应由提供数据的一方创建。这基于一个简单的原则:数据源方控制数据的输出。
- 定义接口 涉及规定数据传输的格式、验证机制、数据范围等关键信息,以确保数据传输的准确性和安全性。
- 数据转义 数据在传输过程中是否需要转换或转义,这取决于数据的最终使用场景。原则上,如果数据将被二次利用,则应尽可能地保持其原始形式。
数据获取方式
- 主动获取 vs. 被动推送 数据可以通过请求获取(如HTTP GET方法)或由数据生产方主动推送(如HTTP POST方法)。选择哪种方式取决于数据的时效性要求和系统间的协议。
接口传输细节
- GET vs. POST:GET方法适用于请求数据量小的场景,而POST方法适用于数据量大或需要较高安全性的场景。
- 产品经理的角色:虽然接口定义是开发的职责,但产品经理需要明确数据传输的需求,包括传输频率、参数规则、数据格式等,并与开发团队紧密合作确保接口设计满足实际应用需求。
示例方案设计
考虑到实际应用的需求,产品经理可能需要提出类似以下的接口使用方案:
- 定时拉取:比如,每小时从数据源系统拉取最新的50条数据记录,若超出数量限制,则在下一时间窗口继续拉取剩余数据。
- 数据处理:明确指出数据拉取后的处理逻辑,比如是否需要转换数据格式,如何处理重复数据等。
通过这种方式,产品经理不仅明确了数据传输的需求,也为开发团队提供了清晰的指导,确保数据传输过程高效、安全、符合业务需求。
三、 数据流转的时效性
数据初始化和同步
当通过接口进行数据交换时,首先要考虑的是数据的初始化,确保在系统间基础数据保持一致性。这是上线前的重要步骤,以避免在后续操作中出现数据不一致的情况。数据同步的机制和要求应在方案定义阶段就明确设定。
同步机制
-
触发式同步:基于特定事件或条件的满足自动触发数据的同步。例如,当一个订单状态发生变化时,自动同步更新至相关系统。
-
定时任务同步:当数据源更新时间不可预测时,采用定时任务脚本周期性地检查并同步数据。这要求请求的频率与数据源的更新频率协调一致,以达到数据同步的目的。
接口的特点总结
优点
- 时效性:接口能够支持实时数据交换和响应,适用于需要快速反馈的场景。
- 安全性:通过HTTPS等传输层协议,可以加密数据传输,提高交换过程的安全性。
- 通用性:接口支持多种编程语言和平台,使得不同系统间的集成和数据交换成为可能。
缺点
- 依赖性:服务器和客户端必须同时在线,当服务器不可用时,数据交互无法进行。
- 资源消耗:大量数据传输可能会占用大量网络带宽,导致连接超时,影响服务的可靠性。
相关概念扩展
-
API(应用程序编程接口):为软件系统之间交互提供预定义函数的一套规则和工具,无需了解底层实现细节即可使用。
-
Open API:指向外部开放的接口,如百度地图API、Facebook API、金蝶开放平台OpenAPI、钉钉开放平台等,任何开发者都可以按照规定的条件使用这些接口。
-
SDK(软件开发工具包):通常是一套API的集合,提供更完善、便于开发的功能和工具包。
-
HTTP接口:一种基于HTTP协议的接口传输方式,使用HTTP请求与响应模式进行数据交换。
API和HTTP接口的使用取决于具体的应用场景。API提供了一种更为广泛和概念化的交互方式,而HTTP接口则更侧重于基于Web的数据交换。在撰写方案时,根据实际需要选择适当的术语和技术是至关重要的。
四、消息队列MQ(Message Queue)
1. MQ概念
消息队列(MQ)是分布式系统中用于交换信息的一种技术,允许应用程序异步地发送和接收数据。这种技术使得数据可以像排队进入隧道一样,由一方推送到队列中,另一方则依次消费这些信息。消息队列可以基于内存或磁盘,直到消息被消费前,都会在队列中等待。MQ特别适合处理大数据量、高规律性的批量数据传输,主要用于应用解耦、异步处理、流量削峰等场景。
2. 异步处理示例
考虑用户注册场景,需要发送注册邮件和短信,常见的处理方式有:
-
串行方式:用户信息写入数据库后,依次发送邮件和短信。这种方式虽然简单,但总体响应时间较长。
-
并行方式:信息写入数据库后,同时发送邮件和短信,能相对提高处理速度。
引入MQ后的异步处理:用户注册信息写入数据库即返回响应,而发送邮件和短信的任务被推送到消息队列中异步处理。这极大缩短了用户等待的时间,并提升了系统的处理能力。
3. 异常情况处理
-
首次消费失败:如果消费者无法正确处理消息(如数据格式不匹配),可以将消息重新放回队列中,等待下一次消费尝试。
-
消息积压处理:设置机制,如消息循环次数过多或积压量超标则触发报警,及时处理异常情况,避免系统过载。
4. MQ与其他数据传输方式对比
-
反馈机制:MQ推送到中间件即认为完成,不需要确认反馈。接口通信则需要响应来确认数据传输结果。
-
消费模式:MQ中的消息一般只能被单个消费者消费一次,若多系统需要则需创建多个队列;接口则可由多个系统共同调用。
-
文件共享:类似接口,文件共享方式在数据传输后不需要额外的反馈确认,适用于多方需求的场景。
5. 其他数据传输手段
-
导入导出:适用于系统间无法直接对接但线下可获取数据的场景。要求数据量适中,格式标准化。
-
爬取:当无法通过官方接口获取数据时,可通过爬虫技术抓取所需信息。需注意对方网站的反爬策略和法律法规。
MQ作为现代企业架构中重要的数据传输和处理工具,其异步处理能力极大地提升了应用的性能和可扩展性。然而,选择合适的数据传输方式需要根据实际业务需求、数据特性及系统架构综合考量。
五、数据传输的处理机制
1. 数据同步的触发机制
数据同步的频率和触发机制取决于具体的应用场景,通常要求数据能够持续不断地被获取。主要的触发方式包括:
- 操作事件触发:例如,用户点击页面按钮即触发数据的最新状态同步。这种方式响应迅速,但可能因并发操作增加系统负载。
- 异步机制:适用于时效性要求不那么高的情况,通过定时运行脚本监控数据变化。例如,设定脚本每2小时检查一次,在这个频率下获取A系统6小时内的更新数据,以确保不遗漏任何信息。定时任务的应用十分广泛,能有效减少直接查询数据库的性能开销。
2. 是否异步执行数据处理
对于需要进一步本地处理的数据,推荐先暂存至中间表,然后异步写入最终表。这样不仅方便错误排查(相当于数据清洗),而且减少模块间的耦合,提高系统的稳定性和可维护性。对于大量数据的处理,采用异步方式几乎是必须的。
3. 判重机制
数据在持续流动的过程中,可能会出现重复或相关数据的情况。通过设定唯一标识字段(如身份证号)进行数据更新或插入,可有效避免重复。在无法确定唯一字段时,可以通过人为定义的规则(如unique_code
)来实现数据去重。
4. 数据的使用方式
数据使用方式分为两种:一种是直接通过接口调取显示,不在本地数据库保存;另一种是先保存到本地数据库后再进行调用。后者是常见的做法,它需要考虑数据的异步保存问题和保证数据的同源同步。
5. 处理日志
记录数据处理的日志至关重要,它帮助追踪数据的来源和去向,便于问题分析。日志记录应包括数据的提供、接收和写入情况。根据需要,日志可以保存到数据库中,便于长期追溯和分析。
六、数据传输的注意事项
1. 目标数据表与中间表的维度一致性
为了确保数据准确性和便于追踪异常数据,建议目标数据表(b’)与中间表(b)的维度保持一致。确保两表间去重字段相匹配,可以实现数据的一对一对应,方便异常数据溯源。
2. 不同入口的数据去重策略
在面对新旧两个数据写入程序将数据写入同一类型的利润表时,如何处理两个入口各自不同的去重规则,成为一项挑战。例如,入口1使用A+B作为去重字段,而入口2使用B+C。为了避免同一数据项的重复写入,可以采取以下策略:
- 方案一:当入口1遇到待写入数据时,首先使用其去重字段A+B进行校验。若数据不存在,则进一步使用入口2的去重字段B+C校验。如果依然不存在,才由入口1写入;如果存在,则不进行写入,因为入口2将负责写入该数据。
- 方案二:入口1直接使用入口2的去重字段B+C进行校验。如果存在重复数据,则本入口不进行写入;否则,按照本入口规则进行写入。相较于方案一,方案二的判断路径更短,执行效率更高。
3. 同步基础数据时的过滤策略
在同步基础数据(如员工信息)时,需决定是否仅同步特定状态(如“是否有效”)的数据。建议在数据量变化不大的情况下,同步全量数据。这样做的原因包括:
- 当A系统中某个启用状态的用户突然被禁用时,B系统可以通过检查中间表中的状态,直接识别出问题所在,无需跨系统或跨部门进行复杂的沟通和验证。