导入导出框架——AGEIPort正式开源
AGEIPort是什么?
AGEIPort解决的痛点?
用户经常使用Excel批量进行数据导入或导出,每次操作少则几千、几万条,多则几十万、上百万条。系统处理速度慢,经常被用户吐槽。
页面上的异步操作任务进度是mock的,99%进度的任务像薛定谔的猫,下一刻可能执行结束,也可能需要等待十几分钟,总之,没有人确定它什么时候能执行结束。
读写文件的工具类和数据处理的接口/抽象类在一个个应用写了一遍又一遍,封装了一层又一层,但总不能满足更复杂的业务场景。当这些工具类和抽象类被足够多的类引用,修改公共类牵一发而动全身。聪明的程序员行走于刀尖之上灵巧的复制出一个新的,改改再用,但应用被改的遍地荆棘,稍有不慎就会刺伤自己。
导入导出相关的代码,过于具体但不够复用,过于抽象但不易理解和维护,当接口或抽象类的入参和返回值都定义为足够通用的JSON对象或Map,新来的接手人就知道自己中了大奖
不同应用代码编写方式大相径庭,到一个新的应用里编写相同功能的代码时,都需要拥抱变化,同时增加对这个世界新的认知。
日常业务开发中,常常被性能、样式处理、数据读写与映射、交互等业务无关的问题困扰,希望自己能专注于业务开发解决业务问题,让框架帮忙解决非业务问题。
面向ToB复杂业务场景,需要做一个PaaS/SaaS型产品,代码要有足够的扩展和可配置能力,同一份代码满足各种场景的定制化需求。
依赖某些中心化的中间件实现导入导出功能,每次大促即使已经填报要做保障,仍会受到共用资源带来的影响,当业务规模突增,导入导出的性能仍受限于中间件的处理性能。
依赖某些控制台、Nacos配置 来实现导入导出任务的新增和修改,每当你要回滚就开始手忙脚乱,恨不得再也不用不能支持回滚的控制台。
AGEIPort的优势?
透明化的集群/单机执行、串行/并行执行,可以大幅提升数据处理性能,开发者只需关注业务逻辑处理。
支持实时任务进度计算和反馈,避免MOCK数据处理进度,提升用户体验。
面向toB复杂业务场景,从多种方式(声明定义、动态定义)、多种维度(配置、插件、策略、SPI)可以满足各种场景的个性需求,可作为平台化、PaaS/SaaS型产品的基础底座。
沉淀多种组件,多种场景、多种功能开箱即用。
秉承GitOps设计理念,将相关的不可变基础设施封装在应用Git仓库内部,可以使交付物更快、更稳定和更安全的发布和回滚。
去中心化架构,业务应用自组集群资源隔离,保证业务功能有较高的隔离性、可伸缩性和可用性。
标准化任务处流程和代码编写,定义出一个数据处理任务的流程与用户需实现的接口,接口间职责分离,标准化用户导入导出代码的编写,提高代码的可维护性。
明确业务领域对象,通过设计泛型接口,明确导入导出代码中的领域模型,可以避免业务代码中大量使用Map、JSON传参,提高代码的可维护性。
记录业务代码执行过程,辅助支持业务代码性能优化。
AGEIPort的架构设计
事件驱动
并发和异步
导入核心接口:BizImportResult<VIEW, DATA> write(BizUser user, QUERY query, List<DATA> data) throws BizException;导出核心接口:List<DATA> queryData(BizUser user, QUERY query, BizExportPage bizExportPage) throws BizException;去中心化
GitOps
标准化流程和面向领域模型编码