新的存储库格式实现更快和更小的更新
Posted on 2023-03-01 by
我们刚刚发布了适用于 Android 的官方 F-Droid 客户端应用 1.16
版本,其中包括许多底层的彻底改变以及针对长期存在的问题的许多错误修复。请继续阅读以了解详情。
不断增长的存储库大小
随着越来越多的应用进入 F-Droid,包含所有应用及其元数据的官方存储库索引也在不断增长。目前,压缩后索引的大小为 8 MB
,未压缩时为 33
MB
。更新存储库索引时,每个 F-Droid 客户端应用都必须一次又一次地下载和处理那些
8MB
。这种有问题的趋势很久以前就已经变得很明显了。
仅更新有变化的内容
我们的存储库索引采用 JSON 格式,我们决定使用 RFC 7396 JSON Merge
Patch 创建更小的 JSON 文件,其中仅包含自你的
F-Droid 应用上次更新以来的变化。从技术上讲,这是通过下载新的
entry.json
文件而不是完整索引来实现的。这个入口文件指向完整的索引,以防应用以前从未更新过并且无论如何都需要所有应用元数据。但该条目还包含指向各种较小的 差异
文件的指针。应用会自动选择正确的差异,并且只下载那个小得多的文件而不是完整的索引。这不仅可以节省带宽,还可以更快地更新索引,因为只需要下载、处理和存储最少量的数据。在撰写本文时,最新的差异压缩后
80 KB
,未压缩时为 241 KB
,仅是完整索引的 1%
。官方 F-Droid Android 客户端应用 1.16
版本支持这种新的存储库格式。
其他改进
新版本在底层进行了大量彻底的更改。例如,必须替换整个数据库以支持新的基于差异的存储库格式。我们还借此机会改进了各种边边角角:
- 改进的镜像支持:所有文件(例如图像)现在都从镜像加载,减少了主服务器上的负载
- 更好地支持小内存设备,因为索引现在被流式传输到数据库中,而不是将其全部加载到内存中
- 哈希验证:所有 文件的 SHA256 哈希现在是存储库元数据的一部分,并在下载时进行验证
- 更强的存储库签名摘要算法:我们现在使用 SHA256 而不是 SHA1 作为索引签名
- 支持通过 IPFS下载存储库文件
- 修复许多对古老的代码进行现代化改造后出现的错误
新版本经历了一系列 alpha 版本和扩展测试确保没有严重的问题进入稳定版本。它现在被认为可以用于一般用途。
面向存储库和客户端维护者的信息
第三方 F-Droid 存储库的所有者可以通过升级到最新版本的 fdroidserver 来启用新格式,这将自动发布新格式同时保留旧格式以支持旧的客户端应用。
鼓励第三方 F-Droid 客户端的开发者采用新格式,或者通过自己的实现,或者使用我们发布的新库。我们发布这个库是为了让这项技术的使用尽可能简单,并在不同的 F-Droid 实现之间共享尽可能多的代码。
这项工作由 FFDW-DVD 资助资助