电话咨询
微信咨询
199 6386 0417
扫码添加客服

文件事件驱动

2022-08-18 08:57:00
高玉浩
原创
2749
摘要:悦库网盘以“管好文件”为产品核心目标,随着文件业务模块不断增加,对于文件访问的性能和数据一致性问题之间,我们一直妥协于前者。在生产实践总结中,我们创造了文件事件概念,这种技术在保证访问性能的同时实现文件在各个业务模块中的最终一致性。同时可以实现各个业务模块对文件变动的快速响应能力。

悦库网盘以“管好文件”为产品核心目标,随着文件业务模块不断增加,对于文件访问的性能和数据一致性问题之间,我们一直妥协于前者。在生产实践总结中,我们创造了文件事件概念,这种技术在保证访问性能的同时实现文件在各个业务模块中的最终一致性。同时可以实现各个业务模块对文件变动的快速响应能力。


基础概念

文件仓库是存储文件结构化信息的二维数据表,主要包括文件的详细信息(如名称、大小、时间、创建者等)、树形目录结构信息、索引信息等。
文件业务模块是实现文件管理的附加功能模块,包括文件收藏功能、最近访问功能、全局搜索功能、权限管理功能、分享功能等等。

通常业务模块会根据自身需求冗余一些文件的概要信息,但是很多业务场景下是需要通过访问文件仓库来获取文件的详细信息。


面临的问题

业务模块中的文件信息是和仓库关联的,但目前仓库中的文件结构和内容变化不会反应到业务模块中。
例如:
  1. 用户在文件仓库中重命名文件,在最近访问、收藏功能模块中查看该文件依然是原来的文件名称。
  2. 用户新上传文件,并不能立即在全局搜索中查找,需要等待搜索模块定时索引完成。
  3. 用户分享文件链接后,原文件被删除,分享链接依然可访问,但文件已失效。
解决文件仓库和业务模块的数据一致性问题一般方案:
  • 使用数据库触发器方式。由于业务模块较多且不断增加,性能太差。
  • 定期检查各个业务模块的数据一致性并处理。时效性不满足,全局检查时间很长,资源占用大,实现起来业务耦合度大。
如果不能保证数据一致性,在长时间的各种文件操作后,业务模块中必然会出现大量无效文件信息,影响用户使用体验。

文件仓库与业务模块的关联性:



文件事件驱动

文件事件是指当仓库中文件的结构、信息、内容等发生变化时,由仓库对象负责生成的一种数据结构,其中记录文件的变动行为和相关信息。

例如:仓库中新建文件,会生成新建文件事件,事件信息如下:


当用户操作文件时,服务器收到请求后,由文件操作处理API调用文件仓库完成处理并立即返回用户。文件仓库在操作文件时会生成对应的文件事件推送到事件队列中,防止并发事件处理过多导致系统性能压力,事件处理程序会顺序读取事件并通知到所有文件相关业务模块中,由业务模块自身决定是否对该事件进行处理及如何处理。

整体流程如下:



引入文件事件驱动机制后,业务模块不再需要主动探测文件信息的一致性,只需被动处理事件即可,降低了文件仓库的访问压力,提升业务模块对文件变化的响应能力。


文件事件的意义

文件最终一致性
业务模块响应来自仓库的文件事件后,可以立即更新模块自身冗余的文件信息,实现文件信息的最终一致性。
从用户角度看就是当仓库中的文件被更新后,其他业务模块中的文件也随之立即更新。
仓库和业务模块解耦
业务模块在不直接与文件仓库交互的情况下,具备文件变动响应能力,且对于事件的处理在各个业务模块内部完成,实现仓库和业务模块的解耦。
发表评论
评论通过审核后显示。
联系我们
联系人: 高先生
电话: 19963860417
Email: service@ydisk.cn
QQ: 480247680
微信: 19963860417
地址: 青岛市黄岛区井冈山路157号中南金石国际广场A座3202室