用于主存有状态和无状态中间软件组件的多承租人高密度容器服务的制作方法

文档序号:6443492阅读:214来源:国知局
专利名称:用于主存有状态和无状态中间软件组件的多承租人高密度容器服务的制作方法
技术领域
本发明涉及用于主存有状态和无状态中间软件组件的多承租人高密度容器服务。
背景技术
分布式系统允许用户运行主存在分布的资源(如远程中央处理单元(CPU)、中央服务器或物理机或虚拟机)上的应用程序。中间软件服务为分布的资源上的应用程序提供计算、协调、信息管理、主存和其它支持。中间软件组件是在分布的资源上运行的并且为用户提供服务或实现协议或算法的软件应用程序或计算机指令。中间软件组件可提供复杂的或专用的应用程序。当需要中间软件组件提供的功能时,用户与中间软件组件交互。对中间软件组件的需求取决于用户的需要而变化。因此,如果没有用户需求,则在分布的资源上运行的中间软件组件可以是空闲的,或者在用户需求高的情况下,分布的资源可能不能服务所有的用户需要。

发明内容
提供本概述以便以简化形式介绍将在以下详细描述中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。本文描述并揭示能够为多个用户或承租人主存大量中间软件组件的容器服务。容器服务包括多个计算节点和中央容器管理器。计算节点由中央容器管理器作为群集来管理。每个计算节点具有管理该计算节点上的一个或多个容器的容器管理代理。中央容器管理器从外部设备或服务接收中间软件组件并将该组件分配给一个或多个指定计算节点上的容器。对于每个指定的计算节点,指定的计算节点上的容器管理代理激活并管理合适数量的容量以运行分配给该指定节点的中间软件组件。容器服务通过在选择的计算节点集合上主存大量的中间软件组件,提供有效的、高密度的操作。这允许计算节点的活动资源在容器管理代理的控制下以高使用水平或高负载因子操作,这通过增加效率降低了与主存中间软件组件相关联的成本。代替跨所有计算节点随机地分布中间软件组件,只激活所需的资源并且其余计算节点和资源为空闲的,直至需要支持附加的中间软件组件。中央容器管理器和每个节点的容器管理代理通过动态地调节中间软件组件在群集中的特定节点上的放置,对容器负载水平的改变作出反应。容器服务可为多个承租人同时提供计算节点资源。每个容器主存属于不同承租人的中间软件组件,并同时为每个组件集合提供对共享的计算资源集合的访问。通过将不同的中间软件组件集合彼此隔离并确保跨所有组件集合的平衡的资源分布,来实现多承租。容器服务允许无状态和有状态组件两者的有效横向扩展(scale-out)。容器提供允许分区以使有状态中间软件组件能够有效地缩放的编程模型和基础结构。容器还经由克隆提供无状态组件的横向扩展。因此,当中间软件组件需要附加资源时,为这些组件分配附加的容器。重新分布有状态组件的分区以使用该附加容量。对于无状态组件,创建附加克隆以使用该附加容量。容器服务确保中间软件组件具有高可用性。中央容器管理器跨故障域分布中间软件组件的主要和次要实例。在由于节点失效或者为了基础结构更新而关闭导致主要实例不可用的情况下,激活中间软件组件的次要实例。


图1是示出容器服务的示例性实施例的框图;图2是示出容器服务的替换实施例的框图;图3示出在示例性实施例中跨多个节点的中间软件组件模块的放置;以及图4是示出用于管理来自多个承租人的中间软件组件的示例性过程的流程图。
具体实施例通常,分布的资源已经专用于特定用户。分配给特定用户的资源在未被用户要求时可以是空闲的或者未被充分利用。因此,即使在分配的资源空闲时,它对已经被分配了不同的资源集合的其它用户也是不可用的。如果用户正在使用分配的资源达到最高容量,如果附加的资源对用户不可用,则用户的工作负载受到限制。允许用户基于需要访问附加资源的容器服务向用户提供灵活性。图1是示出本文所揭示的容器服务100的示例性实施例的框图。使用多个计算节点101来提供容器服务,该多个计算节点101由中央容器管理器102作为群集一起管理。计算节点101可以是物理机或虚拟机。虚拟机是模拟硬件资源(如处理器、存储器和存储设备)和外围资源的操作的软件应用程序。中央容器管理器102由存储中间软件组件的运行时存储103支持。每个计算节点101包括容器管理代理104和一个或多个容器105。在群集中的每个计算节点101上运行一个容器管理代理104。容器管理代理104与群集中的所有其它节点上的其它容器管理代理通信。在一个实施例中,计算节点101是每个都具有类似的容量和能力的物理机或虚拟机。然而,在其它实施例中,计算节点可以是具有变化的容量和能力的不同设备。中央容器管理器102从外部设备或服务(如合成应用程序服务)接收中间软件组件。合成应用程序服务是多承租人的受管理服务,其使应用程序的部署和管理自动化并且直接执行应用程序组件。中间软件组件可属于不同的承租人。本文所用的术语“承租人”是指容器服务的用户,包括但不限于访问容器服务的应用程序、客户机、订户、顾客或公司。中央容器管理器102将来自承租人的新的中间软件组件上传到运行时存储103并通知新接收的组件的各自的容器管理代理104。中央容器管理器102指定一个或多个容器105来运行中间软件组件。容器跨群集中的一个或多个计算节点101分布。一旦接收到来自中央容器管理器102的组件将放置在特定计算节点101上的通知,与该节点相关联的容器管理代理104激活容器105。容器管理代理104和计算节点101在该新激活的容器105中主存新的中间软件组件。为了提供安全的环境,容器管理代理104和计算节点101通过使每个中间软件组件在其自己的容器中运行,将中间软件组件彼此隔离。相同节点上的容器共享对该节点可用的资源。中央容器管理器102和容器管理代理104测量每个容器的资源使用。中央容器管理器102和容器代理104通过跨计算节点101动态地调节负载,来平衡共享资源的分配。在计算节点101之间分布的容器105的使用为中间软件组件提供高可用性,并为需要分区或克隆的组件实现横向扩展,如下所述。中央容器管理器102可以是在物理机(如CPU或服务器)或虚拟机上运行的软件应用程序或程序代码。计算节点101可以实现为物理机或虚拟机。计算节点101可以主存在相同的物理机上或主存在驻留在相同或不同位置中的多个分离的物理机上。容器105在计算节点101上彼此隔离地操作,以避免在分离的容器中运行的中间软件组件或模块实例之间的干扰,并确保每个容器公平地共享对计算节点101上的资源的访问。运行时存储103可包括任何计算机存储介质,其使用任何现在已知或以后开发的技术、系统或方法来存储信息,如中间软件组件、计算机可读指令、数据结构、程序模块或其它数据。运行时存储103可在可用于存储信息并可由中央容器管理器102或计算节点101访问的任何介质中实现。计算机存储介质可包括例如任何易失性或非易失性介质,如RAM、ROM、电可擦除可编程只读存储器(EEPROM)、闪存、CD-R0M、DVD、磁带盒、磁带、磁盘存储或其它光学或磁性存储设备。负载平衡在一个实施例中,计算节点101可包括CPU、存储器盘输入/输出(I/O)和网络I/O资源。容器管理代理104限制每个容器105对这些资源的访问,使得多个容器105可在给定计算节点101上运行,而不会不利地影响在该节点上活动的其它容器105。容器管理代理104实施对例如CPU和存储器使用的限制,以确保每个容器公平地共享计算节点的资源。容器管理代理104还可以限制每个容器105,使得容器只访问计算节点101上的特定的盘和网络资源。中央容器管理器102周期性地跨群集测量每个中间软件组件生成的负载。中央容器管理器102通过将组件从具有较高负载的计算节点101移动到具有较低负载的节点,来平衡每个计算节点101上总负载。周期性负载平衡的使用提供了最佳的容量利用并实现将中间软件组件主存在群集中的较小的节点集合上。装入沙箱容器管理代理104将容器105 “装入沙箱”,以使每个容器接收到其对计算节点资源的公平份额,而没有更多。这确保容器105不会不利地影响彼此,即使它们正在相同的计算节点101上运行并共享相同的资源。结果,一个容器105不会被计算节点101上的其它容器105减速或拒绝服务。装入沙箱将中间软件组件彼此隔离,从而没有组件会影响其它组件的操作。此外,装入沙箱防止任何容器105修改另一容器在共享资源上的文件或数据。装入沙箱由容器管理代理104在计算节点上提供,容器管理代理104向每个容器105分配受限制的特权集合。从分配给每个容器的特权集合中移除任何不必要的特权。在一个实施例中,容器管理代理104使用访问控制列表控制对本地盘资源的访问。容器管理代理104使用内核模式过滤器控制网络访问,内核模式过滤器监视用于特定过程的特定端口上的传入和传出业务并且只允许去向/来自特定网络资源列表的业务。这种紧密的装入沙箱使来自多个承租人的组件能够被主存在共享的节点集合上。
节点状态计算节点101被指定为有状态或无状态。计算节点与具有相同状态类型的其它节点分组在一起。状态类型影响分配给特定计算节点的中间软件组件的选择。有状态的节点被用于具有存储在存储器中的和/或与外部资源(如数据库)协调的状态的中间软件组件。该状态用于跟踪与分配给节点的中间软件组件相关的连接、交互或当前值。无状态节点被用于不保留信息或不依赖于存储值的中间软件组件。容器横向扩展容器提供两种用于使中间软件组件横向扩展的方法:克隆和分区。无状态中间软件组件使用克隆来缩放。当中间软件组件选择克隆时,它还指定它所需的克隆的计数。容器然后在η个节点上激活中间软件组件,其中η是组件所需的克隆实例的数量。有状态中间软件组件使用分区来缩放。有状态中间软件组件不能被简单地复制或克隆,因为有状态组件必须引用存储在存储器中的一个或多个“状态”。对于有状态中间软件组件,术语“分区”是指中间软件组件的附加实例,其中每个实例依赖于存储在存储器中的状态。容器基于横向扩展计数跨节点集合放置分区,横向扩展计数指定组件的分区应当分布的节点的数量。一旦完成分区放置,将中间软件组件加载到特定节点上的容器中。中间软件组件可选择在容器服务上可用的预定分区策略,或者组件可规定自定义分区计划。经由可选择的/可扩展的分区策略以及容器上的知晓分区的路由基础结构,基于分区的横向扩展对中间软件组件是可用的。每个中间软件组件具有用于监听传入消息的一个或多个端口或端点。在中间软件组件被激活时,为每个这样的端口或端点分配一个物理地址。每个端口或端点还具有被承租人用来向中间软件组件发送消息的逻辑地址。每个分区的逻辑地址到物理地址的映射存储在地址解析服务中。当承租人需要向中间软件组件端口或端点发送消息时,将分区密钥生成功能应用于消息以获得分区密钥的值。该分区密钥值然后与分区策略一起使用以找到应当向其发送消息的特定分区。通过咨询地址解析服务获得特定分区的物理地址。容器与底层的计算节点群集技术结合,以确保每个分区在任何给定情况下只独占地分配给一个节点。例如,容器管理代理进行通信以验证每个有状态中间软件组件分区被分配给单个特定节点。图2是示出容器服务的替换实施例的框图。容器服务200包括两个计算节点群集201和202。群集201包括无状态计算节点203a-n,而群集202括有状态计算节点204a_n。每个无状态和有状态计算节点203、204包括容器管理代理205和一个或多个容器206。在一个实施例中,容器管理代理205是工作者进程管理器,容器206是工作者进程。容器管理器207从外部服务(如合成应用程序服务)接收中间软件组件。基于接收到的中间软件组件,容器管理器207确定需要多少模块的实例,并且将模块实例映射到特定机器或计算节点203、204。容器管理器207包括生存期管理器208、放置管理器209和监视聚集器210。生存期管理器208将中间软件组件存储到运行时存储211并且开始/停止计算节点203、204上的模块实例。中间软件组件指定每个模块的缩放特征,如所需数量的模块实例。放置管理器确定需要多少模块实例,并将这些模块实例分配给特定计算节点203、204。被分配的计算节点上的容器管理代理205激活指定数量的容器,并访问运行时存储211上的中间软件组件以在容器上加载模块实例。监视聚集器210监视模块跨计算节点203,204的资源使用,并且按需聚集或重新分布模块实例以增加容器服务200的效率。
容器管理代理205向每个模块分配有限的权限集合,以确保中间软件组件被适当地装入沙箱且不会干扰在计算节点203、204上运行的其它模块。容器206包括运行时主机212和应用程序引擎213。运行时主机212跟踪容器的存储器分配并管理在容器上运行的模块实例的存储器使用。模块实例在应用程序引擎213上运行。在每个容器上建立多个应用程序引擎213以支持多个模块实例。容器服务200还包括地址解析服务214。承租人将消息定址到模块实例的逻辑地址。地址解析服务214将逻辑地址转换成运行目标模块实例的容器206和应用程序引擎213的物理地址。在聚集模块实例时或者在添加附加模块实例时,地址解析服务214更新模块的物理位置,这允许承租人继续使用相同的逻辑地址,而不用关心模块的实际物理位置。地址解析服务214还跟踪运行时存储211中存储的中间软件组件的位置。可用性和可靠性在计算节点失效或预定关闭的情况下,容器服务为中间软件组件提供高级别的可用性和可靠性。对于克隆的中间软件组件,当原始分配的节点关闭时,中央容器管理器在不同的节点上创建中间软件组件的附加实例。对于具有需要防止失效的存储器中状态的有状态中间软件组件,容器与底层群集技术结合以提供状态的复制。有状态中间软件组件的主要分区在正常操作期间负责处理工作负载。用作中间软件组件的备份副本的次要副本被创建并跨故障域放置。中间软件组件的主要分区上状态中的任何改变被复制到次要分区。故障域对应于将受停电或其它失效影响的容器服务中的基本单元。例如,基本故障域单元可以是交换机、机架或数据中心。使得中间软件组件的主要副本失效的任何故障将导致次要副本被升级成主要副本,因此实现分区组件的故障转移,而没有任何数据丢失。图3示出在示例性实施例中跨多个节点的中间软件组件模块的放置。中央容器管理器301接收与不同承租人应用程序相关联的中间软件组件。每个中间软件组件包括缩放和/或分区信息,中央容器管理器301使用该信息确定需要在容器上放置多少模块预计应当使用多少节点。例如,中间软件组件可定义具有四个分区(P1-P4)且缩放单位为三的应用程序(Al)模块(M1),它需要中央容器管理器301建立跨三个计算节点分布的四个分区。容器管理器301指导节点305-307上的容器管理代理302-304在容器308-310上建立特定模块实例。容器管理代理302打开第一节点305上的容器308并将模块Ml的分区Pl和P2加载在容器308上。容器管理代理303打开第二节点306上的容器309并将模块Ml的分区P3和P4加载在容器309上。容器308和309上的分区P1-P4是模块在其上运行的主要分区。容器管理代理304打开第三节点307上的容器310并将分区S1-S4加载在容器310上。分区S1-S4是从分区P1-P4接收更新数据但是不提供外部服务的次要或复制分区。分区S1-S4通常是被动的,但是如果一个或多个主要分区P1-P4失效,它们将变成活动的。图3进一步示出用于应用程序(Al)的第二模块(M2),它已经被加载并且正在节点305-307上运行。在所示的示例中,中央容器管理器301已接收到定义应用程序(Al)的第二模块(M2)的中间软件组件,第二模块(M2)具有八个分区(P1-P8)且缩放单位为二。这允许中央容器管理器301建立跨两个节点分布的八个分区。在一个实施例中,容器管理代理302根据来自中央容器管理器301的指令打开第一节点305上的容器311并加载主要分区P1-P5和次要分区S6-S8以在容器311上运行。中央容器管理器301还指导容器管理代理304打开第三节点307上的容器312并加载主要分区P6-P8和次要分区S1-S5以在容器312上运行。在图3所示的示例性实施例中,节点305和306位于第一故障域,而节点307位于第二故障域。例如,节点305和306可在主存在第一机架上的物理机或虚拟机上实现,而节点307可在主存在第二机架上的物理机或虚拟机上实现。机架可位于相同或不同的数据中心中。每个机架或数据中心可被视为是不同的故障域。如果一个机架失效或离线,则主存在该机架上的任何计算节点将不可用。在这种情况下,其它机架上的一个或多个计算节点在需要时可接管作为主要模块实例。例如,如果第一机架失效,则在该故障域上的节点305和306将不可用。结果,在节点305和306上运行的主要模块实例分区也将失效。位于不同故障域上的节点307上的次要分区然后接管节点305和306上的失效的主要分区。在图3中,模块实例Ml的次要分区S1-S4主存在容器310上,模块实例M2的次要分区S1-S5主存在容器312上。这些次要分区在主要分区失效时被激活,且然后接管作为主要模块实例。这允许容器服务继续运行中间软件组件,而对外部承租人没有任何明显的中断。图4是示出用于管理来自多个承租人的中间软件组件的示例性过程的流程图。在步骤401,容器管理服务从一个或多个承租人接收中间软件组件,并在步骤402将中间软件组件上传到运行时存储。在步骤403,中央容器管理器将中间软件组件映射到计算节点。在步骤404,中央容器管理器向驻留在计算节点上的容器管理代理通知:容器服务接收到中间软件组件。在步骤405,中央容器管理器在一个或多个计算节点上放置中间软件组件。在步骤406中,容器管理代理激活其各自计算节点上的一个或多个容器,用于主存中间软件组件。在步骤407,容器管理代理将受限制的特权集合分配给每个容器。受限制的特权控制容器对共享计算节点资源的使用以确保每个容器以沙箱方式操作,其中容器只使用其公共资源的公平共享,而不干扰计算节点上其它容器的操作。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。
权利要求
1.一种主存多个承租人的中间软件组件的方法,所述方法包括: 将中间软件组件映射(403)到多个计算节点(101),每个计算节点(101)包括容器管理代理(104)和一个或多个容器(105); 将各个中间软件组件放置(405)到映射的计算节点(101)上; 由所述容器管理代理(104)将所述各个中间软件组件放置到每个映射的计算节点(101)上的一个或多个容器(206)中,所述容器(105)主存一个或多个中间软件组件的操作。
2.按权利要求1所述的方法,其特征在于,还包括: 向每个中间软件组件分配特权集合,其中所述特权控制所述中间软件组件对所述计算节点上的共享资源的访问。
3.按权利要求1所述的方法,其特征在于,还包括: 基于计算节点是运行有状态中间软件组件还是运行无状态中间软件组件,将所述多个计算节点组织成一个或多个群集。
4.按权利要求1所述的方法,其特征在于,还包括: 确定无状态中间软件组件的缩放因子;以及 在对应于所述缩放因子的多个计算节点上克隆所述中间软件组件。
5.按权利要求1所述的方法,其特征在于,还包括: 确定有状态中间软件组件的缩放因子;以及 跨对应于所述缩放因子的多个计算节点放置分区,其中所述分区对应于主存所述中间软件组件的实例的容器。
6.按权利要求1所述的方法,其特征在于,还包括: 在中央容器管理器处接收所述多个中间软件组件;以及 由所述中央容器管理器将所述多个中间软件组件上传到运行时存储。
7.一种用于主存中间软件组件的系统,包括: 中央容器管理器(102),适用于从多个承租人接收中间软件组件; 耦合至所述中央容器管理器(102)的多个计算节点(101); 所述多个计算节点(101)中的每一个上的一个或多个容器(105),所述容器(105)适用于主存所述中间软件组件;以及 所述多个计算节点(101)中的每一个上的容器管理代理(104),所述容器管理代理(104)适用于控制所述一个或多个容器(105)。
8.按权利要求7所述的系统,其特征在于,所述中央容器管理器还包括: 监视聚集器,适用于监视跨所述多个计算节点的资源使用并聚集所述中间软件组件的实例。
9.按权利要求7所述的系统,其特征在于,所述中央容器管理器还包括: 放置管理器,适用于标识接收到的中间软件组件所需的多个模块实例,并将所述模块实例分配给所述计算节点中的各特定计算节点。
10.按权利要求7所述的系统,其特征在于,还包括: 地址解析服务,能够将所述中间软件组件的逻辑地址映射到主存所述中间软件组件的计算节点的物理地址。
全文摘要
本发明涉及用于主存有状态和无状态中间软件组件的多承租人高密度容器服务。容器服务能够主存多个承租人的大量中间软件组件。中央容器管理器控制多个计算节点。中央容器管理器从外部设备或服务接收中间软件组件并将该组件分配给一个或多个指定计算节点上的容器。每个计算节点具有容器管理代理和一个或多个容器。容器管理代理激活并管理适当数量的容器以运行分配的中间软件组件。容器管理代理向其计算节点上的每个容器分配有限的特权集合以控制对共享资源的访问。中央容器管理器和每个节点的容器管理代理监视容器负载水平并动态地调节中间软件组件的放置以维持平衡的操作。基于每个计算节点上主存的中间软件组件的类型,将计算节点分组成群集。
文档编号G06F9/50GK103092697SQ20111044432
公开日2013年5月8日 申请日期2011年12月16日 优先权日2010年12月17日
发明者A·库尔卡尼, G·M·文卡塔拉曼拉帕, Y·克里斯坦森, C·普拉萨德, D·舒克拉, S·莫汉蒂, V·尚巴格, A·乌尔布里希, M·基肖尔, A·班达卡 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1