Release lifecycle management system for multi-node application
Summary by NHIP
Multi-node release switching method
The method switches a cloud web application to an updated release using a manifest specifying component roles and test instance counts. It determines current jobs, obtains updated manifests with version numbers and package specifications, and distributes changes to deployment agents on VMs.
Claim Score by NHIP
Abstract
A deployment system provides the ability to deploy a multi-node distributed application, such as a cloud computing platform application that has a plurality of interconnected nodes performing specialized jobs. The deployment system may update a currently running cloud computing platform application according to a deployment manifest and a versioned release bundle that includes jobs and application packages. The deployment system determines changes to the currently running cloud computing platform application and distributes changes to each job to deployment agents executing on VMs. The deployment agents apply the updated jobs to their respective VMs (e.g., launching applications), thereby deploying an updated version of cloud computing platform application.

Term
5.7 yearsleft in the term
Expires 19 May 2032, including 57 days of term adjustment.
- Priority
- Filed
- Granted
- Today
- Expires
15 claims: 3 independent, 12 dependent
- 1Broadest claimClaim Score 20, narrow(NHIP)A computer-implemented method for switching to an updated release of a web application platform in a cloud computing environment, the method comprising:receiving a request to update a current deployment of the web application platform in the cloud computing environment using an updated release of the web application platform, wherein contents of the updated release are specified by an updated release manifest of the web application platform, wherein the request includes an updated deployment manifest for the web application platform, wherein the updated deployment manifest for the web application platform includes data representing a plurality of components of the deployed web application platform in the cloud computing environment, wherein the updated deployment manifest specifies a respective role for each component of the plurality of components of the web application platform, and wherein the updated deployment manifest specifies one or more update settings comprising a respective number of test instances for each job of a plurality of jobs of the web application platform;determining first jobs specified by a current release manifest for the current deployment of the web application platform;obtaining the updated release manifest of the web application platform, wherein the updated release manifest includes: respective version numbers for each job of the plurality of jobs, each job corresponding to a respective role to be performed by a respective component of the plurality of components of the web application platform, and package specifications for one or more respective packages required for each job of the plurality of jobs;comparing the first jobs specified by the current release manifest of the web application platform to second jobs specified by the updated release manifest of the web application platform to identify one or more existing jobs of the web application platform that are updated by the updated release of the web application platform;providing a respective update request to each virtual machine in the cloud computing environment executing an existing job that is updated by the updated release, wherein the update request specifies replacing the exiting job with an updated job of the updated release of the web application platform;deploying a particular number of test instances specified by the update settings for the job that is updated by the updated release of the web application platform;determining that a threshold number of test instances succeeded;and in response to determining that the threshold number of test instances succeeded, replacing the existing job with the updated job of the updated release of the web application platform.
- 6A system comprising:one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations comprising: receiving a request to update a current deployment of a web application platform deployed in a cloud computing environment using an updated release of the web application platform, wherein contents of the updated release are specified by an updated release manifest of the web application platform, wherein the request includes an updated deployment manifest for the web application platform, wherein the updated deployment manifest for the web application platform includes data representing a plurality of components of the deployed web application platform in the cloud computing environment, wherein the updated deployment manifest specifies a respective role for each component of the plurality of components of the web application platform, and wherein the updated deployment manifest specifies one or more update settings comprising a respective number of test instances for each job of a plurality of jobs of the web application platform;determining first jobs specified by the current release manifest for the current deployment of the web application platform;obtaining the updated release manifest of the web application platform, wherein the updated release manifest includes: respective version numbers for each job of the plurality of jobs, each job corresponding to a respective role to be performed by a respective component of the plurality of components of the web application platform, and package specifications for one or more respective packages required for each job of the plurality of jobs;comparing the first jobs specified by the current release manifest of the web application platform to second jobs specified by the updated release manifest of the web application platform to identify one or more existing jobs of the web application platform that are updated by the updated release of the web application platform;providing a respective update request to each virtual machine in the cloud computing environment executing an existing job that is updated by the updated release, wherein the update request specifies replacing the existing job with an updated job of the updated release of the web application platform;deploying a particular number of test instances specified by the update settings for the job that is updated by the updated release of the web application platform;determining that a threshold number of test instances succeeded;and in response to determining that the threshold number of test instances succeeded, replacing the existing job with the updated job of the updated release of the web application platform.
- 11A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations comprising:receiving a request to update a current deployment of a web application platform deployed in a cloud computing environment using an updated release of the web application platform, wherein contents of the updated release are specified by an updated release manifest of the web application platform, wherein the request includes an updated deployment manifest for the web application platform, wherein the updated deployment manifest for the web application platform includes data representing a plurality of components of the deployed web application platform in the cloud computing environment, wherein the updated deployment manifest specifies a respective role for each component of the plurality of components of the web application platform, and wherein the updated deployment manifest specifies one or more update settings comprising a respective number of test instances for each job of a plurality of jobs of the web application platform;determining first jobs specified by the current release manifest for the current deployment of the web application platform;obtaining the updated release manifest of the web application platform, wherein the updated release manifest includes: respective version numbers for each job of the plurality of jobs, each job corresponding to a respective role to be performed by a respective component of the plurality of components of the web application platform, and package specifications for one or more respective packages required for each job of the plurality of jobs;comparing the first jobs specified by the current release manifest of the web application platform to second jobs specified by the updated release manifest of the web application platform to identify one or more existing jobs of the web application platform that are updated by the updated release of the web application platform;providing a respective update request to each virtual machine in the cloud computing environment executing an existing job that is updated by the updated release, wherein the update request specifies replacing the exiting job with an updated job of the updated release of the web application platform;deploying a particular number of test instances specified by the update settings for the job that is updated by the updated release of the web application platform;determining that a threshold number of test instances succeeded;and in response to determining that the threshold number of test instances succeeded, replacing the existing job with the updated job of the updated release of the web application platform.
Independent claims3
100 paragraphs in 5 sections, as filed
CROSS-REFERENCE TO RELATED APPLICATIONS
0001The present application claims the benefit and priority of U.S. provisional patent application ser. No. 61/474,669, filed on Apr. 12, 2011, and entitled “DEPLOYMENT FRAMEWORK FOR CLOUD PLATFORM ARCHITECTURE,” which is hereby incorporated by reference. The present application is related to U.S. patent application Ser. No. 13/428,109, now U.S. Pat. No. 9,015,710, filed on Mar. 23, 2012, and entitled “Deployment System for Multi-Node Applications,” and U.S. patent application Ser. No. 13/428,121, now U.S. Pat. No. 9,043,767, filed on Mar. 23, 2012, and entitled “Release Management System for a Multi-Node Application,” which are assigned to the assignee of this application.
BACKGROUND
0002“Platform-as-a-Service” (also commonly referred to as “PaaS”) generally describes a suite of technologies provided by a service provider as an integrated solution that enables a web developer (or any other application developer) to build, deploy and manage the life cycle of a web application (or any other type of networked application). One primary component of PaaS is a “cloud-computing platform” which is a network (e.g., Internet, etc.) infrastructure run and maintained by the service provider upon which developed web applications may be deployed. By providing the hardware resources and software layers required to robustly run a web application, the cloud computing platform enables developers to focus on the development of the web application, itself, and leave the logistics of scalability and other computing and storage resource requirements (e.g., data storage, database access, processing power, facilities, power and bandwidth, etc.) to the cloud computing platform (e.g., at a cost charged by the service provider). A service provider may additionally provide a plug-in component to a traditional IDE (i.e., integrated development environment) that assists a developer who creates web applications using the IDE to properly structure, develop and test such applications in a manner that is compatible with the service provider's cloud computing platform. Once the developer completes a web application using the IDE, the plug-in component assists the developer in deploying the web application into the cloud computing platform.
0003However, due to complexities in providing flexible and scalable cloud computing platforms, PaaS is offered by few service providers. Current implementations of cloud computing platforms use multiple components (e.g., cloud controller, health manager, service provisioner, router, and application execution agents) that perform different roles and coordinate amongst each other to provide cloud computing services. To deploy such a cloud computing platform, a system administrator must build, configure, deploy, and maintain each of the components (e.g., cloud controller, health manager, service provisioner, router, and application execution agents). While deployment may be performed manually when installing all components on a single system (e.g., laptop, server), the deployment process becomes challenging when the components are installed across a plurality of networked systems because, in such installations, each system must be provisioned with specific computing resources, set up with a particular networking configuration, and have a different software application installed with dependent libraries and/or runtimes to perform the system's assigned role within the cloud computing platform. Additionally, updating any of the components (e.g., security patch for a library or operating system) requires a system administrator to have to modify operations for other components in the cloud computing platform. For example, when one of the components needs to be updated, a system administrator may have to suspend operations of other components currently connected to the component, or, in another example, update settings of other components to correctly connect to the updated component. Accordingly, the deployment process for a multi-node application such as a cloud computing platform may be too complex and time-consuming for a system administrator to manage.
SUMMARY
0004One or more embodiments of the present invention provide a deployment system for a multi-node distributed application (e.g., a cloud computing platform) having any number of nodes that perform specialized roles, as well as any dependent software and/or networking, storage, and service configurations utilized for each specialized role. Instances of the deployment system may be implemented on top of a hardware infrastructure that allows for dynamic provisioning of computing resources, such as a virtualized infrastructure. The deployment system includes an automation framework that utilizes codified deployment manifests to automatically provision infrastructure (e.g., virtual machines), as well as install and configure application packages needed for each specialized role. The codified deployment manifests simplify the deployment process for a complex multi-node application having varying requirements and enables repeatable and predictable deployments.
0005A method for updating an application having a plurality of functional components that are executed on a plurality of different virtual machines (VMs) includes, according to an embodiment, receiving, by a deployment module, a specification for the application to be updated. The specification identifies a set of software components representing an updated version of the application and containing code which implements each of the functional components of the application. The method includes identifying at least one functional component that is to be updated by comparing the set of software components for the updated version of the application and a set of software components that have been deployed for a currently-deployed application. The method further includes directing an agent in each of the VMs that is executing as an instance of the identified functional component to install one or more software components in the VM, thereby causing the VM to execute as an updated instance of the functional component of the application.
0006A non-transitory computer-readable storage medium comprising instructions that, when executed in a computing device, update an application having a plurality of functional components that are executed on a plurality of different virtual machines (VMs). The instructions, according to an embodiment, perform the steps of receiving, by a deployment module, a specification for the application to be updated, wherein the specification identifies a set of software components representing an updated version of the application and containing code which implements each of the functional components of the application. The instructions further perform the steps of identifying at least one functional component that is to be updated by comparing the set of software components for the updated version of the application and a set of software components that have been deployed for a currently-deployed application, and directing an agent in each of the VMs that is executing as an instance of the identified functional component to install one or more software components in the VM, thereby causing the VM to execute as an updated instance of the functional component of the application.
0007A computer system for updating an application having a plurality of functional components that are executed on a plurality of different virtual machines (VMs) comprises a system memory and a processor. The processor, according to an embodiment, is programmed to carry out the steps of receiving, by a deployment module, a specification for the application to be updated. The specification identifies a set of software components representing an updated version of the application and containing code which implements each of the functional components of the application. The processor is further programmed to carry out the steps of identifying at least one functional component that is to be updated by comparing the set of software components for the updated version of the application and a set of software components that have been deployed for a currently-deployed application, and directing an agent in each of the VMs that is executing as an instance of the identified functional component to install one or more software components in the VM, thereby causing the VM to execute as an updated instance of the functional component of the application.
BRIEF DESCRIPTION OF THE DRAWINGS
0008<figref idref="DRAWINGS">FIG. 1</figref> depicts a generalized schematic diagram of a multi-node distributed application.
0009<figref idref="DRAWINGS">FIG. 2</figref> depicts one example of the multi-node distributed application of <figref idref="DRAWINGS">FIG. 1</figref>, namely, a cloud computing platform application.
0010<figref idref="DRAWINGS">FIG. 3</figref> depicts one embodiment of a deployment system for a multi-node distributed application.
0011<figref idref="DRAWINGS">FIG. 4</figref> depicts one embodiment of a deployment director and agents of a deployment system.
0012<figref idref="DRAWINGS">FIG. 5</figref> depicts a flow diagram for deploying a cloud computing platform application by a deployment director.
0013<figref idref="DRAWINGS">FIG. 6</figref> depicts the deployment system of <figref idref="DRAWINGS">FIG. 4</figref> after deployment of a cloud computing platform application.
0014<figref idref="DRAWINGS">FIG. 7</figref> depicts one embodiment of a release management system for building a version of a multi-node application to be deployed by a deployment system.
0015<figref idref="DRAWINGS">FIG. 8</figref> depicts a flow diagram for generating a release of a cloud computing platform application.
0016<figref idref="DRAWINGS">FIG. 9</figref> depicts a flow diagram for deploying a cloud computing platform application by a deployment director.
0017<figref idref="DRAWINGS">FIG. 10</figref> depicts the cloud computing platform application of <figref idref="DRAWINGS">FIG. 6</figref> after a deployment of an updated cloud computing platform application.
DETAILED DESCRIPTION
0018<figref idref="DRAWINGS">FIG. 1</figref> depicts a generalized schematic diagram of a multi-node distributed application <b>100</b>. Multi-node application <b>100</b> includes a plurality of nodes <b>102</b> (e.g., front and back end jobs) in communication via a message bus <b>104</b> to provide application services to a user <b>106</b>. Each node <b>102</b> executes as an instance of a functional component and includes component software applications and/or libraries to perform one or more specialized tasks of the functional component within multi-node application <b>100</b>. As described above, set-up and deployment of multi-node application <b>100</b> may be complex. For example, as each of the plurality of nodes <b>102</b> may serve different roles within multi-node application <b>100</b>, nodes <b>102</b> may be on different networks, be connected to multiple dependent services <b>108</b>, use different component software applications, have different resource requirements, and so forth.
0019<figref idref="DRAWINGS">FIG. 2</figref> depicts a cloud computing platform application <b>200</b>, which may be one example of a multi-node application <b>100</b>, which dynamically provides cloud computing services to be utilized to host web applications <b>220</b>. One example of cloud computing platform application <b>200</b> is described further in U.S. patent application Ser. No. 12/767,010, filed Apr. 26, 2010, and entitled “Cloud Platform Architecture,” which is hereby incorporated by reference in its entirety. Cloud computing platform application <b>200</b> includes specialized functional components, such as a cloud controller <b>202</b>, a router <b>204</b>, application execution agents <b>206</b>, a health manager <b>208</b>, a service provisioner <b>210</b>, services <b>212</b>, and a message bus <b>214</b>. These functional components operate in a coordinated manner to provide cloud computing services, such as a relational database services (e.g., MySQL, etc.), CRM (customer relationship management) services, web services, application server services (e.g., JBoss, Rails, etc.), monitoring services, background task schedulers, logging services, messaging services, memory object caching service, and any other suitable software services, that may be accessed by web applications <b>220</b>.
0020In one embodiment, cloud controller <b>202</b> orchestrates a deployment process for web applications <b>220</b> submitted by a developer <b>250</b>. Cloud controller <b>202</b> interacts with other functional components of cloud computing platform application <b>200</b> to bind services required by submitted web applications <b>220</b> and package web applications for transmission to application execution agents <b>206</b> for deployment. Health manager <b>208</b> tracks and maintains the “health” of cloud computing platform application <b>200</b> by monitoring messages broadcast on message bus <b>214</b> by other functional components of cloud computing platform application <b>200</b>. Web applications <b>220</b> access a set of services <b>212</b> provided by cloud computing platform application <b>200</b>, such as a relational database service (e.g., MySQL, etc.), monitoring service, background task scheduler, logging service, messaging service, memory object caching service and the like. A service provisioner <b>210</b> serves as a communications intermediary between services <b>212</b> and other functional components of cloud computing platform application <b>200</b> (e.g., cloud controller <b>202</b>, health manager <b>208</b>, router <b>204</b>, etc.) and assists with the task of provisioning or binding such available services to web applications <b>220</b> during a web application deployment process. Message bus <b>214</b> provides a common interface through which functional components of cloud computing platform application <b>200</b>, such as service provisioner <b>210</b>, cloud controller <b>202</b>, health manager <b>208</b>, router <b>204</b> and application execution agents <b>206</b>, can communicate and receive notifications.
0021Once cloud controller <b>202</b> successfully orchestrates the deployment of web application <b>220</b> in one or more application execution agents <b>206</b>, an end user <b>106</b> can access web application <b>220</b>, for example, through a web browser or any other appropriate client application residing on a computer laptop or, generally, any computing device. Router <b>204</b> receives the web browser's access request (e.g., a uniform resource locator or URL) and routes the request to the corresponding system which hosts web application <b>220</b>.
0022As described, each component has a separate role within cloud computing platform application <b>200</b> with separate software application and library dependencies (e.g., MySQL, Redis, MongoDB, Apache) and is specially built, configured, deployed, and maintained for cloud computing platform application <b>200</b> to function as a whole. Further, since each component is typically run in one or more virtual machines (VMs), each VM is also specially provisioned, configured, deployed, and maintained by a system administrator. As such, cloud computing platform application <b>200</b>, in which web applications <b>220</b> are deployed, itself has a deployment procedure that is cumbersome and complex. Accordingly, embodiments provide a deployment technique for cloud computing platform application that uses an automation framework and tooling for simplified, automatic, and repeatable deployments.
Example Deployment System
0023<figref idref="DRAWINGS">FIG. 3</figref> depicts one embodiment of a multi-node application platform <b>300</b> having a deployment system <b>306</b> for deploying a multi-node distributed application. For example, a system administrator <b>302</b> may utilize multi-node application platform <b>300</b> to deploy cloud computing platform application <b>200</b> of <figref idref="DRAWINGS">FIG. 2</figref>, in which web applications <b>220</b> may be deployed.
0024In one embodiment, system administrator <b>302</b> instructs deployment system <b>306</b> by issuing one or more commands through an administrative client <b>304</b> communicatively connected to deployment system <b>306</b>, for example, through a command line interface (CLI) or other user interface of administrative client <b>304</b>. In addition to transmitting one or more commands issued by system administrator <b>302</b>, administrative client <b>304</b> may further transmit a bundle of application data, configuration files, and other information (collectively referred to as a “release” or “release bundle”), which are unpacked, processed, and/or distributed by deployment system <b>306</b> to deploy cloud computing platform application <b>200</b>, as described later in conjunction with <figref idref="DRAWINGS">FIG. 7</figref>. In addition to the release, administrative client <b>304</b> provides a deployment manifest, associated with the release, that describes a desired computing environment of cloud computing platform application <b>200</b> after cloud computing platform application <b>200</b> has been deployed. The deployment manifest describes attributes of the desired computing environment such as a number of resource pools (e.g., groups of VMs) to be utilized, networks to be set up, and other settings, as will be described later, and functions as a specification for deployment in this embodiment.
0025Multi-node application platform <b>300</b> includes an infrastructure platform <b>308</b> upon which cloud computing platform application <b>200</b> is deployed and executed. In the embodiment of <figref idref="DRAWINGS">FIG. 3</figref>, infrastructure platform <b>308</b> comprises hardware resources <b>310</b>, such as servers <b>312</b><sub>1 </sub>to <b>312</b><sub>N </sub>and one or more storage array networks (SAN), such as SAN <b>314</b>, which are configured in a manner to provide a virtualization environment <b>316</b> that supports execution of a plurality of virtual machines (VMs) across servers <b>312</b><sub>1 </sub>to <b>312</b><sub>N</sub>. As further detailed below, these VMs provide virtual computing resources that support the services and functions carried out by deployment system <b>306</b>, as well as, virtual computing resources for hosting functional components of the cloud computing platform application <b>200</b>. In one embodiment, infrastructure platform <b>308</b> may be implemented as cloud infrastructure services or other Infrastructure-as-a-Service (“IaaS”) that provide computer infrastructure as a service.
0026Virtualization environment <b>316</b> includes an orchestration component <b>318</b> (e.g., implemented as a process running in a virtual machine in one embodiment) that monitors the infrastructure resource consumption levels and requirements of deployment system <b>306</b> (e.g., by monitoring communications routed through addressing and discovery layer <b>334</b> as further detailed below) and provides additional infrastructure resources to deployment system <b>306</b> as needed or desired. For example, if deployment system <b>306</b> requires additional VMs to host newly deployed functional components of cloud computing platform application <b>200</b> and scale the currently running multi-node application to support peak demands, orchestration component <b>318</b> can initiate and manage the instantiation of virtual machines on servers <b>312</b><sub>1 </sub>to <b>312</b><sub>N </sub>to support such needs. In one example implementation of an embodiment similar to that of <figref idref="DRAWINGS">FIG. 3</figref>, virtualization environment <b>316</b> may be implemented by running VMware ESX™ based hypervisor technologies on servers <b>312</b><sub>1 </sub>to <b>312</b><sub>N </sub>provided by VMware, Inc. of Palo Alto, Calif. (although it should be recognized that any other virtualization technologies, including Xen® and Microsoft Hyper-V virtualization technologies may be utilized consistent with the teachings herein).
0027In the embodiment of <figref idref="DRAWINGS">FIG. 3</figref>, deployment system <b>306</b> includes a deployment director <b>320</b> (e.g., running in one or more VMs) that orchestrates the deployment process for cloud computing platform application <b>200</b> according to a deployment manifest that has been submitted to deployment system <b>306</b>. Deployment director <b>320</b> receives instructions of the deployment manifest and interacts with other components of deployment system <b>306</b> to generate a logical infrastructure <b>350</b> onto which cloud computing platform application <b>200</b> is to be deployed. In the embodiment depicted in <figref idref="DRAWINGS">FIG. 3</figref>, deployment director <b>320</b> exposes a communications interface, such as a Representative State Transfer (REST) architecture, through which deployment director <b>320</b> receives administrative commands and other deployment data (e.g., a release) from a client (e.g., administrative client <b>304</b>).
0028Deployment director <b>320</b> may provision VMs (identified as stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>) to host functional components of cloud computing platform application <b>200</b>, such as cloud controller <b>202</b>, application execution agents <b>206</b>, health manager <b>208</b>, router, <b>204</b>, service provisioner <b>210</b>, etc. In the embodiment of <figref idref="DRAWINGS">FIG. 3</figref>, deployment director <b>320</b> request infrastructure platform <b>308</b> to dynamically create and delete stem cell VMs (e.g., stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>). Stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M </sub>are VMs created based on a predefined VM template (referred to as “stem cell”) that includes a base operating system, an agent <b>322</b>, and supporting libraries, runtimes, and/or applications. Agents <b>322</b> coordinate with deployment director <b>320</b> to configure stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M </sub>to perform various roles of cloud computing platform application <b>200</b>. Agents <b>322</b> applies a particular job to a stem cell VM <b>324</b><sub>1 </sub>executing thereon such that stem cell VM <b>324</b><sub>1 </sub>performs a particular management role within cloud computing platform application <b>200</b> (e.g., the job of one of cloud controller <b>202</b>, health manager <b>208</b>, application execution agents <b>206</b>, etc.).
0029In addition to provisioning stem cell VMs, deployment director <b>320</b> may request infrastructure platform <b>308</b> to dynamically create and delete temporary VMs, referred to as workers <b>330</b>, which perform one or more processing tasks that facilitate deployment. In one embodiment, for example, workers <b>330</b> may be created to perform software compilation for component applications and/or libraries to be deployed on stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>. Workers <b>330</b> are configured with a similar configuration as stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M </sub>(e.g., have an identical virtual hardware specification, architecture, and/or configuration) to enable compiled software to execute on stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>. Results of processing tasks (e.g., software compilation) and other cached data may be stored in an object store <b>332</b> (e.g., blob store) used to hold artifacts generated during the deployment process. Further, deployment director <b>320</b> may utilize a set of services <b>328</b> (e.g., run in one or more VMs) to facilitate orchestration of the deployment process. For example, a relational database service (e.g., MySQL, etc.), monitoring service, background task scheduler, logging service, messaging service, memory object caching service and the like may comprise services <b>328</b>.
0030Addressing and discovery layer <b>334</b> provides a common interface through which components of deployment system <b>306</b>, such as deployment director <b>320</b>, health monitor <b>336</b>, services <b>328</b>, workers <b>330</b>, and one or more agents <b>322</b> executing on stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>, can communicate and receive notifications. For example, deployment director <b>320</b> may utilize addressing and discovery layer <b>334</b> to request the provisioning of VMs from infrastructure platform <b>308</b> and to provide agents <b>322</b> with deployment instructions during deployment of cloud computing platform application <b>200</b>. Similarly, stem cell VM <b>324</b><sub>1 </sub>may communicate through addressing and discovery layer <b>334</b> with other stem cell VMs <b>324</b><sub>M </sub>through addressing and discovery layer <b>334</b> during deployment of cloud computing platform application <b>200</b>. In one embodiment, addressing and discovery layer <b>334</b> is implemented as a message brokering service (e.g., running in one or more VMs) that defines a common protocol and message format through which components of deployment system <b>306</b> can exchange messages and broadcast notifications and other information. In such an embodiment, the components of deployment system <b>306</b> establish a connection with the message brokering service (e.g., also sometimes referred to as “subscribing” to the message brokering service), for example, through known authentication techniques (e.g., passwords, etc.) and, once connected to the message brokering service, can provide, receive and request messages, notifications and other similar information to and from other components that have also subscribed to the message brokering system. One example of a message brokering service that may be used in an embodiment is RabbitMQ™ which is based upon the AMPQ (Advanced Message Queuing Protocol) open protocol standard. It should be recognized, however, that alternative interfaces and communication schemes may be implemented for addressing and discovery layer <b>334</b> other than such a message brokering service.
0031Deployment system <b>306</b> further comprises a health monitor <b>336</b> (e.g., run in a VM) that tracks and maintains the “health” of deployment system <b>306</b> by monitoring messages broadcast on addressing and discovery layer <b>334</b> by other components of deployment system <b>306</b>. For example, health monitor <b>336</b> may detect a lack of communication from an agent <b>322</b> (e.g., run on a stem cell VM) and determine the failure of the stem cell VM (e.g., failure of a component of cloud computing platform application <b>200</b>). Health monitor <b>336</b> may automatically broadcast a request to deployment director <b>320</b> to restart the failed stem cell VM or provision a replacement stem cell VM to perform the same role. Health monitor <b>336</b> may be further configured to initiate restart of failed available services or other components of deployment system <b>306</b> (e.g., deployment director <b>320</b>, object store <b>332</b>, services <b>328</b>, workers <b>330</b>, and one or more agents <b>322</b> executing on stem cell VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>, etc.).
0032It should be recognized that deployment system architectures other than the embodiment of <figref idref="DRAWINGS">FIG. 3</figref> may be implemented consistent with the teachings herein. For example, while <figref idref="DRAWINGS">FIG. 3</figref> implements deployment system <b>306</b> on an infrastructure platform <b>308</b> hosted by multi-node application platform <b>300</b>, it should be recognized that deployment system <b>306</b> may be implemented by entities other than multi-node application platform <b>300</b>, on top of any type of hardware infrastructure, such as on a non-virtualized infrastructure platform, as processes or daemons directly on hardware resources <b>310</b>. It should further be recognized that embodiments may configure deployment system <b>306</b> and infrastructure platform <b>308</b> in a loosely coupled manner with communication between deployment system <b>306</b> and infrastructure platform <b>308</b> only occurring through orchestration component <b>318</b> of infrastructure platform <b>308</b> which monitors hardware resource consumption by connecting to addressing and discovery layer <b>334</b>). In such loosely coupled embodiments, it should be recognized that deployment system <b>306</b> may be implemented on any infrastructure platform, including on a laptop or personal computer (e.g., in which case, each component of deployment system <b>306</b> runs as a separate process or daemon on the laptop or personal computer).
0033<figref idref="DRAWINGS">FIG. 4</figref> depicts a more detailed view of one embodiment of deployment director <b>320</b>. Deployment director <b>320</b> manages deployment of cloud computing platform application <b>200</b> based on a deployment manifest <b>402</b> that describes a desired computing environment post-deployment of cloud computing platform application <b>200</b>. Deployment manifest <b>402</b> specifies a release, for example, by name and/or version number, of cloud computing platform application <b>200</b> to be deployed. Deployment manifest <b>402</b> provides a full specification of cloud computing platform application <b>200</b>, including specific functional components (e.g., cloud controller <b>202</b>, health manager <b>208</b>, application execution agents <b>206</b>, etc.), a logical infrastructure <b>350</b> provided by infrastructure platform <b>308</b> (e.g., stem cell VMs <b>324</b><sub>M</sub>), the functional components' mapping onto logical infrastructure <b>350</b>. For example, deployment manifest <b>402</b> may specify that ten stem cell VMs should be provisioned to host components comprising cloud computing platform application <b>200</b>. A system administrator may create deployment manifest <b>402</b> for an initial deployment of cloud computing platform application <b>200</b>, modify deployment manifest <b>402</b> to scale up or down an already-deployed cloud computing platform application <b>200</b>, or update a deployed cloud computing platform application <b>200</b>. In one particular implementation, deployment manifest <b>402</b> is a configuration file formatted in a structured document format, such as YAML or eXtensible Markup Language (XML), having name-value pairs and/or hierarchical sections of name-value pairs that facilitate the deployment process by deployment system <b>306</b>. Details of deployment manifest <b>402</b> are described in conjunction with the sample deployment manifest shown in Table 1 below.
0034<tables id="TABLE-US-00001" num="00001"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 1</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Excerpt of Example Deployment Manifest</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="offset" colwidth="14pt" align="left" /><colspec colname="1" colwidth="21pt" align="left" /><colspec colname="2" colwidth="182pt" align="left" /><tbody valign="top"><row><entry /><entry /><entry>#Sample Deployment Manifest</entry></row><row><entry /><entry /><entry>name: staging</entry></row><row><entry /><entry /><entry>director_uuid: 374d1703-c744-42e5-a773-9299c3fldlal</entry></row><row><entry /><entry /><entry>release:</entry></row><row><entry /><entry /><entry> name: appcloud</entry></row><row><entry /><entry /><entry> version: 40</entry></row><row><entry /><entry /><entry>networks:</entry></row><row><entry /><entry /><entry>- name: management</entry></row><row><entry /><entry /><entry> subnets:</entry></row><row><entry /><entry /><entry> - reserved:</entry></row><row><entry /><entry /><entry> - 11.23.2.2 - 11.23.2.16</entry></row><row><entry /><entry /><entry> - 11.23.3.238 - 11.23.3.254</entry></row><row><entry /><entry /><entry> static:</entry></row><row><entry /><entry /><entry> - 11.23.2.17 - 11.23.2.128</entry></row><row><entry /><entry /><entry> range: 11.23.2.0/23</entry></row><row><entry /><entry /><entry> gateway: 11.23.2.1</entry></row><row><entry /><entry /><entry> dns:</entry></row><row><entry /><entry /><entry> - 11.22.22.153</entry></row><row><entry /><entry /><entry> - 11.22.22.154</entry></row><row><entry /><entry /><entry> cloud_properties</entry></row><row><entry /><entry /><entry> name: VLAN2002</entry></row><row><entry /><entry /><entry> - name:apps</entry></row><row><entry /><entry /><entry> subnets:</entry></row><row><entry /><entry /><entry> - reserved:</entry></row><row><entry /><entry /><entry> - 11.23.8.2 - 11.23.8.16</entry></row><row><entry /><entry /><entry> - 11.23.15.238 - 11.23.15.254</entry></row><row><entry /><entry /><entry> static:</entry></row><row><entry /><entry /><entry> - 11.23.8.17 - 11.23.8.255</entry></row><row><entry /><entry /><entry> - 11.23.9.0 - 11.23.9.255</entry></row><row><entry /><entry /><entry> range: 11.23.8.0/21</entry></row><row><entry /><entry /><entry> gateway: 11.23.8.1</entry></row><row><entry /><entry /><entry> dns:</entry></row><row><entry /><entry /><entry> - 11.22.22.153</entry></row><row><entry /><entry /><entry> - 11.22.22.154</entry></row><row><entry /><entry /><entry> cloud_properties:</entry></row><row><entry /><entry /><entry> name: VLAN2008</entry></row><row><entry /><entry /><entry>resource_pools:</entry></row><row><entry /><entry /><entry>- name: small</entry></row><row><entry /><entry /><entry> stemcell:</entry></row><row><entry /><entry /><entry> name: bosh-stemcell</entry></row><row><entry /><entry /><entry> version: 0.2.39</entry></row><row><entry /><entry /><entry> network: management</entry></row><row><entry /><entry /><entry> size: 14</entry></row><row><entry /><entry /><entry> cloud_properties:</entry></row><row><entry /><entry /><entry> ram: 1024</entry></row><row><entry /><entry /><entry> disk: 4096</entry></row><row><entry /><entry /><entry> cpu: 1</entry></row><row><entry /><entry /><entry>- name: deas</entry></row><row><entry /><entry /><entry> stemcell:</entry></row><row><entry /><entry /><entry> name: bosh-stemcell</entry></row><row><entry /><entry /><entry> version: 0.2.39</entry></row><row><entry /><entry /><entry> network: apps</entry></row><row><entry /><entry /><entry> size: 192</entry></row><row><entry /><entry /><entry> cloud_properties:</entry></row><row><entry /><entry /><entry> ram: 16384</entry></row><row><entry /><entry /><entry> disk: 32768</entry></row><row><entry /><entry /><entry> cpu: 4</entry></row><row><entry /><entry /><entry>compilation:</entry></row><row><entry /><entry /><entry> network: management</entry></row><row><entry /><entry /><entry> cloud_properties:</entry></row><row><entry /><entry /><entry> ram: 2048</entry></row><row><entry /><entry /><entry> disk: 4048</entry></row><row><entry /><entry /><entry> cpu: 4</entry></row><row><entry /><entry /><entry>jobs:</entry></row><row><entry /><entry /><entry>- name: nats</entry></row><row><entry /><entry /><entry> template: nats</entry></row><row><entry /><entry /><entry> instances: 1</entry></row><row><entry /><entry /><entry> resource_pool: medium</entry></row><row><entry /><entry /><entry> networks:</entry></row><row><entry /><entry /><entry> - name: apps</entry></row><row><entry /><entry /><entry> static_ips:</entry></row><row><entry /><entry /><entry> - 11.23.8.20</entry></row><row><entry /><entry /><entry>- name: cloud_controller</entry></row><row><entry /><entry /><entry> template: cloud_controller</entry></row><row><entry /><entry /><entry> instances: 8</entry></row><row><entry /><entry /><entry> resource_pool: large</entry></row><row><entry /><entry /><entry> canary_watch_time: 30000</entry></row><row><entry /><entry /><entry> update_watch_time: 30000</entry></row><row><entry /><entry /><entry> networks:</entry></row><row><entry /><entry /><entry>- name: management</entry></row><row><entry /><entry /><entry> default: [dns, gateway]</entry></row><row><entry /><entry /><entry> - name: apps</entry></row><row><entry /><entry /><entry>- name: router</entry></row><row><entry /><entry /><entry> template: router</entry></row><row><entry /><entry /><entry> instances: 4</entry></row><row><entry /><entry /><entry> resource_pool: small</entry></row><row><entry /><entry /><entry> update:</entry></row><row><entry /><entry /><entry> max_in_flight: 2</entry></row><row><entry /><entry /><entry> networks:</entry></row><row><entry /><entry /><entry> - name: apps</entry></row><row><entry /><entry /><entry> default: [dns, gateway]</entry></row><row><entry /><entry /><entry> - name: dmz</entry></row><row><entry /><entry /><entry> static_ips:</entry></row><row><entry /><entry /><entry> - 11.23.0.16 - 11.23.0.19</entry></row><row><entry /><entry /><entry> - name: health_manager</entry></row><row><entry /><entry /><entry> template: health_manager</entry></row><row><entry /><entry /><entry> instances: 1</entry></row><row><entry /><entry /><entry> resource_pool: small</entry></row><row><entry /><entry /><entry> networks:</entry></row><row><entry /><entry /><entry> - name: management</entry></row><row><entry /><entry /><entry> - name: apps</entry></row><row><entry /><entry /><entry> default: [dns, gateway]</entry></row><row><entry /><entry /><entry>- name: dea</entry></row><row><entry /><entry /><entry> template: dea</entry></row><row><entry /><entry /><entry> instances: 192</entry></row><row><entry /><entry /><entry> resource_pool: deas</entry></row><row><entry /><entry /><entry> update:</entry></row><row><entry /><entry /><entry> max_in_flight: 12</entry></row><row><entry /><entry /><entry> networks:</entry></row><row><entry /><entry /><entry> - name: apps</entry></row><row><entry /><entry /><entry>properties:</entry></row><row><entry /><entry /><entry> networks:</entry></row><row><entry /><entry /><entry> apps: apps</entry></row><row><entry /><entry /><entry> management: management</entry></row><row><entry /><entry /><entry> nats:</entry></row><row><entry /><entry /><entry> user: nats</entry></row><row><entry /><entry /><entry> password: 7x09bnVAqw325</entry></row><row><entry /><entry /><entry> address: 11.23.8.20</entry></row><row><entry /><entry /><entry> port: 4222</entry></row><row><entry /><entry /><entry> router:</entry></row><row><entry /><entry /><entry> port: 8080</entry></row><row><entry /><entry /><entry> user: b984H8z82KJk3bb8saZNq72</entry></row><row><entry /><entry /><entry> password: ZB398bzmnwm3898b8AQ23</entry></row><row><entry /><entry namest="offset" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0035Deployment manifest <b>402</b> may specify a network configuration for cloud computing platform application <b>200</b> that includes one or more networks and/or virtual local area networks (VLANs). For example, deployment manifest <b>402</b> may define one or more network having settings that specify subnets, static or dynamic IP addresses, gateways and DNS addresses, and reserved Internet Protocol (IP) addresses (i.e., IP addresses not to be used by deployment system <b>306</b>). In the example deployment in Table 1, a first network labeled “management” and a second network labeled “apps” are specified under a section titled “networks.” The network labeled “management” is specified having a static IP address range of 11.23.3.2.17 to 11.23.2.128 with a gateway address of 11.23.2.1 and DNS address of 11.22.22.153. Deployment manifest <b>402</b> may specify a “range” of the network that may be used by deployment director <b>320</b> as a dynamic pool of IP address, minus static and reserved IP addresses. Gateway and DNS information specified by deployment manifest <b>402</b> may be passed onto stem cell VMs and agents <b>322</b> executing thereon for their initial launch and bootstrapping. Deployment manifest <b>402</b> may include, in each section, one or more pass-through settings (e.g., “cloud_properties”) that will be provided to infrastructure platform <b>308</b> during deployment.
0036Based on deployment manifest <b>402</b>, deployment director <b>320</b> generates a logical infrastructure <b>350</b> comprising one or more resource pools (identified as resource pools <b>404</b><sub>1 </sub>and <b>404</b><sub>2 </sub>in <figref idref="DRAWINGS">FIG. 4</figref>) that associate stem cell VMs with a stem cell (e.g., VM template) and a network. For example, a resource pool labeled “small” is associated with a stem cell specified as “bosh-stemcell” version 0.2.39 and with the “management” network defined within deployment manifest <b>402</b>. A stem cell refers to a VM template that defines a generalized software infrastructure that supports execution of a job provided by deployment director <b>320</b> and as specified by deployment manifest <b>402</b>. In some embodiments, the stem cell is a VM template that includes an agent <b>322</b> installed on a guest operating system <b>406</b>, and any supporting runtimes, frameworks, and libraries for the agent <b>322</b>. Each resource pool may be assigned a size corresponding to a number of stem cell VMs <b>324</b><sub>M </sub>to be provisioned for the resource pool. For example, deployment director <b>320</b> provisions <b>14</b> stem cell VMs for the “small” resource pool. Deployment manifest <b>402</b> may include pass-through settings for infrastructure platform <b>308</b> for provisioning resource pools <b>404</b>. For example, the “cloud_properties” section indicates “ram,” “disk,” and “cpu” properties that are intended for use by infrastructure platform <b>308</b> in provisioning stem cell VMs (i.e., having 1024 MB of RAM, 4096 Mb of disk space, and 1 CPU) for the “small” resource pool.
0037Deployment manifest <b>402</b> may define a specialized resource pool of workers (e.g., workers <b>330</b>) for compilation of software packages and/or other ancillary processing tasks during deployment. The specialized resource pool of workers may comprise one or more ancillary VMs provided by infrastructure platform <b>308</b>. Deployment manifest <b>402</b> may specify the number of VMs allocated to the workers resource pool and a network on which compilation may be performed. For example, the “compilation” section above specifies a resource pool having 6 workers assigned to the “management” network for compiling software packages.
0038Deployment manifest <b>402</b> defines a plurality of jobs that may be performed by one or more stem cell VMs <b>324</b>M as one or more roles in cloud computing platform application <b>200</b> (e.g., cloud controller <b>202</b>, router <b>204</b>, application execution agents <b>206</b>, health manager <b>208</b>, service provisioner <b>210</b>, services <b>212</b>, message bus <b>214</b>, etc.). Deployment manifest <b>402</b> specifies a mapping of each job onto logical infrastructure <b>350</b> of resource pools <b>404</b> and networks specified above. Deployment manifest <b>402</b> may specify the number of instances to be deployed of a particular job, which resource pool to use stem cell VMs, and/or which network the job is on. For example, in the example in Table 1, a job labeled as “cloud_controller” is listed as having eight instances (e.g., stem cell VMs <b>324</b>) drawn from resource pool “large” and assigned to the “management” network. Each job may include a number of configuration file templates, wherein key parameters (e.g., login credentials, IP addresses, ports) are specified as variables.
0039In one embodiment, deployment manifest <b>402</b> includes a “properties” section that provides enables a system administrator to parameterize these configuration file templates. As such, when deployment director <b>320</b> deploys cloud computing platform application <b>200</b>, deployment director <b>320</b> may parse the configuration file templates and “fill in” the appropriate parameters based on the corresponding values provided in “properties” section. For example, a router job may have a configuration file that lists a login credential for the router service as variables (“<$user>,” “<$password>”). In such an example, deployment director <b>320</b> parses out and evaluates the variables based on “user:” and “password:” name-value pairs provided in the properties section. Table 2 lists an example configuration file template embodied as a Ruby on Rails script file (e.g., ERB template) that may be parsed by deployment director <b>320</b>.
0040<tables id="TABLE-US-00002" num="00002"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 2</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Example Configuration File Template</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="7pt" align="left" /><colspec colname="2" colwidth="210pt" align="left" /><tbody valign="top"><row><entry /><entry>external_uri: <%= properties.keys.auth_token %></entry></row><row><entry /><entry>local_register_only: <%= properties.features.registration %></entry></row><row><entry /><entry>instanceyort: <%= properties.cloudcontroller.port II 8080 %></entry></row><row><entry /><entry>directories:</entry></row><row><entry /><entry> droplets: <%= data_directory %>/droplets</entry></row><row><entry /><entry> resources : /shared/resources</entry></row><row><entry /><entry>amqp:</entry></row><row><entry /><entry>host: <%= find_job (properties.amqp.job_name, 0) %></entry></row><row><entry /><entry> port: <%= properties.amqp.port II 5672 %></entry></row><row><entry /><entry> vhost: <%= properties.amqp.vhost %></entry></row><row><entry /><entry> user: <%= properties.amqp.user %></entry></row><row><entry /><entry> pass: <%= properties.amqp.password %></entry></row><row><entry /><entry>log_level: <%= properties. logging. cloudcontroller %></entry></row><row><entry /><entry>keys:</entry></row><row><entry /><entry>password: <%= properties.keys.password %></entry></row><row><entry /><entry>token: <%= properties.keys.auth_token %></entry></row><row><entry /><entry>database_uri: “mysql://<%= find_job(properties.mysql.job_name, ) \ </entry></row><row><entry /><entry> %>/db”</entry></row><row><entry /><entry>pid: <%= instance_directory %>/cloudcontroller.pid</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0041<figref idref="DRAWINGS">FIG. 5</figref> depicts a flow diagram for deploying a cloud computing platform application <b>200</b> by deployment director <b>320</b>. In step <b>500</b>, deployment director <b>320</b> receives a request to deploy cloud computing platform application <b>200</b>, for example, from administrative client <b>304</b>. A deployment manifest <b>402</b> and release may be included with the request or, in the alternative, may have been previously loaded onto deployment director <b>320</b> prior to issuance of the deployment request. As described above, deployment manifest <b>402</b> provides a specification of cloud computing platform application <b>200</b> that deployment director <b>320</b> may use to map management jobs needed for supporting cloud computing platform application <b>200</b> to virtual computing resources utilized during deployment. In one embodiment, the release includes one or more application packages and configuration files organized into a tape archive file or a “tar” file (also referred to as a “tarball”). It should be recognized that, rather than transmitting the release itself, alternative embodiments may receive the release in step <b>500</b> by receiving a reference to download or otherwise access the release, for example, by providing a reference to object store <b>332</b>, uniform resource locator (“URL”), Git repository, or other similar reference to package data. In such embodiments, the step of receiving the release would thus utilize the provided reference to fetch the release.
0042In step <b>502</b>, deployment director <b>320</b> determines a logical infrastructure <b>350</b> to host cloud computing platform application <b>200</b> based on deployment manifest <b>402</b>. For example, in one embodiment, deployment director <b>320</b> processes deployment manifest <b>402</b> to determine an allocation of stem cell VMs organized into resource pools and network groupings for hosting nodes of cloud computing platform application <b>200</b>. In step <b>506</b>, deployment director <b>320</b> transmits a provision request for a plurality of stem cell VMs, based on logical infrastructure <b>350</b> determined in step <b>502</b>, to infrastructure platform <b>308</b>, which, in turn, receives the provisioning request in step <b>506</b>. For example, in one embodiment, deployment director <b>320</b> may call for provision of instances of a stem cell VM from a cloud infrastructure service provider utilizing a cloud provider Application Programming Interface, sometimes referred to as a “cloud provider interface” (CPI). In step <b>508</b>, infrastructure platform <b>308</b> creates one or more instances of stem cell VMs utilizing a stem cell template having agent <b>322</b> pre-installed and having resource and network configurations as specified by deployment manifest <b>402</b>. For example, in one embodiment, infrastructure platform <b>308</b> may create a stem cell VM utilizing a template (e.g., stem cell) having a packaged format such as Open Virtualization Format (OVF) and containing a guest operating system kernel, utilities (e.g., openssh-server, monit), libraries (e.g., libxml, libmysql, libsqlite), runtime dependencies (e.g., Ruby, Java Virtual Machine), and agent <b>322</b>. In one particular implementation, the stem cell may be generated prior to start of the deployment procedure and stored for later retrieval by infrastructure platform <b>308</b> and/or deployment director <b>320</b>.
0043In step <b>510</b>, one or more stem cell VMs (e.g., stem cell VM <b>324</b><sub>1</sub>) begins operation and launches agent <b>322</b>. In step <b>512</b>, deployment director <b>320</b> provides job configuration and data to stem cell VMs <b>324</b> for each job specified by deployment manifest <b>402</b> via addressing and discovery layer <b>334</b>. For example, deployment director <b>320</b> determines that deployment manifest <b>402</b> specifies a “cloud controller” job uses eight instances of stem cell VMs drawn from a pre-determined resource pool and from a pre-determined network group. Deployment director <b>320</b> provides job configuration and data for the cloud controller job to eight instances of stem cell VMs <b>324</b>. In step <b>514</b>, stem cell VMs <b>324</b> (e.g., stem cell VM <b>324</b><sub>1</sub>) receives the job configuration and data, via address and discovery layer <b>334</b>. Job configuration and data may include one or more packaged applications, libraries, runtimes, configuration files, metadata, and other supporting data for performing a role within cloud computing platform application <b>200</b>. In one embodiment, agent <b>322</b> may retrieve job configuration and data utilizing a link or address provided by deployment director <b>320</b> and corresponding to one or more data objects stored in object store <b>332</b>.
0044In step <b>516</b>, agent <b>322</b> applies the received job configuration and data to transform stem cell VM <b>324</b><sub>1 </sub>into a distributed node within cloud computing platform application <b>200</b>. Agent <b>322</b> installs one or more application packages of the received job data, utilizes the received job configuration to perform any suitable setup and configuration of the installed software packages, and launches processes for connecting to other deployed jobs of cloud computing platform application <b>200</b> and performing one or more specialized tasks within cloud computing platform application <b>200</b>. For example, in one embodiment, agent <b>322</b> may install, configure, and launch one or more application packages for executing a router (e.g., router <b>204</b>) to forward incoming requests to other components of cloud computing platform application <b>200</b> that are running web applications. Deployment director <b>320</b> repeats operations of step <b>512</b> until all jobs have been deployed onto one or more stem cell VMs <b>324</b> as specified by deployment manifest <b>402</b>. As such, after the deployment procedure has been completed, a plurality of stem cell VMs have transformed into a plurality of interconnected nodes that constitute a deployed cloud computing platform application <b>200</b> (e.g., cloud controller <b>202</b>, application execution agents <b>206</b>, health manager <b>208</b>, router, <b>204</b>, service provisioner <b>210</b>, etc.), as depicted in <figref idref="DRAWINGS">FIG. 6</figref>.
0045<figref idref="DRAWINGS">FIG. 6</figref> depicts deployment system <b>306</b> of <figref idref="DRAWINGS">FIG. 4</figref> after deployment of a cloud computing platform application <b>200</b> has been completed. After execution of a deployment procedure described above, stem cell VMs (e.g., VMs <b>324</b><sub>1 </sub>to <b>324</b><sub>M</sub>) from logical infrastructure <b>350</b> are “transformed” into nodes of a cloud computing platform application <b>200</b> (e.g., router <b>204</b>, cloud controller <b>202</b>, health manager <b>208</b>, application execution agents <b>206</b>, service provisioner <b>210</b>, services <b>212</b>, message bus <b>214</b>). In the embodiment of <figref idref="DRAWINGS">FIG. 6</figref>, each stem cell VM <b>324</b><sub>1 </sub>to <b>324</b><sub>M </sub>has an agent <b>322</b> executing thereon to perform a management job (e.g., router job <b>604</b>, cloud controller job <b>602</b>, health manager job <b>608</b>, application execution agent jobs <b>606</b>, service provisioner job <b>610</b>, service jobs <b>612</b>, message bus job <b>614</b>) that are carried out by cloud computing platform application <b>200</b>.
Example Release Management System
0046<figref idref="DRAWINGS">FIG. 7</figref> depicts one embodiment of a release management system for building a version of a multi-node application (e.g., cloud computing platform application <b>200</b>) to be deployed by a deployment system (e.g., deployment system <b>306</b>). As described above, administrative client <b>304</b> is communicatively connected to deployment system <b>306</b> to provide one or more releases to deployment system <b>306</b> to deploy a cloud computing platform application <b>200</b>.
0047Administrative client <b>304</b> includes a software module, referred to as a release manager <b>702</b>, which builds and manages releases <b>704</b> of the multi-node application according to techniques described herein. In one embodiment, release manager <b>702</b> uses metadata and configurations provided by one or more job specifications <b>712</b> and one or more package specifications <b>714</b> to build a release <b>704</b>. Release <b>704</b> generally refers to a self-contained bundle of management job definitions, configurations, and application data packages needed to deploy and execute cloud computing platform application <b>200</b>. Each release <b>704</b> represents a frozen version of application data packages and configurations needed to perform the management jobs for providing cloud computing platform services. As shown in <figref idref="DRAWINGS">FIG. 7</figref>, release <b>704</b> includes a release manifest <b>706</b> that specifies the contents of release <b>704</b>, a plurality of jobs <b>708</b>, and a plurality of packages <b>710</b>. Each job <b>708</b> represents a management role in cloud computing platform application <b>200</b> to be performed (e.g., by a stem cell VM), and describes what packages <b>710</b> should be deployed (e.g., by an agent <b>322</b> executing in a stem cell VM) and monitored (e.g., by health monitor <b>336</b>). Jobs <b>708</b> include code and configurations for use with one or more packages <b>710</b>. Packages <b>710</b> includes custom application code configured to perform management jobs specific to cloud computing platform application <b>200</b> (e.g., cloud controller, application execution agents), as well as reusable application services and/or supporting software (e.g., MySQL, RabbitMQ). Packages <b>710</b> may contain code stored in machine architecture independent representation (e.g., source code, bytecode), or, alternatively, may include executable runtimes (e.g., “binaries”). In one embodiment, jobs <b>708</b> and packages <b>710</b> are organized into one or more tape archive files (e.g., tarballs).
0048<figref idref="DRAWINGS">FIG. 8</figref> depicts a flow diagram for generating a release <b>704</b> of a cloud computing platform application <b>200</b>. In step <b>800</b>, a user (e.g., administrator <b>302</b>) provides one or more package specifications <b>714</b> to administrative client <b>304</b> that includes metadata that describes contents of packages <b>710</b>. While each package specification <b>714</b> is a configuration file that corresponds to a single package <b>710</b> in the embodiments described below, it is recognized that a single package specification <b>714</b> may provide metadata for multiple packages <b>710</b>.
0049Package specification <b>714</b> includes metadata that specifies contents that are to be included in a package (e.g., package <b>710</b>) when a release <b>704</b> is built (e.g., by release manager <b>702</b>). Examples of package specification <b>714</b> are produced below in Tables 3A and 3B.
0050<tables id="TABLE-US-00003" num="00003"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 3A</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Sample Package Specification (“controller.pkg”)</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="offset" colwidth="14pt" align="left" /><colspec colname="1" colwidth="28pt" align="left" /><colspec colname="2" colwidth="175pt" align="left" /><tbody valign="top"><row><entry /><entry /><entry>---</entry></row><row><entry /><entry /><entry>name: cloudcontroller</entry></row><row><entry /><entry /><entry>packaging: packages/cloudcontroller/packaging</entry></row><row><entry /><entry /><entry>files:</entry></row><row><entry /><entry /><entry>- cloudcontroller/*/*</entry></row><row><entry /><entry namest="offset" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0051<tables id="TABLE-US-00004" num="00004"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 3B</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Sample Package Specification (“rabbitmq.pkg”)</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="offset" colwidth="21pt" align="left" /><colspec colname="1" colwidth="28pt" align="left" /><colspec colname="2" colwidth="168pt" align="left" /><tbody valign="top"><row><entry /><entry /><entry>---</entry></row><row><entry /><entry /><entry>name: rabbitmq</entry></row><row><entry /><entry /><entry>packaging: packages/rabbitmq/packaging</entry></row><row><entry /><entry /><entry>files:</entry></row><row><entry /><entry /><entry>rabbitmq-server-1.8.0.tar.gz</entry></row><row><entry /><entry namest="offset" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables><br /> In one embodiment, package specification <b>714</b> specifies a name identifier field (e.g., “name: cloudcontroller”) that uniquely identifies package <b>710</b> from among other packages. Package specification <b>714</b> identifies one or more files having application code, configurations, and other application data that represent contents of package <b>710</b>. For example, package specification <b>714</b> may specify a listing of files (e.g., “files: cloudcontroller/*/*,” “files: rabbitmq-server-1.8.0.tar.gz”) that should be included in package <b>710</b>. It is recognized that one or more files, scripts, and code specified by package specification <b>714</b> (or job specification <b>712</b> described later) may be specified by one or more pathnames, URLs, file globs, and any other expression that may be used to reference data stored within a storage system. Package specification <b>714</b> further specifies one or more package dependencies that indicate related packages <b>710</b> that should be included in release <b>704</b>. In one embodiment, package specification <b>714</b> refers to related packages by their name identifier (e.g., “dependencies: mysql, rabbitmq”).
0052Package specification <b>714</b> specifies a preparation script for inclusion in package <b>710</b> (e.g., “packaging: packages/cloudcontroller/packaging”). The preparation script is configured to, when executed, prepare package <b>710</b> for the environment of deployment system <b>306</b>. For example, a script for compiling package <b>710</b> may include shells commands to unpack package <b>710</b> and invoke a “make” command that compiles contents of package <b>710</b> to generate an executable runtime compatible with stem cell VMs. In one embodiment, the preparation script is configured to be executed on a virtual machine, such as a worker <b>330</b>, having a system architecture compatible with stem cell VMs <b>324</b>. An example preparation script is provided below in Table 4.
0053<tables id="TABLE-US-00005" num="00005"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 4</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Sample Preparation Script (“rabbitmq/packaging”)</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="offset" colwidth="14pt" align="left" /><colspec colname="1" colwidth="42pt" align="left" /><colspec colname="2" colwidth="161pt" align="left" /><tbody valign="top"><row><entry /><entry /><entry>#!/usr/bin/env bash</entry></row><row><entry /><entry /><entry>tar xzf rabbitmq-server-1.8.0.tar.gz</entry></row><row><entry /><entry /><entry>cd rabbitmq-server-1.8.0</entry></row><row><entry /><entry /><entry>make</entry></row><row><entry /><entry namest="offset" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0054In step <b>802</b>, administrative client <b>304</b> receives the one or more package specifications <b>714</b>. In one embodiment, administrative client <b>304</b> retains the received package specifications <b>714</b> in a local workspace having a directory folder structure configured according to a predetermined convention (e.g., naming convention). For example, package specifications <b>714</b> (e.g., “cloudcontroller.pkg,” “rabbitmq.pkg”) may be placed in a “packages” folder that has sub-directories (e.g., “packages/cloudcontroller/,” “packages/rabbitmq/”) corresponding to a name identifier provided by each package specification <b>714</b>. It should be recognized that file paths, file globs, URLs, and other file references provided in package specification <b>714</b> (as well as for job specification <b>712</b>) may be specified relative to the local workspace or to a location within the local workspace determined according to the predetermined convention. In the example above, the location of package files (e.g., “cloudcontroller.tar.gz,” “rabbitmq-server-1.8.0.tar.gz”) may be specified relative to sub-directories corresponding to name identifiers provided by each package specification (e.g., “packages/cloudcontroller/,” “packages/rabbitmq/”). It should be recognized that the location of package files may be in a system directory (e.g., /src/) used to store package files and source code according to conventions of an operating system.
0055In step <b>804</b>, the user provides one or more job specifications <b>712</b> to administrative client <b>304</b> that describes a job <b>708</b> that may be executed (e.g., by an agent <b>322</b> in deployment system <b>306</b>). Job specification <b>712</b> provides a name identifier field (e.g., “cloudcontroller,” “messagebus”) that uniquely identifies a particular job <b>708</b> from among other jobs. An example job specification <b>712</b> is provided below:
0056<tables id="TABLE-US-00006" num="00006"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 5</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Sample Job Specification (e.g., “cloudcontroller.job”)</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="21pt" align="left" /><colspec colname="2" colwidth="196pt" align="left" /><tbody valign="top"><row><entry /><entry>---</entry></row><row><entry /><entry>name: cloudcontroller</entry></row><row><entry /><entry>monit: jobs/cloudcontroller/monit</entry></row><row><entry /><entry>configuration:</entry></row><row><entry /><entry> jobs/cloudcontroller/configuration/cloudcontroller.yml:</entry></row><row><entry /><entry> config/cloudcontroller.yml</entry></row><row><entry /><entry> jobs/cloudcontroller/configuration/thin.yml: config/thin.yml</entry></row><row><entry /><entry>update:</entry></row><row><entry /><entry> drain: jobs/cloudcontroller/drain</entry></row><row><entry /><entry>restart:</entry></row><row><entry /><entry> drain: jobs/cloudcontroller/drain</entry></row><row><entry /><entry>packages:</entry></row><row><entry /><entry>- cloudcontroller</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0057Job specification <b>712</b> specifies one or more packages <b>710</b> that are used (e.g., by an agent <b>322</b>) to perform a management role within cloud computing platform application <b>200</b>. For example, job specification <b>712</b> for a cloud controller (e.g., cloud controller <b>202</b>) may specify a cloud controller package, which includes custom application code for orchestrating cloud services with other components of cloud computing platform application <b>200</b>, and a MySQL package which includes a relational database that may be used by the cloud controller to store cloud orchestration metadata. In another example, job specification <b>712</b> for an application execution agent <b>206</b> may specify an application execution agent package, which includes custom application code for receiving and deploying web applications from cloud controller <b>202</b>, and a Java Runtime Environment package that may be used by application execution agents to provide a Java virtual machine (JVM) to execute web applications. In one embodiment, job specification <b>712</b> specifies the one or more packages <b>710</b> according to their name identifier specified by package specifications <b>714</b>.
0058Job specifications <b>712</b> may specify one or more of the same packages <b>710</b> in cases where different jobs utilize the same supporting application services or share common code. For example, multiple job specifications <b>712</b> may specify an application service, such as MySQL or Redis, which is used by each component of cloud computing platform application <b>200</b> in various ways. In another example, job specification <b>712</b> for a health monitor (e.g., health monitor <b>336</b>) may specify the cloud controller package as being used by health monitor <b>336</b> because of common code used to orchestrate cloud services with components of cloud computing platform application <b>200</b> and monitor components of cloud computing platform application <b>200</b>.
0059Job specification <b>712</b> specifies one or more configuration files for inclusion in job <b>708</b>. The configuration files provide configuration settings, which are specific to job <b>708</b>, for packages <b>710</b> and to setup an instance of job <b>708</b> on a stem cell VM <b>324</b>. For example, job specification <b>712</b> for a particular job <b>708</b> may identify one or more configuration scripts that provide networking configurations (e.g., IP addresses) of other jobs that the particular job <b>708</b> depends on. In one embodiment, the configuration files are configuration file templates that are parsed by deployment system <b>306</b> (e.g., by deployment director <b>320</b>) and filled in with values provided from a deployment manifest <b>402</b>, as described above. In one embodiment, job specification <b>712</b> specifies, for each configuration file template, a source file path to the configuration file template (e.g., within the local workspace) and a destination file path (e.g., within a stem cell VM) for where a configuration file generated from the configuration file template should be placed.
0060In one embodiment, job specification <b>712</b> further specifies a monitoring script to be included in job <b>708</b>. The monitoring script is specific to each job <b>708</b> and is configured to, when executed (e.g., by an agent <b>322</b>, or by direction of health monitor <b>336</b>), start, stop, and monitor processes that are associated with performing job <b>708</b>. In one example, a monitoring script may be configured to check for existence of a predetermined process identifier (PID) assigned to job <b>708</b>. In another example, a monitoring script may be configured to alert health monitor <b>336</b> to low available memory or high disk latency conditions during performance of job <b>708</b>.
0061In one embodiment, job specification <b>712</b> specifies one or more lifecycle scripts to be included in job <b>708</b>. Each lifecycle script is associated with a lifecycle “hook” such that the lifecycle scripts are invoked (e.g., by an agent <b>322</b>) when a particular application lifecycle action takes place. Deployment director <b>320</b> may use the lifecycle hooks to notify a running instance of job <b>708</b> of pending actions, as described later. In one embodiment, the application lifecycle actions include an “update,” which represents a change in version of the running instance of job <b>708</b>, and a “restart,” which represents a restart of the running instance of job <b>708</b>. In the example above, job specification <b>712</b> includes a generalized lifecycle hook identified as “drain,” however other lifecycle hooks are contemplated, such as a “before” and “after” lifecycle hook to be used before and after updates take place.
0062In step <b>806</b>, administrative client <b>304</b> receives the one or more job specifications <b>712</b>. In one embodiment, administrative client <b>304</b> retains the received job specifications <b>712</b> in a local workspace, described above, having a directory folder structure configured according to a predetermined convention (e.g., naming convention). For example, job specifications <b>712</b> (e.g., “cloudcontroller.job,” “rabbitmq.job”) may be placed in a “jobs!” directory in the local workspace.
0063In step <b>808</b>, the user provides an instruction to build a release <b>704</b> according to job specifications <b>712</b> and package specifications <b>714</b>. In one implementation, the user may provide a command line instruction (e.g., “create release”) to administrative client <b>304</b> to build release <b>704</b>. The user may specify that release <b>704</b> be locally built (sometimes referred to as a “developer version” or “dev version”), or alternatively, may specify release <b>704</b> as a production-level version (sometimes referred to as a “final version”) that is uploaded to object store <b>332</b> and made available to other users.
0064In step <b>810</b>, responsive to user command to build release <b>704</b>, administrative client <b>304</b> determines one or more packages used by each job according to job specifications <b>712</b>. In one embodiment, administrative client <b>304</b> scans the local workspace in a predetermined location, such as a “jobs” sub-directory, to locate job specifications <b>712</b>. Administrative client <b>304</b> then processes each located job specification <b>712</b> to determine which packages need to be built for each job. In one embodiment, administrative client <b>304</b> locates and retrieves package specifications <b>714</b> for any packages specified in the “packages” section of each job specification <b>712</b>.
0065In step <b>812</b>, for each specified package, administrative client <b>304</b> determines whether a cached copy of package <b>710</b> may be found in a local cache or, alternatively, in object store <b>332</b>. In step <b>814</b>, responsive to determining that package <b>710</b> has not been cached, administrative client <b>304</b> generates a new package according to package specification <b>714</b>. In one embodiment, administrative client <b>304</b> generates a new package <b>710</b> by bundling a preparation script and the one or package files specified by package specification <b>714</b> into a package <b>710</b> formatted as an archive file, such as a “tar” file. Administrative client <b>304</b> then generates a package manifest (e.g., “cloudcontroller.MF,” “mysql.MF”) that includes the contents of package specification <b>714</b> (e.g., name, preparation scripts, file listings) and other metadata for package <b>710</b>. In one embodiment, the package manifest includes a fingerprint value that is generated to uniquely identify contents of package <b>710</b> (e.g., package files, locations, permissions, checksums, etc.) and may be later used determine whether changes have been made to contents of package <b>710</b> (e.g., new versions of package files). The package manifest further includes a “build number” that is a versioning identifier for package <b>710</b> within release manager <b>702</b>, and is auto-incremented from a previous build number upon generation of a new changed package <b>710</b>. In step <b>816</b>, administrative client <b>304</b> stores the generated package <b>710</b> in a local storage cache or, alternatively, in object store <b>332</b> to be made available later or to other users.
0066In step <b>818</b>, responsive to determining that a package <b>710</b> has been cached, administrative client <b>304</b> determines whether a given package has been changed or modified from the cached copy of package <b>710</b> that may represent a previous “version” of the package. A given package may be deemed modified based on changes to package specification <b>714</b>, preparation scripts, package files and/or other contents specified for the given package. In some embodiments, a test fingerprint value is generated using contents specified by package specification <b>714</b> (e.g., package files found in working directory) and compared to a fingerprint value provided by a package manifest of the cached copy of package <b>710</b>. The given package may be deemed changed if the fingerprint values do not match, and vise versa.
0067Responsive to determining that a given package has been changed, administrative client <b>304</b> proceeds to step <b>814</b> to generate a new package <b>710</b> according to package specification <b>714</b>, as described above. Responsive to determining that a given package <b>710</b> has not been changed, in step <b>820</b>, administrative client <b>304</b> retrieves the cached copy of package <b>710</b>. It is recognized that the operations described in steps <b>812</b> to <b>820</b> may be repeated for each package specified for jobs of cloud computing platform application <b>200</b>. After retrieving and/or generating all packages, the operations of administrative client <b>304</b> proceed to step <b>822</b>.
0068In step <b>822</b>, administrative client <b>304</b> generates one or more jobs <b>708</b> according to job specifications <b>712</b>. In one embodiment, administrative client <b>304</b> generates a job <b>708</b> by bundling monitoring scripts and configuration files specified by job specification <b>712</b>, as well as a job manifest, into an archive file. Administrative client <b>304</b> generates a job manifest that includes the contents of job specification <b>712</b>, in addition to other metadata for job <b>708</b>. In one embodiment, the job manifest includes a fingerprint value, for example, as generated by a hash function or other algorithm, which may be used to verify the integrity of contents of job <b>708</b> and/or determine whether the contents of job <b>708</b> have been modified. The job manifest further includes a “build number” that is a versioning identifier for job <b>708</b> within release manager <b>702</b>, similar to the build number for packages <b>710</b>. It should be recognized that to facilitate building and managing releases, in one embodiment, administrative client <b>304</b> includes a caching and versioning mechanism for jobs <b>708</b>, similar to the caching and versioning system for packages <b>710</b> described above.
0069In step <b>824</b>, administrative client <b>304</b> generates a release <b>704</b> that includes jobs <b>708</b> and packages <b>710</b>. In one embodiment, administrative client <b>304</b> generates release <b>704</b> by bundling jobs <b>708</b> and packages <b>710</b> (e.g., as generated and/or retrieved earlier) into a single self-contained archive file (e.g., tarball).
0070Administrative client <b>304</b> generates a release manifest <b>706</b> that specifies the contents of release <b>704</b> and that is incorporated into release <b>704</b>. Release manifest <b>706</b> includes a name identifier field that provides a text label for release <b>704</b> (e.g., “appcloud”) and a “build version” field that provides a versioning identifier for release <b>704</b> within release manager <b>702</b>. In one embodiment, administrative client <b>304</b> increments the build version field of a release <b>704</b> upon determining any change made to jobs <b>708</b> and/or packages <b>710</b> (e.g., a change in build version of a job <b>708</b> or package <b>710</b>). Release manifest <b>706</b> further includes a listing of jobs and packages contained within the release bundle. For example, in an example release manifest <b>706</b> produced in Table 6 below, release manifest <b>706</b> specifies a version “23” of an “appcloud” release which includes jobs <b>708</b> identified as “cloudcontroller,” “dea,” “healthmanager,” “messagebus” and includes packages <b>710</b> identified as “dea,” “cloudcontroller,” “healthmanager,” “router,” “rabbitmq,” and “mysql.” In some embodiments, release manifest <b>706</b> further includes a checksum value generated for each job and/or package specified. The checksum values may be used for integrity checking during deployment to verify that contents of jobs and packages have not been changed during distribution.
0071<tables id="TABLE-US-00007" num="00007"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 6</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Excerpt of Sample Release Manifest</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="21pt" align="left" /><colspec colname="2" colwidth="196pt" align="left" /><tbody valign="top"><row><entry /><entry>---</entry></row><row><entry /><entry>name: appcloud</entry></row><row><entry /><entry>version: 23</entry></row><row><entry /><entry>jobs:</entry></row><row><entry /><entry>- name: cloudcontroller</entry></row><row><entry /><entry> version: 2</entry></row><row><entry /><entry> checksum: 0b1c8aa38dfc5f6fd0d8df890ecfa155498e31ec</entry></row><row><entry /><entry>- name: dea</entry></row><row><entry /><entry> version: 5</entry></row><row><entry /><entry> checksum: 01cf2782a518d808e777bb7ed6fcc6a725f26c3a</entry></row><row><entry /><entry>- name: healthmanager</entry></row><row><entry /><entry> version: 6</entry></row><row><entry /><entry> checksum: 7eeaf339d26fb1c03943199d1ca81404e86259c4</entry></row><row><entry /><entry>- name:messagebus</entry></row><row><entry /><entry> version: 7</entry></row><row><entry /><entry> checksum: 5eb3cfa95350f276fb7b204bad3772050f547511</entry></row><row><entry /><entry>packages:</entry></row><row><entry /><entry>- name: dea</entry></row><row><entry /><entry> version: 29</entry></row><row><entry /><entry> checksum: 170cfeba3a0ed5d6fdfd325a71f8113d41f85b5e</entry></row><row><entry /><entry>- name: cloudcontroller</entry></row><row><entry /><entry> version: 25</entry></row><row><entry /><entry> checksum: 7c8cef1fe319932a6421a0ed0bf039c9cef8908b</entry></row><row><entry /><entry>- name: healthmanager</entry></row><row><entry /><entry> version: 2</entry></row><row><entry /><entry> checksum: d321e5ebb578847d2c8687d84428a6132dedd412</entry></row><row><entry /><entry>- name: router</entry></row><row><entry /><entry> version: 3</entry></row><row><entry /><entry> checksum: 889bcc596dff4d70984e7359a714896a213ede6a</entry></row><row><entry /><entry>- name: rabbitmq</entry></row><row><entry /><entry> version: 9</entry></row><row><entry /><entry> checksum: 0e5f7d7f580774c1acf3ddaa573205177f4ca047</entry></row><row><entry /><entry>- name: mysql</entry></row><row><entry /><entry> version: 5</entry></row><row><entry /><entry> checksum: fa3415cc2d1f7cc99c7cd0c27c1d5f29f8aaf6b0</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0072Upon completion of generating release <b>704</b>, administrative client <b>304</b> reports status back to the user. In step <b>826</b>, the user receives status output regarding the building of release <b>704</b>, which may include a verbose output describing what packages <b>710</b> and jobs <b>708</b> have been changed, modified, newly generated, and/or retrieved from cache. The user may instruct administrative client <b>304</b> to transmit release <b>704</b> to a deployment system, such as deployment system <b>306</b> shown in <figref idref="DRAWINGS">FIG. 3</figref>, and utilized to deploy a cloud computing platform application <b>200</b>. In one embodiment, release <b>704</b> may be provided to deployment director <b>320</b> and stored within object store <b>332</b> for later access. In one embodiment, administrative client <b>304</b> maintains a catalog of built releases (identified by name and version number) may be deployed to test, staging, and/or production environments.
Example Application Lifecycle Management
0073Embodiments of the invention may be adapted to perform application lifecycle management operations on pre-existing deployments of multi-node applications, such as cloud computing platform application <b>200</b>. For example, embodiments of the invention allow an operations team to update components of a cloud computing platform application <b>200</b> by rolling (e.g., staggering) updates and enabling the components to drain their traffic. Accordingly, embodiments of the invention reduce the impact of upgrades and other changes on a customer's then-running applications. While embodiments of the invention are described for updating cloud computing platform application <b>200</b>, it should be recognized that the techniques and system provided herein can be extended to other application lifecycle management operations, such as rollbacks, wind-ups, and scaling up and down of a deployment.
0074<figref idref="DRAWINGS">FIG. 9</figref> depicts a flow diagram for updating an existing deployment of a cloud computing platform application <b>200</b> shown in <figref idref="DRAWINGS">FIG. 6</figref>. In step <b>900</b>, responsive to user input, administrative client <b>304</b> generates an updated release (referred to as release <b>704</b>′) that includes changes to be made to an existing deployment of cloud computing platform application <b>200</b>, such as changes to deployment settings, application code, and/or application configurations embodied as one or more updated jobs (referred to herein as jobs <b>708</b>′) and/or packages (or, packages <b>710</b>′). In one embodiment, updated release <b>704</b>′ is a self-contained bundle of jobs <b>708</b>′ and packages <b>710</b>, that can be deployed from scratch on a bare system, rather than a piece of differential data (sometimes referred to as a “diff,” “delta,” or “patch”). As will be described in detail later, deployment director <b>320</b> determines differences between updated release <b>704</b>′ and the release of an existing deployment and selectively applies updates to each component of cloud computing platform application <b>200</b>.
0075To generate updated release <b>704</b>′, administrative client <b>304</b> detects one or more changes to an existing release, such as the addition of a new job specification <b>712</b>, removal of an existing job specification <b>712</b>, modification of an existing job specification <b>712</b>, modification of contents of a job <b>708</b> (e.g., changes to a dependent package or script), addition, removal, and modification of a package specification <b>714</b>, and contents of a package <b>710</b> (e.g., application data bits). In one implementation, administrative client <b>304</b> generates updated release manifests, job manifests, and package manifests that include incremented “build version” numbers to represent corresponding changes in each of package <b>710</b>′, job <b>708</b>′, and release <b>704</b>‘.For example, administrative client <b>304</b> may detect an upgrade of Java Runtime Environment package (e.g., from version 1.5 to version 1.6) for application execution agent <b>206</b>. In this example, administrative client <b>304</b> generates an updated release <b>704</b>’ having an updated job <b>708</b>′ for application execution agent <b>206</b> (to reflect a new dependency on a different version of Java) and an updated package <b>710</b>′ for Java Runtime Environment (that reflects new application bits for the different version of Java).
0076In step <b>902</b>, responsive to user input, administrative client <b>304</b> transmits a deployment request to deployment director <b>320</b> to deploy updated release <b>704</b>′ using a deployment manifest <b>402</b>′ provided by the user. In step <b>904</b>, deployment director <b>320</b> of deployment system <b>306</b> receives the deployment request from administrative client <b>304</b>. The deployment request may include updated release <b>704</b>′ and deployment manifest <b>402</b>′, or alternatively, may include a reference or other resource identifier that can be used to retrieve updated release <b>704</b>′ from object store <b>332</b>.
0077Deployment manifest <b>402</b>′ may be similar to deployment manifest <b>402</b> described above and extended to include one or more update settings that defines how updates of jobs behave. In one implementation, deployment manifest <b>402</b>′includes an “update” section having configuration name-value pairs that define update settings for all jobs specified in deployment manifest <b>402</b>′. An excerpt from an example deployment manifest <b>402</b>′ having update settings is produced below in Table 7. Portions have been omitted for sake of clarity.
0078<tables id="TABLE-US-00008" num="00008"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 7</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Excerpt of Example Deployment Manifest</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="35pt" align="left" /><colspec colname="2" colwidth="182pt" align="left" /><tbody valign="top"><row><entry /><entry>---</entry></row><row><entry /><entry>deployment-name: staging</entry></row><row><entry /><entry>director_uuid: 374d1703-c744-42e5-a773-9299c3fldlal</entry></row><row><entry /><entry>release:</entry></row><row><entry /><entry> name: appcloud</entry></row><row><entry /><entry> version: networks:41</entry></row><row><entry /><entry>[ . . . ] # Section omitted</entry></row><row><entry /><entry>resource_pools:</entry></row><row><entry /><entry>[ . . . ] # Section omitted</entry></row><row><entry /><entry>update:</entry></row><row><entry /><entry> canaries:1</entry></row><row><entry /><entry> canary_watch_time: 30000</entry></row><row><entry /><entry> update_watch_time: 10000</entry></row><row><entry /><entry> max_in_flight: 5</entry></row><row><entry /><entry> max errors: 2</entry></row><row><entry /><entry>jobs:</entry></row><row><entry /><entry>- name: nats</entry></row><row><entry /><entry> template: nats</entry></row><row><entry /><entry> instances: 1</entry></row><row><entry /><entry> resource_pool: medium</entry></row><row><entry /><entry> networks:</entry></row><row><entry /><entry> - name: apps</entry></row><row><entry /><entry> static_ips:</entry></row><row><entry /><entry> - 11.23.8.20</entry></row><row><entry /><entry>- name: cloud_controller</entry></row><row><entry /><entry> template: cloud_controller</entry></row><row><entry /><entry> instances: 8</entry></row><row><entry /><entry> resource_pool: large</entry></row><row><entry /><entry> update:</entry></row><row><entry /><entry> - canary_watch_time: 30000</entry></row><row><entry /><entry> update_watch_time: 30000</entry></row><row><entry /><entry> networks :</entry></row><row><entry /><entry> - name : management</entry></row><row><entry /><entry> default : [dns, gateway]</entry></row><row><entry /><entry> - name : apps</entry></row><row><entry /><entry>- name : router</entry></row><row><entry /><entry> template : router</entry></row><row><entry /><entry> instances : 4</entry></row><row><entry /><entry> resource_pool: small</entry></row><row><entry /><entry> update:</entry></row><row><entry /><entry> max_in_flight: 2</entry></row><row><entry /><entry>networks:</entry></row><row><entry /><entry> - name: apps</entry></row><row><entry /><entry> default : [dns, gateway]</entry></row><row><entry /><entry> - name: dmz</entry></row><row><entry /><entry> static_ips:</entry></row><row><entry /><entry> - 11.23.0.16 - 11.23.0.19</entry></row><row><entry /><entry>- name: health_manager</entry></row><row><entry /><entry> template: health_manager</entry></row><row><entry /><entry> instances: 1</entry></row><row><entry /><entry> resource_pool: small</entry></row><row><entry /><entry> networks:</entry></row><row><entry /><entry> - name: management</entry></row><row><entry /><entry> blocks: 0-5</entry></row><row><entry /><entry> - name: apps</entry></row><row><entry /><entry> default: [dns, gateway]</entry></row><row><entry /><entry>- name: dea</entry></row><row><entry /><entry> template : dea</entry></row><row><entry /><entry> instances : 192</entry></row><row><entry /><entry> resource pool : deas</entry></row><row><entry /><entry> update :</entry></row><row><entry /><entry> max_in_flight: 20</entry></row><row><entry /><entry>[ . . . ] # Section omitted</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0079In one implementation, deployment manifest <b>402</b>′ includes a “updates” section that provides default update properties that may be overridden in individual jobs. For example, while a global update property may define a “max_in_flight” value of 1, the application execution agent job, which typically have many instances, may specify an override “max_in_flight” value of 12.
0080Update settings of deployment manifest <b>402</b>′ may specify a number of test instances to be updated for a job. The test instances, referred to as “canaries,” are updated prior to other instances of the job are updated, thereby allowing the user to catch deployment errors without bringing down all instances of the job. Update settings may further specify a time interval (referred to as “canary watch time”) that indicates a wait period after a job update to a canary test instance before deployment director <b>320</b> checks if the canary instance is healthy, running correctly, and has been successfully updated. In the example produced above, the “canaries” setting indicates one test instance is updated prior to other instances and is given a period of 30,000 milliseconds before deployment director <b>320</b> checks on the test instance. Update settings of deployment manifest may further specify a second time interval (referred to as a “update watch time”) that indicates a wait period after a job update to a non-canary instance before deployment director <b>320</b> checks if the job instance is healthy, running correctly, and has been successfully updated.
0081Update settings of deployment manifest <b>402</b>′ may further specify a number of instances that may be updated concurrently. The number of instances (referred to as a “max in flight” value) enables the user to limit a number of job instances that will be taken down and updated. For example, for a job typically having many instances, such as application execution agent <b>206</b>, the user may wish to upgrade only 12 instances at a time to reduce the impact on cloud services that deploy web applications.
0082Update settings of deployment manifest <b>402</b>′ may further specify a maximum number of errors that may occur during a job update without automatically aborting the update operation. In the example shown above, deployment manifest <b>402</b> specifies a “max_errors” setting of “2” to allow an update operation to attempt completion without raising more than 2 errors.
0083Referring back to <figref idref="DRAWINGS">FIG. 9</figref>, in step <b>906</b>, deployment director <b>320</b> determines one or more changes to a deployment of cloud computing application platform <b>200</b> by comparing updated release <b>704</b>′ to the release of the existing deployment. In one embodiment, deployment director <b>320</b> compares “build versions” of each job <b>708</b> and each package <b>710</b> used by each job <b>708</b> to determine which packages <b>710</b> and jobs <b>708</b> should be updated. In one implementation, deployment director <b>320</b> processes a release manifest of updated release <b>704</b>′ to retrieve deployment metadata and compares the retrieved deployment metadata to metadata stored for existing deployment of cloud computing application platform <b>200</b>.
0084In step <b>908</b>, deployment director <b>908</b> distributes update request having one or more updated jobs <b>708</b>′ and/or packages <b>710</b>′ to each stem cell VM running a job instance determined to be updated in step <b>910</b>, via addressing and discovery layer <b>334</b>. For example, deployment director <b>320</b> may determine that the only change found in an updated release <b>704</b>′ is an upgraded version of a Java Runtime Environment package for an application execution agent job. In this example, deployment director <b>320</b> may distribute an update of the application execution agent job, and leave the remaining components of cloud computing platform application <b>200</b> untouched. In step <b>910</b>, agent <b>322</b> (e.g., executing on a stem cell VM <b>324</b>) receives the update request and updated jobs <b>708</b>′ and/or packages <b>710</b>′ from deployment director <b>320</b> via addressing and discovery layer <b>334</b>.
0085In step <b>912</b>, agent <b>322</b> executes a lifecycle script for existing job <b>708</b> to prepare for an update, for example, by gracefully suspending operation of the job instance on stem cell VM <b>324</b>. The lifecycle scripts may be configured to, when executed by agent <b>322</b>, cease accepting new requests or work, finish processing of requests or work already in progress (sometimes referred to as “draining”), and notify deployment director <b>320</b> of a ready-to-update status. For example, a lifecycle script for an application execution agent job may be configured to stop accepting new web applications for execution, and evacuate running web applications to other running application execution agents.
0086In one embodiment, the lifecycle script is configured to, when executed by agent <b>322</b>, determine which component (e.g., package, application service) are affected by an update and to dynamically configure the lifecycle script to allow for major and minor updates. For example, responsive to determining that an update is to a package containing code for application execution agent job, a lifecycle script may leave web applications running while the existing application execution job process is restarted. In contrast, responsive to determining that an update is to other packages supporting the web applications (e.g., Java, Apache Tomcat Server, Ruby interpreter), the lifecycle script may drain the web applications from the job instance by refusing new web applications and evacuating running web applications to other instances of the application execution agent job. In one implementation, the lifecycle scripts for a job <b>708</b> may return (e.g., output) an integer value that represents a number of milliseconds to wait before executing a stop command (via the monitoring script) after the lifecycle script has been executed. As such, deployment system <b>306</b> may utilize job-specific scripts to avoid killing requests mid-process, thereby reduce service interruptions and down time during updates of cloud computing platform application <b>200</b>.
0087In step <b>914</b>, agent <b>322</b> (e.g., executing in stem cell VM <b>324</b>) applies updated job <b>708</b>′ to update job instance of cloud computing platform application <b>200</b> according to updated release <b>704</b>′. When an updated job <b>708</b>′ is deployed to a stem cell VM <b>324</b>, agent <b>322</b> stores the contents of updated job <b>708</b>′ while retaining contents of previous versions of job <b>708</b> to enable rollbacks. In one embodiment, agent <b>322</b> stores job <b>708</b> in a directory structure having “slots” that represent different build versions of a job (e.g., <deploy_target_dir>/jobskjob name>/<slot>”. An example directory layout (e.g., within stem cell VM <b>324</b>) is provided in Table 8.
0088<tables id="TABLE-US-00009" num="00009"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217pt" align="center" /><thead><row><entry namest="1" nameend="1" rowsep="1">TABLE 8</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Excerpt of Deployment Layout</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="14pt" align="left" /><colspec colname="2" colwidth="203pt" align="left" /><tbody valign="top"><row><entry /><entry>/deploy_target/jobs/cloudcontroller/</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/0/</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/0/monit</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/0/configuration/</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/0/drain</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/0/packages/</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/0/packages/cloudcontroller/-></entry></row><row><entry /><entry> /deploy_target/packages/cloudcontroller/23</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/1/. . .</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/2/. . .</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/live -></entry></row><row><entry /><entry> deploy_target/jobs/cloudcontroller/1</entry></row><row><entry /><entry>/deploy_target/jobs/cloudcontroller/data/</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
0089As shown, each slot contains a monitoring script (e.g., “monit”), configuration files, lifecycle scripts (e.g., “drain”), packages or references to packages that are associated with a build version of job <b>708</b>. Multiple versions stored in slots may be used for updates, rollbacks, and troubleshooting of a deployment. For example, if an upgrade (e.g., to build #<b>29</b>) runs incorrectly, agent <b>322</b> may quickly revert to a previously running version (e.g., build #<b>28</b>). Each slot keeps track of the live version of job <b>708</b> with, for example, a symbolic link or file pointer. A data directory (e.g., “data/”) may be used to pass state across updates and versions, such as a list of process identifiers (PIDs) that a previous application execution agent was monitoring.
0090<figref idref="DRAWINGS">FIG. 10</figref> depicts the cloud computing platform application <b>200</b> of <figref idref="DRAWINGS">FIG. 6</figref> after a deployment of an updated cloud computing platform application <b>200</b>′ using a deployment manifest <b>402</b>′ that specifies release bundle <b>704</b>′ having updated jobs <b>708</b>′ and <b>710</b>′. As shown, deployment director <b>320</b> has distributed an updated application execution agent job <b>606</b>′and an updated cloud controller job <b>602</b>′ to deploy updated cloud computing platform application <b>200</b>′, while leaving the remaining jobs (e.g., router job <b>604</b>, health manager ob <b>608</b>, message bug job <b>614</b>, service provisioner job <b>610</b>, and services job <b>612</b>) unchanged.
0091While discussion of release update management has been focused on updates to application code, data, configurations (e.g., jobs and packages) that make up cloud computing platform application <b>200</b>, it should be recognized that techniques described herein may be extended to modify a logical infrastructure on which cloud computing platform application <b>200</b> is deployed (e.g., logical infrastructure <b>350</b>). For example, deployment manifest <b>402</b> for a given release <b>704</b> may be modified to increase or decrease stem cell VM instances assigned to a particular job, change virtual resource allocations (e.g., CPU, memory) for stem cell VMs, and alter network groups and addressing. In such an embodiment, deployment director <b>320</b> is configured to determine changes to the logical infrastructure <b>350</b> and instruct infrastructure platform <b>308</b> to transition existing logical infrastructure <b>350</b> to an updated logical infrastructure according to an updated release and deployment manifest <b>402</b>.
0092It should be recognized that various modifications and changes may be made to the specific embodiments described herein without departing from the broader spirit and scope of the invention as set forth in the appended claims. For example, while the foregoing description has discussed embodiments of a distributed cloud computing platform application, it should be recognized that any network utilizing application can leverage the techniques disclosed herein, and as such, “cloud computing platform application” as used herein shall be interpreted to include any type of multi-node distributed application that employs network based communications. Furthermore, although the foregoing embodiments have focused on the use of stem cell VMs to host deployed jobs, it should be recognized that any “application container” may be used to host deployed jobs, including such stem cell VMs, processes in virtual machines, kernel level containers, processes in traditional non-virtualized operating systems and any other execution environment that provides an isolated environment capable of running application level code. Similarly, while the various components of deployment system <b>306</b> have been generally described as being implemented in one or more virtual machines (e.g., for load balancing and scalability purposes), it should be recognized that any type of “application container” (as previously discussed above) can also implement such components, including, for example, traditional non-virtualized computing environment background processes, threads or daemons. Furthermore, any combination of different types of “application containers” to host deployed jobs and implement other components (e.g., deployment director <b>320</b>, health monitor <b>336</b>, services <b>328</b>, object store <b>332</b>, workers <b>330</b>, addressing and discovery layer <b>334</b>, etc.) can comprise any particular deployment system <b>306</b> implementation. It should further be recognized that multiple instances of the various components of deployment system <b>306</b> (e.g., deployment director <b>320</b>, health monitor <b>336</b>, services <b>328</b>, workers <b>330</b>, object store <b>332</b>, etc.) may be implemented in alternative embodiments, for example, for scalability purposes.
0093The various embodiments described herein may employ various computer-implemented operations involving data stored in computer systems. For example, these operations may require physical manipulation of physical quantities usually, though not necessarily, these quantities may take the form of electrical or magnetic signals where they, or representations of them, are capable of being stored, transferred, combined, compared, or otherwise manipulated. Further, such manipulations are often referred to in terms, such as producing, identifying, determining, or comparing. Any operations described herein that form part of one or more embodiments of the invention may be useful machine operations. In addition, one or more embodiments of the invention also relate to a device or an apparatus for performing these operations. The apparatus may be specially constructed for specific required purposes, or it may be a general purpose computer selectively activated or configured by a computer program stored in the computer. In particular, various general purpose machines may be used with computer programs written in accordance with the teachings herein, or it may be more convenient to construct a more specialized apparatus to perform the required operations.
0094The various embodiments described herein may be practiced with other computer system configurations including hand-held devices, microprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like.
0095One or more embodiments of the present invention may be implemented as one or more computer programs or as one or more computer program modules embodied in one or more computer readable media. The term computer readable medium refers to any data storage device that can store data which can thereafter be input to a computer system computer readable media may be based on any existing or subsequently developed technology for embodying computer programs in a manner that enables them to be read by a computer. Examples of a computer readable medium include a hard drive, network attached storage (NAS), read-only memory, random-access memory (e.g., a flash memory device), a CD (Compact Discs) CD-ROM, a CD-R, or a CD-RW, a DVD (Digital Versatile Disc), a magnetic tape, and other optical and non-optical data storage devices. The computer readable medium can also be distributed over a network coupled computer system so that the computer readable code is stored and executed in a distributed fashion.
0096Although one or more embodiments of the present invention have been described in some detail for clarity of understanding, it will be apparent that certain changes and modifications may be made within the scope of the claims. Accordingly, the described embodiments are to be considered as illustrative and not restrictive, and the scope of the claims is not to be limited to details given herein, but may be modified within the scope and equivalents of the claims. In the claims, elements and/or steps do not imply any particular order of operation, unless explicitly stated in the claims.
0097Plural instances may be provided for components, operations or structures described herein as a single instance. Finally, boundaries between various components, operations and data stores are somewhat arbitrary, and particular operations are illustrated in the context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within the scope of the invention(s). In general, structures and functionality presented as separate components in exemplary configurations may be implemented as a combined structure or component. Similarly, structures and functionality presented as a single component may be implemented as separate components. These and other variations, modifications, additions, and improvements may fall within the scope of the appended claims(s).
Contents5
11 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US11249851B2 | Cited by | United States of America | Applicant |
| US2019220205A1 | Cited by | United States of America | Search report |
| US11036439B2 | Cited by | United States of America | Applicant |
| US11743188B2 | Cited by | United States of America | Applicant |
| US11256434B2 | Cited by | United States of America | Applicant |
| US11113158B2 | Cited by | United States of America | Applicant |
| US11947489B2 | Cited by | United States of America | Applicant |
| US11528186B2 | Cited by | United States of America | Applicant |
| US11561835B2 | Cited by | United States of America | Search report |
| US11271895B1 | Cited by | United States of America | Applicant |
| US11023328B2 | Cited by | United States of America | Applicant |
| US11347684B2 | Cited by | United States of America | Applicant |
| US11392363B2 | Cited by | United States of America | Applicant |
| US11520650B2 | Cited by | United States of America | Applicant |
| US11750451B2 | Cited by | United States of America | Applicant |
| US10846001B2 | Cited by | United States of America | Applicant |
| US10976938B2 | Cited by | United States of America | Applicant |
| US10782887B2 | Cited by | United States of America | Applicant |
| US10599622B2 | Cited by | United States of America | Applicant |
| US11748203B2 | Cited by | United States of America | Applicant |
| US10845997B2 | Cited by | United States of America | Search report |
| US10896102B2 | Cited by | United States of America | Applicant |
| US10831387B1 | Cited by | United States of America | Applicant |
| US11582168B2 | Cited by | United States of America | Applicant |
| US11740980B2 | Cited by | United States of America | Applicant |
| US11403188B2 | Cited by | United States of America | Applicant |
| US10908848B2 | Cited by | United States of America | Applicant |
| US11086725B2 | Cited by | United States of America | Applicant |
| US12450099B2 | Cited by | United States of America | Applicant |
| US11144431B2 | Cited by | United States of America | Search report |
| US11099937B2 | Cited by | United States of America | Applicant |
| US11456914B2 | Cited by | United States of America | Applicant |
| US10642694B2 | Cited by | United States of America | Applicant |
| US10620871B1 | Cited by | United States of America | Applicant |
| US10915312B2 | Cited by | United States of America | Search report |
| US11556361B2 | Cited by | United States of America | Applicant |
| US11108638B1 | Cited by | United States of America | Search report |
| US10846137B2 | Cited by | United States of America | Applicant |
| US10817380B2 | Cited by | United States of America | Applicant |
| US11748708B2 | Cited by | United States of America | Applicant |
| US11226847B2 | Cited by | United States of America | Applicant |
| US10642697B2 | Cited by | United States of America | Applicant |
| US10877684B2 | Cited by | United States of America | Applicant |
| US2002174421A1 | Cites | United States of America | Applicant |
| US2002178254A1 | Cites | United States of America | Applicant |
| US2003061247A1 | Cites | United States of America | Applicant |
| US2004030710A1 | Cites | United States of America | Applicant |
| US2004183831A1 | Cites | United States of America | Applicant |
| US2005022198A1 | Cites | United States of America | Applicant |
| US2005120332A1 | Cites | United States of America | Applicant |
| US2005120347A1 | Cites | United States of America | Search report |
| US2005198303A1 | Cites | United States of America | Applicant |
| US2005257206A1 | Cites | United States of America | Applicant |
| US2005278518A1 | Cites | United States of America | Applicant |
| US2005289536A1 | Cites | United States of America | Applicant |
| US2006010176A1 | Cites | United States of America | Applicant |
| US2006026585A1 | Cites | United States of America | Search report |
| US2006037071A1 | Cites | United States of America | Applicant |
| US2006079356A1 | Cites | United States of America | Applicant |
| US2006136701A1 | Cites | United States of America | Applicant |
| US2006136897A1 | Cites | United States of America | Applicant |
| US2006248522A1 | Cites | United States of America | Applicant |
| US2007058548A1 | Cites | United States of America | Applicant |
| US2007168956A1 | Cites | United States of America | Applicant |
| US2007204262A1 | Cites | United States of America | Applicant |
| US2007209035A1 | Cites | United States of America | Applicant |
| JP2007507046A | Cites | Japan | Applicant |
| US2008109788A1 | Cites | United States of America | Applicant |
| US2008127175A1 | Cites | United States of America | Search report |
| US2008163171A1 | Cites | United States of America | Applicant |
| US2008163194A1 | Cites | United States of America | Applicant |
| US2008209016A1 | Cites | United States of America | Applicant |
| US2008244577A1 | Cites | United States of America | Applicant |
| US2008307414A1 | Cites | United States of America | Applicant |
| US2009049102A1 | Cites | United States of America | Search report |
| US2009070752A1 | Cites | United States of America | Applicant |
| US2009070853A1 | Cites | United States of America | Applicant |
| US2009100420A1 | Cites | United States of America | Search report |
| US2009112919A1 | Cites | United States of America | Applicant |
| US2009172781A1 | Cites | United States of America | Applicant |
| US2009187995A1 | Cites | United States of America | Applicant |
| US2009216970A1 | Cites | United States of America | Applicant |
| US2009276771A1 | Cites | United States of America | Applicant |
| US2009320012A1 | Cites | United States of America | Applicant |
| US2009320019A1 | Cites | United States of America | Applicant |
| US2010103837A1 | Cites | United States of America | Applicant |
| US2010131590A1 | Cites | United States of America | Applicant |
| US2010142447A1 | Cites | United States of America | Applicant |
| US2010146425A1 | Cites | United States of America | Applicant |
| US2010251328A1 | Cites | United States of America | Applicant |
| US2010257605A1 | Cites | United States of America | Applicant |
| US2010281166A1 | Cites | United States of America | Applicant |
| US2010318649A1 | Cites | United States of America | Applicant |
| US2010325624A1 | Cites | United States of America | Applicant |
| US2010333085A1 | Cites | United States of America | Applicant |
| US2011004916A1 | Cites | United States of America | Applicant |
| US2011029947A1 | Cites | United States of America | Applicant |
| US2011055707A1 | Cites | United States of America | Applicant |
| US2011055714A1 | Cites | United States of America | Applicant |
| US2011055828A1 | Cites | United States of America | Applicant |
25 members in 6 offices
Priority claims3
| Document | Office | Kind | Date |
|---|---|---|---|
| 201161474669 | United States of America | P | |
| 201213428125 | United States of America | A | |
| 201514642650 | United States of America | A |
Members25
| Document | Office | Kind | |
|---|---|---|---|
| US2012266156A1 | United States of America | A1 | |
| US2012266158A1 | United States of America | A1 | |
| US2012266168A1 | United States of America | A1 | |
| WO2012142310A1 | World Intellectual Property Organization (WIPO) | A1 | |
| AU2012242758A1 | Australia | A1 | |
| EP2697714A1 | European Patent Office (EPO) | A1 | |
| CN103608773A | China | A | |
| JP2014514659A | Japan | A | |
| US8997078B2 | United States of America | B2 | |
| US9015710B2 | United States of America | B2 | |
| US9043767B2 | United States of America | B2 | |
| US2015242237A1 | United States of America | A1 | |
| AU2012242758B2 | Australia | B2 | |
| US2016098262A1 | United States of America | A1 | |
| US2016098263A1 | United States of America | A1 | |
| JP6058628B2 | Japan | B2 | |
| US9569198B2 | United States of America | B2 | |
| CN103608773B | China | B | |
| EP2697714B1 | European Patent Office (EPO) | B1 | |
| EP3276488A1 | European Patent Office (EPO) | A1 | |
| US10241774B2This record | United States of America | B2 | |
| US10942724B2 | United States of America | B2 | |
| EP3276488B1 | European Patent Office (EPO) | B1 | |
| US2021349706A1 | United States of America | A1 | |
| US12450099B2 | United States of America | B2 |
94 transactions on the USPTO file
Allowed after 2 non-final rejections, 1 final rejection and 1 RCE.
- Non-final rejections
- 2
- Final rejections
- 1
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Correspondence Address ChangeC.ADB | C.ADB | |
| Payment of Maintenance Fee, 4th Year, Large EntityM1551 | M1551 | |
| Email NotificationEML_NTR | EML_NTR | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Correspondence Address ChangeC.AD | C.AD | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Email NotificationEML_NTR | EML_NTR | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Response to Reasons for AllowanceREAS | REAS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Response to 312 Amendment (PTO-271)MN271 | MN271 | |
| Response to Amendment under Rule 312N271 | N271 | |
| Amendment after Notice of Allowance (Rule 312)AllowedA.NA | A.NA | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail PUB other miscellaneous communication to applicantMM327-D | MM327-D | |
| PUB Other miscellaneous communication to applicantM327-D | M327-D | |
| Workflow - Request for RCE - FinishFRCE | FRCE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Examiner's Amendment CommunicationEX.A | EX.A | |
| Interview Summary - Examiner Initiated - TelephonicEXET | EXET | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Applicant Initiated Interview SummaryMEXIA | MEXIA | |
| Response after Non-Final ActionA... | A... | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Interview Summary- Applicant InitiatedEXIA | EXIA | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Reference capture on IDSRCAP | RCAP | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application ready for PDX access by participating foreign officesCCRDY | CCRDY | |
| PG-Pub Issue NotificationPG-ISSUE | PG-ISSUE | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Preliminary AmendmentA.PE | A.PE | |
| Reference capture on IDSRCAP | RCAP | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Application Dispatched from OIPEOIPE | OIPE | |
| FITF set to NO - revise initial settingFTFI | FTFI | |
| Application Is Now CompleteCOMP | COMP | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Cleared by OIPE CSRL194 | L194 | |
| Patent Term Adjustment - Ready for ExaminationPTA.RFE | PTA.RFE | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Entity Status Set To Undiscounted (Initial Default Setting or Status Change)BIG. | BIG. | |
| Initial Exam Team nnIEXX | IEXX |
4 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Maintenance fee paymentMAFP | MAFP | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication
- 10241774
- Application
- 14964969
Titles
- English
- Release lifecycle management system for multi-node application
Patent term adjustment
- A delay
- +168 daysthe office missed an examination deadline
- Applicant delay
- −111 days
- Net adjustment
- 57 days
Classification
- CPC, 12
- G06F8/65
- G06F9/5055
- G06F9/45533
- G06F8/658
- G06F8/71
- H04L67/10
- G06F9/45558
- H04L67/34
- H04L41/0806
- H04L47/70
- G06F2009/4557
- G06F2009/45595
- IPC, 9
- G06F9 50
- G06F8 658
- G06F9 455
- H04L12 24
- H04L29 08
- H04L12 911
- G06F8 65
- G06F8 71
- H04L47 70