3. Usenet 新闻软件

3.1. Usenet 系统的简要历史

在本 HOWTO 的末尾,我们通过引用早期 Usenet 定期发布的内容,添加了一些关于 Usenet 服务器软件历史的信息。我们认为这种历史视角,以及其中引用的 Usenix 论文和其他文档,对于任何 Usenet 服务器管理员来说都是必读的。请参阅标题为 "Usenet 软件:历史视角>" 的章节。

3.2. C-News 和 NNTPd

C-News 由多伦多大学动物学系的 Henry Spencer 和 Geoff Collyer 编写,几乎完全使用 shell 和awk,作为早期系统 B-News 的替代品。重点是增加一些额外的功能和大量的性能。第一个版本称为 Shellscript Release,作为 B-News 的自然升级,在全球范围内被大量服务器部署。这个版本的 C-News 与 B-News 元数据(例如 历史文件)向上兼容。这是最初在 1991 年左右在国家软件技术中心 (NCST,http://www.ncst.ernet.in) 和印度理工学院在印度作为印度教育和研究网络 (ERNET) 的一部分推出的 C-News 版本。我们收到了 NCST 关于 Usenet 新闻安装和管理的指导。

Shellscript Release 之后很快进行了重写,使用了更多的 C 代码,称为 Performance Release,然后进行了一系列清理和组件集成步骤,最终形成了最后一个版本 Cleanup Release。作者多次修补了这个 Cleanup Release,最后一个版本是 CR.G (Cleanup Release revision G)。本 HOWTO 中讨论的 C-News 版本是一组基于 CR.G 的小型错误修复。

由于 C-News 源于基于 shellscript 的前身,其架构遵循了 Unix 典型的程序集风格,而不是一些其他操作系统传统的大型单体软件系统。所有组件都有明确定义的角色,因此可以根据需要轻松地用其他组件替换。这使得易于适应和升级。这从不影响性能,因为高速完成大量工作的关键组件,例如newsrun,那时已经用 C 语言重写了。即使在 shellscript 中,处理二进制数据的关键组件,例如 一个名为dbz的组件,用于操作高效的磁盘哈希数组,也是带有命令行界面的 C 程序,从脚本中调用。

C-News 诞生于网络线路速度差异很大的世界,带宽利用率是一个大问题,使用 UUCP 文件传输的拨号连接很常见。因此,它对批处理馈送有强大的支持,特别是具有各种压缩技术和通过各种快速和慢速传输通道。而且 C-News 几乎不知道 TCP/IP 的存在,除了一个或两个微小的批处理传输程序,如viarsh。然而,它的设计是如此模块化,以至于使用一套单独的 C 程序插入 NNTP 功能绝对没有问题,而无需修改一行 C-News 代码。这是通过一个名为 NNTP Reference Implementation 的程序套件完成的,我们称之为 NNTPd。

这个软件套件可以与 B-News 和 C-News 文章存储库一起工作,并提供完整的 NNTP 功能。由于 B-News 逐渐消亡,C-News 和 NNTPd 的组合成为一个可自由再分发、可移植、现代、可扩展和高性能的 Unix Usenet 服务器软件套件。后来添加了进一步的改进,例如nov,新闻概述包和pgpverify,一个基于公钥的数字签名模块,用于保护 Usenet 新闻服务器免受欺诈性控制消息的侵害。

3.3. INN

INN 是两个最广泛使用的 Usenet 新闻服务器解决方案之一。它由 Rich Salz 为具有套接字 API 的 Unix 系统编写 --- 今天可能所有的 Unix 系统都有。

INN 的架构与 CNews 截然相反。它是一个单体程序,在启动时启动,并持续运行直到您的服务器操作系统关闭。这类似于大多数情况下高性能 HTTP 服务器的运行方式,并允许 INN 在其内存中缓存大量内容,包括最近发布的邮件的 message-ID,等等。作者在一篇有趣的论文中讨论了这个有趣的架构,他在其中解释了他试图解决的旧 B-News 和 C-News 系统的问题。任何对 Usenet 软件(特别是 INN)感兴趣的人都应该研究这篇论文。

INN 针对的是一个围绕 NNTP 旋转的 Usenet 新闻世界,尽管它支持 UUCP 批处理 --- 这是一个似乎没有多少 INN 管理员谈论的事实。当处理多个并行传入的 NNTP 馈送时,INN 比 CNews-NNTPd 组合更快。对于通过 NNTP 读取和发布新闻的多个读者来说,INN 和 NNTPd 的效率之间没有区别。 第 5.7 节> 基于 Rich Salz 的论文和我们对使用模式的分析,讨论了 INN 相对于早期 C-News 架构的效率问题。

INN 的架构启发了许多高性能 Usenet 新闻软件,包括许多针对“运营商级”市场的商业系统。这就是 INN 架构相对于 C-News 具有明显优势的市场。

3.4. Leafnode

这是一个有趣的软件系统,用于在一台计算机上设置一个“小型” Usenet 新闻服务器,该服务器仅接收新闻馈送,但没有向其他站点发送批量馈送的麻烦, 它是新闻馈送流程图中的“叶节点”。根据其主页 (www.leafnode.org),“Leafnode 是一个 USENET 软件包,专为运行任何 Unix 版本的小型站点设计,只有几十个读者,并且只有到网络的慢速链接。[...] 当前版本是 1.9.24。”

该软件是文章存储库和 NNTP 新闻服务器的某种组合,它接收文章、摘要并将它们存储在本地硬盘上,定期过期它们,并将它们提供给 NNTP 阅读器。据称它易于管理,并且非常适合安装在桌面级 Unix 或 Linux 机器上,因为它不占用太多资源。

Leafnode 基于一个吸引人的想法,但我们发现在一个桌面级机器上使用 C-News 和 NNTPd 没有任何问题。它的资源消耗在某种程度上与您要处理的文章量成正比,并且对于一小队用户来说,您想要保留的组的数量可以很容易地由桌面级计算机上的 C-News 处理。一个拥有 100 个用户的办公室可以轻松地在运行 Linux 的桌面计算机上使用 C-News 和 NNTPd,配备 64 MB 内存、IDE 驱动器和足够的磁盘空间。当然,配置和管理的易用性取决于熟悉程度,我们比 Leafnode 更熟悉 C-News。我们希望本 HOWTO 能在这方面帮助您。

然而,确实有一个领域,Leafnode 比 INN 或 C-News 更容易管理。Leafnode 不断监控其承载的新闻组的实际使用情况,基于其 NNTP 阅读器的读者统计信息。如果一个特定的新闻组在一周内没有任何用户阅读,那么 Leafnode 将删除该新闻组中的所有文章,释放磁盘空间,并停止为其获取新文章。如果它发现以前放弃的新闻组现在又重新受到关注,即使来自一个用户,那么下次它连接时,它也会从其上游服务器获取该组的所有文章。Leafnode 的这种自调整功能确实是一个极好的优势,它使 Leafnode 站点更易于管理,特别是对于带宽和磁盘空间受限的小型设置。

Leafnode 网站以易于理解的格式提供了大量详细信息。

待扩展和更正。

3.5. Suck

Suck 是一个程序,可让您从 NNTP 服务器拉取 NNTP 馈送并在本地归档。它不包含任何文章存储库管理软件,期望您使用其他软件系统(例如 C-News 或 INN)来完成它。它可以创建可以馈送到 C-News 的批处理文件。(好吧,公平地说,Suck 确实有一个选项可以将提取的文章存储在类似于 C-News 或 INN 在其文章区域中使用的假脱机目录树中,每个文章一个文件。您稍后可以使用支持msgdir邮件文件夹文件布局的邮件客户端(如 MH,也许)读取此原始消息假脱机区域。如果您在 Usenet 服务器上运行 Suck,我们认为此选项没有用处。)Suck 最终归结为一个单命令行程序,通常从cron调用。它有大量的命令行选项,起初令人困惑,但后来显示了该软件的成熟度和精细可调性。

如果您需要 NNTP 拉取馈送,那么我们知道没有比 Suck 更好的程序了。构成 NNTPd 软件包一部分的nntpxfer程序也实现了 NNTP 拉取馈送,例如,但没有 Suck 十分之一的灵活性和精细调整。NNTP 拉取馈送的一个弊端是连接超时;Suck 允许大量特殊调整来处理这个问题。如果我们要设置一个带有 NNTP 拉取馈送的 Usenet 服务器,我们会立即使用 Suck。

待扩展和更正。

3.6. 运营商级软件

运营商级服务器应处理所有新闻组中所有文章的完整馈送,包括许多我们称之为“高噪声信号比”的组。它们没有像内部企业 Usenet 服务器的管理员那样选择“有用”子集的奢侈。其次,运营商级服务器应非常快速地周转文章, 它们应具有非常低的延迟,从它们接收到文章的那一刻到它们通过 NNTP 将其重新传输到下游服务器的时间。第三,它们应该提供非常高的可用性,就像其他“运营商级”服务一样。这通常意味着它们具有负载共享配置中的并行计算机阵列。第四,它们通常不迎合零售连接,供人类用户阅读和发布文章。Usenet 新闻运营商通常保留单独的计算机来处理零售连接。

因此,运营商级服务器不需要维护文章存储库;它们只需要专注于超高效的实时重新传输。这些高度专业化的服务器具有软件,这些软件通过 NNTP 接收文章,解析它,并立即将其重新排队以向数十或数百个其他服务器进行向外传输。并且由于它们以如此高的吞吐量工作,它们的下游服务器也应全天候在 Internet 上保持活动状态以接收传入的 NNTP 连接,或者准备丢失文章。因此,不需要批处理或长队列,而事实上 C-News 风格的批处理完全不适用。

因此,这些运营商级 Usenet 服务器更像是数据包路由器,而不是带有存储库的服务器。它们现在被称为 NNTP 路由器或新闻路由器。

可以看出,为什么像 C-News 这样的面向批处理的存储库管理软件在这里完全过时,以及为什么它们需要面向 NNTP、在线、实时的设计。因此,其中一些系统的 INN 前身是很自然的。我们很乐意听到任何 Linux HOWTO 读者的 Usenet 服务器要求包括运营商级行为。

我们只知道一个可自由再分发的 NNTP 路由器:NNTPRelay(参见http://nntprelay.maxwell.syr.edu/);此软件在 NT 上运行。没有理由说明此类服务不能在 Linux 服务器(甚至是 Intel Linux)上运行,前提是您具有快速网络链接和服务器阵列。Linux 作为操作系统平台在这里不是问题。

待扩展和更正。