在一个著名的寓言中,一群盲人被要求描述一头大象。每个人都遇到了动物的不同部位,毫不奇怪,他们给出了不同的描述。
今天,我们在 IT 行业也看到了类似程度的困惑,诸如面向服务的架构、网格、公用计算、按需、自适应企业、数据中心自动化和虚拟化等术语被随意使用。就像听盲人说话一样,很难知道这些词语背后隐藏着什么现实,不同的部分是否以及如何组合在一起,以及我们应该对正在描述的动物做些什么。(当然,在盲人的例子中,我们也没有营销部门参与其中!)
我们在本文中的目标实际上是提供对大象的描述。更具体地说,我们描述了我们认为正在推动许多相关努力的主要技术趋势——即,从垂直集成的孤岛到水平集成的、面向服务的系统的转变。我们解释了各种流行的术语如何与这种总体趋势相关,并描述了实现这种转变所需的技术。
您的 IT 部门被要求开发一个新的应用程序,用于计算客户股票投资组合的估值。他们启动了需求分析、设计、开发、硬件采购、部署和测试过程。几个月后,新的应用程序准备就绪:这是一个经过微调的、垂直集成的专用应用程序和管理软件堆栈,运行在一组专用服务器上。
随着时间的推移,此应用程序变得越来越流行,并且主要的需求高峰导致过载。尽管整个企业中有大量的过剩服务器容量,但无法将其用于这些高峰,因为其他应用程序堆栈锁定了这些服务器。(每个应用程序使用的服务器运行着截然不同的软件——甚至可能是不同的操作系统——并且静态配置为执行单个任务。而且,没有人希望他们的服务器被其他人触碰,因为任何更改都可能破坏他们的应用程序。)因此,IT 部门必须继续安装额外的服务器以增加容量。
这种将 IT 资源组织为一组或多或少独立的孤岛的方式,每个孤岛负责一个独特的企业功能或应用程序,是很常见的。实际上,这既是权力下放的自然结果,也是用于构建当今应用程序的专有资源虚拟化、工作负载管理和应用程序构建器的自然结果。然而,由于降低资本和运营费用以及更快地响应业务需求的业务迫切需要,这种隔离也变得越来越站不住脚。个别孤岛因需要为偶尔的峰值负载提供过剩容量而导致 90% 的时间处于闲置状态,这并不少见。此外,每个不同的孤岛都需要专门的操作技能。
在寻求解决这些问题的方案时,我们无需回顾太久以前。不久前,大型机既提供了一组方便的抽象,应用程序可以对其进行编码,又提供了强大的资源管理功能,允许许多应用程序在大型机内共享可用资源,同时保持适当的服务质量。大型机通常可以有效地服务数十个应用程序,同时以接近 100% 的容量运行。实际上,集中式 IT 架构在垂直方向上是解耦的,在水平方向上是集成的,从而允许应用程序内部的功能重用以及资源使用方面的规模经济。此外,所有应用程序都可以在统一的环境中访问。
如图 1 所示,尽管分布式、低成本且通常是异构的服务器集合带来了许多好处,但集中式 IT 架构仍然解体为孤立的孤岛。现在的挑战是重新集成,以便在更复杂的现代分布式企业 IT 环境中实现垂直解耦和水平集成的优势。在这种背景下,垂直解耦意味着我们标准化应用程序组件、工作负载管理系统和物理资源之间的接口,以便可以动态地组装不同的组件以满足应用程序需求。水平集成意味着我们采用统一的管理接口,以便可以以通用和自动化的方式分配、使用、监控和管理大量资源(分布在过去不同的孤岛上),从而提高利用率并降低运营成本。
要了解这些想法在实践中的含义,请考虑我们如何在水平集成的世界中实现之前描述的投资组合估值应用程序。我们将应用程序编码到工作负载管理接口,该接口允许我们定义要执行的活动以及这些活动的性能要求。实现此接口的工作负载管理器将使用通用网格基础设施机制(部署在所有企业硬件上)来发现可用资源并将应用程序组件部署到这些资源上。随着负载增加,可以自动(且临时)地将新资源分配给应用程序并由其使用。因此,“应用程序”与底层“硬件”完全解耦。
现在我们转向引言中提到的各种术语,并检查每个术语如何与水平集成的目标相关。
术语“网格”是我们特别参与推广的一个术语,尽管它也引起了近年来许多营销人员的兴趣。根据一种定义,网格是“一种使用开放的、通用的协议来联合分布式资源并提供优于尽力而为的服务质量的系统”。1 这个术语的使用灵感来自电网,电网作为一种技术,既:(a)实施电力传输标准,允许消费者和提供商解耦;以及(b)将不同的提供商链接到一个受管理的公用事业中。通过类比,网格技术能够:(a)按需访问计算能力;以及(b)联合分布式资源并管理这些分布式资源以满足最终用户需求。2 因此,网格是一个大局术语,用于描述与分布式资源的灵活使用相关的解决方案,以用于各种应用程序——以及一个强调标准对互操作性重要性的术语。
我们使用术语“网格基础设施”来指代网格空间中一个特别重要的方面——即,水平基础设施集成层。术语“网格”也经常应用于堆栈的其他层:例如,用于描述应用程序或工作负载管理器,该管理器已构建为有效且灵活地利用分布式和/或共享资源。
相关的术语“公用计算”通常用于表示服务提供商和消费者之间的分离,以及从提供商处协商所需服务质量的能力——这两种属性通常与电力等公用事业相关联。提供商可以是组织的 IT 部门或外部公用事业提供商,服务可以是存储、计算或应用程序。(例如,Sun 提供按需付费的“计算公用事业”服务,每 CPU 小时 1 美元,而 salesforce.com 提供客户关系管理应用程序作为服务。)
“按需”是一个广泛的术语,用于表示允许用户或应用程序获取额外资源以满足不断变化的需求的技术和系统。因此,我们可能拥有按需计算、存储、带宽和应用程序。其含义与公用计算显着重叠:存储公用事业和按需存储具有相似的含义。
术语“公用事业”、“按需”和“网格”在含义上显着重叠。所有这些都带有 IT 即服务的含义,这意味着它们涉及通过某些标准化协议通过网络提供对物理资源或其他服务的访问。“公用事业”和“按需”可以被认为是网格的专门用例(参见图 2)——尽管当然,当今的许多公用事业和按需产品尚未使用网格基础设施。实际上,采用公用事业/按需计算的障碍是缺乏水平基础设施集成的标准。在缺乏发现、协商访问、配置和管理远程资源的标准机制的情况下,公用事业/按需服务通常涉及复杂的 手动配置。这阻碍了软件供应商和最终用户开发依赖于使用这些服务的软件。
相关的还有术语“数据中心自动化”,通常用于指代能够协调企业内资源管理的产品:例如,使大量机器保持最新状态,并安装最新的补丁。目标是自动化通常不为分布式执行而修改的应用程序的操作。此任务通常使用专门的底层管理基础设施,但可以通过通用的网格基础设施来促进。
术语“集群”(有时是 Beowulf 集群,以早期项目命名)表示由商品部件构建的非共享内存、多 CPU 系统。集群的相对低成本使其成为网格/公用事业/按需计算系统的出色动力源,尤其是在更好的集成降低了其空间、功耗和管理成本,并且虚拟机技术促进了更灵活的配置的情况下。
其他术语往往具有更广泛和更狭隘的定义。因此,IBM 将按需业务描述为“一家企业,其业务流程——在整个公司以及与主要合作伙伴、供应商和客户之间端到端集成——可以快速响应任何客户需求、市场机会或外部威胁。”惠普的术语“自适应企业”具有类似的含义,表示“一个适应市场状况的组织,使其能够响应和解决市场、环境和/或行业的变化,从而更好地为生存和盈利能力定位自己。”
外包也很重要,其中第三方提供运行企业全部或部分 IT 运营的服务。外包与其说是一种 IT 架构,不如说是一种财务策略:在许多外包交易中,IT 人员更换了雇主,但应用程序仍然托管在相同的孤岛上。但是,如果外包公司有机会修改应用程序,那么他们对高效运营的关注可以使水平集成成为降低硬件成本的一种有吸引力的手段。此外,公用事业方法的成功实现可以实现更动态的资源外包,以满足不断变化的工作负载需求。
另一个最近的术语是“软件即服务”。在这种方法中,Web 用于为许多客户提供对专门为此使用模式设计的功能(salesforce.com 中的客户关系管理)的访问。“软件即服务”因此是一种编写应用程序和向用户公开接口(例如,通过 Web 浏览器)的方法。这种方法在商业上很有意义,因为软件即服务供应商可以实现规模经济。软件即服务供应商对其应用程序具有高度的控制权,因此是采用水平基础设施集成策略的主要候选者。
如果不介绍 SOA(面向服务的架构)和 Web 服务,对大局概念的讨论就不完整。这两个术语分别表示一组架构原则和一种实现技术,它们在实现 IT 即服务以及我们稍后讨论的水平集成方面发挥着重要作用。
SOA 表示一种设计系统的方法,该方法有助于实现前面提到的 IT 即服务和水平集成目标。服务是一些功能(或多个功能)的自包含实现,具有定义明确的接口,指定用于与功能(或多个功能)交互的消息交换模式。那么,SOA 就是一组服务。因此,SOA 寻求实现接口和实现之间的清晰分离,以实现其他理想的属性,例如互操作性、位置透明性以及服务和客户端之间的松耦合。(有关松耦合优点的讨论,请参阅 Kendall 等人的经典论文 3。)
Web 服务是一组用于实现面向服务的架构的技术。虽然不是唯一可以用于此目的的技术——例如,CORBA 和 DCOM 过去曾被使用过——但 Web 服务比以前的方法具有技术优势,并且正在被广泛采用。
Web 服务由一组核心技术规范定义,这些规范编纂了用于描述可用于与服务(WSDL)交互的消息集(即,接口)的机制,以及用于编码往返服务的消息(SOAP)的机制。其他规范定义了如何保护对服务的访问(WS-Security)、寻址服务(WS-Addressing)、操作状态(WS-Resource Framework)、传递通知(WS-Notification)等等。使用 XML 描述服务接口和编码消息有助于集成来自独立定义且松散连接的服务的应用程序和分布式系统。
用于构建 Web 服务的技术现在已经相当成熟,许多公司提供良好的商业 Web 服务堆栈,而 Apache 提供可靠的开源堆栈。但是,重要的是要认识到这些系统做了什么以及没有做什么。它们确实提供了用于开发 Web 服务的工具,通常使用 Java 或 C#,以及用于托管这些服务的容器。在很大程度上,它们没有解决如何为有效使用 IT 资源提供一组通用的抽象和接口的问题——这是实现水平集成的关键要求。正如我们稍后讨论的那样,这些抽象和接口的开发正在进行中,但尚未完全完成。
术语“面向服务的基础设施”描述了将 SOA 方法应用于资源管理问题。将资源作为服务公开是向前迈出的重要一步,因为它使我们能够更统一地处理各种组件。然而,正如我们在后面的网格基础设施部分中讨论的那样,水平集成的更大目标不仅仅需要采用 Web 服务技术,如果未经协调地应用 Web 服务技术,就会导致资源接口出现部分重叠、特定于供应商的 Web 服务接口的非结构化混合。我们还需要跨各种组件的抽象和接口的通用性,以便例如,工作负载管理器可以以通用的方式从不同供应商处分配、保留和管理计算、存储和网络资源。
现在我们转向面向服务的和水平集成的系统的架构和构建方式,以及可用于构建它们的技术的实质内容。
我们围绕图 3 构建此讨论,图 3 扩展了图 1,以显示水平集成、面向服务的企业 IT 架构中涉及的主要层。简而言之,应用程序使用工作负载管理器来协调它们对物理资源的访问。应用程序及其工作负载管理器不像在垂直集成的孤岛中那样,紧密绑定到单个物理资源(或一组物理资源)。相反,它们通过通用网格基础设施层动态地绑定到资源(即,已配置)。资源本身可以实现各种虚拟化方法,以增强它们为用户提供服务的灵活性。
企业应用程序跨越广泛的范围:它们可以是粗粒度或细粒度、批处理或交互式、计算密集型或数据密集型、事务性或非事务性。它们可以通过多种方式实现:实际上,应用程序开发和开发工具(无论是否面向服务)已成为一个庞大的产业。本文的主要关注点不是如何开发应用程序,而是如何将应用程序的执行需求映射到物理资源。在大型机时代,操作系统处理此任务。在当今松散耦合的集群和分布式系统中,操作系统不再提供必要的支持。因此,应用程序映射功能必须直接嵌入到应用程序中,或者——一种更模块化的方法——由单独的工作负载管理器提供,如下节所述。
术语“网格应用程序”通常用于指代已调整为使用分布式基础设施的应用程序。此类应用程序通常已被并行化,并编写为适应物理资源的动态添加和删除。帮助程序员编写此类应用程序的应用程序编程环境包括 Data Synapse 和 United Devices 的供应商产品;消息传递接口库;工作流系统;以及诸如 Condor 和 Nimrod 之类的开源系统。
工作负载管理器已成为企业 IT 中重要的产品类别。有许多这样的系统,每个系统都专门针对不同的执行任务粒度、事务特征和性能要求。例如,来自 Altair、Platform、Sun 和 United Devices 等公司的批处理调度程序——以及诸如 Condor 之类的开源系统——在数字渲染、工程分析和药物设计等领域运行相对粗粒度的任务。其他应用程序(例如金融服务中的交易应用程序)需要支持由许多细粒度事务任务组成的工作负载,并且可以使用来自 Data Synapse、Gigaspaces、Platform 或其他公司的工作负载管理器。还有其他应用程序需要支持工作流、数据流和/或业务流程编排:例如,通过 BPEL(业务流程执行语言)。Oracle 的 10G 数据库利用集群计算机进行数据库应用程序。
术语“网格”通常应用于针对共享和/或分布式资源的工作负载管理器。实际上,大多数现有的网格产品都关注于促进并行或分布式应用程序的编写,以及管理这些分解的应用程序在分布式资源上的执行。然而,正如我们在下一节中讨论的那样,能够支持共享资源上的一系列应用程序的真正网格需要更多的东西。
网格基础设施
希望在共享资源上支持一系列应用程序的企业面临的问题是,不同的应用程序及其相关的工作负载管理器在基础设施级别上没有集成。相反,每个都依赖于专有的基础设施管理功能。因此,具有各种应用程序需求的企业最终得到了一系列孤岛,每个孤岛都由不同的应用程序、工作负载管理器和资源集组成——图 1 中描述的情况。
解决此问题的方法是引入一个通用的水平层,该层定义并实现一组一致的抽象和接口,用于访问和管理共享资源。我们将此水平资源集成层称为网格基础设施。这正是实现跨各种物理资源的水平集成的原因,我们需要水平集成来解耦应用程序和硬件。此网格基础设施层是 Globus 软件的重点,5 稍后讨论。
网格基础设施必须提供一组技术能力,如下所示
此外,网格基础设施的结构必须使其提供对这些功能的访问的接口以不同类别的组件的等效抽象来表述。例如,客户端在访问存储系统、网络和计算资源时,应该能够使用相同的授权和服务质量协商操作。如果没有这种统一性,工作负载管理器和其他管理系统将很难有效地和自动地组合资源集合以供应用程序使用。
这些考虑因素使有效网格基础设施的定义成为一项具有挑战性的任务。但是,实现此目标所需的许多标准和软件系统已经到位。
网格基础设施定义的资源映射和管理功能提供了底层物理资源的方便而强大的抽象。但是,如果资源不提供适当的隔离和控制功能,则以有效、高效和统一的方式实现这些抽象可能很困难。实际上,商品资源中缺少此类功能一直是成功实现 IT 即服务的重大障碍。
虚拟化技术的更广泛可用性代表了这方面的重要一步。此类技术在资源上实现一个层,该层既提供对物理资源抽象的灵活控制(例如,在性能方面),同时,在同一物理资源上支持多个虚拟实例,并具有良好的隔离性。虽然此类虚拟化技术在大型机和其他高端服务器平台上已经存在很长时间,但它们现在才在企业越来越多地采用的商品硬件和操作系统上得到广泛应用。
诸如开源 Xen 和专有的 VMware、Microsoft Virtual Server 和 Virtual Iron 提供的执行虚拟化技术使网格基础设施能够请求创建具有指定操作系统映像、资源分配和隔离属性的虚拟化执行环境。6 基于虚拟机的系统(例如 J2EE 和 .NET)可以发挥类似的作用,尽管由于它们交付了全新的资源抽象,因此它们只能应用于为该抽象编写的应用程序。通信虚拟化技术(例如,VLAN、VPN)和存储虚拟化功能(逻辑卷管理器等)分别为通信和存储提供类似的功能。
为了在水平集成基础设施中真正有用,虚拟化技术必须在其隔离、适当级别的控制功能方面提供接口,并采用通用抽象。并非所有虚拟化解决方案都能满足当今的这些要求。例如,存储可以说是虚拟化标准方面取得最大进展的领域,尤其是在堆栈的较低层。但是,许多存储供应商仍然提供专有的、垂直集成的存储管理堆栈,因此存储周围仍然存在大量孤岛——无论是在不同供应商的存储孤岛方面,还是在存储管理接口与其他资源类型的管理接口不同的方面。
此外,资源分配控制功能必须通过网格基础设施层公开,以允许工作负载管理器管理跨资源集合的端到端服务质量。虚拟化管理器做出关于资源分配更改的本地化决策是不够的,许多当前的虚拟化产品就是这样做的。
有效的网格基础设施必须以统一的方式跨各种资源类型实现管理功能——而且,如果我们想避免供应商锁定,它应该以不涉及承诺任何专有技术的方式来实现。
与互联网和 Web 一样,标准和开源软件在实现这些目标方面都发挥着重要作用。标准实现了不同供应商产品之间的互操作性,而开源软件允许企业在所有标准都可用之前立即开始部署。在互联网和 Web 的情况下,标准已在 IETF 和 W3C 等机构内在多年内制定出来;与这些活动同时,诸如 BSD Unix 和 Apache Web 服务器之类的开源系统分别促进了互联网和 Web 的采用,围绕通用标准激发了创新爆炸,带来了惊人的成果。
我们看到,在网格的情况下,标准和开源软件之间也存在类似的协同关系。资源建模、监控、通知、分配、配置和核算功能的接口标准化正在诸如全球网格论坛(开放网格服务架构)、OASIS(WS-Resource Framework、WS-Notification 和 WS Distributed Management)和 DMTF(通用信息模型)等机构内进行。与这些努力同时,开源软件不仅在实现最终标准,而且还在实现构建可用系统所需的其他接口。此软件的可用性允许企业和 ISV 现在开发网格解决方案——并通过减少采用标准的障碍来加速标准的定义和采用。
在更基本的层面上,Web 服务核心标准和软件相当可靠,WSDL、SOAP 和 WS-Security 等广泛采用的规范可从众多 IT 供应商处获得,也可以从 Apache 和其他来源获得开源形式。由 WS-Interoperability 组织定义的配置文件促进了不同供应商提供的工具和服务之间的互操作性。
在更高的层面上,高质量的开源软件是可用的,并且在标准的演进和采用中发挥着重要作用。例如,我们参与开发的 Globus 工具包实现了广泛的功能,主要在网格基础设施级别,涉及安全性、执行管理、数据管理以及监控和发现,以及前面提到的核心 Web 服务机制。它最初是在研究和教育环境中开发和应用的,但是 Univa Corporation 作为商业支持和服务的来源的建立正在加速企业的采用。
我们认为,SOA、网格、按需、公用计算、软件即服务和其他相关术语都代表了对同一总体目标的不同视角——即,将企业 IT 重组为水平集成的、面向服务的架构。如果成功实现,该目标将使内部、第三方和外包应用程序都在统一的环境中运行,并按需配置内部和外包硬件资源——当然,还包括高度的安全性、监控、审计和管理。
这个基于开放标准、自治管理软件和动态配置硬件的圣杯当然尚未实现。但这并不意味着企业今天不能开始创建水平集成、面向服务的基础设施。可靠的 Web 服务产品允许创建面向服务的应用程序。成熟的商业和开源虚拟化和工作负载管理产品以及开源网格基础设施软件提供了创建位于这些应用程序背后的水平集成基础设施所需的一切。集成仍然更多是客户(或其服务供应商)的练习,而不是理想的情况,但是随着独立软件供应商开始使其产品支持网格,这种情况应该会改变。同时,随着部署经验的积累以及最终用户对可互操作解决方案的压力增加,进一步标准的进展正在加速。
我们感谢 Greg Astfalk、Stuart Feldman 和 Vas Vasiliadis 对本文草稿的评论。Ian Foster 的工作部分由美国能源部高级科学计算研究办公室数学、信息和计算科学部门子计划资助,合同号为 W-31-109-Eng-38,以及国家科学基金会。
参考文献
IAN FOSTER 是阿贡国家实验室数学和计算机科学部门的副主任,也是芝加哥大学 Arthur Holly Compton 计算机科学教授。他在两所机构都创建了分布式系统实验室,该实验室率先提出了关键的网格概念,开发了广泛部署的 Globus 软件,并领导了跨科学领域的网格应用程序的开发。他还是 Univa Corporation 的联合创始人兼首席开源战略家。Foster 毕业于新西兰坎特伯雷大学计算机科学专业,获得理学士学位,并在英国帝国理工学院获得计算机科学博士学位。
STEVEN TUECKE 是 Univa Corporation 的首席执行官。他与 Ian Foster 和 Carl Kesselman 共同创立了 Globus Alliance,在那里他负责管理 Globus 软件的架构、设计和开发,以及作为其基础的网格和 Web 服务标准。他的职业生涯始于 1990 年,担任阿贡国家实验室数学和计算机科学部门 Foster 的软件工程师,在那里他帮助创建了分布式系统实验室。Tuecke 毕业于圣奥拉夫学院,获得数学和计算机科学学士学位。
最初发表于 Queue 第 3 卷,第 6 期—
在 数字图书馆 中评论本文
Marc Brooker, Ankush Desai - AWS 的系统正确性实践
构建可靠且安全的软件需要一系列方法来推理系统正确性。除了行业标准测试方法(例如单元测试和集成测试)之外,AWS 还采用了模型检查、模糊测试、基于属性的测试、故障注入测试、确定性模拟、基于事件的模拟以及执行跟踪的运行时验证。形式化方法一直是开发过程的重要组成部分——也许最重要的是,形式规范作为测试预言,为 AWS 的许多测试实践提供了正确的答案。正确性测试和形式化方法仍然是 AWS 的主要投资领域,这些领域的投资已经看到了出色的回报,加速了这些领域的投资。
阿基里斯·贝内托普洛斯 - 数据中心计算机的中间表示
我们已经达到一个地步,分布式计算已经无处不在。内存应用程序数据大小正在超过单台机器的容量,因此需要将其分割到集群上;在线服务有高可用性要求,这只能通过将系统部署为多个冗余组件的集合来满足;高持久性要求只能通过数据复制来满足,有时跨越广阔的地理距离。
大卫·R·莫里森 - 模拟:分布式系统中未被充分利用的工具
模拟在人工智能系统的兴起中可以发挥巨大作用:我们需要一种高效、快速且经济高效的方式来训练人工智能代理在我们的基础设施中运行,模拟绝对提供了这种能力。
马特·法塔, 菲利普-约瑟夫·阿里达, 帕特里克·哈恩, 贝齐·拜尔 - 从企业到云端:谷歌的虚拟桌面
超过四分之一的谷歌员工使用内部、数据中心托管的虚拟桌面。这种本地部署的产品位于企业网络中,并允许用户开发代码、访问内部资源以及从世界任何地方远程使用 GUI 工具。在其最显著的功能中,虚拟桌面实例可以根据手头的任务调整大小,具有持久的用户存储,并且可以在公司数据中心之间移动,以跟随出差的谷歌员工。直到最近,我们的虚拟桌面托管在谷歌公司网络中商业上可用的硬件上,使用一个名为 Ganeti 的自研开源虚拟集群管理系统。如今,这项重要且对谷歌至关重要的工作负载在 GCP(谷歌计算平台)上运行。