面向商务人士的 Linux - 非常嫌疑犯
为像 Technorati 这样的搜索引擎构建基础设施,该引擎搜索并存档 RSS 和类似 feed 的“实时”网络,就像建造一系列谷仓,每个都在上一个被烧毁后建造。在回顾他公司的简短历史时,David Sifry 通常会说,“好吧,在第一个基础设施倒塌后……在第二个基础设施倒塌后……在第三个基础设施倒塌后……”难怪他还说,“扩展就是一切。” 指导性失败是对开拓性不那么光彩的描述。
Technorati 的足迹始于 David 的地下室,在一台 Penguin Computing 借给 David 和我的服务器上,用于在 2003 年 3 月号的《Linux Journal》上撰写关于博客的专题报道。请参阅在线资源中的“使用博客构建”和“Technorati 的故事”。 该服务立即受到欢迎,并持续稳步增长。当您阅读本文时,Technorati 将监控近四百万个联合来源,主要是网络日志,以及超过 5 亿个链接。(免责声明:我在 Technorati 的顾问委员会任职。)将 Technorati 视为针对对 Google 来说太新的内容的搜索引擎——外加一个基于公司不断增长的档案和无数潜在衍生数据形式的免费和付费服务平台。
可以将 Technorati 视为另一个快速扩展的 LAMP 黑客技术。但是,当我与 Technorati 的技术人员交谈时,我发现一些最有趣的应用来自熟悉的 LAMP 列表(Linux、Apache、MySQL、PHP、Perl、Python 和 PostgreSQL)之外的开源嫌疑对象。我最近请该公司于 2004 年 7 月从 Ofoto 过来的新任工程副总裁 Adam Hertz 向我详细介绍一两种有用但不太引人注目的工具。他立即指出了 Memcached,并将解释工作交给了他的高级架构师 Ian Kallen。
“我们正在做的很多事情以前从未做过”,Ian 告诉我。“但是,我们一路走来遇到的许多扩展问题以前都经历过。结果是开源免费软件,通常非常强大,可以缓解我们正在经历的痛苦。” 其中一个结果是 Memcached,这是一个由 Danga Interactive 开发的分布式缓存系统,Danga Interactive 是 LiveJournal 背后的团队,LiveJournal 占 Technorati 跟踪的博客的很大一部分。 Ian 解释说
在大型数据存储库中进行查找查询可能很昂贵。如果查找重复的速率接近或小于更改速率,则避免应用程序重复往返以获取数据是有意义的。一个明显的解决方案是让应用程序进程将查找结果保存在缓存中。缺点是缓存通常会消耗资源;在 Web 服务等多进程应用程序中,让每个进程(或线程)保留自己的缓存会降低缓存效率并增加应用程序资源占用空间。对此的解决方案是共享缓存。
高应用程序可用性要求通常通过服务器冗余来满足。现在,如果每个服务器实例都有自己的缓存,则缓存效率的降低将变得像让单个主机上的各个进程共享缓存一样荒谬。那里的解决方案是分布式缓存,而这正是 Memcached 的用武之地。
Memcached 监听网络套接字并利用非常简单的参数来检测内存分配,它维护一个键的内存字典,该字典动态填充值。 Technorati 使用搜索参数作为键,搜索结果作为值。当返回与先前运行的查询重复的搜索结果时,回报就来了;它们返回的速度至少快一个数量级。
除了速度和简单性之外,Memcached 的另一个主要优势是其灵活性。它可以以语言原生序列化格式(例如 Perl 的 Storable 或 Java 的 Serializable)存储对象。 Technorati 使用 PHP 的原生序列化来存储缓存结果。但是,Memcached 可以存储任何可以互操作使用的字节;一个用 Java 实现的缓存客户端可以访问和读取由另一个用 Perl、Python 或 PHP 编写的客户端存储的缓存 XML 文档。这对于异构开发环境来说可能是一个巨大的胜利。
应用程序稳定性和性能优化是像 Technorati 这样蓬勃发展的数据存储库的关键问题。缓存并不是软件工具箱中唯一的东西。应用程序架构仍然可能受益或受其他设计决策的质量影响。但是,Memcached 带来的集成挑战非常低,使其成为数据检索加速的首要考虑因素。
当我再次询问 Adam 关于他工具箱中可能存在的其他不太知名的工具时,他说该公司也即将使用 Spread Toolkit——一种与语言无关的消息传递系统,允许更新、事件和信息在分布式系统中流动。他解释说
当博客 ping 我们时,将其视为一个事件。我们的蜘蛛程序会响应并获取新内容。然后,它将更新放在消息总线上,以便任何应用程序都可以在消息通过时看到它。每个订阅者(Technorati 应用程序或服务)都有机会看到每条通过的消息。它可以选择接收或忽略它。应用程序可以说,“嘿,我对这个更新感兴趣吗?” 这样,我们减少了数据库的内部查询负载,并且还使应用程序更具实时性。这称为多播。它是一种类似于 TIBCO 为金融系统提供的服务。
例如,一篇关于政治书籍的博客文章可能对 Book Talk、News Talk 和 Politics Today 感兴趣。与其让所有三个应用程序查询数据库以查找过去五分钟内的相关更新,不如让该博客文章在系统中传播并被所有三个应用程序接收。
这不仅加快了用户和应用程序的性能,还为用户、外部应用程序和服务(使用 Technorati API)开辟了许多新的服务机会。
约翰·霍普金斯大学 Spread 的创建者之一 Jonathan Stanton 补充说
Spread(也)提供容错消息传递。这意味着,如果属于 Spread 组的某些机器崩溃或与其他机器断开连接,Spread 会保证所有仍连接的机器都将看到相同的消息集。这种强大的语义组消息传递可用于构建复制数据库(一个使用 Spread 构建复制数据库的开源项目是 Postgres-R)并保证集群缓存系统(如 Technorati 的)中的一致性。
这里有五件有趣的事情。首先,请注意 Technorati 不在哪里寻找答案。旧的工业模式假设您在内部(从公司组织结构图上的负责任职位)获得所需的专业知识,或者您从外部供应商和顾问处购买产品和专业知识。在这里,我们有一位首席信息官和一位首席工程师在公司外部寻找基础设施建设材料,以及既在市场上又不出售的专家和专业知识。换句话说,像 Memcached 和 Spread 这样的工具是比像 Technorati 这样的企业客户从商业供应商那里获得的更大的对话和更大的关系集合的一部分。这不是对供应商的抨击,而是提醒我们,以供应商关系和产品类别的销售量定义的市场未能包括市场生态系统的一个庞大且不断增长的部分。
其次,使用开源工具以及参与 Memcached 和 Spread 等开发项目的优势很可能会被不鼓励开拓性 DIY 工作的传统 IT 部门所忽视。 Adam Hertz 解释说
两个主题:大型企业 IT 完全是关于标准化和孤立主义。
标准化,故事是这样说的,可以降低风险和成本。它肯定会降低复杂性,但可能会对灵活性和响应性造成巨大损失。标准化通常涉及使用一种多用途工具或平台来完成许多不同的目的。这通常涉及定制,定制由内部专家或专业服务公司完成。很好的例子是 Siebel、Lotus Notes 等。
DIY 商店往往对这样的系统持怀疑态度,甚至非常害怕,因为它们非常不灵活且不可破解。
标准化的另一种形式是人们被允许在他们的台式电脑上拥有的东西。在许多大型商店中,每个人都拥有相同的磁盘映像,并预装了所有应用程序。人们对来自外部世界,尤其是开源的任何东西都非常怀疑。它被认为是不可靠的、充满病毒的、不可扩展的等等。这产生了孤立主义,这意味着仅仅尝试某些东西就存在重大障碍。
在更开放的环境中,企业 IT 环境与互联网之间存在可渗透的膜。人们倾向于从互联网上获取新工具,通常是开源的,并只是试用一下。从文化上讲,这使组织对创新和新方法保持开放。它在员工和更广泛的开发社区之间建立联系。
标准化、孤立主义的商店错过了所有这一切。他们保持控制,但他们不可避免地会落后。
第三,Technorati 不仅在解决问题,尽管解决问题确实占用了大量的 IT 周期。它还在寻求像 Memcached 和 Spread 这样的工具来开辟新的业务和其他机会。当我问 Adam 关于使用 Spread 来扩展 Technorati 的 Web 服务产品时,他说机会已经非常广阔,只会变得更加广阔
例如,实施自定义监视列表也非常有用。假设您有一个非常奇怪的查询……或者更准确地说,是过滤器。例如,您想了解的非常具体的帖子类型——例如,提及您、《Linux Journal》和开源的帖子。我们可以将其设置为更新的订阅者。它可以监视所有到来的更新,丢弃 99.99% 不相关的更新,当它收到相关的更新时,它可以向您发送邮件或其他内容。将此与我们当前查询数据库的监视列表实现进行对比。然后想象一下——或者何时!——我们有 100,000 个监视列表。
第四,Adam 很快就尊重他的工程师的专业知识,其中包括在市场上寻找有用的免费开源工具。 Adam 在谈论他的工作时发出的声音让我想起了 Linus Torvalds 在谈论内核维护者时发出的声音。 Linus 说
很难找到不发脾气、冷静理性并且品味高尚的人。我的意思是,这就像……给我一个诚实的人。这种情况不会经常发生……太多了。但与此同时,当这种情况发生时,它非常重要。仅仅这些人中的一小部分人就产生了巨大的影响。
第五,很明显,品味高尚、不怕麻烦的工程师的开拓性工作为世界提供了支持实际业务所需的基础设施,此外还维护了企业平凡的内部运营。
就在最近几天,当我写这篇专栏文章时,另外两个开源工具引起了我的注意。它们很有趣,因为它们代表了市场上的两个极端:一个是外部的,一个是内部的。
外部的是 Gallery Project,它似乎正在迅速将自己确立为照片库软件的 Apache。在一周之内,Gallery 从我几乎不了解的东西变成了似乎每个人都在告诉我的东西。这是一个非常丰富和深入的系统,当您阅读本文时,它肯定会更加丰富和深入。这表明 Apple、Adobe 和 Microsoft 并不是唯一关心为用户和摄影师提供有用工具的公司——而且最重要的工具不是那些存在于客户端或供应商托管服务上的工具,而是存在于摄影师自己的服务器或他们的朋友、亲戚和其他方(包括企业)的服务器上的工具。 Gallery 是纯粹的 DIY 基础设施,也是互联网和开源如何让需求方自我供应的另一个引人注目的例子。
我还认为 Galley 挠的痒痒不仅仅是技术性的,这一点很重要。尽管安装起来有点麻烦,但它是营销人员所说的面向消费者的服务。观察未来一两年内的市场效应将会很有趣。
内部工具是 Yum (Yellowdog Updater Modified),它是杜克大学数学系开发的基于 RPM 发行版的自动更新程序和软件包安装程序/卸载程序——特别是那里的高级系统程序员 Seth Vidal 开发的。
Yum 是公共代码,具有公共源代码存储库和 GPL 许可证。然而,它是杜克大学为满足自身内部需求而开发的。数学系主任 Richard Hain 最近告诉我,仅在该系就有 100 多台 Linux 机器在运行,并且认真致力于在台式机以及用于严肃数值计算的更大机器上运行 Linux。大多数办公室工作人员都在运行 Linux 桌面。 Microsoft Windows 用户正在 Win4Lin 上运行。 Hain 解释说,Yum 在他们的环境中是必需品。仅频繁的硬件更新就需要“每天运行 Yum 并维护软件包的部门发行版”。
因此,在我看来,在开源市场中最重要的非常嫌疑犯不仅是工具,而且是创造和使用它们的独立精神。
Doc Searls (doc@ssc.com) 是《Linux Journal》的高级编辑。他的每月专栏是“面向商务人士的 Linux”,他的双周通讯是 SuitWatch。他还主持 Doc Searls 的 IT Garage (garage.docsearls.com),它是《Linux Journal》在 Web 上的姊妹网站。