在 2021 年最后一个季度,构成英国网络档案馆的技术服务在幕后发生了许多变化。
开始 Hadoop 3 迁移
我们的 Hadoop 集群现在已经很老了,将其更新到新版本一直是一个长期存在的问题。旧的 Hadoop 版本不再获得更新,并且不受现代工具和库的支持,这使我们无法充分利用可用的东西。
很长一段时间以来,人们都不清楚如何最好地进行——就地更新似乎风险太大,但集群到集群的迁移似乎需要太多的硬件。因此,近年来,我们花时间学习如何设置和维护 Hadoop 3 集群,并评估不同的迁移策略,重点关注在任何迁移期间我们如何维护服务。
我们最终决定应该可以进行集群到集群的迁移,只要我们可以购买更高密度的存储,这样我们就有足够的空间在迁移硬件之前迁移内容。今年早些时候,由于一些采购延迟,我们能够购买并建立这个新的 Hadoop 3 集群,每台服务器提供超过 450TB 的原始存储(相比之下,旧集群的每台服务器大约 85TB)。
在进行设置的同时,我们还必须对我们的服务进行通用化,以便所有重要的进程都可以在两个集群中运行,并且可以从任何一个集群中检索 WARC 记录。这非常耗时,但随着 2021 年即将结束(旧集群上的空间越来越紧!),我们终于能够改变事情,以便将新收获的内容写入新的 Hadoop 3 集群。
在幕后,我们的文件跟踪数据库进行了更新,以扫描两个集群并充当文件所在位置的记录,并且每小时更新此记录,而不是每天更新一次。创建了一个新的 WARC 服务器组件,它接受 WARC 记录的 Wayback 请求,并使用跟踪数据库来确定它们在哪个集群上,然后抓取并返回有问题的 WARC 记录。
将来,跟踪数据库将用于帮助协调内容到 Hadoop 3 的移动,并在硬件可用时转移。新的 WARC 服务器意味着我们将能够始终保持不间断的服务。
但现在为了避免中断,我们还需要通过索引播放来启用对 Hadoop 3 上更新内容的访问。为此,创建了一个新的 CDX 索引器实现,可以在任一集群上运行(使用 Webrecorder 的 Python 工具而不是 Java 构建)。和以前一样,跟踪数据库用于跟踪已索引的内容,但现在可以立即对两个集群进行索引。
同样,尽管尚未完全投入生产,但 Document Harvester 文档提取器和 Solr 全文索引任务已被重新编写,以便能够在任一集群上运行,并且比之前的实现更健壮。
在撰写本文时,主要公共网站和内部存储报告尚未完全转移到两个系统上运行,因此短期内可能存在一些轻微的不一致。但是,我们希望在接下来的一两周内解决这个问题。
通过 Apache Airflow 进行任务编排
大量更改也被用作更新我们的关键 Web 归档任务的实施和编排方式的机会。我们使用 Luigi 框架来定义任务及其依赖关系,但随着时间的推移,我们发现这在很多方面存在问题:
- 执行任务的代码和编排这些任务的代码混合在同一个源文件中。这使得单独改进任何单个任务变得非常困难,并且使测试变得困难。
- Luigi 任务调度似乎不可靠,处理器偶尔会卡住并且没有任何进展,或者在失败时不会引发任何错误。这尤其影响了 Document Harvester,导致了许多中断。
- Luigi 任务管理界面不是很有用。它不容易查看以前的运行,并且提供的细节很少。
- Luigi 鼓励对任务依赖项进行编码的方式使得清除这些依赖项非常困难,因此可以重新运行任务。
这是一个流行且使用非常广泛的工作流定义和调度系统,谷歌和亚马逊都提供 Airflow 作为完全托管的云服务以及围绕它的健康开源社区。除了选择工作流平台外,我们还选择将每个任务工具实现为单独的独立 Python 命令行程序。这意味着:
- 任务代码与编排分离,可独立开发,任务可部署为 Docker 容器,将底层软件依赖分开。
- 我们开始使用 Airflow 调度器,它看起来更可靠,会在任务卡住或失败时向我们发出警告,并提供 Prometheus 集成进行监控。
- Airflow Web UI 非常详细,允许访问任务日志、运行摘要和统计数据,使工作流管理更加容易,并提供了一个框架来记录每个工作流。
- Airflow Web UI 还可以轻松清除失败的工作流运行的状态,以便可以根据需要重新运行它们。
W3ACT
W3ACT 被 UKWA 策展人和其他授权用户用于添加目标和管理质量保证和许可。W3ACT 策展服务最近只有小幅更新,于 12 月底推出。
- QA Wayback 现在运行 PyWB 版本 2.6.3 以改进播放(例如ukwa-pywb#70)。
- 改进了 W3ACT 身份验证 cookie 的处理方式,解决了w3act#662 问题。
UKWA 网站
UKWA 网站 ( www.webarchive.org.uk ) 用户界面上的大部分近期工作都集中在通过将我们的大量精选收藏品分类来改进其展示。这项工作仍在内部讨论和开发中,因此还不是公共网站的一部分。但是,我们正在取得良好的进展,并希望在未来几周内发布该网站的新版本。
除了接口本身,还做了一些额外的工作来更新内部服务(例如将 PyWB 更新到 2.6.3 版并添加 WARC 服务器以从两个 Hadoop 集群读取内容),并将部署移动到我们更新的生产平台。如上所述,这些更新应该很快就会推出。
2021 域名爬取
与 2020 年一样,2021 年域抓取在 Amazon Web Services 云上运行。这一次,在对 Heritrix 进行改进并在以往经验的基础上,爬网运行比 2020 年更加顺畅和高效,为爬网边界使用的内存和磁盘空间更少。该爬虫于 8 月初启动以进行渗透测试,然后在解决安全问题时将其删除。实际爬取从 8 月 24 日开始,从 1000 万个种子 URL 开始,到 11 月中旬,大部分爬取工作已完成。我们访问的 2700 万台主机中的大多数都被完全爬网,但大约 57,200 台主机确实达到了 500MB 的大小上限。但是,其中一些是内容分发网络 (CDN),即为其他站点托管资源的服务,因此手动取消了一些上限,并允许继续抓取。
12 月 30 日,抓取停止,处理了 20.4 亿个 URL,下载了 99.6 TB 数据(未压缩)。但是,许多 CDN 内容仍未收集,并且在 Heritrix 的正常“礼貌”规则下需要很长时间才能收集。将来,最好找到一种方法让 Heritrix 更快地爬取这些站点,而无需手动干预以确定哪些主机是 CDN。
我们都希望在明年开始将域抓取 2020/2021 内容从 AWS 传输到我们的 Hadoop 3 集群的过程。