文件事件驱动提案No.2
· 阅读需 4 分钟
随着文件业务模块不断增加,对于文件访问的性能和数据一致性问题之间,我们一直妥协于前者。在生产实践总结中,我们创造了文件事件概念,这种技术在保证访问性能的同时实现文件在各个业务模块中的最终一致性。同时可以实现各个业务模块对文件变动的快速响应能力。
基础概念
文件仓库是存储文件结构化信息的二维数据表,主要包括文件的详细信息(如名称、大小、时间、创建者等)、树形目录结构信息、索引信息等。
文件业务模块是实现文件管理的附加功能模块,包括文件收藏功能、最近访问功能、全局搜索功能、权限管理功能、分享功能等等。
通常业务模块会根据自身需求冗余一些文件的概要信息,很多业务场景下是需要通过访问文件仓库来获取文件的详细信息。
面临的问题
业务模块中的文件信息是和仓库关联的,但目前仓库中的文件结构和内容变化不会反应到业务模块中。
例如:
- 用户在文件仓库中重命名文件,在最近访问、收藏功能模块中查看该文件依然是原来的文件名称。
- 用户新上传文件,在不能立即在全局搜索中查找,需要等待搜索模块定时索引完成。
- 用户分享文件链接后,原文件被删除,分享链接依然可访问,但文件已失效。
- 还有很多场景不一 一列举...
解决文件仓库和业务模块的数据一致性问题,由于业务模块较多且不断增加,使用数据库触发器方式性能太差。
定期检查各个业务模块的数据一致性处理则时效性不满足,全局检查时间很长,资源占用大,实现起来业务耦合度大。
如果不能保证数据一致性,在长时间的文件操作各种操作后,业务模块中必然会出现大量无效文件信息,影响用户使用体验。
文件仓库与业务模块的关联性:
