Skip to content

Latest commit

 

History

History
152 lines (98 loc) · 7.97 KB

README.md

File metadata and controls

152 lines (98 loc) · 7.97 KB

sync-flow

sync-flow 是一个基于 Go 语言开发的同步流程管理工具。它提供了一种简单、灵活的方式来管理复杂的数据处理流程。该项目旨在解决大规模数据处理场景下的同步问题。

需求背景

SyncFlow的需求背景主要包括以下几点:

企业数据处理需求:许多大型企业在进行业务数据计算时,需要处理大量的实时数据,而传统的数据仓库解决方案(如Flink CDC)成本高,难以承受。

实时计算能力不足:虽然企业面临着实时计算的需求,但很多公司并不具备相应的技术能力和基础设施来支持流式计算。

业务工程师负担重:在缺乏合适工具的情况下,业务工程师往往需要对每一种新的消息结构进行完整的代码开发,这不仅效率低下,还可能影响业务系统的性能。

数据准确性问题:由于缺乏有效的计算平台,企业在处理数据时容易产生冲突和错误,导致数据不准确,影响业务决策。

简化数据处理流程:SyncFlow旨在为业务工程师提供一个可以复用的计算逻辑平台,以简化数据流式计算的流程,提高数据处理的效率和准确性。

企业在处理消息的过程中通常有两个阶段: 现有流程 第一阶段:多个业务逻辑同时操作同一条消息,一次性同步到多个系统。这种方式互相干扰,难以识别真实意图,且改动困难。

第二阶段:采用责任链模式,将多个业务逻辑拆分成独立的代码片段,串联成责任链。尽管这种方式减少了干扰,但存在以下缺点:

重复开发的部分较多,拆分过细可能导致开发者忽略整体的写入冲突。 数据处理过程的监控难以统一规划。

难点

难点一: 消息流式处理过程中,往往需要开发者在开发之前就需要细化消息处理的每一步,让每一步尽可能高内聚低耦合,但是这个过程如果没有一个项目结构规范来指导的话,容易 在团队成员日常的开发中趋于混乱

难点二: 需要尽可能减少硬编码的方式来组织流程,减少开发者的阅读和开发过程中的心智负担

难点三: 对消息的处理过程中的监控的处理,需要复用自定义的监控逻辑来简化监控难度

解决方案

从流式处理的角度出发,每条消息的处理应视为一个完整的流程,由多个细小操作组合而成。开发者可以从算子工具箱中选择所需的算子,串联起来形成完整的处理流程。

将消息处理视为一个 flow 数据流,SyncFlow可由多个SyncFunction组成,流程长度可动态调整,每一个syncFunction的输入来自于上一个syncFunction的输出。 SyncFunction可随时动态添加到指定SyncFlow中,SyncFlow之间关系可通过添加Load和Save节点进行并行和分支操作。 SyncFlow从数据业务编程转移到函数为单一计算逻辑开发,接近FaaS(Function as a Service)系统。

SyncFlow的主要模块

SyncFlow 的主要功能模块包括:

流式计算层: SyncFlow:由多个 SyncFunction 组成的分布式批处理消费者,支持实时计算。

SyncConnectors:用于计算数据流中间状态的持久化和连接器。

SyncFunctions:支持操作符表达式拼接、连接器集成、策略配置等功能。

SyncConfig:流处理策略的绑定,使得函数具备独立的处理能力。

任务调度层:

提供定时任务调度和执行的业务逻辑,包括任务调度平台、执行器管理、调度日志等。 包含可视化接口,支持运行报告、调度报告、成功率统计等功能。 监控与管理:

提供对流处理和任务调度的监控视图,帮助开发者实时了解系统状态。 这些模块共同作用,支持 SyncFlow 在复杂数据处理场景中的高效运作。

SyncFlow 的主要特点包括:

简洁性: 设计强调简单易用,降低开发者的学习成本。

灵活性: 支持动态添加和修改处理流程,适应不同业务需求的变化。

模块化: 通过将处理逻辑拆分为多个独立的函数(SyncFunctions),实现高内聚、低耦合的设计。

流式处理: 采用流式计算模型,能够实时处理大规模数据,提高处理效率。

监控与可视化: 提供实时监控视图,帮助开发者了解数据流和处理状态,便于故障排查

SyncFlow 通过以下方式实现灵活的流程编排:

动态添加函数:

开发者可以随时向现有的 SyncFlow 中添加或移除 SyncFunction,使得流程能够根据需求变化进行调整。 模块化设计:

每个 SyncFunction 作为独立的处理单元,支持单一计算逻辑,便于组合和重用,降低了复杂性。 连接器和节点:

通过 Load 和 Save 节点,SyncFlow 可以在不同的流程之间建立关系,支持并行处理和数据分支。 配置驱动:

流程的编排可以通过配置文件进行定义,允许开发者灵活地修改流程而无需改动代码。 可视化工具:

提供可视化界面,帮助开发者直观地设计和调整流程,增强了编排的灵活性和可理解性。 支持多种数据源:

能够与多种数据源连接,支持多样化的数据流动和处理方式,满足不同场景的需求。 通过这些特性,SyncFlow 允许开发者灵活地设计和管理数据处理流程,适应快速变化的业务需求。

SyncFlow 的模块化设计通过以下方式提高流程编排的灵活性:

独立性: 每个 SyncFunction 是独立的处理单元,具有清晰的输入和输出。这种独立性允许开发者在不影响其他部分的情况下修改或替换某个功能。

重用性: 模块化使得相同的功能可以在不同的流程中重复使用,减少了重复开发的工作量,提高了开发效率。

易于组合: 开发者可以根据业务需求自由组合不同的 SyncFunctions,快速构建新的数据处理流程,适应变化的需求。

简化调试与维护: 由于每个模块的功能明确,调试和维护变得更加简单,开发者可以快速定位问题并进行修复。

动态调整: 开发者可以在运行时动态添加、移除或调整 SyncFunctions,使得流程能够灵活应对实时变化的业务需求。

可视化管理: 模块化设计通常伴随着可视化工具的支持,开发者可以通过图形界面直观地管理和调整流程,增强了操作的灵活性。 通过这些特点,SyncFlow 的模块化设计显著提升了流程编排的灵活性,使得开发者能够更加高效地应对复杂的数据处理场景。

SyncFlow 的模块设计还有以下优势:

可扩展性: 模块化设计允许开发者轻松添加新功能或算子,支持系统的长期扩展和演进。

降低复杂性: 将复杂的处理逻辑拆分为多个简单模块,使得每个模块易于理解和管理,降低了整体系统的复杂性。

团队协作: 不同团队可以同时开发和维护不同的模块,减少了相互之间的依赖,提高了开发效率。

版本控制: 各个模块可以独立版本管理,使得在更新某个功能时不会影响其他模块的稳定性,降低了风险。

测试便利性: 独立模块可以单独进行单元测试,确保每个功能的正确性,提升了整体系统的可靠性。

灵活配置: 模块可以通过配置文件进行灵活设置,支持不同的业务场景和需求,减少了硬编码的需求。

优化与性能提升: 可以针对特定模块进行性能优化,而不必对整个系统进行大规模改动,提高了系统的整体性能。

跨平台支持: 模块化设计使得不同模块可以在不同平台上部署和运行,增强了系统的兼容性和适应性。 这些优势使得 SyncFlow 的模块设计不仅提升了开发效率,也增强了系统的灵活性和可维护性。

最终成果

开发者可以通过配置文件编写流程,减轻消息处理过程中的心智负担。 在处理自定义业务逻辑时,复用监控逻辑,提高效率。