For automated operation management of computer systems

By defining and blueprints, describing the operating entities and their relationships of the system, and using the controller module to manage the state transition of the system, the problem of long and prone to crash in the existing technology is solved, automated management and failure recovery are realized, and system Reliability and testability.

CN112840318BActive Publication Date: 2025-02-11SALESFORCE INC
View PDF 5 Cites 0 Cited by

Patent Information

Application Number
CN201980064899.4
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Priority Date
2019-04-30
Filing Date
2019-12-02
Publication Date
2025-02-11
Estimated Expiration
2039-12-02

AI Technical Summary

Technical Problem

In the prior art, when managing computer systems, the running list is often long and time-consuming, software scripts are prone to crash, resulting in the system being in an unknown state and difficult to test and troubleshoot.

Method used

By defining and blueprints, the operating entities and their relationships of the system are described, and the state transitions of the system are managed using the controller module to achieve automated system management and failure recovery.

Benefits of technology

An automated management system is implemented, reducing human intervention, improving system reliability and testability, and simplifying operation and troubleshooting.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN112840318B_ABST
    Figure CN112840318B_ABST
Patent Text Reader

Abstract

Technology related to operation management of a computer system is disclosed. The computer system can access operation information defining a set of commands for an operation scenario. The computer system can access a blueprint of a set of operation entities to be used in a target computer environment to implement the operation scenario. The computer system can implement the operation scenario of the target computer environment. The implementation may include a hierarchy of execution controller modules, the controller modules having a coordinator controller module at the top level of the hierarchy, the coordinator controller module executable to execute the command set by issuing instructions to a controller module at a lower level of the hierarchy. The hierarchy may include a controller module executable to manage the set of operation entities according to a corresponding blueprint to complete the operation scenario, including by changing the state of one or more of the set of operation entities.
Need to check novelty before this filing date? Find Prior Art

Description

Background Art Technical Field

[0002] The present invention relates generally to operational management of computer systems.

[0003] Description of the Prior Art

[0004] Historically, managing systems, such as ensuring that a service or platform is running and available, has involved executing various run lists (sequences of commands). Such run lists are often long and time consuming for a user to manually enter the commands of the run list into a command line. Eventually, software scripts were written that traversed the entire run list, entering commands on behalf of the user. However, these software scripts often crashed, leaving the management system in an unknown state. As a result, the user still had to participate by determining the current state of the system and then resetting the system to a state where the software script could run again. In addition, since the system typically involves multiple subsystems, multiple run lists must be maintained and executed, each with their own steps and methods for managing the system. BRIEF DESCRIPTION OF THE DRAWINGS

[0005] Figure 1 is a block diagram illustrating example elements of a system capable of managing operational entities according to some embodiments.

[0006] Figure 2 is a block diagram illustrating example elements of an operating entity according to some embodiments.

[0007] Figure 3A is a block diagram illustrating example elements for operating definitions and blueprints for entities according to some embodiments.

[0008] Figure 3B is a block diagram illustrating example elements of an entity descriptor for operating an entity in accordance with some embodiments.

[0009] Figure 3C is a block diagram illustrating example elements for manipulating relationship information of entities according to some embodiments.

[0010] Figure 3D is a block diagram illustrating example relationships of example operational entities according to some embodiments.

[0011] Figure 4 is a block diagram illustrating example elements of a controller module according to some embodiments.

[0012] Figure 5 and Figure 6 is a flow chart illustrating an example method involving operating entities of a management system according to some embodiments.

[0013] Figure 7is a block diagram illustrating example elements of a control API according to some embodiments.

[0014] Figure 8 is a block diagram illustrating example elements of a routing engine, routing layer, and routable entities according to some embodiments.

[0015] Fig. 9 and Fig.10 is a flow chart illustrating an example method involving implementing instructions associated with an operating entity in accordance with some embodiments.

[0016] Figure 11-13 is a flow diagram illustrating an example method involving routing instructions associated with an operational entity in accordance with some embodiments.

[0017] Fig.14 is a block diagram illustrating example elements of a workflow engine according to some embodiments.

[0018] Fig.15 and 16 is a flow chart illustrating an example method involving implementing a workflow according to some embodiments.

[0019] Fig.17 is a block diagram illustrating example elements of an inference engine according to some embodiments.

[0020] Fig.18 and Fig.19 is a flow chart illustrating an example method involving generating a workflow according to some embodiments.

[0021] Fig. 20A and Fig. 20B is a block diagram illustrating example elements of an authorization service according to some embodiments.

[0022] Fig.21 is a block diagram illustrating example elements of an authorization table according to some embodiments.

[0023] Fig. 22 is a block diagram illustrating example elements of a token created by an authorization service according to some embodiments.

[0024] Fig.23 is a flow chart illustrating an example method involving an authorization service according to some embodiments.

[0025] Fig.24 is a block diagram illustrating example elements of a test engine according to some embodiments.

[0026] Fig.25 is a flow chart illustrating an example method involving a test engine according to some embodiments.

[0027] Fig.26is a block diagram illustrating an example computer system in accordance with some embodiments.

[0028] The present invention includes references to "one embodiment" or "an embodiment." The appearances of the phrases "in one embodiment" or "in an embodiment" are not necessarily referring to the same embodiment. The particular features, structures, or characteristics may be combined in any suitable manner consistent with the present invention.

[0029] Within the present invention, different entities (which may be variously referred to as "units", "circuits", other components, etc.) may be described or claimed as being "configured" to perform one or more tasks or operations. This expression, [an entity] configured to [perform one or more tasks], is used herein to refer to a structure (e.g., a physical thing, such as an electronic circuit). More specifically, the expression is used to indicate that the structure is arranged to perform one or more tasks during operation. A structure may be said to be "configured to" perform a task even if the structure is not currently being operated. "A network interface configured to communicate via a network" is intended to cover (for example) an integrated circuit having circuits that perform this function during operation, even if the integrated circuit in question is not currently in use (e.g., a power source is not connected to it). Thus, an entity described or recited as "configured to" perform a task refers to a physical entity, such as a device, a circuit, a memory storing program instructions executable to implement the task, etc. The phrase is not used herein to refer to something intangible. Thus, the "configured to" construct is not used herein to refer to a software entity, such as an application programming interface (API).

[0030] The term “configured to” does not mean “configurable to.” For example, an unprogrammed FPGA would not be considered “configured to” perform a certain function, although it may be “configurable to” perform that function and may be “configured to” perform that function after being programmed.

[0031] As used herein, the terms "first," "second," and the like are used as markers that precede nouns and do not imply any type of ordering (e.g., spatial, temporal, logical, etc.) unless otherwise stated. For example, in a processor having eight processing cores, the terms "first" and "second" processing cores may be used to refer to any two of the eight processing cores. In other words, for example, the first processing core and the second processing core are not limited to processing cores 0 and 1.

[0032] As used herein, the term "based on" is used to describe one or more factors that influence a determination. The term does not exclude the possibility that additional factors may influence the determination. That is, a determination may be based only on specified factors or on specified factors as well as other unspecified factors. Consider the phrase "determining A based on B." The phrase specifies that B is a factor used to determine A or influence the determination of A. The phrase does not imply that the determination of A may also be based on some other factor, such as C. The phrase is also intended to cover embodiments in which A is determined based only on B. As used herein, the phrase "based on" is therefore synonymous with the phrase "based at least in part on." DETAILED DESCRIPTION

[0033] Instead of using software scripts that input commands from a run list, some developers began using large deployment systems, such as to manage their systems. Provides a container-centric management environment for automating the deployment and management of containers, which are portable, self-sufficient units with applications and their dependencies. to deploy containers including, for example, database servers. However, for various reasons, using Managing the entire system is imperfect. Designed to manage containers on top of worker nodes (e.g., virtual machines). For example, Kubernetes cannot be used to manage hardware or information entities such as logical databases or configuration specifications. Does not provide visibility and / or control over everything within the container. For example, It is not possible to connect to the database server instantiated in the container. It is not possible to achieve management goals, such as starting systems within containers, troubleshooting these systems, and collecting metadata on these systems. Other methods, such as and have the same drawbacks as they lack the ability to control the full range of components found in a system.

[0034] While managing systems is traditionally very difficult, testing these systems or troubleshooting problems that occur is equally difficult. As previously mentioned, when a run list fails, it is often difficult to discern the current state of the system because the run list does not provide information about the state it left the system in before it crashed. Additionally, there is often a great deal of complexity within the systems that must be tested. As a result, portions of the system may not be tested if overlooked due to the complexity of the system, and those portions that are tested may not be adequately tested.

[0035] The present invention describes a technology for managing a system that overcomes some or all of the defects of existing methods. In the various embodiments described below, the operating entities (e.g., database servers, logical databases, etc.) within the system are described in a formal, structured manner and are subsequently managed by a controller module. In general, many operating entities within the system are hardware or information stored on hardware. If the operating entity is merely a physical, tangible component of the system, it is referred to as a "hardware entity" within the present invention. Physical server racks and blades are examples of hardware entities. If the operating entity is not hardware, it may include information stored on the hardware, i.e., data. The information may be executable or non-executable. Information that can be executed by the system to perform an operation is referred to as a "software entity" within the present invention. Database server instances, alarm server instances, and metric server instances are examples of software entities. On the other hand, within the present invention, information within a non-executable system is referred to as an "information entity" (or alternatively, an "information-oriented entity"). Database backup images and tenant configurations including data for tenants of a multi-tenant database are examples of information entities.

[0036] These three entity types - hardware, software, and information can be thought of as the "building blocks" of any operational entity that may be found within the system. For the purposes of the present invention, any operational entity within the system may be described using one of the three building block entity types, or using a combined entity type (or, alternatively, "formation") that includes two or more of these building blocks. An example of a formation entity might be an operational entity of a "database system", as a database system may include a processor and storage media (hardware entities), a database server executing on the processor (software entity), and a logical database managed by the database server (information entity). Another example of a formation entity might be an operational entity of a "storage area network", as a storage area network may include storage media, network switches (which may themselves be in the form of hardware and software entities), and data objects stored on the storage media (information entities).

[0037] In various embodiments, the expected / desired state of a system is initially defined as the state that the operator of the system wants the system to be in. Defining the expected state of a system may involve creating definitions and blueprints that define the various operational entities that make up the system and the relationships between these operational entities. These definitions and blueprints may follow a general architecture that provides a structured way to describe the operational entities. As will be further explained, the definitions and blueprints can convey information to the controller module that enables the controller module to manage the operational entities corresponding to the definitions and blueprints. For example, if the controller module is managing a database service operational entity, the controller module can learn from the blueprint linked to the database service that the database service should include three running database servers. If the controller module observes that the database service only includes two running database servers, the controller module can start a third database server to reach the expected state of the database service entity.

[0038] The transition from two running database servers to three running database servers can be regarded as a state transition of the system between two states. Therefore, the operational management of the system can be regarded as or comparable to a state machine in which the system can exist in different states and transition through different states. As described above, the definition and blueprint can define the expected state of the entities in the system, thereby defining the system as a whole. In various embodiments, the controller module of the system converts the system from one state to another until the system reaches the expected state. The controller module can then continue to monitor the system to ensure that the system remains in the expected state. If the system leaves the expected state (for example, an entity exits due to a failure), the controller module can implement one or more commands to move the system back to the expected state by issuing instructions to the components in the system. In some cases, the command can be written in a way that allows the user to read the command (that is, a human-readable command), and therefore the controller module can translate the command into an instruction that the component in the system can understand; in some cases, the command can be an understandable instruction, so the controller module may not have to translate it-the controller module can send the command as an instruction to the component. As used herein, the term "component" is intended to cover operating entities and controller modules. Therefore, the term "component" can refer to an operating entity or a controller module.

[0039] To facilitate transitions between system states, in various embodiments, a control application programming interface (API) is implemented to provide a way to understand the current state of the system and make changes to the system when necessary. The control API can provide structured access to operational entities in the system through a set of API calls that provide a mechanism for understanding the state of an operational entity and for invoking functions supported by the operational entity. In various embodiments, a controller module hosts the control API and thus enables users and / or other controller modules to access the operational entities managed by those controller modules via the control API.

[0040] In various embodiments, the controller modules and operating entities in the system can form a hierarchical structure, wherein the coordinator controller module can reside at the top level of the hierarchical structure and can issue instructions (which may include control API calls) to controller modules and operating entities residing in lower layers downward through the hierarchical structure. As an example, the coordinator controller module can receive commands related to a specific entity from a user via a command line tool. Therefore, the coordinator controller module can route instructions (based on commands) to the management controller module through the levels of the hierarchical structure, and the management controller module can implement the instructions by making appropriate control API calls to the specific entity. The call can cause the specific operating entity to transition to another state.

[0041] This paradigm allows for the implementation of operational scenarios. In general, the term "operational scenario" as used herein refers to a series of steps for performing an action. For example, one operational scenario may include starting a database service, while another operational scenario may include updating a database service. Operational scenarios may be implemented using workflows comprising an ordered set of commands that may be executed via a set of control API calls. For example, a workflow for updating a database service may include commands for transferring operational entities of a database service from "online" to "offline", commands for transferring them from their current version to an updated version, and commands for transferring them from offline back to online. In some embodiments, the coordinator controller module accesses the workflow information and, based on the workflow information, issues instructions downward through the hierarchy to change the appropriate operational entities, thereby completing the corresponding workflow.

[0042] Alternatively, the operation scenario can be implemented by defining a set of expected states for appropriate entities. Then, the coordinator controller module can determine the commands for reaching these states from the set of expected states. For example, the expected state (or goal) may be a running database service with three database servers. Therefore, the coordinator controller module can generate a command with control API calls for starting three database servers. This process can be called the coordinator "reasoning" about the expected state. Therefore, in some cases, this reasoning allows the user to define the goal without having to express the specific steps or actions required to achieve the goal, and these steps or actions can be determined by the "reasoning" performed by the coordinator. In some cases, this method may be more robust than defining a workflow, because the system may end with its own expected state (for example, the disappearance of a container may satisfy the expected state without the container).

[0043] These techniques may have advantages over existing methods because they allow the entire system to be described and subsequently managed in an automated manner. Existing methods allow containers to be defined and instantiated, but do not provide mechanisms for controlling all components in the system (e.g., hardware, software within the container, information constructs such as logical databases, etc.). In addition, these techniques allow the expected state of the system to be defined, and therefore allow the system to be controlled in an automated manner, which reduces the reliance on human intervention in the management system. That is, a controller module within the system can continuously monitor the system to ensure that the system is in the expected state. If the system changes to a different, undesirable state, the controller module can in many cases convert the system back to the expected state without human intervention. This automated approach can reduce the number of people involved in the management system. In addition, the use of a common format for describing entities can simplify operations, increase the ability to test operational scenarios, and reduce the amount of code required to manage software in a production environment. These techniques can also be applied to mutable deployments, where the deployment can be changed (e.g., by adding a set of nodes to an application server pool) without recreating the entire deployment, and can be applied to immutable deployments (e.g., where the entire deployment is recreated for each change in the deployment). These techniques also provide integrated fault testing (compared to having to use completely separate tools), integrated security, and integrated troubleshooting.

[0044] Now turn to Figure 1, depicts a block diagram of a system 100. In the illustrated embodiment, the system 100 includes an operational entity 110, a controller module 120 (including a coordinator controller module 120), a database 130, and an authorization service 140. Also as shown, the database 130 includes operational information 135, and the authorization service 140 includes a test engine 150. In some embodiments, the system 100 may be implemented differently than shown. As an example, the system 100 may include multiple coordinator controller modules 120, another layer of operational entities 110 and / or controller modules 120, multiple databases 130, and the like.

[0045] In various embodiments, the operation entity 110 includes one or more elements and a collection of information related to these elements. Examples of elements may include, for example, physical processors, physical memories, virtual machines, virtual machine images, logical databases, database snapshots, containers, container images, database services, operating systems, workflows, database centers, network boundaries / domains, etc. As previously mentioned, there are three basic types of operation entities 110: hardware entities 110, software entities 110, and information entities 110. In various embodiments, the type of operation entity 110 depends on the elements that constitute the operation entity. For example, an operation entity 110 that only includes a physical processor is considered a hardware entity 110. These three basic types can be used to manufacture a formation operation entity 110. The formation entity 110 is a collection of two or more entities, each of which has zero or more relationships with other entities. An example of a formation entity 110 is a database system entity 110, which includes a processor and a storage medium (hardware entity 110), a database server executed on the processor (software entity 110), and a logical database managed by the database server (information entity 110).

[0046] An operation entity 110 may include or be associated with a set of information describing the operation entity. The information may include: a definition, which may define what elements and variables may be used to constitute a particular kind of operation entity 110; and a blueprint, which may define an instance of that kind of operation entity 110. For example, a definition may define a database service entity 110 as including a database server entity 110, while a blueprint may define a particular database service entity 110 as including 15 database server entities 110. In various embodiments, the information associated with the operation entity 110 further defines the functions of the control API. Such information may be used by the controller module 120 to understand what functions the operation entity 110 may require to manage the operation entity, for example by transitioning the operation entity to different states.

[0047] In various embodiments, the controller module 120 is a set of software routines that can be executed to manage the controller module 120 and / or the set of operating entities 110. In some embodiments, the controller module 120 is defined in a generic manner so that each controller module 120 in the system 100 supports the same functions, although they can serve in different roles in the system 100. The controller module 120 can also work in a variety of environments, including bare metal, Amazon Web Services (AWS), and For example, in In the environment, the controller module 120 can act as a controller that interacts with other controller modules 120 in the database container. Operator. On AWS, the AWS cloud may be defined as an operations entity 110 that distributes virtual machine entities 110. Inside each virtual machine entity 110 may be a controller module 120 that manages the contents of that virtual machine entity (operation entity 110).

[0048] To manage the operational entities 110 and / or the controller module 120, the controller module 120 may access a control API for each operational entity 110 under its control or authorization. In various cases, the control API calls for the control API may be the same for all operational entities 110, although the implementation of the functions for those control API calls may be different between the operational entities 110. By issuing control API calls, the controller module 120 may obtain information about the operational entity 110 (e.g., a blueprint) and may transition the operational entity between states. As an example, the controller module 120 may send a "transition" control API call to the database server entity 110 to transition the database server element from offline to online.

[0049] In various embodiments, the controller module 120 maintains information about the operational entities 110 managed by the controller module and / or the controller module 120. In some cases, when started, the controller module 120 may access a properties file that provides initial information to the controller module 120; such information may identify port numbers to listen on and any operational entities 110 controlled by the controller module 120. The information maintained by the controller module 120 may also include information collected from the operational entities 110, such as blueprints, defined, and advertised control API calls supported by those operational entities.

[0050] As previously described, the operational entities 110 and the controller modules 120 may form a hierarchy. The controller module 120 at the top of the hierarchy is referred to as a coordinator controller module. The coordinator controller module 120 may have the task of achieving a high-level goal, and may therefore coordinate other controller modules 120 in other layers of the hierarchy to achieve that goal. As an example, the coordinator controller module 120 may have the task of updating the entire database fleet entity 110. As a result, the coordinator controller module 120 may regulate the update of each database cluster entity 110 within the database fleet entity 110. This may utilize other controller modules 120 that manage the operational entities 110 within those database cluster entities 110. However, those controller modules 120 may hide the details of what happens when those database cluster entities 110 are updated from the coordinator controller 120. In some embodiments, the system 100 may include multiple hierarchical structures, each of which may include their coordinator controller 120.

[0051] In various embodiments, the database 130 is a collection of information organized in a manner that allows access, storage, and manipulation of the information. The database 130 may be implemented by a single storage device or multiple storage devices connected together over a network such as a storage attachment network and configured to redundantly store information to prevent data loss. The database 130 may include supporting software that allows the controller module 120 to perform operations (e.g., access, store, manipulate, etc.) on the information in the database 130. In various embodiments, the database 130 stores definitions, blueprints, operational information 135, and / or other information related to the operational entities 110 within the system 100. When managing the operational entity 110, the controller module 120 may access information from the database 130 so that it can appropriately manage the operational entity.

[0052] In various embodiments, the operation information 135 is a collection of information that defines an operation scenario for the target environment 137. As described above, an operation scenario is a series of steps for performing an action (or high-level goal). In some embodiments, the operation scenario is defined in a workflow document, where a given workflow document can specify a set of commands for implementing a series of steps for a corresponding operation scenario. A given operation scenario can be associated with a target environment 137 so that the operation scenario can change the state of the target environment.

[0053] In various embodiments, a target environment 137 is a set of controller modules 120 and / or operational entities 110 that can be operated as part of an operational scenario. For example, in an operational scenario of updating a database fleet entity 110 to a newer version, the database fleet entity 110 (including all of its operational entities 110 and controller modules 120) is considered the target environment 137 for the operational scenario. Another operational scenario may involve a different target environment 137 with different operational entities 110 and / or controller modules 120.

[0054] In various embodiments, the authorization service 140 may be operable to protect the system 100 from inappropriate use (whether malicious or non-malicious) by authenticating ("who is trying to change the state"), authorizing ("are they allowed to change the state?"), and auditing (recording the results of authentication and authorization) commands issued to the controller modules 120 and / or operating entities 110. For example, the service 140 may audit commands issued by a user to the coordinator controller 120 to prevent the execution of any unauthorized issued commands. The service 140 may also audit commands issued by the coordinator controller 120 to other controller modules 120 (or to other controller modules 120 of the operating entity 110) to ensure that the user is not attempting to gain authorized access by bypassing the coordinator controller 120. As will be discussed below with respect to Figures 20-23, in various embodiments, the authorization service 140 maintains a security rule set that defines allowable actions for implementing various operating scenarios within the target computing environment, and verifies that the issued commands comply with the allowable actions defined by the security rule set.

[0055] In various embodiments, the test engine 150 is a test component operable to inject fault conditions into the system 100 in order to identify states in which the system 100 cannot function properly. Typically, these faults may involve crashes, hangs, errors, lockstep sequencing issues, time injections, etc. For example, the test engine 150 may disable a database server used by the system 100 to see if such an action puts the system 100 in an unrecoverable state. As will be described below in conjunction with Fig.24 and 25As described in more detail, in various embodiments, the test engine 150 interfaces with one or more controller modules 120 and / or operational entities 110 to determine the current state of the system 100. For example, the test engine 150 may collect information about the current state of the system 100 before injecting a fault condition, and then collect information about the current state after the injection, in order to determine how the state of the system 100 has been altered. In some embodiments, the test engine 150 may also monitor the state of the system 100 to inject specific fault conditions when the controller module 120 issues specific commands. That is, the test engine 150 may use this point in the architecture to coordinate fault injection (e.g., before the change, after the change, and during the change) as requests flow through the authorization service 140. For example, the test engine 150 may determine that the operational entity 110 is undergoing an update based on the requests processed by the authorization service 140, and then may attempt to inject a fault condition that may cause the update to fail, in order to determine whether the system 100 is able to handle the fault condition during the update process. In the illustrated embodiment, test engine 150 is shown integrated into authorization service 140 because such integration may allow test engine 150 to gain greater insight into the current state of system 100 as various components request permission to perform various actions from service 140. In some embodiments, external test systems may interact with test engine 150 to orchestrate changes and inject faults into system 100.

[0056] Now turn to Figure 2 , depicts a block diagram of an operational entity 110. In the illustrated embodiment, the operational entity 110 includes a blueprint 210, one or more elements 220, and a control API implementation 230. As shown, the operational entity 110 interfaces with a controller module 120. In some embodiments, the operational entity 110 may include a controller module 120 that interfaces with an external controller module 120. As an example, the operational entity 110 may be a software container having a controller module 120 that communicates with a coordinator controller module 120. In some embodiments, the operational entity 110 may be implemented differently than shown, for example, the blueprint 210 may be stored at a database 130 instead of the operational entity 110 (or it may be stored at both the entity 110 and the database 130).

[0057] As previously explained, in order to enable the operational entities 110 of the system 100 to be managed, in various embodiments, a blueprint 210 containing information about the operational entities themselves and their relationships with other entities 110 and definitions (which are about Figure 3A 10. Such information can convey to the controller module 120 how to manage the different operating entities 110.

[0058] In various embodiments, a blueprint 210 is a collection of information that defines various aspects of a particular implementation of an operational entity 110. A blueprint 210 may define a desired or intended state of an operational entity 110 that an administrator of the system 100 would like the operational entity 110 to exist. For example, one particular blueprint 210 may describe a database fleet entity 110 as including 15 database servers, while another particular blueprint 210 may describe a database fleet entity 110 as including 10 database servers. Figures 3A-3D As discussed in more detail, in various embodiments, the blueprint 210 includes an entity descriptor that can define values ​​for a set of selected properties that can be used to manage the operational entity 110, relationship information that can describe the relationship between the operational entity 110 and other entities, and entity-specific variables that can be used to configure the operational entity 110. The blueprint 210 for the operational entity 110 can be provided and / or modified by a user of the system 100, a user who develops the entity (e.g., a user who writes software), the controller module 120, etc., which can include any combination thereof. For example, when the corresponding operational entity 110 is updated to a new version, the management controller module 120 can change the version information in the entity descriptor.

[0059] In various embodiments, the blueprint 210 may be deployed to generate an instance of the operational entity 110 defined by the blueprint. For example, an operator may provide a blueprint 210 for a database service entity 110 that may define the expected state of the database service entity as having 15 database servers. The controller module 120 responsible for deploying the blueprint may observe the state of the system 100 to determine whether the database service entity 110 exists. If the database service entity 110 does not exist, the management controller module 120 may instantiate the database service entity 110 according to the blueprint 210 of the database service entity 110 (e.g., by communicating with a specific operational entity 110 that is capable of generating 15 database servers).

[0060] In some instances, the blueprints 210 may form a hierarchical structure, where implementing a top-level blueprint 210 may involve implementing a lower-level blueprint 210. Thus, a blueprint 210 may include references to other blueprints 210. Returning to the previous example, the blueprint 210 of the database service entity 110 may include a reference to a blueprint 210 of a specific implementation of the database server entity 110. Thus, when instantiating the database service entity 110, the management controller module 120 may look up the blueprint 210 of the database server entity 110 via the blueprint 210 of the database service entity 110 so that it can instantiate the database server.

[0061] In various embodiments, element 220 includes hardware (e.g., physical processors and memory), software (e.g., a database server), information constructs (e.g., a logical database), or any combination thereof (e.g., element 220 may be an operational entity 110 that includes its own collection of elements 220 as hardware, software, and information constructs). Examples of element 220 include, but are not limited to, physical processors and memory, top-of-rack network switches, operating systems, virtual machines, virtual machine images, database servers, logical databases, database snapshots, containers, container images, workflows, database hubs, tenant snapshots, and tenants. In various cases, controller module 120 may be connected to element 220 via control API implementation 230.

[0062] In various embodiments, the control API implementation 230 is a set of software routines executable to perform one or more functions of the control API (see Figure 7 20). The control API implementation 230 may be used as an interface between the element 220 / blueprint 210 and the controller module 120. Consider an example where the control API includes a "create" function and there is a database server entity 110. The database server entity 110 may include a control API implementation 230 that defines a set of operations for the create function to create a logical database entity 110. Thus, the controller module 120 that manages the database server entity 110 may issue a create function API call to invoke the logic of the control API implementation 230 to create the logical database entity 110. Such logic may instruct the database server (element 220) to create the logical database entity. In various embodiments, the control API implementation 230 may differ between operational entities 110, wherein each operational entity 110 may uniquely implement one or more of the functions supported by the control API.

[0063] In various embodiments, the control API implementation 230 is implemented as a wrapper that encapsulates and hides the potential complexity of the element 220. For example, a database server may include a service or command line tool responsible for starting and stopping the database server, and the control API implementation 230 may be located on top of the service so that if the controller module 120 calls a conversion function of the control API to convert the database server to online, the control API implementation 230 may handle the communication with the database server's service to start the database server. The complexity of starting the database server may be hidden from the controller module 120, which may only have to make the appropriate control API calls.

[0064] In some embodiments, the operational entity 110 may notify the controller module 120 of functions of the control API that are implemented by the control API implementation 230 and are therefore callable. In some cases, the operational entity 110 may notify this information after instantiation; in other cases, this information may be notified by the controller module 120 upon request. For example, the controller module 120 may issue a "describe" function API call to the operational entity 110 to receive information about the control API implementation 230. In some embodiments, the controller module 120 may be instantiated to include information about the control API implementation 230, and may not have to communicate with the operational entity 110 to receive such information.

[0065] By understanding the control API implementation 230 of the operational entity 110, the controller module 120 may be able to process the instruction. As an example, the controller module 120 may receive an instruction to create a logical database entity 110. The controller module 120 may manage a database server entity 110 that notifies it that it can create a logical database entity 110. Likewise, the controller module 120 may then issue a create function API call to the database server entity 110 to create the logical database entity 110. However, if the information maintained by the controller module 120 indicates that the instruction cannot be processed because the managed operational entity 110 does not support the appropriate function, the controller module 120 may reject the instruction. In some cases, the controller module 120 may notify the issuing controller module 120 that the instruction has been completed or cannot be completed.

[0066] Now turn to Figure 3A , a block diagram of blueprints 210 and definitions 310 within database 130 is shown. In the illustrated embodiment, both blueprints 210 and definitions 310 include entity descriptors 320, relationship information 330, and variables 340 including desired state variables 345. In some embodiments, blueprints 210 and / or definitions 310 may be implemented differently than shown. For example, as shown, a blueprint 210 may correspond to more than one definition 310.

[0067] In various embodiments, a definition 310 is a collection of information that describes various aspects of an operational entity 110. Similar to a blueprint 210, a definition 310 includes an entity descriptor 320, relationship information 330, and variables 340, as shown. In contrast to a blueprint 210, a definition 310 may not define a specific instance of an operational entity 110, but may describe what values ​​may be included in a corresponding blueprint 210. That is, a definition 310 may describe what a blueprint 210 should look like. For example, a definition 310 of a database fleet entity 110 may describe a database fleet as including a database server entity 110, while a corresponding blueprint 210 may define a specific database fleet entity 110 as including 15 database server entities 110. In various cases, a definition 310 may be used to confirm that a corresponding blueprint 210 is allowed. Continuing with the previous example, if a blueprint 210 defines a database fleet entity 110 as including an application server entity 110 in addition to 15 database server entities 110, the blueprint 210 may be rejected because the definition 310 of the database fleet entity 110 does not describe the database fleet entity 110 as including an application server entity 110. In some embodiments, the definition 310 may include a set of properties having predetermined values ​​and the controller module 120 writes the values ​​of the set of properties to the corresponding set of properties of the blueprint 210 when the blueprint is deployed.

[0068] In some embodiments, a blueprint 210 may correspond to multiple definitions 310. For example, a blueprint 210 for a particular platform service entity 110 may describe the platform service entity as having a database server entity 110 and an application server entity 110. Thus, the blueprint 210 may be associated with the definition 310 of the database server entity 110 and the definition 310 of the application server entity 110. In various cases, a blueprint 210 may not be valid if it does not satisfy all of the relationships specified by the definition 310 associated with the blueprint. For example, the definition 310 of the application server entity 110 may describe the application server entity 110 as being dependent on the metric server entity 110. Thus, the blueprint 210 of the previous example may not be valid unless it describes the metric server entity 110. Thus, a blueprint 210 may describe how to put together a set of operational entities 110 to satisfy the relationships defined in the corresponding definition 310.

[0069] In various embodiments, an entity descriptor 320 is a collection of information that describes various attributes of a corresponding operational entity 110. These attributes may be the same across all operational entities 110, but the values ​​given may differ between the operational entities 110. For example, an entity descriptor 320 may include a kind attribute that indicates whether the operational entity 110 is hardware, software, or information. Thus, an entity descriptor 320 for a processor entity 110 may indicate hardware, while an entity descriptor 320 for a metric server entity 110 may specify software. In various embodiments, the entity descriptor 320 communicates information to the controller module 120 about how the corresponding operational entity 110 may be managed. Continuing with the previous example, the controller module 120 may know that it cannot clone the processor entity 110 because its entity descriptor 320 specifies hardware for the kind attribute. Reference Figure 3B The various attributes of entity descriptor 320 are discussed in more detail.

[0070] In various embodiments, the relationship information 330 is a collection of information that specifies the relationship between a particular operational entity 110 and other operational entities 110. The relationships between the operational entities 110 may be defined using various attributes that may be common across all relationships, but whose values ​​may differ between relationships. For example, the relationship information 330 may include a "type" attribute for each relationship. The relationship information 330 for an application server entity 110 may specify that a "dependency" type relationship exists between the application server entity 110 and the database server entity 110. Similar to the entity descriptor 320, the relationship information 330 may communicate to the controller module 120 information about how the corresponding operational entity 110 may be managed. In various cases, the relationships between the operational entities 110 may affect the order in which operational scenarios may be implemented, and in which commands corresponding to the operational scenarios may be executed. Continuing with the previous example, the controller module 120 may know that the database server entity 110 should be instantiated before the application server entity 110 because the application server entity 110 is dependent on the database server entity 110. About Figure 3C The various attributes of relationship information 330 are discussed in more detail.

[0071] In various embodiments, variables 340 are a collection of additional information useful for managing the corresponding operational entity 110. As shown, variables 340 include expected state variables 345. In various embodiments, the expected state variables 345 specify the expected state of the corresponding operational entity 110. For example, the expected state variable 345 of the database server entity 110 may specify the value "online". Variables 340 can be used to specify the current state, such as one or more service endpoints of Internet Protocol (IP) ports, IP addresses, configuration variables, etc. For example, variables 340 can specify a permanent data store that a specific database server entity 110 should use. In various embodiments, variables 340 can be hierarchical in nature. Variables 340 can also include attributes, such as whether they are defined at deployment time or at another point in time. For example, an IP address variable 340 can be associated with an attribute indicating that the IP address variable 340 will be filled during the deployment of the corresponding operational entity 110.

[0072] Now turn to Figure 3B , depicts a block diagram of an entity descriptor 320. In the illustrated embodiment, the entity descriptor 320 includes a universal unique type (UUT) 321, a lifecycle 322, a version 323, a kind 324, a universal unique identifier (UUI) 325, a context identifier 326, a vendor 327, a name 328, and a creation date 329. The entity descriptor 320 may include more or less information than shown. For example, the entity descriptor 320 may not include the name 328.

[0073] In various embodiments, the universally unique type 321 specifies a data value that indicates the type or kind of operational entity 110. Examples of UUT 321 include, but are not limited to, "database server," "application server," "logical database," "physical host system," "database backup," "tenant," "workflow," "log extension," and "data extension." In some embodiments, UUT 321 may be used as a key for looking up corresponding definitions 310 and / or blueprints 210. For example, relationship information 330 may specify an operational entity 110 of a relationship using its UUT 321. This may allow the management controller module 120 to access the corresponding definitions 310 and blueprints 210 to obtain information related to managing those entities 110. For example, regarding Figure 8 As discussed in more detail, UUT 321 (in various cases, with lifecycle 322 and version 323) can also be used to route instructions to specific operational entities 110. In addition, UUT 321 can be displayed to a user so that the user can understand what operational entities 110 exist within system 100.

[0074] In various embodiments, the life cycle 322 specifies a data value indicating the stage that the operational entity 110 is in within its life cycle. Examples of life cycle stages include, but are not limited to, specification, snapshot, and instance. For example, a database backup image may be a snapshot stage of a database. The life cycle 322 may affect the type of operations that may be performed with respect to the operational entity 110. For example, when the database server entity 110 is in its instance stage, the controller module 120 can instruct the database server entity to create a database backup image; however, if the database server entity 110 is in its specification stage, the controller module 120 may not instruct the database server entity to create a database backup image. In various embodiments, the life cycle 322 may be used together with the UUT 321 as a key for finding the corresponding definition 310 and / or blueprint 210. In some embodiments, the life cycle 322 provides a path between different life cycle stages and may be used to automate the pipeline of the operational entity 110, for example, from source code to live production software, by controlling API calls to transition the operational entity through states.

[0075] In various embodiments, the version 323 specifies a data value indicating a version of the operational entity 110. For example, the version 323 of a particular database server entity 110 may specify version "3.2.4". Similar to the lifecycle 322, the version 323 may affect the type of operations that may be performed with respect to the operational entity 110. For example, a newer version of the operational entity 110 may include additional implementations of one or more functions of the control API. In some embodiments, the version 323 may be used together with the UUT 321 and the lifecycle 322 as a key for looking up a particular definition 310 and / or blueprint 210.

[0076] In various embodiments, the category 324 specifies a data value that indicates the form or representation (i.e., hardware, software, information, or form) of the operational entity 110. Like other attributes of the entity descriptor 320, the category 324 may affect how the operational entity 110 may be managed by the controller module 120. For example, if the operational entity 110 is in the form of software, it may be replicable; however, another operational entity 110 that is in the form of hardware may not be replicable. In various embodiments, the category 324 affects what values ​​may be used for other attributes in the entity descriptor 320. As an example, an operational entity 110 that is in the form of software may have a snapshot lifecycle phase, but an operational entity 110 that is hardware may not have a snapshot lifecycle phase.

[0077] In various embodiments, a universally unique identifier (UUID) 325 specifies a data value that uniquely identifies an operational entity 110 independent of any other information specified by a blueprint 210 or definition 310. As an example, a particular operational entity 110 may have a UUID 325 of "C7366F4-4BED-8BF0-BF281". The UUID 325 enables a particular operational entity 110 to be directly referenced by a controller module 120 or a user. This can eliminate ambiguity in situations where a controller module 120 manages multiple operational entities 110 of the same type (e.g., two database server entities 110). As will be discussed in more detail later, a given command may specifically identify an operational entity 110 using its UUID 325. Likewise, the controller module 120 may route a given command to the appropriate management controller module 120 based on the UUID 325 identified by the command.

[0078] In various embodiments, context identifier (CID) 326 specifies a data value that indicates a context associated with operational entity 110. For example, CID 326 may specify an organization ID for an organization / tenant associated with corresponding operational entity 110. In some embodiments, CID 326 may be used to associate metrics of operational entity 110 with a particular tenant of system 100.

[0079] In various embodiments, vendor 327 specifies a data value identifying a vendor associated with operational entity 110. In various embodiments, name 328 specifies a data value identifying a name (such as a product name, workflow name, tenant name, etc.) of operational entity 110. In various embodiments, creation date 329 specifies a data value identifying a time (e.g., nanoseconds since epoch UTC) when operational entity 110 was created.

[0080] Now turn to Figure 3C , a block diagram of relationship information 330 is shown. In the illustrated embodiment, relationship information 330 includes relationship 331. As further shown, relationship 331 includes UUT 321, lifecycle 322, version 323, relationship type 332, direction 333, cardinality 334, and attribute 336. Relationship 331 may include more or less information than shown. For example, relationship 331 may not include version 323.

[0081] In many cases, the operational entities 110 within the system 100 may be related in some manner. As an example, an operational entity 110 that collects metric information from another operational entity 110 is dependent on the existence of the other entity. In various embodiments, the manner in which the operational entity 110 is managed by the controller module 120 is dependent on the relationships 331 that exist between the operational entity and the other operational entities 110. As shown, the relationships 331 of the entities are defined in the relationship information 330 and include multiple variables.

[0082] In various embodiments, to identify the operational entity 110 to which a particular operational entity 110 is related, the relationship 331 specifies a UUT 321, a lifecycle 322, and a version 323. For example, a controller module 120 may control a database server entity 110. Thus, a relationship 331 corresponding to a relationship between a controller module 120 and a database server entity 110 may specify a UUT 321 of "database server", a lifecycle 322 of "instance", and a version 323 of "3.21". In some embodiments, a relationship 331 may indicate a UUID 325 that specifically identifies the operational entity 110 associated with the relationship.

[0083] In various embodiments, the relationship type 332 specifies a data value indicating the type of relationship between a particular operational entity 110 and one or more other operational entities 110. The types of relationships include, but are not limited to, a "host" relationship, a "control" relationship, a "depends on" relationship, a "consist of" relationship, a "contained in" relationship, a "part of" relationship, and a "provides for" relationship. In various embodiments, a host relationship is a relationship in which a particular operational entity 110 hosts one or more other operational entities 110. For example, a database server entity 110 may host a logical database entity 110. In various embodiments, a control relationship is a relationship in which a particular operational entity 110 controls one or more other operational entities 110. As an example, a controller module 120 may control a metric server entity 110 and a database server entity 110. In various embodiments, a dependency relationship is a relationship in which a particular operational entity 110 depends on one or more other operational entities 110. As an example, a metric server entity 110 may depend on an existing database server entity 110 so that it can collect metrics. In various embodiments, a "consist of" relationship is a relationship in which a particular operational entity 110 is composed of one or more other operational entities 110. For example, a database service entity 110 may be composed of two database server entities 110. In various embodiments, a "contained in" relationship is a relationship in which a particular operational entity 110 is contained in one or more other operational entities 110. For example, a database server entity 110 may be contained in a container entity 110. In various embodiments, a provides relationship is a relationship that identifies one or more operational entities 110 that may be provided by a particular operational entity 110. As an example, a container environment entity 110 may provide (or instantiate) a container entity 110. In some embodiments, there may be an "I am" relationship in which a particular operational entity 110 describes itself. For example, a database server entity 110 may have an "I am" relationship value of "database server".

[0084] In various embodiments, the direction 333 specifies a data value indicating the direction of a relationship between a particular operational entity 110 and one or more other operational entities 110. The direction 333 may indicate whether the particular operational entity 110 is subordinate to another operational entity 110. Consider an example where a relationship exists between a database server entity 110 and a logical database entity 110. A relationship 331 defined from the perspective of the database server entity 110 may specify a relationship type 332 of "host" and a direction 333 of "false". However, a relationship 331 defined from the perspective of the logical database entity 110 may specify a relationship type 332 of "host" and a direction 333 of "correct". The resulting interpretation of these two relationships 331 may be that the database server entity 110 hosts the logical database entity 110, and the logical database entity 110 is hosted by the database server entity 110. As another example, the direction 333 may indicate that the controller module 120 controls the database server entity 110 (in the controller's relationship information 330) and that the database server entity 110 is controlled by the controller module (in the database server's relationship information 330).

[0085] In various embodiments, the cardinality 334 specifies a data value indicating the number of operational entities 110 associated with the corresponding relationship type 332 (which may exclude the specific operational entity 110 for which the corresponding relationship 331 is defined). For example, the database service entity 110 may be composed of three database server entities 110. As a result, the cardinality 334 may specify a value of "3" for the relationship 331 between the database service entity 110 and the three database server entities 110 from the perspective of the database service entity.

[0086] In various embodiments, the attributes 335 specify additional data values ​​useful for managing the corresponding operational entities 110. The attributes 335 may specify the protocol used by the associated operational entities 110 to communicate, the state of the relationships in which those operational entities exist, where those operational entities are located within the system 100, etc. As an example, the attributes 335 may indicate that the operational entity 110 of a particular relationship is up and running. As the states of different relationships within the system 100 change, the controller module 120 may update the relationship information 330 (e.g., update the attributes 335).

[0087] In some embodiments, in a manner similar to entity descriptors 320, relationships 331 can convey information to controller module 120 to help it understand how to manage operational entities 110. Consider an example where metric server entity 110 depends on database server entity 110. When it is desired to start metric server entity 110, controller module 120 can determine that database server entity 110 needs to be started first, based on metric server entity 110's dependence on database server entity 110. Thus, the controller can use relationship information 330 along with information from definitions 310 and blueprints 210 to infer about how to transition operational entities 110 between states (e.g., from offline to online). In various cases, relationship information 330 can be used for resource utilization of a computing system. For example, a container entity 110 can be contained by a host system entity 110, and container entity 110 thus uses a portion of the resources of the host system. Similarly, software contained within container entity 110 uses a portion of the resources of the container. This information can be used to provide and automate capacity planning.

[0088] Now turn to Figure 3D , a block diagram of the relationships between exemplary operational entities 110 is shown. In the illustrated embodiment, operational entity 110A is an application server entity, operational entity 110B is a database server entity, and operational entity 110C is a metric server entity. As shown, operational entity 110B is dependent on operational entity 110A, and there is a mutual dependency between operational entities 110A and 110C. As discussed, the relationships between operational entities 110 can affect how controller module 120 manages those operational entities. For example, when instantiating operational entities 110A-C, controller module 120 can instantiate operational entity 110A before operational entity 110B because operational entity 110B is dependent on the existence of operational entity 110A.

[0089] Now turn to Figure 4 , a block diagram of the controller module 120 is shown. In the illustrated embodiment, the controller module 120 includes operation entity information 410, control API information 420, operation entity manager engine 430, workflow engine 440, and reasoning engine 450. In some embodiments, the controller module 120 may be implemented differently than shown. For example, the controller module 120 may not include the reasoning engine 450.

[0090] As previously mentioned, the controller module 120 can manage the operation entity 110 and the controller module 120. To manage them, in various embodiments, the controller module 120 maintains the operation entity information 410 and the control API information 420. In some cases, the controller module 120 can save the information 410 and 420 in a local storage device; in other cases, the information 410 and 420 can be maintained at the database 130, which can enable the controller module 120 to continue where it stopped when it crashes because the local storage device may not be persistent. That is, if the controller module 120 fails (or its container fails), the information stored in its local storage device may disappear with it. Therefore, any information related to the management of the operation entity 110 of the controller module 120 can be maintained at the database 130, which can be a non-volatile persistent storage device. In other cases, the controller module 120 can maintain the information 410 and 420 in its local storage device and the database 130.

[0091] When instantiated, in various embodiments, a properties file providing initial information may be provided to the controller module 120. The initial information may identify the location of the local storage device and / or database 130 of the controller module 120, which includes the operational entity information 410 and the control API information 420 associated with the controller module. In some cases, the properties file may indicate the operational entities 110 that the controller module 120 is responsible for managing, and may indicate the ports to listen for those entities 110 and other controller modules 120. In various embodiments, the controller module 120 uses its properties file to access the information 410 and 420.

[0092] In various embodiments, the operational entity information 410 is information describing the operational entities 110 managed by the controller module 120. The information 410 may include the blueprints 210 and definitions 310 of the managed operational entities 110. In various embodiments, the operational entity manager engine 430 uses the operational entity information 410 to determine the expected state of its operational entities 110. Using this knowledge, the manager engine 430 may transition its operational entities 110 (e.g., by issuing control API calls) toward its expected state. In some instances, the controller module 120 may be instantiated so that it includes the operational entity information 410; in yet other instances, the controller module 120 may issue control API calls to its operational entities 110 in order to obtain the information 410 (e.g., blueprints 210) therefrom.

[0093] In various embodiments, the control API information 420 is information indicating functions of the control API implemented by the operation entity 110 managed by the controller module 120. As previously discussed, in various embodiments, the operation entity 110 includes a control API implementation 230 that implements one or more functions of the control API. Through the control API implementation 230, the controller module 120 can be connected to the elements 220 of the operation entity 110. Therefore, the control API information 420 can indicate one or more functions implemented by the control API implementation 230. In some cases, the controller module 120 can be instantiated so that it includes the control API information 420; in some cases, the controller module 120 can issue a "describe" function call (of the control API) to the operation entity 110 it manages in order to receive the control API information 420 therefrom. Note that in various embodiments, each operation entity 110 can implement the "describe" function call.

[0094] In various embodiments, the control API information 420 includes a function mapping that maps certain information about the operating entity 110 to functions implemented by the operating entity 110. In various cases, the information mapped to the function may include the UUT 321 and lifecycle 322 of the operating entity. Note that in some instances, the operating entity 110 may include different implementations of the same API function call for different lifecycle stages. For example, Figure 8 As discussed in more detail, the controller module 120 may use the UUT 321 , lifecycle 322 , and / or UUID 325 of the operating entity to route commands.

[0095] In various embodiments, the operational entity manager engine 430 is a set of software routines executable to manage the operational entity 110. Note that in various cases, the controller module 120 may be considered an operational entity 110, which may be associated with the definition 310 and the blueprint 210. As such, the manager engine 430 may also manage the controller module 120. To manage the operational entity 110 and the controller module 120, in various embodiments, the manager engine 430 includes various modules, such as a scheduler module, a sweeper module, a health assessment module, and an investigator module.

[0096] In various embodiments, the scheduler module is a set of functions that determines when changes are made to the operational entities 110 managed by the controller module 120. In various embodiments, the scheduler module causes actions to be performed by scheduling actions to be performed by other components of the manager engine 430. The scheduler module can be declarative (e.g., this operational entity 110 should be in this expected state) or imperative (e.g., "create a snapshot of the DB"). To schedule actions, the scheduler module can write the requested actions (e.g., commands from a user) with the scheduled times to the local storage device and / or database 130. The scheduler module can also write the progress and results of the scheduled actions to the local storage device and / or database 130. Such information can be written to the database 130 so that if the controller module 120 crashes, a new instance of the controller module 120 can pick up the location of another crash. In various cases, the scheduler module can schedule times for the sweeper module to probe the operational entities 110.

[0097] In various embodiments, the sweeper module is a set of functions that probe the operational entities 110 being managed to collect information about the health of those operational entities (e.g., about resource utilization and capacity, key health indicators, etc.). In some embodiments, the sweeper module reads the operational entity information 410 from a local storage device (which may be permanent) or a database 130. From the operational entity information 410, the sweeper module can understand the operational entities 110 managed by its controller module 120 and how to connect to them. The sweeper module can then probe those operational entities. In some embodiments, the sweeper module sends a status request message to each of the listed operational entities 110, which status request message requests information detailing the current status of the operational entity 110. Instead of the sweeper module initially sending the status request message, in some embodiments, the operational entities 110 can periodically send information to the sweeper module indicating their current status. In various embodiments, the sweeper module stores the information received from the operational entities 110 as part of the operational entity information 410. Such information may indicate resource utilization, resource capacity, the status of the operational entity 110 (e.g., offline, online, etc.), the status of the operational entity's relationship to other operational entities 110 (e.g., other operational entities 110 are not responders), etc. The sweeper module may store any alerts that may have been triggered as "incidents" to be investigated. As an example, if the sweeper module has not heard from the operational entity 110, it may store an indication that the operational entity may not be healthy. Information that is no longer operationally relevant (e.g., old, irrelevant records) may be removed from the local storage device and / or database 130.

[0098] In various embodiments, the health assessment module is a set of functions that uses the information obtained by the scrubber module to assess the health of the managed operational entity 110. In various embodiments, the health assessment module reads the operational entity information 410 from the local storage device or database 130. The health assessment module can then determine whether to create a report based on the operational entity information 410 to trigger the investigator module to investigate the operational entity 110. For example, the health assessment module can assess the resource utilization of the operational entity 110, and if the resource utilization is too high or too low relative to what it should be, the health assessment module can create a report for the operational entity 110. In various embodiments, the health assessment module can attempt to predict other events based on historical operational entity information 410. For example, if the operational entity 110 shows signs of following a trend that ends with the failure of the operational entity 110, the health assessment module can create a report to proactively investigate the operational entity.

[0099] In various embodiments, the investigator module is a set of functions that inspects the operational entity 110. The investigator module can inspect reports that have not yet been investigated. For each report, the investigator module can collect information about the relevant operational entity 110; such information can be utilized by other components or users of the system 100 to troubleshoot any problems. For example, the investigator module can collect log information detailing the operations performed by the operational entity 110 before the operational entity 110 failed. In various cases, the investigator module can access the relationship information 330 of any unhealthy entity. For example, the investigator module can access the relationship information 330 of a database server entity 110 that is not healthy and depends on another service entity 110 that may also not be healthy. The fact that the database server entity 110 is not healthy may be just a symptom, and the place to investigate may indeed be the service it depends on. Therefore, the investigator module can use the control API to drill down into the health status of the service to determine whether it is causing problems with the database server entity 110. In some embodiments, the investigator module can attempt to troubleshoot any problems it finds. For example, the investigator module can issue a command set to restart / reinitialize the operational entity 110 that has crashed. The Investigator module can update the status and ownership of the report after the automated investigation is complete (e.g., if the automated investigation fails to troubleshoot the issue, ownership can be transferred to the user.

[0100] Thus, in various embodiments, the sweeper module collects health information about the operational entities 110 managed by its controller module 120. The health information may be evaluated by the health assessment module to determine if there are problems with those operational entities 110. If there are potential problems, those problems may be reported to the investigator module for further analysis.

[0101] In some embodiments, the operational entity manager engine 430 may receive instructions related to the management of the operational entity 110 (in some cases, those instructions that are below the manager engine 430). For instructions related to the operational entity 110 that are not below the manager engine 430, the manager engine 430 may route the instructions to the appropriate controller module 120 for processing. In some cases, the manager engine 430 may route the instructions based on information included in those instructions (e.g., the UUID 325 value of the corresponding operational entity 110). For example, the manager engine 430 may determine, based on the UUID 325 value, the particular controller module 120 that manages the operational entity 110 corresponding to the UUID 325 value. Accordingly, the manager engine 430 may route the corresponding instructions to that controller module 120 for processing.

[0102] For instructions belonging to the operating entities 110 under the management of the manager engine 430, the manager engine 430 can process these instructions, which can include changing the state of one or more operating entities 110. In various cases, the manager engine 430 can access the control API information 420 to determine which functions of the control API are available for calling. The instructions can identify the corresponding operating entity 110 and the function to be performed for the operating entity. Therefore, if the operating entity 110 has implemented the appropriate control API function (as can be determined from the control API information 420), then the manager engine 430 can send a control API call to the operating entity 110 to execute the control API function. In some instances, the manager engine 430 can call the control API function implementation of another operating entity 110 to make changes to the original operating entity 110. When issuing the control API call, the manager engine 430 can execute the received instructions.

[0103] In various embodiments, the workflow engine 440 is a set of software routines that can be executed to implement the workflow. As described above, the operation scenario can be described in a workflow that includes a set of commands for implementing a series of steps of the operation scenario. These commands can identify the operations (e.g., state changes) to be performed on certain operation entities 110. In various embodiments, the workflow engine 440 implements the workflow by issuing instructions to the operation entity 110 and / or the controller module 120 to execute the command of the workflow. As an example, the workflow engine 440 can issue instructions to the controller module 120 to change the state of the operation entity 110 (managed by the controller module 120) from "offline" to "online". In various cases, the workflow engine 440 can obtain the workflow from the database 130; in some cases, the workflow engine 440 can obtain the workflow from the reasoning engine 450.

[0104] In various embodiments, the reasoning engine 450 is a set of software routines that can be executed to generate a workflow based on a high-level goal. The reasoning engine 450 can initially receive a request from a user to achieve a specific high-level goal. For example, a user may request to upgrade the database server entity 110 from one version to another. In various embodiments, the reasoning engine 450 is about the "why" of the requested high-level goal in order to generate a workflow with a set of commands to achieve the goal. In some instances, the output of the reasoning engine 450 (e.g., a workflow) can be provided to the workflow engine 440 to achieve the high-level goal via the output. The reasoning engine 450 can greatly reduce the amount of specific operational code that must be written by developers of the system 100. About Fig.17 Inference engine 450 is discussed in more detail.

[0105] Now turn to Figure 5 , a flow chart of method 500 is shown. Method 500 is an embodiment of a method for managing an operating scenario (e.g., in operating information 135) of a target computer environment (e.g., target environment 137) performed by a computer system (e.g., system 100). Method 500 can be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some cases, method 500 can be performed in response to a computer system receiving a request from a user. In some embodiments, method 500 may include additional steps. As an example, a computer system may access a definition (e.g., definition 310) to verify a blueprint (e.g., blueprint 210).

[0106] Method 500 begins at step 510, where a computer system accesses operational information (e.g., operational information 135) that defines a set of commands for an operational scenario. The operational scenario may include changing the state of one or more software entities included in the set of operational entities to convert the one or more software entities from a first software version to a second software version.

[0107] In step 520, the computer system accesses a blueprint (e.g., blueprint 210) of a set of operational entities (e.g., operational entities 110) to be used in the target computer environment to implement the operational scenario. For a first operational entity in the set of operational entities, a given blueprint may indicate a set of relationships (e.g., relationships 331) between the first operational entity and one or more other operational entities in the set of operational entities. The set of operational entities may include hardware entities (e.g., a set of processors), software entities (e.g., a database server executed on at least one of the set of processors), and information entities (e.g., a logical database managed by the database server).

[0108] In step 530, the computer system implements the operation scenario of the target computer environment. In various cases, the implementation of the operation scenario may include a hierarchy of execution controller modules (e.g., controller module 120), which may include a coordinator controller module at the top of the hierarchy, and the coordinator controller module may be executed to execute a command set by issuing instructions to a controller module at the next layer of the hierarchy. In various cases, the controller module hierarchy may include a controller module, which may be executed to manage the operation entity set according to a corresponding blueprint to complete the operation scenario, including by changing one or more states in the operation entity set. In some cases, the first operation entity in the operation entity set may be at a different level within the hierarchy with the second operation entity in the operation entity set. Therefore, the modules in the controller module that can be executed to manage the operation entity set may be at different levels of the hierarchy.

[0109] In some embodiments, a given operational entity implements one or more of a set of functions supported by a control application programming interface (API) (e.g., control API implementation 230). The one or more implemented functions may allow a controller module to change the state of a given operational entity. In various cases, a particular one of the blueprints may be associated with a given operational entity and may specify a lifecycle value (e.g., lifecycle value 322) representing a current lifecycle stage (e.g., specification stage) associated with the given operational entity. The lifecycle value may be used by the controller module to determine which of the one or more implemented functions is callable for that lifecycle stage.

[0110] In some embodiments, a given operational entity is associated with a unique identifier (e.g., the value of UUID 325) that uniquely identifies the given operational entity. A specific one of the instructions may be associated with the given operational entity. In some instances, issuing a specific instruction may include determining a specific one of the controller modules that manages the given operational entity based on the unique identifier and issuing the specific instruction to the specific controller module. The specific instruction may include causing a software entity (e.g., a database server) to instantiate another information entity (e.g., a logical database).

[0111] In some embodiments, the set of relationships specified for the first operating entity affects the order in which commands in the command set can be executed. In some cases, the set of relationships may include a relationship between the first operating entity and a second operating entity in the operating entity set. Similarly, executing a particular one of the instructions to change the state of the first operating entity may include changing the state of the second operating entity before changing the state of the first operating entity. In some cases, the relationship between the first operating entity and the second operating entity may be a dependency relationship, wherein the first operating entity depends on the existence of the second operating entity.

[0112] Now turn to Figure 6 , a flow chart of method 600 is shown. Method 600 is an embodiment of a method for managing a set of operating entities (e.g., operating entity 110) performed by a computer system (e.g., system 100). Method 600 can be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some embodiments, method 600 can include additional steps. As an example, a computer system can maintain a database (e.g., database 130) that stores operating information (e.g., operating information 135).

[0113] Method 600 begins at step 610, where a computer system executes a hierarchy of controller modules (e.g., controller module 120), the hierarchy having a coordinator controller module at the top level of the hierarchy, the coordinator controller module operable to communicate with other controller modules in the hierarchy to manage a set of operational entities. In various cases, the set of operational entities may include hardware entities, software entities, and information entities.

[0114] In step 620 , the coordinator controller module accesses operational information (eg, operational information 135 ) that specifies a workflow having commands for a series of steps for implementing an operational scenario involving a set of operational entities.

[0115] In step 630, the coordinator controller module implements the commands of the workflow to implement the operation scenario. In some cases, implementing these commands may include issuing instructions to one or more of these other controller modules to change the state of one or more of the operation entity set. The specific controller module within the hierarchy is operable to manage the operation entity set according to the corresponding blueprint (e.g., blueprint 210) that defines the attributes of the operation entity set (e.g., UUT 321, life cycle 322, version 323, etc.). In some embodiments, the attributes include relationship attributes (e.g., relationship type 332, direction 333, etc.), which define information related to the relationship (e.g., relationship 331) between some operation entities in the operation entity set. These relationships can affect the order in which the state of one or more operation entities will change based on the instructions.

[0116] In some cases, one or more other controller modules may be operable to route one or more instructions received from the coordinator controller module to a specific controller module that manages the set of operational entities. In some cases, one or more other controller modules may be operable to route one or more instructions based on a unique identifier set (e.g., UUID 325) corresponding to the set of operational entities.

[0117] Now turn to Figure 7, a block diagram of a control API 700 is shown. In the illustrated embodiment, the control API 700 includes a describe function 710, an acquire function 720, a transform function 730, a create function 740, a destroy function 750, a perturb function 760, a verify function 770, and an analyze function 780. In various embodiments, the control API 700 may include more functions than those shown. For example, the control API 700 may include a log function that enables the controller module 120 to obtain log information maintained by the operation entity 110.

[0118] In various embodiments, the control API 700 is a collection of functions or API calls that can be called to access information from an operational entity 110, change an aspect of an operational entity 110 (e.g., transition the entity to another state), and / or change another operational entity 110 managed by the operational entity 110. The control API 700 may include a selected set of functions that are common across all operational entities 110 in the system 100, but whose functionality is defined individually for each operational entity 110. For example, the control API implementations 230A and 230B may each define a create function 740 to create an operational entity 110, but the specific type of operational entity 110 created by the control API implementation 230A may be different from the specific type created by the control API implementation 230B. In various embodiments, the operational entity 110 may support multiple different implementations of the same type of function. As an example, the database server entity 110 may support two implementations of the create function 740: one for creating a logical database entity 110 and another for creating a backup image entity 110. In some cases, the operational entity 110 may not support all functions provided by the control API 700. For example, the perturbation function 760 may not be implemented for the logical database entity 110.

[0119] In various embodiments, the describe function 710 returns information about the operational entity 110. This information may include the blueprint 210, definition 310 of the operational entity 110, and / or information about its control API implementation 230. Consider an example where the controller module 120 wishes to discover the operational entities 110 that a particular operational entity 110 depends on. The controller module 120 may call the describe function 710 of the particular operational entity 110 to receive its blueprint 210, which may identify the relationships 331 of the particular operational entity 110. In some cases, the describe function 710 may be called to determine which of the other functions (e.g., functions 720, 730, etc.) have been implemented in the operational entity's control API implementation 230. Thus, in some embodiments, each operational entity 110 defines a describe function 710 so that the controller module 120 may have a guaranteed way of learning about those operational entities 110.

[0120] In various embodiments, the get function 720 gets one or more variables 340 for the operating entity 110. As an example, the controller module 120 may call the get function 720 of the operating entity 110 to access a specific variable 340 indicating whether the operating entity is "online" or "offline". When calling the get function 720, the controller module 120 may specify the requested variable 340 as an input to the get function 720. In some cases, the controller module 120 may call the describe function 710 to determine what variables 340 may be requested from a specific operating entity 110 via its control API implementation 230. In some embodiments, the information returned by the extract function 720 may indicate certain properties of the returned variable 340. These properties may include the name of the variable 340, its value, the minimum and maximum possible values ​​of the variable, the data type (e.g., bool, integer, string, float, etc.), the information type (e.g., counter, rate, etc.), the unit type (e.g., seconds, kilobytes, etc.), and the flag (e.g., variable, canonical, etc.). For example, the get function 720 may return information for a specified variable 340 having a "status" name, an "online" value, and a "mutable" flag.

[0121] In various embodiments, the conversion function 730 converts or changes one or more variables 340 (or other information, such as values ​​included in the entity descriptor 320 and / or the relationship information 330) of the operating entity 110 from a first value to a second value. For example, the conversion function 730 of the database server entity 110 can be called to change the state variable 340 from "offline" to "online". The control API implementation 230 of the database server entity 110 can call a software routine that causes the database server entity 110 to be converted from offline to online. The control API implementation 230 can then update the state variable 340 from "offline" to "online". The control API implementation 230 can hide the potential complexity of converting the database server from the controller module 120 that calls the conversion function 730 to the online state. That is, from the perspective of the controller module 120, calling the conversion function 730 can change the variable 340, and the control API implementation 230 can actually implement the change represented by the change in the variable. Likewise, in various embodiments, the transition function 730 enables the controller module 120 to transition the operational entity 110 from a first state to a second state.

[0122] Other examples of using the transition function 730 may include updating an operation entity 110 to a new version, prohibiting an operation entity 110 from creating other operation entities 110, changing a configuration specification of an operation entity 110, shutting down an operation entity 110, etc. In various embodiments, implementing an operation scenario may involve issuing multiple transition function 730 calls to multiple operation entities 110 to change their states.

[0123] In various embodiments, the create function 740 causes the operation entity 110 to create another operation entity 110. For example, the database server entity 110 may implement the create function 740 to create a logical database entity 110. As a result, the controller module 120 may call the create function 740 to create the logical database entity 110 if necessary. In various embodiments, the operation entity 110 may control other operation entities 110 because it may perform actions on or on behalf of those operation entities. In various cases, the operation entity 110 that controls another operation entity 110 may have the ability to create, destroy, list and / or describe the other operation entity. In some cases, the operation entity 110 may create another operation entity 110 by cloning an operation entity 110 that is identical to another operation entity. In some cases, the operation entity 110 may create another operation entity 110 by transferring other operation entities along their life cycle stages. For example, a snapshot of database persistence is created by converting database persistence from an instance stage to a snapshot stage. In various embodiments, the create function 740 receives source information as input identifying a basis (eg, a disk image file) on which to create the new operating entity 110 .

[0124] In various embodiments, the destroy function 750 destroys / removes the operation entity 110 from the system 100. In some cases, the controller module 120 may call the destroy function 750 of a particular operation entity 110 to destroy the operation entity in response to the operation entity no longer being needed in the system 100. For example, a database server entity 110 that was created when there was a high demand business may be destroyed when there is less business. In some cases, if an operation entity fails, the destroy function 750 of the operation entity 110 may be called. The controller module 120 may then instantiate another one of the same type of operation entity 110.

[0125] In various embodiments, the perturbation function 760 perturbs the operating entity 110 by causing the operating entity to behave abnormally. For example, the perturbation function 760 of a particular operating entity 110 may inject faults into the operating entity. These faults may include, for example, causing the particular operating entity 110 to crash, hang, or shut down. Fig.24 As discussed in more detail, perturbation function 760 may help test system 100 by causing problems in system 100 to see whether system 100 can recover from those problems.

[0126] In various embodiments, the verification function 770 verifies the correctness of the operation entity 110. For example, the controller module 120 may call the verification function 770 of the operation entity 110 to determine whether the configuration and / or environment of the operation entity is correct (e.g., to determine whether the configuration uses appropriate values). In various embodiments, the analysis function 780 collects metric information of the operation entity 110. As an example, the controller module 120 may call the analysis method of the operation entity 110 to obtain an error log from the operation entity 110.

[0127] Now turn to Figure 8 , a block diagram of a routing engine 810 and a routable entity 830 is shown. In the illustrated embodiment, the controller module 120 includes an operating entity manager engine 430 having the routing engine 810. As further shown, the routable entity 830A is located locally with respect to the controller module 120 (e.g., on the same network), while the routable entity 830B is located remotely with respect to the controller module 120.

[0128] As previously described, the operation entities 110 and the controller modules 120 may form a hierarchical structure with the coordinator controller module 120 at the top level. When implementing an operation scenario, the coordinator controller module 120 may issue instructions to the controller modules 120 that manage the operation entities 110 through the hierarchical structure. Such controller modules 120 may execute the received instructions by issuing control API calls to call appropriate functions of the control API 700 implemented by those managed operation entities 110. By calling the functions of the control API 700, the controller module 120 may change the state of the operation entity 110.

[0129] Instructions can be received and / or accessed from various sources. In some cases, instructions can be initially received from a command line tool, which translates human-readable commands (entered by a user or a dedicated script) into instructions understood by the controller module 120. Instructions derived from commands entered into the command line can initially be received by the coordinator controller module 120, which can propagate instructions through the hierarchical structure of the operating entity 110 and the controller module 120. In various cases, instructions can be derived from the workflow information stored in the database 130. Therefore, after being instructed (e.g., issuing instructions via a command line tool), the coordinator controller 120 can access the workflow information from the database 130 and propagate instructions associated with the workflow information through the hierarchical structure. In some cases, the workflow information may include human-readable commands that can be translated by the controller module 120 into instructions for implementing these commands.

[0130] When the controller module 120 receives an instruction, the controller module 120 may make a routing decision. If the instruction corresponds to an operational entity 110 managed by the controller module 120, the controller module 120 may issue an appropriate control API 700 call to the operational entity 110. However, if the instruction corresponds to an operational entity 110 managed by another controller module 120, the first controller module 120 may route the instruction to the other controller module. In order to route instructions and call functions of the control API 700, in various embodiments, the controller module 120 includes a routing engine 810.

[0131] In various embodiments, the routing engine 810 is a set of software routines executable to route instructions and call functions of the control API 700. The instructions may be routed based on information included in the instructions. Such information may include the UUT 321 of the operating entity 110, the lifecycle 322 of the operating entity 110, the UUID 325 of the operating entity 110, the UUID 325 of the controller module 120 that manages the operating entity 110, the UUID 325 of the container entity 110 that includes the operating entity 110 and the controller module 120, the variable 340 name, source and / or other information that may be included in the blueprint 210 and / or definition 310, such as the name 328 of the operating entity 110. As an example, the instruction may correspond to a get function 720 and may specify the name of the variable 340 to be obtained (e.g., "status"), the UUID 325 of the operating entity 110 from which the variable is to be obtained, and the UUID 325 of the controller module 120 that manages the operating entity and therefore should call the get function 720 of the operating entity.

[0132] In various embodiments, after receiving the instruction, the routing engine 810 determines whether the instruction should be routed to another controller module 120 or a function of the control API 700 should be called. In order to determine whether the instruction should be routed, in some embodiments, the routing engine 810 determines whether the instruction specifies the UUID 325 for the controller module 120. If the instruction specifies the UUID 325 for the controller module 120, but the specified UUID 325 belongs to another controller module 120, the routing engine 810 can route the instruction. In some cases, if the controller module 120 of the operating entity 110 does not have access to the control API implementation 230 of the operating entity, the routing engine 810 can determine that the operating entity 110 is not local to its controller module 120. The routing engine 810 can make this determination based on a mapping of local control API implementations 230 maintained by its controller module 120. In some cases, the UUID 325 plus the control API call identified in the instruction can be used as a key in the mapping. If the map does not have an entry for this key, routing engine 810 may route the instruction.

[0133] In some instances, the routing engine 810 may route the instruction by placing the instruction to each controller module 120 managed by its controller module 120. In some instances, if the specified UUID 325 belongs to a controller module 120 managed by the controller module 120 of the routing engine, the routing engine 810 may provide the instruction directly to the controller module. The routing engine 810 may use the blueprint 210 to determine who manages the operational entity 110 to which the instruction is directed. The instruction may not specify the UUID 325 for the controller module 120; however, the instruction may still specify the UUID 325 of the operational entity 110. Similarly, the routing engine 810 may determine whether its controller module 120 manages the operational entity based on the operational entity information 410. If its controller module 120 does not manage the operational entity, the routing engine 810 may place the instruction to each controller module 120 managed by its controller module 120. In some embodiments, the routing engine 810 determines whether its controller module 120 manages the operation entity 110 by attempting to find the operation entity's information in the operation entity information 410 using the operation entity's UUID 325 (or using other information such as UUT 321). In some embodiments, a routing table may be used that advertises the capabilities of each controller module 120 and the operation entities 110 they manage. Thus, the routing engine 810 can use the routing table to determine where to route the instruction.

[0134] If the received instruction corresponds to an operation entity 110 managed by the controller module 120 of the routing engine, the routing engine 810 may check whether the operation entity implements the function of the control API 700 for processing the action / operation indicated by the instruction. As previously discussed, in various embodiments, the controller module 120 may store a function mapping of the control API 700 to the UUT 321 and the life cycle 322 of the operation entity in the control API information 420. Therefore, the routing engine 810 may build a function list of the control API 700 that has been implemented by the operation entity 110 based on the function mapping, the UUT 321, and the life cycle 322. In the case where the instruction does not specify the UUT 321 and the life cycle 322 for the operation entity 110, the routing engine 810 may use the UUID 325 that may be specified in the instruction for the operation entity to find the blueprint 210 of the operation entity. The routing engine 810 may then extract the UUT 321 and the life cycle 322 from the accessed blueprint 210. If the blueprint 210 is not found, the routing engine 810 may return an error to the issuer of the instruction. In various embodiments, the routing engine 810 builds the function list by selecting the functions corresponding to the UUT 321 and lifecycle 322 of the relevant operational entity 110 indicated in the function map.

[0135] After building the list of implemented functions, in various embodiments, the routing engine 810 determines whether the list includes a function for implementing the operation requested by the instruction. For example, if the instruction identifies a conversion operation for converting a specific variable 340 to a new value, the routing engine 810 can determine based on the list whether the operation entity 110 implements the conversion function 730 for converting the specific variable. If so, the routing engine 810 can call the conversion function; otherwise, the routing engine 810 can return an error to the issuer of the instruction. In this way, the routing engine 810 can process the received instruction.

[0136] When routing an instruction or calling a function of the control API 700, the routing engine 810 may call the routing layer 820. In various embodiments, the routing layer 820 is a set of software routines, hardware, or a combination thereof that is operable to route an instruction to another component (operating entity 110 or controller module 120) and / or call a function of the control API 700. The routing layer 820 may receive a request from a controller module 120 to send an instruction to another specific controller module 120 or to call a specific function for the control API 700 implemented by a specific operating entity 110. Thus, the request may specify an instruction, a UUID 325 of a controller module 120, a UUID 325 of an operating entity 110, and / or a function call. The routing layer 820 may determine whether to route an instruction or call a function based on the content of the request received from the controller module 120. If the request specifies an instruction, the routing layer 820 may locate the appropriate controller module 120 (e.g., a network based on the UUID 325) and send the instruction to the controller module. If the request specifies a function, routing layer 820 may locate the appropriate operational entity 110 (eg, based on UUID 325) and invoke the function implemented by the operational entity.

[0137] In various situations, the routing layer 820 may have to communicate with a remote operational entity 110 or controller module 120 (e.g., an operational entity 110 outside a local network associated with the routing engine 810). As used herein, an operational entity 110 or controller module 120 is referred to as "remote" to another operational entity 110 or controller module 120 if the operational entity 110 or controller module 120 is not within the same local network. To determine whether an operational entity 110 or controller module 120 is local or remote, in various embodiments, the routing layer 820 accesses information (e.g., blueprint 210) of a routable entity 830 associated with the operational entity or controller module.

[0138] In various embodiments, the routable entity 830 is a dedicated operational entity 110 that identifies whether another operational entity 110 or controller module 120 is remote from the routing layer 820. In some cases, the routable entity 830 may include a blueprint 210 or definition 310 that specifies a remote host port (e.g., as a variable 340). In some embodiments, if the routable entity 830 identifies the remote host port, the routing layer 820 determines that the associated operational entity 110 or controller module 120 is remote; otherwise, it is local. For example, information associated with the routable entity 830A (e.g., blueprint 210) may indicate that the operational entity 110A is local, while information associated with the routable entity 830B may indicate that the operational entity 110B is remote. Based on this information, the routing layer 820 may select an appropriate communication protocol for communicating with the operational entity 110 or controller module 120. In order to access the appropriate routable entity 830, in various embodiments, the routing layer 820 accesses the relationship information 330 of the corresponding operational entity 110 or controller module 120. The relationship information 330 may identify a relationship 331 between the corresponding operational entity 110 and the related routable entity 830. For example, the operational entity 110 may be "contained" within the routable entity 830. Based on this, the routing layer 820 may look up the blueprint 210 of the routable entity 830 from the local storage device and / or the database 130.

[0139] In various embodiments, the controller module 120 is not aware of whether the operational entity 110 or the controller module 120 is remote or local. The controller module 120 may instead rely on the routing layer 820 to make this determination. From the controller module's point of view, communications with local operational entities 110 and remote operational entities 110 may be the same (it may appear as if all operational entities 110 are local). This may allow the process of communicating with the operational entities 110 to be simplified to one control API rather than using two different control APIs.

[0140] Now turn to Fig. 9 , a flow chart of method 900 is shown. Method 900 is an embodiment of a method performed by a controller module (e.g., controller module 120) for issuing instructions to an operating entity (e.g., operating entity 110) as part of an operating scenario (e.g., in operating information 135) for a target computer environment (e.g., target environment 137). Method 900 can be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some cases, method 900 can be performed in response to the controller module receiving instructions from a user or another controller module. In some embodiments, method 900 may include additional steps. For example, the controller module may route the instructions to another controller module for implementation.

[0141] Method 900 begins at step 910, where the controller module performs a discovery process. As part of the discovery process, at step 912, the controller module identifies components within the hierarchical structure of the target computer environment that are to be controlled by the controller module. The controller module can identify components within the hierarchical structure by accessing operational entity information (e.g., operational entity information 410) that defines a unique identifier (e.g., UUID 325), which corresponds to the components within the hierarchical structure that are to be controlled by the controller module. In various cases, the hierarchy can include both the controller module and the operational entity.

[0142] As part of the discovery process, in step 914, the controller module discovers the functional capabilities of the identified components. A given component may implement one or more functions (e.g., functions 710, 720, 730, etc.) supported by a control application programming interface (API) (e.g., control API 700). The one or more functions may allow the controller module to change the state of a given component. The controller module may generate a mapping that maps a given operating entity in a set of operating entities to a set of functions implemented by a given operating entity in a plurality of functions supported by the control API. The controller module may control a specific operating entity as well as another specific operating entity. In various cases, a specific operating entity may implement a set of the plurality of functions that is different from other specific operating entities.

[0143] In various embodiments, discovering the functional capabilities of the component may include discovering the functional capabilities of the specific operating entity by calling a description function implemented by the specific operating entity of the control API (e.g., description function 710). In response to calling the description function, the controller module may receive a response from the specific operating entity, the response identifying a set of functions from among a plurality of functions of the control API implemented by the specific operating entity.

[0144] In step 920, the controller module implements a portion of an operational scenario for the target computer environment. The operational scenario may include updating a component identified during the discovery process from a first version to a second version. As part of implementing the portion of the operational scenario, in step 922, the controller module receives instructions from a component that controls the controller module (e.g., another controller module 120) that specify a specific operation and a specific operational entity for performing the specific operation.

[0145] As part of the described part of realizing the operation scenario, in step 922, the controller module generates a response to the instruction using the specific operation of the identified component, the specific operation entity and the discovery function capability. Generating a response to the instruction can include the controller module identifying a specific function that can be called from a function set to make a specific operation entity perform a specific operation. The controller module can determine a specific function from a function set based on a life cycle value indicating a life cycle stage. In some cases, the instruction can define a unique identifier associated with a specific operation entity, and therefore the controller module can access a blueprint corresponding to a specific operation entity based on a unique identifier. The blueprint can specify a life cycle value. The specific function can be a conversion function (e.g., conversion function 730), which can be called to convert a specific operation entity from a first state to a second state. The controller module can issue a control API call to a specific operation entity to call a specific function to perform a specific operation. The controller can further send a message specifying the result of indicating whether a specific operation is successfully executed to the component controlling the specific controller module.

[0146] In some cases, the controller module may receive another instruction specifying another operation and another operation entity for performing the another operation. The controller module may determine that the other operation entity is controlled by another specific controller module based on the other instruction. Similarly, the controller module may route other instructions to other specific controller modules.

[0147] Now turn to Fig.10 , a flow chart of method 1000 is shown. Method 1000 is an embodiment of a method performed by a controller module (e.g., controller module 120) for issuing instructions to an operating entity (e.g., operating entity 110) as part of an operating scenario (e.g., in operating information 135) for a target computer environment (e.g., target environment 137). Method 1000 can be performed by executing a set of program instructions stored on a non-transitory computer readable medium. In some embodiments, method 1000 may include additional steps. For example, a controller module may route instructions to another controller module for implementation.

[0148] Method 1000 begins at step 1010, where a controller module receives instructions specifying operations to be performed by an operational entity as part of an operational scenario within a hierarchy of controller modules and operational entities. In some cases, the instructions may be received from another controller module within the hierarchy of the controller module.

[0149] In step 1020, the controller module discovers a set of functions (e.g., functions 710, 720, etc.) implemented by the operating entity from a plurality of functions supported by a control application programming interface (API) (e.g., control API 700) that allow changing the state of a given operating entity. Discovering the set of functions may include the controller module receiving a communication from the operating entity identifying the set of functions implemented by the operating entity.

[0150] At step 1030, the controller module determines whether the function set includes a function that can be called to cause the operation entity to perform an operation.

[0151] In step 1040, in response to determining a specific function that can be called to cause the operation entity to perform an operation, the controller module calls the specific function. The specific function can be a destruction function that can be called to cause the operation entity to be destroyed. In various cases, the controller module can send a message indicating that the instruction was successfully implemented to other controller modules that sent the instruction.

[0152] Now turn to Fig.11 , a flow chart of method 1100 is shown. Method 1100 is an embodiment of a method performed by a controller module (e.g., controller module 120), which is used to issue instructions to an operating entity (e.g., operating entity 110) as part of an operating scenario (e.g., in operating information 135). Method 1100 can be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some cases, method 1100 can be performed in response to the controller module receiving instructions from a user or another controller module. In some embodiments, method 1100 may include additional steps. For example, a controller module may communicate with its operating entity to determine which functions (e.g., functions 710, 720, etc.) of a control API (e.g., control API 700) have been implemented by those operating entities.

[0153] Method 1100 begins at step 1110, where a controller module receives an instruction identifying a specific operating entity to be converted from a first state to a second state as part of an automatic implementation of an operating scenario. The controller module may be included in a hierarchy of components having controller modules and operating entities. In various cases, the hierarchy may include a coordinator controller at the top level of the hierarchy, which may be executable to implement the operating scenario by issuing instructions to a controller module at a lower level of the hierarchy. Therefore, instructions may be received by the controller module from the coordinator controller module as part of implementing the operating scenario. The operating scenario may include starting a database service having a set of database servers that can perform database transactions on behalf of a user of the computer system executing the controller module.

[0154] In step 1120, the controller module causes the execution of instructions for a specific operating entity by calling a routing layer (e.g., routing layer 820). In some cases, the call may not specify whether the specific operating entity is remote relative to the local environment of the controller module. In various embodiments, the controller module makes the same call to the routing layer independently of whether the specific operating entity is in the local environment or away from the local environment. The call may specify a specific function implemented by the specific operating entity for executing instructions. In some cases, the routing layer may perform routing operations by calling specific functions. In some cases, the routing layer may be called so that the routing layer calls a specific function of a specific operating entity, thereby instantiating a database server as part of starting a database service. In yet other cases, the routing layer may perform routing operations by routing instructions to another controller module that manages a specific operating entity.

[0155] In various embodiments, the routing layer is operable to determine whether a particular operational entity is within or away from the local environment. The routing layer can use this determination to perform routing operations associated with the particular operational entity. In some embodiments, the routing layer is operable to access a blueprint (e.g., blueprint 210) of a routable entity (e.g., routable entity 830) associated with the particular operational entity. The routing layer can first access the blueprint of the particular operational entity, which specifies relationship information (e.g., relationship information 330) between the particular operational entity and the routable entity (e.g., relationship 331). The relationship enables the routing layer to access the blueprint of the routable entity.

[0156] In various embodiments, the routing layer determines that the particular operating entity is remote from the local environment based on whether the blueprint specifies a remote host port. The routing layer may select a first routing protocol to route instructions to another controller module based on the determination indicating that the particular operating entity is remote from the local environment. In various cases, the first routing protocol may be different from a second routing protocol that can be used to route instructions within the local environment.

[0157] Now turn to Fig.12 , a flow chart of method 1200 is shown. Method 1200 is an embodiment of a method performed by a computer system to implement a routing layer to route instructions to an operating entity (e.g., operating entity 110) as part of an operating scenario (e.g., in operating information 135). Method 1200 can be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some embodiments, method 1100 may include additional steps.

[0158] Method 1200 begins at step 1210, where the routing layer receives a request to route instructions to a specific operating entity to transition from a first state to a second state. The request may not specify whether the specific operating entity is remote relative to the local environment of the controller module from which the request is received.

[0159] In step 1220, the routing layer determines whether the particular operating entity is within the local environment or away from the local environment based on the information maintained for the particular operating entity. The information can define a blueprint (e.g., blueprint 210) for the particular operating entity. In various cases, the blueprint can define a relationship (e.g., relationship 331) between the particular operating entity and a routable entity associated with a second blueprint, the second blueprint indicating whether the particular operating entity is within the local environment or away from the local environment. The routing layer can access the second blueprint based on the relationship and determine that the particular operating entity is away from the local environment based on the accessed second blueprint specifying the remote host port.

[0160] In step 1230, the routing layer routes the instruction to the specific operating entity based on the determination. As part of the routing instruction, the routing layer may call a specific function (e.g., conversion function 730) implemented by the specific operating entity to convert the specific operating entity from the first state to the second state. In some cases, as part of the routing instruction, the routing layer may send the instruction to another controller module in the next layer of the hierarchy of controllers relative to the controller module from which the request was received. The other controller module may directly manage the specific operating entity.

[0161] Now turn to Fig.13 , a flow chart of method 1300 is shown. Method 1300 is an embodiment of a method executed to issue instructions to an operating entity (e.g., operating entity 110) as part of an operating scenario (e.g., in operating information 135). Method 1300 can be performed by executing a set of program instructions stored on a non-transitory computer-readable medium. In some embodiments, method 1300 may include additional steps. As an example, a controller module may communicate with an operating entity under its authorization to determine which functions (e.g., functions 710, 720, etc.) of a control API (e.g., control API 700) have been implemented by those operating entities.

[0162] Method 1300 begins at step 1310, where a computer system (e.g., system 100) executes a hierarchy of components including controller modules and operating entities. In various cases, the hierarchy may include a coordinator controller at the top level of the hierarchy that is executable to execute an operating scenario by issuing a set of instructions to a controller module at a lower level of the hierarchy.

[0163] In step 1320, the controller module of the hierarchical structure receives an instruction to identify a specific operating entity among the operating entities to be transitioned from the first state to the second state.

[0164] At step 1330, the controller module executes the instruction by calling the routing layer (e.g., routing layer 820). The call may not specify whether the particular operating entity is remote relative to the local environment of the controller module. In some embodiments, the controller module makes the same call to the routing layer regardless of whether the particular operating entity is remote relative to the local environment of the controller module.

[0165] The routing layer is operable to determine whether a particular operating entity is within a local environment or remote from the local environment. The routing layer may use the determination to route instructions to the particular operating entity. In various cases, the routing layer may determine that the particular operating entity is remote from the local environment in response to the particular operating entity being associated with a remote host port. The routing layer may utilize a first routing protocol to route instructions to multiple operating entities remote from the local environment, and utilize a different second routing protocol to route instructions to multiple operating entities within the local environment. In some cases, routing instructions may include routing instructions to another controller module within a next layer of the hierarchy that directly manages the particular operating entity.

[0166] Now turn to Fig.14 , a block diagram of a workflow engine 440 is shown. In the illustrated embodiment, the workflow engine 440 includes a workflow processing engine 1420 and a reversal engine 1440. As further shown, the database 130 includes workflows 1410 and workflow state information 1430, which may be stored at the operational entity 110 as shown. In some embodiments, the workflow engine 440 may be implemented differently than shown. For example, the workflow engine 440 may include the workflow state information 1430.

[0167] As previously described, an operational scenario may be implemented using a command set corresponding to a series of steps to perform a desired goal (e.g., most recently, updating the operational entity set 110 to a new version). In various embodiments, the workflow 1410 specifies an ordered set of commands corresponding to a particular operational scenario. Thus, a command set implementing the workflow 1410 may result in the execution of the associated operational scenario. In some cases, the workflow 1410 may be provided by a user and stored in the database 130; the workflow 1410 may also be provided by a user, such as with respect to Fig.17 The controller module 120 may access the workflow 1410 (eg, from the database 130 ) in response to the workflow request 1405 .

[0168] In various embodiments, the workflow request 1405 is a request to instruct the workflow engine 440 to implement a specified workflow 1410. The workflow request 1405 may identify a name or identifier that allows the controller module 120 to access the corresponding workflow 1410. The workflow request 1405 may be received from a user via a command line tool and / or from another controller module 120. For example, the coordinator controller 120 may receive the workflow request 1405 from a user. In some cases, implementing a workflow 1410 may involve implementing other different workflows 1410. In some embodiments, the workflow 1410 may be stacked to form a hierarchy of workflows, wherein the top-level workflow 1410 performs a high-level task, and the lower-level workflows 1410 each perform a subtask of the high-level task. Continuing with the previous example, implementing a specific workflow 1410 specified in the received workflow request 1405 may involve the coordinator controller 120, so that the lower-level controller module 120 implements a set of workflows 1410 corresponding to the specific workflow 1410. To implement a given workflow 1410 , in various embodiments, the controller module 120 includes a workflow processing engine 1420 and a reversal engine 1440 .

[0169] In various embodiments, the workflow processing engine 1420 is a set of software routines that can be executed to implement the ordered set of commands specified in the workflow 1410. The workflow processing engine 1420 can implement the command set by issuing instructions to components within the system 100. As previously described, in some embodiments, the commands can be in a human-readable format or a format that can be understood by the operating entity 110 and the controller module 120. As a result, the instructions issued by the workflow processing engine 1420 can be the actual corresponding commands or the translation of the commands into a format that can be understood by the operating entity 110 and the controller module 120. The workflow processing engine 1420 can issue instructions in the manner previously discussed (e.g., by interacting with the routing engine 810 to call the routing layer 820).

[0170] In various embodiments, the workflow processing engine 1420 maintains workflow state information 1430 while implementing an ordered set of commands. In various embodiments, the workflow state information 1430 specifies the current state of the implementation of the workflow 1410 and / or the current state of the target environment 137. For example, the workflow state information 1430 may identify the commands of the workflow 1410 that have been implemented. Thus, in response to the commands being completed, the workflow processing engine 1420 may update the workflow state information 1430 to reflect the completed commands. The workflow state information 1430 may identify the state of the target environment 137 by identifying the states of the operational entities 110 and the controller module 120 within the target environment. For example, the workflow state information 1430 may indicate which operational entities 110 are "online" and which are "offline". The workflow state information 1430 may also indicate whether the workflow is running forward or reverse. As described below, in response to an error occurring in implementing workflow 1410, reverse engine 1440 may use workflow state information 1430 to respond to the error.

[0171] In various embodiments, the reversal engine 1440 is a set of software routines that can be executed to reverse the state of the system 100 back to the initial state that existed before the workflow 1410 was started. In some cases, errors may occur when implementing the workflow 1410. For example, whenever the workflow engine 440 attempts to implement a command, the command may not be completed. As another example, the workflow engine 440 (and its controller module 120) may crash, hang, or experience another type of failure. If an error occurs when implementing the workflow 1410, in various cases, the workflow engine 440 can retry the relevant steps by implementing the corresponding command again. However, in some cases, the reversal engine 1440 may attempt to reverse the state of the system 100 back to the initial state associated with the workflow 1410.

[0172] In order to reverse the state of the system 100, the reversal engine 1440 can traverse the command set in reverse order. In various embodiments, the command set specified in the workflow 1410 can be traversed in forward order to convert the target environment 137 from the initial state to the expected state, and can be traversed in reverse order to convert the target environment 137 from the current state (e.g., the expected state) to the initial state. By traversing the commands in reverse order, the reversal engine 1440 can return to a known state instead of leaving the system in an interrupted or unknown state. Therefore, in response to an error (e.g., an uncompleted command), the reversal engine 1440 can reverse the traversal of those commands that have been implemented, undoing one or more state changes caused by those commands. For example, if a particular command has completed the conversion of the operating entity 110 from "offline" to "online", the reversal engine 1440 can convert the operating entity 110 back to "offline" (e.g., by calling a function of the control API 700 or issuing an instruction to the controller module 120 that manages the operating entity 110). In some cases, the workflow command cannot be reversed, which can be indicated by metadata associated with the command. Therefore, the workflow engine 440 may stop and alert the user of the problem.

[0173] In various situations, a controller module 120 (e.g., a coordinator controller module 120) may fail (e.g., crash) while implementing a workflow 1410. In such a situation, once the controller module 120 has been restored (e.g., a new controller module 120 is instantiated), it may be necessary to restore the implementation of the workflow 1410. Thus, upon restoration or being restored, the controller module 120 may attempt to access the workflow state information 1430 to determine if there is an ongoing implementation of the workflow 1410. If there is one in progress, the controller module 120 may then restore the implementation of the workflow 1410. In some cases, the controller module 120 may attempt to execute the next command in the workflow 1410; in other cases, the controller module 120 may reverse the command that has already been completed to return the target environment 137 to the initial state. The controller module 120 may then retry the entire workflow 1410.

[0174] Because the controller module 120 may fail, in various embodiments, the workflow state information 1430 is stored at a location external to the controller module 120 so that if the controller module 120 fails, the workflow state information 1430 is not lost. Whether the state information 1430 is stored at an external location may also depend on whether the entity 110 managed by the controller module 120 has a "state" and whether the life of the controller module is bound to the entity. As an example, if the controller module 120 is within the same container as the stateless application, it may not store the workflow state information 1430 externally, but may store it in a local storage device. If there is a problem that causes the container to exit, both the entity 110 and the controller module 120 will be destroyed, and the state of the workflow will be meaningless in this case. However, if the state being changed persists outside the container, the controller module 120 may store the workflow state information 1430 at a location external to the container. Fig.14 As shown, the workflow state information 1430 can be stored at the operation entity 110 and the database 130. In some embodiments, if the controller module 120 manages the operation entity 110 including the database as the element 220, the controller module 120 can use the database to store the workflow state information 1430. When the controller module 120 is started, it can call the description function 710 of the operation entity 110 it manages in order to understand these operation entities. If the operation entity 110 is storing the workflow state information 1430, it can notify the controller module 120 of the information. In this way, the controller module 120 can understand the ongoing implementation of the workflow 1410 together with the corresponding workflow state information 1430.

[0175] Now turn to Fig.15 , a flow chart of method 1500 is shown. Method 1500 is an embodiment of a method performed by a coordinator controller (e.g., controller module 120) to implement a workflow on a target computer environment (e.g., target environment 137). Method 1500 can be performed by executing a set of program instructions stored on a non-transitory computer readable medium. In some embodiments, method 1500 may include additional steps. As an example, the coordinator controller module may receive a request to perform an operation scenario (e.g., workflow request 1405). In some cases, the request may specify a name value corresponding to a workflow that allows access to workflow information.

[0176] Method 1500 begins at step 1510, where a coordinator controller module accesses workflow information (e.g., workflow information 135) that defines a workflow (e.g., workflow 1410) having a set of commands corresponding to a series of steps for automatically implementing an operational scenario on a target computer environment having an initial state and a set of components including a controller module and an operational entity. In some cases, the operational scenario may include starting a database service having one or more database servers capable of performing database transactions on behalf of a user of the computer system.

[0177] In step 1520, the coordinator controller module implements the command set of the workflow by issuing instructions to the components in the group of components so that a series of steps are performed. Implementing the command set can cause one or more state changes relative to the initial state in the target computer environment. In various embodiments, the command set is defined so that the commands in the command set can be implemented to convert the target computer environment from the initial state to the specified end state, and is reversed to convert the target computer environment from the current state back to the initial state. One or more state changes in the target computer environment can include a state change in which a specific component in the group of components instantiates a new component in the target computer environment. In some cases, the new component may have a role different from the specific component in the target computer environment.

[0178] In step 1530, the coordinator controller module maintains state information (e.g., workflow state information 1430) identifying the current state of the target computer environment, which allows the coordinator controller module to respond to errors in the command set implementation. In response to detecting that a specific step in a series of steps cannot be performed, the coordinator controller module can retry the specific step by reissuing one or more instructions corresponding to the specific step to some components in the group of components. In some cases, an error can prevent the command set from completing. Therefore, the coordinator controller module can respond to an error by reversing one or more state changes in the target computer environment to return the target computer environment to an initial state. In some embodiments, reversing one or more state changes includes reversely traversing the order in which the commands in the command set have been completed. While performing the traversal, the coordinator controller module can revoke one or more state changes caused by those commands that have been completed.

[0179] In some cases, the error includes a crash of the coordinator controller module when implementing the command set. The state information can allow the recovered coordinator controller module to subsequently recover the implementation of the command set. In some embodiments, the state information is maintained by the coordinator controller module at a location (e.g., database 130) outside the coordinator controller module so that a crash of the coordinator controller module does not result in loss of state information. The state information can be maintained by the coordinator controller module at an operating entity within the target computer environment.

[0180] Now turn to Fig.16 , a flow chart of method 1500 is shown. Method 1600 is an embodiment of a method performed to implement a workflow on a target computer environment (e.g., target environment 137). Method 1600 can be performed by executing a set of program instructions stored on a non-transitory computer readable medium. In some embodiments, method 1600 may include additional steps. As an example, a coordinator controller module may receive a request to perform an operation scenario (e.g., workflow request 1405). In some cases, the request may specify a name value corresponding to a workflow that allows access to workflow information.

[0181] Method 1600 begins at step 1610, where a computer system executes a component hierarchy having a controller module and an operating entity. In various cases, the hierarchy may include a coordinator controller at the top level of the hierarchy, which is executable to implement an operating scenario by executing a set of commands corresponding to a series of steps of the operating scenario.

[0182] In step 1620, in response to receiving a request to implement a specific operation scenario for a target computer environment having a set of components with an initial state and a hierarchical structure, the coordinator controller module implements a workflow having commands corresponding to the specific operation scenario.

[0183] In step 1622, as part of implementing the workflow, the coordinator controller module issues instructions to some controller modules in the hierarchical structure so that the commands of the workflow are executed, thereby making one or more state changes to the target computer environment relative to the initial state. In some cases, issuing instructions can enable a specific controller module within the hierarchical structure to implement a different second workflow. The workflow and the second workflow can form a workflow hierarchy structure, which includes a workflow at the top level of the workflow hierarchy structure and a second workflow at the next level of the workflow hierarchy structure. In some cases, a specific controller module can implement the second workflow by issuing instructions to a component in the next level of the component hierarchy structure relative to the level that includes the specific controller module.

[0184] In step 1624, as part of implementing the workflow, the coordinator controller module maintains state information (e.g., workflow state information 1430), which identifies the current state of the target computer environment that allows the response to the error in the implementation workflow. In some cases, the error may include the coordinator controller module hanging when the workflow is implemented. Therefore, the state information can allow the coordinator controller of the recovery to resume the implementation of the workflow subsequently. In some embodiments, the state information specifies configuration variables (e.g., variables 340) for the group of components included in the target computer environment.

[0185] Now turn to Fig.17 , depicts a block diagram of the inference engine 450. In the illustrated embodiment, the inference engine 450 includes a direct inference engine 1710 and an indirect inference engine 1720. As shown, the inference engine 450 can provide the workflow 1410 to the workflow engine 440 for implementation.

[0186] In some embodiments, the reasoning engine 450 may be implemented differently than shown. For example, the reasoning engine 450 may operate without the workflow engine 440. That is, the reasoning engine 450 may generate and implement steps to move the system 100 to the desired state. This may involve the reasoning engine 450 evaluating the state of the system 100, issuing commands supported by the control API 700, and then reallocating the state of the system 100 until the desired state is reached. For example, the reasoning engine 450 may receive the reasoning request 1705 to convert the application version from "A" to "X". Therefore, the reasoning engine 450 may issue a conversion command to convert the application version from "A" to "X". But if, for example, the database server associated with the conversion command crashes, the reasoning engine 450 may recognize this new state of the system 100. Therefore, the reasoning engine 450 may generate and issue a new command to convert the state of the database server from "offline" to "online". The reasoning engine 450 may then retry to convert the application version from "A" to "X". In this manner, reasoning engine 450 may implement steps in a very similar order as workflow engine 440, but the steps may be generated on the fly or in batches in advance.

[0187] In various embodiments, the direct reasoning engine 1710 is a set of software routines that can be executed to generate the workflow 1410. As shown, the reasoning engine 450 can receive the reasoning request 1705. Instead of specifying the workflow 1410 to be implemented, the reasoning request 1705 can specify a high-level goal to be achieved (e.g., the state of the system to be managed) or a command such as a conversion version command. For example, the reasoning request 1705 can specify that the database service entity 110 should be instantiated, which includes one or more database server entities 110 and one or more metric server entities 110. However, the reasoning request may not specify a command for instantiating the database service entity 110. Therefore, the direct reasoning engine 1710 can apply direct reasoning concepts to generate a workflow 1410 that can be implemented to achieve the high-level goal. In various cases, the direct reasoning engine 1710 can use information such as the relationship information 330 contained in the blueprint 210 to identify how the operation entities 110 are related. Based on how the operational entities 110 are related, the direct reasoning engine 1710 can determine that a particular operational entity 110 should be instantiated before other operational entities 110. Based on this reasoning, the direct reasoning engine 1710 can generate an ordered set of commands.

[0188] Continuing with the previous example, the reasoning request 1705 may specify the UUT 321 or UUID 325 for the database service entity 110. The direct reasoning engine 1710 may use this information to access the blueprint 210 of the database service entity 110. The blueprint may indicate that the database service entity 110 includes a database server entity 110 and a metric server entity 110. Based on the blueprint 210 of the database service entity, the direct reasoning engine 1710 may access the blueprint 210 of the database server entity 110 and the blueprint 210 of the metric server entity 110. These blueprints 210 may indicate a relationship 331 between the database server entity 110 and the metric server entity 110. In some cases, the relationship 331 may indicate that the metric server entity 110 depends on the existence of the database server entity in order for the metric server entity 110 to operate correctly. Therefore, the direct reasoning engine 1710 may determine based on the relationship that the database server entity 110 needs to be instantiated before the metric server entity 110. Based on the determination, the direct reasoning engine 1710 may generate a command set including a command for instantiating the database server entity 110 , wherein the command set is ordered such that the command appears before another command for instantiating the metric server entity 110 .

[0189] In various embodiments, the indirect reasoning engine 1720 is a set of software routines that can be executed to generate the workflow 1410. Compared with the direct reasoning engine 1710, the indirect reasoning engine 1720 can apply the indirect reasoning concept to generate the workflow 1410. For example, a database table may have a large number of expensive scans, and a possible solution may be to create an index. Therefore, the indirect reasoning engine 1720 can determine that an index should be created for the database table (e.g., by analyzing information indicating that the index is beneficial for other database tables with expensive scans). The indirect reasoning engine 1720 can generate a workflow 1410 with a command set to create an index for the database table. After the reasoning engine 450 has generated the workflow 1410, the workflow 1410 can be provided to the workflow engine 440 for implementation. In some cases, the workflow 1410 can be stored (e.g., at the database 130) so that the workflow 1410 can be retrieved to achieve the high-level goal again without having to be regenerated.

[0190] Now turn to Fig.18 , a flow chart of method 1800 is shown. Method 1800 is an embodiment of a method performed by a coordinator controller (e.g., controller module 120) to generate and implement a workflow (e.g., workflow 1410) on a target computer environment (e.g., target environment 137). Method 1800 can be performed by executing a set of program instructions stored on a non-transitory computer readable medium. In some embodiments, method 1800 may include additional steps. As an example, the coordinator controller module may store the generated workflow in a database to allow re-implementation of the operation scenario without having to regenerate the workflow.

[0191] Method 1800 begins at step 1810, where a coordinator controller module receives a request (e.g., reasoning request 1705) to implement an operational scenario that converts a target computer environment from a first state to a different second state. The target computer environment may have a set of components including a controller module and an operational entity. In various cases, the received request may not specify a command for converting the target computer environment from a first state to a second state. The request may identify first and second components to be instantiated in the target computer environment as part of the operational scenario. The operational scenario may include starting a database service having a set of database servers capable of performing database transactions on behalf of a user of the computer system.

[0192] In step 1820, the coordinator controller module generates a workflow that defines a specific command set to convert the target computer environment from a first state to a second state, including by changing the state of the components in the group of components. In various cases, the coordinator controller module can access a blueprint (e.g., blueprint 210) corresponding to the group of components, the first component, and the second component. The blueprint can define the relationship between components that affect the implementation order of a specific command set. For example, a relationship can include a dependency, wherein the first component depends on the existence of the second component so that the first component operates in an effective manner. In this way, a specific command set can include a first command that instantiates the first component and a second command that instantiates the second component. The specific command set can be sorted based on the dependency so that the second command is before the first command in the implementation.

[0193] In step 1830, the coordinator controller module implements a specific command set by issuing an instruction to convert the target computer environment to the second state to one or more controller modules in the group of components. In some cases, the specific command set can be defined as such that the specific command set can be implemented in a forward order that converts the target computer environment from the first state to the second state, and can be implemented in a reverse order that converts the target computer environment to the first state. In response to detecting an error in implementing the specific command set, the coordinator controller module can convert the target computer environment back to the first state from the current state according to the reverse order. In some cases, changing the state of the component in the group of components can include updating the operating entity from the first version to the second version.

[0194] Now turn to Fig.19 , a flow chart of method 1900 is shown. Method 1900 is an embodiment of a method performed to generate and implement a workflow (e.g., workflow 1410) on a target computer environment (e.g., target environment 137). Method 1900 can be performed by executing a set of program instructions stored on a non-transitory computer readable medium. In some embodiments, method 1900 may include additional steps. For example, the coordinator controller may store the generated workflow in a database to allow re-implementation of the operation scenario without having to regenerate the workflow.

[0195] Method 1900 begins at step 1910, where a computer system executes a component hierarchy having a controller module and an operation entity. The hierarchy may include a coordinator controller at the top level of the hierarchy, which is executable to implement an operation scenario by executing a set of commands corresponding to a series of steps of the operation scenario.

[0196] In step 1920, in response to receiving a request (e.g., reasoning request 1705) for implementing a specific operating scenario that converts the target computer environment from an initial state to an end state, the coordinator controller module generates a workflow that defines a specific command set that converts the target computer environment from an initial state to an end state. In various cases, the request may not identify a specific command set. A specific operating scenario may involve creating an operating entity. Similarly, generating a workflow may include accessing a blueprint (e.g., blueprint 210) of an operating entity. In some cases, the blueprint may identify a second operating entity to be created in addition to the operating entity. Therefore, the coordinator controller module may determine the order of creating an operating entity and a second operating entity based on the relationship between the operating entity and the second operating entity. A specific command set may be generated based on a determined order.

[0197] At step 1930, the coordinator controller module implements the specific command set by issuing instructions to one or more controller modules in the hierarchy of components to transition the target computer environment to an end state, including by changing the state of components in the hierarchy of components.

[0198] Now turn to Fig. 20A , depicts a block diagram of the authorization service 140. As described above, it is important to ensure that actors cannot issue unauthorized instructions to the system 100 to achieve some undesired end. In order to protect the system 100, the authorization service 140 can be used to audit the actions requested by actors connected to the system 100. In the illustrated embodiment, the authorization service 140 includes an authorization engine 210, an authorization table 2020, and a testing engine 150, and can be connected to the database 130 including the audit report 2030. Fig. 20A As shown, in some embodiments, the authorization service 140 is an authorization component separate from the controller module 120, which is used to review commands issued to the controller module 120 and / or the operating entity 110. In other embodiments, the authorization service 140 can be implemented differently than shown. For example, as described below in conjunction with Fig. 20B As discussed, the authorization service 140 may be integrated into the controller module 120 (or coordinator controller module 120), the authorization service 140 may not include the test engine 150, and the like.

[0199] In various embodiments, the authorization engine 2010 is an instruction set that is executable to perform an audit of issued commands. For example, a particular user may have issued a command to the coordinator controller 120 to convert a particular database cluster from online to offline. Before the coordinator controller module 120 begins to execute the command, the authorization engine 2010 can confirm whether the particular user (or the controller module 120, if it has issued the command) is authorized to issue such a command. In the illustrated embodiment, the authorization service 140 receives an indication of what command was issued via an authorization request 2005. Therefore, when the controller module 120 receives a command to perform one or more actions from an entity (e.g., a user, a high-level controller module 120, etc.), the controller module 120 can send a request 2005 to authorize the execution of the received command and identify various information about the command, such as the action to be performed, the issuer of the command, or other contextual information about the command. In the illustrated embodiment, the authorization engine 2010 evaluates the information included in the authorization request 2005 against the security rule set defined in the authorization table 220 to verify that the command issued complies with the permissible actions defined by the security rule set. Fig.21 An example of the authorization form 2020 is discussed in more detail.

[0200] As part of the audit process, in various embodiments, the authorization engine 2010 (or service 140 or other components of the system 100) may authenticate various entities associated with the authorization request 2005, which may occur before (or after) receiving the request 2005. In some embodiments, this includes authenticating the initial issuer of the command (e.g., a user or controller module 120). Thus, if the user is the issuer, an authentication prompt requesting a username and password may be presented to the user to confirm his or her identity. In some embodiments, this includes authenticating the controller module 120 that made the authorization request 2005. In some embodiments, to achieve this authentication, certificates for public key pairs maintained by components 110, 120, and 140 may be provided to the operating entity 110, the controller module 120, and / or the authentication service 140. Components 110, 120, and 140 may then exchange these certificates to mutually authenticate each other and establish a secure communication link. For example, the controller model 120 and the authorization service 140 may exchange certificates in an Elliptic Curve Diffie-Hellman (ECDH) exchange to mutually authenticate and establish a shared secret for a Transport Layer Security (TLS) session, through which the authorization request 2005 and the authorization response 2015 may be securely exchanged.

[0201] In various embodiments, the audit performed by the authorization engine 2010 also includes maintaining a log of audit reports 2030 in the database 130. Thus, when an authorization request 2005 is received, the authorization engine 2010 can record various information about the request 2005 in the audit report 2030. This information can include who issued the command, such as a user or component name (e.g., an identifier value of the coordinator controller module 120) and who is the target of the command, such as the name or UUID of the controller module 120 or the operating entity 110. The information can include one or more actions indicated by the command. The information can include the time when the command was issued. The information can include an indication of the source of the command, such as an IP address, UDP or TCP port number, etc. The authorization engine 2010 can also record information about the corresponding authorization response 2015, such as whether a given request 2005 is authorized or denied and the reason for the denial in such an event. In some embodiments, the database 130 can restrict the access of the authorization service 140 to the audit reports 2030, so that the service 140 is allowed to write audit reports 2030 without deleting any reports 2030. Thus, even if the authorization service 140 is compromised or an authorized administrator of the service 140 attempts to abuse his or her access rights, the audit report 2030 may be preserved.

[0202] Based on its evaluation of the authorization table 220 for a given request 2005, the authorization engine 2010 may issue a corresponding response 2015 indicating whether the received command is authorized. Fig. 22 As discussed, in some embodiments, the authorization engine 2010 may include in its authorization response 2015 a signed token that may be used by subsequent components (e.g., controller modules 120 and / or operational entities 110) to confirm that performance of one or more actions identified in the issued command has been authorized by the service 140. In doing so, the initial controller module 120 (e.g., the coordinator controller module 120) may handle the interaction with the authorization service 140 to obtain the token, which may then be passed to one or more other components performing the actions, which verify that approval of the actions has been authorized without having to contact the authorization service 140 again to obtain the same approved actions.

[0203] Now turn to Fig. 20B , depicts another block diagram of the authorization service 140. Fig. 20A In the above-described embodiment shown, the components of the authorization service 140 are different from the controller module 120 and / or the operating entity 110. However, in some embodiments, the components of the authorization service 140 may be distributed between the components 120 and / or 110. For example, Fig. 20BAs shown, an instance of the authorization engine 2010 may be included in the controller module 120 to verify that the command received by the controller module 120 complies with the permissible action defined by the rules in the authorization table 2020. In the illustrated embodiment, the authorization service 140 also includes a distributor 2040, which maintains a master copy of the authorization table 2020A and distributes a copy of the authorization table 2020B to each instance of the authorization engine 2010 to facilitate its locally executed evaluation. In some embodiments, the local copy of the authorization table 2020B may only contain the rules applicable to the engine 2010, rather than a complete copy of each rule contained in the authorization table 2020A. In various embodiments, the distributor 2040 also signs each copy of the authorization table 2020B to maintain its integrity. In some embodiments, the authorization service 140 can be implemented in a different manner than shown. For example, each instance of the authorization engine 2010 can be responsible for maintaining its own table 220, rather than receiving a copy of the table 220 from a centralized entity, and the instance of the authorization engine 2010 can also be located in the operating entity 110, and so on.

[0204] Now turn to Fig.21 , depicts a block diagram of an authorization table 2020. As shown, the authorization table 2100 may include a list of rules 2100, which the authorization engine 210 may evaluate when determining whether to grant the authorization request 2005, as described above. In the illustrated embodiment, the rules 2100 include permissions 2102, objects 2104, actions 2106, and other parameters 2108. In other embodiments, the rules 2100 may include other suitable criteria for evaluating the issued command.

[0205] In various embodiments, permissions 2102 define whether a given rule 2100 grants or restricts permissions. For example, the permissions of rule 2100A indicate that it is restrictive for object 2104John, while the permissions of rule 2100B indicate that it is permissive for object 2104Jan.

[0206] In various embodiments, the subject 2104 identifies the issuer / requester (i.e., the person who issued the command being evaluated) with respect to a given rule 2100. For example, the objects 2104 of rules 2100B and 2100C indicate that both rules 2100 belong to the requester Jan. Thus, when a request 2005 is received for a given command to be issued to one of the components in the hierarchy, the authorization engine 210 can verify that the requester of the command corresponds to the authorized requester identified by the object 2104. Although Fig.21 The example depicted in is a username, but other forms of identification may also be used, such as an IP address, UUID, etc.

[0207] In various embodiments, actions 2106 identify actions that are acceptable or unacceptable with respect to a given rule 2100. For example, the actions of rules 2100B and 2100C indicate that object Jan is allowed to request actions "create" and "convert". In the case of rule 2100A, an asterisk is used to deny all actions with respect to object 2104 John. Thus, when a request 2005 is received for a given command, the authorization engine 21010 can verify, in addition to verifying elements 2102 and 2104, whether the action to be performed by the command is one of the authorized actions 2106.

[0208] In various embodiments, parameters 2108 include various additional criteria associated with a given action 2106. For example, rule 2100B specifies parameters of "DB" and "Instance" to indicate that the action "Create" for "Jan" is limited to an instance of a database. Other examples of parameters 2108 may include time restrictions (e.g., when an action may (or may not) be requested), target restrictions (e.g., identifying a specific UUID for a target that may (or may not) perform an action), IP address restrictions, etc.

[0209] In various embodiments, the authorization service 140 provides a user interface, which may be a command line interface or a graphical user interface, to allow a security team to set various rules 2100. In some embodiments, the security team is different from potential users of the management system. The rules 2100 may also be periodically signed, downloaded, and verified to ensure that they have not been tampered with.

[0210] Now turn to Fig. 22, depicts a block diagram of an exchange 2200 using a token. As described above, in some embodiments, the authorization service 140 may issue a token 2200 that may be used by the controller module 120 and / or the operational entity 110 to confirm that a set of actions associated with the received command have been authorized by the authorization service 140. For example, a first controller module 120A may receive a first issue command 2210A to create multiple instances of a database, and to implement the command 2210A, a second command 2210B is intended to be issued to each controller module 120 (or operational entity 110) that handles the creation of a corresponding one of the database instances. In the illustrated embodiment, the controller module 120A may issue an authorization request 2005 corresponding to the received first command 2210A. In response to approving the request 2205, the authorization service 140 may send back an authorization response 2015 including the token 2200 indicating that the various actions required to create the database instance have been authorized. The controller module 120A may then include the token 2200 in a second set of commands 2210B issued to subsequent controller modules 120 and / or operational entities 110, which may determine from the token 2200 which actions have been authorized and begin executing them without having to recontact the authorization service 140 to allow execution of those actions.

[0211] Token 2200 may include any suitable content that facilitates confirmation that execution of command 2210 has been authorized by authorization service 140. In the illustrated embodiment, token 2200 includes access rights 2202, timestamp 2204, and signature 2206. In other embodiments, token 2200 may include more (or fewer) components than those shown. In some embodiments, token 2200 may be implemented as a JSON web token (JWS token), a Kerberos token, an X.509 certificate, or some other standard format for signing authentication.

[0212] In various embodiments, the access rights 2202 indicate a set of specific actions that have been approved for execution by the authorization service 140, and may generally include various elements from the rules 2100 described above. Thus, a given permission 2202 may not only identify a given action 2106, but may also indicate a specific object 2104 that is permitted to issue a command for that action 2106. Thus, in response to receiving a command 2210B from the controller module 120A to perform a specific action, the controller module 120B may verify that the access rights 2202 of the controller module 120A identify as allowing the request for the specific action. In some embodiments, the access rights 2202 may also identify a target that is authorized to perform a specific action, which may be identified using an IP address, UUID, etc. Thus, the controller module 120B that receives the token 2200 may confirm that it is identified in the token 2200 as an authorized target to perform the specific action identified in the command 2210B.

[0213] In various embodiments, a timestamp 2204 and a signature 2206 are included to facilitate verification of the token 2200 by subsequent recipients such as the controller module 120 or the operational entity 110. Typically, the timestamp 2204 may be some kind of limit on how long the issued token 2200 is valid. Thus, in one embodiment, the timestamp 2204 may be a time value indicating when the token 2200 was issued, and the components 120 and 110 may be used to accept the token 2200 only within a certain window after the timestamp 2204. In another embodiment, the timestamp 2204 may be a start time and a stop time of a window indicating that an action authorized by the access right must be performed. In yet another embodiment, the timestamp 2204 may indicate an expiration time value after which the token 2200 is no longer valid. The signature 2206 may generally be used to ensure that the integrity of the token 2200 is retained, or in other words, the token 2200 has not been tampered with (or forged). Thus, in some embodiments, the signature 2206 is generated from the contents of the token 2200 using a private key maintained by the authorization service 140 and having a corresponding trusted public key known to the components 120 and 110. In response to receiving the token 2200, the component 110 or 120 may verify the signature 2206 against the contents of the token 2200 using the public key before performing any actions identified in the issued command 2210B.

[0214] Now turn to Fig.23 , a flow chart of method 2300 is shown. Method 2300 is one embodiment of a method performed by a computer system having an authorization service associated with a target computing environment, such as authorization service 140. In various embodiments, performance of method 2300 may improve security of the target computing environment.

[0215] The method 2300 begins at step 2310, where the computer system stores a security rule set (e.g., rule 2100 included in the authorization table 2020) that defines permissible actions within a hierarchy of components (e.g., operating entities 110, controller modules 120, etc.) for implementing an operating scenario within a target computing environment. In step 2320, the computer system implements the operating scenario within the target computing environment, which includes issuing a command set to the components within the hierarchy and verifying that the command set complies with the permissible actions defined by the security rule set.

[0216] In various embodiments, issuing a set of commands includes: a first component of the hierarchy sends an authorization request (e.g., authorization request 2005) for a particular issued command to an authorization service (e.g., authorization service 140) that performs verification, and in response to the authorization service determining that the particular command complies with a permissible action defined by a security rule set, the first component receives a response authorizing execution of the command (e.g., authorization response 2015). Based on the authorization response, the first component performs one or more actions identified in the issued command. In some embodiments, verification includes the authorization service authenticating the source of the authorization request before sending the authorization response. In some embodiments, verification includes the authorization service storing a report (e.g., audit report 2030 in database 130) identifying the receipt of the authorization request in a log. In some embodiments, the received authorization response includes a token (e.g., token 2200) indicating that a second component in the hierarchy is authorized to perform a particular action, and performing one or more actions includes the first component issuing a command (e.g., second issued command 2210B) to the second component including the token, which can be verified by the second component to confirm that execution of the particular action has been authorized. In some embodiments, the token identifies a specific action of the authorization service (eg, access rights in 2202), a first component, and a signature (eg, signature 2206)).

[0217] In various embodiments, the rule set includes rules that identify an authorized requestor (e.g., object 2104) and one or more authorized actions (e.g., action 2106) associated with the authorized requestor, and the verification includes receiving an indication of a command to be issued to a component in the hierarchy, verifying that the requestor of the command corresponds to an authorized requestor, and verifying that the action to be performed by the command is one of the authorized actions.

[0218] In various embodiments, method 2300 also includes a first component in the hierarchy receiving a request to issue a command to a second component in the hierarchy, and verification includes the first component verifying (e.g., using authorization table 2020B) that the requested command complies with the allowable actions defined by the security rule set before the first component issues the command to the second component. In some embodiments, the second component is an operational entity (e.g., operational entity 110) operable to execute the issued command. In some embodiments, the second component is a controller module (e.g., controller module 120) operable to cause one or more operational entities to execute the issued command.

[0219] Now turn to Fig.24, depicts a block diagram of the test engine 150. As described above, performing appropriate tests is important to ensuring that the system operates reliably. However, in many cases, it may be difficult to test every possible state that a system may experience during its lifetime, particularly when such testing is performed manually. As will be discussed below, in various embodiments, the test engine 150 is used to automate the testing of the system 100 by injecting various fault conditions in order to identify conditions in which the system 100 does not function properly. In the illustrated embodiment, the test engine 150 includes a scan engine 2410, a pre-scan graph 2420, a post-scan graph 2430, and a perturbation engine 2440. In other embodiments, the test engine 150 may be implemented differently than shown.

[0220] In various embodiments, the scanning engine 2410 handles the collection of information about the controller modules 120 and operational entities 110 to facilitate the operation of the test engine 150. In some embodiments, the collection begins by performing a discovery operation in which the scanning engine 2410 attempts to learn about the various controller modules 120 and operational entities 110 within the system 100. Thus, the scanning engine 2410 may initially send a request 2412 requesting the coordinator controller module 120 to describe itself and identify other controller modules 120 that directly (or in some embodiments indirectly) interact with the coordinator controller module 120. In some embodiments, the coordinator controller module 120 may send a response 2414 including a graph data structure that identifies the controller modules 120 and operational entities 110 of the system 100 and describes their arrangement. Based on this received information, the scanning engine 2410 may then send a description request 2412 to the newly discovered controller modules 120 and operational entities 110. These components may then send a corresponding description response 2414, which may include any of a variety of suitable information. For example, a given controller module 120 or operational entity 110 may include a general description of itself, which may include identifying its role in the system and including information such as its universally unique identifier (UUID), vendor, version, relationships to other controller modules 120 and / or operational entities 110, attributes, configuration variables, etc. In some embodiments, a given controller module 120 may also identify in the response 2414 the various application programmable interface (API) functions that it supports. For example, a controller module 120 may support API calls from the scanning engine 2410 to obtain information about the controlled operational entity 110, such as obtaining configuration information, logs, metrics, facts, etc. In various embodiments, the controller modules 120 may also identify in their responses 2414 what injectable fault conditions are supported and what injectable fault conditions may be requested by the test engine 150. For example, a controller module 120 that controls multiple database operational entities 110 may advertise that it supports terminating a database instance (or terminating a container that includes a database instance), stopping the execution of a database instance, the absence of a database instance, etc.

[0221] In various embodiments, the scanning engine 2410 also collects various state information about the state of the system 100 before the injection of the fault condition and the state of the system 100 after the injection of the fault condition. Thus, the scanning engine 2410 can collect this information through the issuance of the request 2412 and the receipt of the response 2414 as described above. In some embodiments, the controller module 120 can also provide real-time telemetry data to the scanning engine 2410. For example, the controller module 120 that maintains the database instance can indicate how many database instances are currently in operation and notify the scanning engine 2410 when the number changes. As described above, in some embodiments, the scanning engine 2410 can receive information through the integration of the test engine 150 into the authorization service 140. For example, if the controller module 120 has issued a command to provide another database instance, the scanning engine 2410 can be informed of the issued command when the controller module 120 sends the authorization request 2005 to the authorization service 140 to request permission to implement the command. In the illustrated embodiment, metadata collected about the state before the fault condition is injected can be assembled into a pre-scan graph 2420, and metadata collected about the state after the fault condition is injected can be assembled into a post-scan graph 2430. As described below, the scanning engine 2410 (or some other component of the test engine 150 in other embodiments) can compare these graphs 2420 and 2430 to ascertain how the injected fault condition affects the system 100. In some embodiments, to facilitate the organization of this metadata and subsequent comparison of the graphs 2420 and 2430, the scanning engine 2410 assembles the graphs 2420 and 2430 into corresponding graph data structures. Therefore, each node in the pre-scan graph 2420 can correspond to a corresponding controller module 120 or operating entity 110 within the system 100, and can include various metadata collected about the state of the module 120 or entity 110 before injection. The edges between the nodes can correspond to the relationships that exist between the controller module 120 and the operating entity 110. Each node in the post-scan graph 2430 may be similarly organized and include metadata about the state of a given controller module 120 or operational entity 110 after the injected fault condition. The scanning engine 2410 may then determine how a given injected fault condition affects the system 100 by identifying which nodes have changed between the pre-scan graph 2420 and the post-scan graph 2430, and then examining the contents of the changed nodes to determine the specific details resulting from the injected fault condition.

[0222] In various embodiments, the perturbation engine 2440 is responsible for selecting fault conditions for injection and sending perturbation instructions 2418 to the appropriate controller modules to cause their injection. These fault conditions may correspond to any suitable conditions that may cause the system 100 to experience a fault. For example, in some embodiments, the perturbation engine 2440 may issue perturbation instructions 2418 to terminate, pause, stop, suspend, or end the operating entity 110 to view its impact on the system 100. In some embodiments, the perturbation engine 2440 may issue perturbation instructions 2418 to change the resources available to the operating entity 110, thereby starving or overloading the entity 110. For example, the perturbation engine 2440 may change the processing resources available to the operating entity 110 so that the operating entity 110 is assigned a lower execution priority, is scheduled less frequently for execution, is allocated fewer processors for execution, etc. The perturbation engine 2440 may change the storage resources available to the operating entity 110 by allocating less volatile or non-volatile storage to the operating entity 110, swapping pages to memory, etc. The perturbation engine 2440 may change the network resources available to the operational entity 110 by reducing the network bandwidth available for communication with the operational entity 110, increasing the latency of communication with the operational entity 110, dropping communication with the operational entity 110, disconnecting the network connection of the operational entity 110, etc. In various embodiments, the perturbation engine 2440 may inject fault conditions to interfere with the interdependencies of the operational entities 110 within the system 100. For example, an application server (a first operational entity 110) may rely on data stored in a database server (a second operational entity 110). To test the resilience of the application server, the perturbation engine 2440 may destroy the data in the database (or simply crash the database) to determine the impact on the application server. As another example, two or more operational entities 110 may work together in lock-step to achieve a certain purpose, and the perturbation engine 2440 may attempt to stop the operation of one of the entities 110 to determine whether a deadlock can be successfully achieved. As another example, the operational entity 110 may rely on configuration data stored in a configuration file, and the perturbation engine 2440 may change (or even destroy) that data to interfere with its operation. The perturbation engine 2440 may also inject other real-world fault conditions, such as causing a power failure, disconnecting a blade server, causing a network switch failure, etc. As described above, these fault conditions may be injected into the actual system while the actual system is running / operating (as opposed to operating on some theoretical model of the system's operation).

[0223] The perturbation engine 2440 may employ any suitable selection algorithm to determine what fault condition to inject. In some embodiments, the perturbation engine 2440 may randomly select fault conditions and issue corresponding instructions 2418 to inject those fault conditions. In various embodiments, the perturbation engine 2440 may be instructed to target a particular aspect of the system 100 (e.g., a particular operating entity 110 or entity group 110) and select fault conditions associated with that aspect. In various embodiments, the perturbation engine 2440 monitors commands issued to the controller module 120 and / or the operating entity 110 and selects fault conditions for injection based on the issued commands. For example, the test engine 150 may be instructed to target an update process executed for the system 100. In response to the controller module 120 providing an indication 2416 that a particular command has been issued to the update process, the perturbation engine 2440 may select a corresponding fault condition and issue an appropriate perturbation instruction 2418 in order to attempt to interfere with the update process. The selected fault condition may, for example, include ending the execution of the operational entity 110 being updated during the update process, such as crashing a container including a database instance that is undergoing the update. As another example, the selected fault condition may include increasing the network latency of the communication with the operational entity 110 that is being updated during the update process in an attempt to cause a fault associated with the update. In some embodiments, the perturbation engine 2440 may maintain historical information identifying previously injected fault conditions, and determine a corresponding entropy score for each set of fault conditions considered for selection, the entropy score indicating how different the fault condition is relative to the previously injected fault condition as determined from the historical information. The perturbation engine 2440 may then select the fault condition having an entropy score indicating that it is the most different (or at least sufficiently different) from the previously selected one. In some embodiments, the perturbation engine 2440 may maintain historical information identifying previously injected fault conditions that produced faults in the system 100, and may reselect these fault conditions after attempting to correct these conditions in order to determine whether these corrections have been successful.

[0224] As described above, the scanning engine 2410 (or some other component) may compare metadata from the pre-scan map 2420 and the post-scan map 2430 to better understand the system 100. In some cases, the comparison may be performed to determine what may be affected by a particular injected fault condition. Such a determination may include the scanning engine 2410 identifying which operational entities 110 are directly affected by the injected fault condition, and identifying which operational entities 110 may be indirectly affected by the injected fault condition due to unforeseen relationships between entities 110. For example, issuing a perturbation instruction 2418 to crash one operational entity 110 may reveal that another operational entity 110 crashed, and therefore there may be some unnoticed dependencies. This determination may also be used to determine that no operational entity 110 is affected by the injected fault condition (or at least not to the point of experiencing a fault). For example, the scanning engine 2410 may determine that reducing the bandwidth of a network connection by a specific amount will not cause a failure of an operational entity 110 using the network connection. In some cases, the comparison may be performed to determine the resilience of the system 100 to the fault condition. For example, the controller module 120 may be instructed to maintain a specific number of instances of the operational entity 110. The perturbation engine 2440 may then issue a perturbation instruction 2418 to terminate one of the instances of the operational entity 110 in order to determine whether the controller module 120 instantiates another instance of the operational entity 110 in response to the termination. In this example, a successful result may be when no differences are identified in the pre-scan graph 2420 and the post-scan graph 2430, meaning that the system 100 is able to recover after the controller module 120 is able to successfully instantiate a new instance of the operational entity 110 to replace the previously terminated instance.

[0225] In many cases, using the test engine 150 in this manner can allow the system 100 to be thoroughly tested in order to better understand the operation of the system 100. With the knowledge gained from the test engine 150, administrators can better identify potential weaknesses and take corrective actions to address those weaknesses. Administrators can also have greater confidence knowing that a well-tested system can operate as designed when adverse conditions occur. In addition, the test engine 150 can automatically and thoroughly explore the failure behavior of any component (independent of type) deployed within the system 100.

[0226] Now turn to Fig.25 , a flow chart of method 2500 is shown. Method 2500 is one embodiment of a method performed by a computer system testing a target computing environment, such as a computer system including test engine 150. In many cases, the performance of method 2500 can be used to identify problems that, when corrected, improve the resiliency of the target computing environment.

[0227] Method 2500 begins at step 2510, where a computer system implements an operational scenario within a target computing environment having a component hierarchy including a controller module (e.g., controller module 120) and an operational entity (e.g., operational entity 110). In various embodiments, the implementation includes issuing a command set to components within the target computing environment. At step 2520, the computer system receives an indication (e.g., command indication 2416) that a particular one of the command set has been issued. In step 2530, in response to receiving the indication, the computer system instructs (e.g., via perturbation instruction 2418) one of the controller modules to inject a fault condition relative to one of the operational entities to test the target computing environment.

[0228] In various embodiments, method 2500 also includes the computer system collecting metadata about a first state of the target computing environment before injecting the fault condition (e.g., pre-scan graph 2420), collecting metadata about a second state of the target computing environment after injecting the fault condition (e.g., pre-scan graph 2430), and comparing the metadata about the first state and the metadata about the second state to determine the impact of the fault condition. In some embodiments, the computer system assembles a first graph data structure based on the collected metadata about the first state, assembles a second graph data structure based on the collected metadata about the second state, and compares the first graph data structure to the second graph data structure. In some embodiments, the computer system determines that a particular command is associated with an update process based on the received indication to update one or more components in the hierarchical structure, and selects a fault condition to attempt to interfere with the update process. In one such embodiment, the selected fault condition includes ending execution of an operational entity that is being updated during the update process. In one such embodiment, the selected fault condition includes increasing a latency for communicating with an operational entity that is being updated during the update process.

[0229] In various embodiments, method 2500 also includes a computer system performing a discovery operation (e.g., via request 2412 and response 2414) to identify a set of injectable fault conditions supported by the controller module, and based on a specific issued command, selecting one of the injectable fault conditions set for the indicated controller module to inject. In some embodiments, the discovery operation includes the computer system contacting a coordinator of the hierarchical structure (e.g., coordinator controller module 120) to determine the identity of one or more controller modules, the coordinator being a controller module that issues commands to other controller modules. In some embodiments, the discovery operation includes the computer system sending a request to one or more controller modules based on the determined identity, requesting one or more controller modules to identify injectable fault conditions supported by one or more controller modules. In some embodiments, the computer system maintains historical information identifying previously injected fault conditions, and determines a corresponding difference score for each of the injectable fault conditions set based on the historical information, each difference score indicating the difference of the fault condition relative to the previously injected fault condition. In such an embodiment, the fault condition for injection is further selected based on the determined difference score.

[0230] Exemplary Computer System

[0231] Now turn to Fig.26 , depicts a block diagram of an exemplary computer system 2600 that may implement system 100, operating entity 110, controller module 120, database 130, and / or authorization service 140. Computer system 2600 includes a processor subsystem 2680 coupled to system memory 2620 and I / O interface 2640 via an interconnect 2660 (e.g., a system bus). I / O interface 2640 is coupled to one or more I / O devices 2650. Computer system 2600 may be any of a variety of types of devices, including, but not limited to, a server system, a personal computer system, a desktop computer, a laptop or notebook computer, a mainframe computer system, a tablet computer, a handheld computer, a workstation, a network computer, a consumer device such as a mobile phone, a music player, or a personal data assistant (PDA). Although for convenience in Fig.26 A single computer system 2600 is shown in FIG. 2 , but system 2600 may also be implemented as two or more computer systems operating together.

[0232] Processor subsystem 2680 may include one or more processors or processing units. In various embodiments of computer system 2600, multiple instances of processor subsystem 2680 may be coupled to interconnect 2660. In various embodiments, processor subsystem 2680 (or each processor unit within 2680) may include a cache or other form of on-board memory.

[0233] The system memory 2620 may use stored program instructions that can be executed by the processor subsystem 2680 to enable the system 2600 to perform various operations described herein. The system memory 2620 may be implemented using different physical storage media, such as hard disk storage, floppy disk storage, removable disk storage, flash memory, random access memory (RAM-SRAM, EDO RAM, SDRAM, DDR SDRAM, RAMBUS RAM, etc.), read-only memory (PROM, EEPROM, etc.), and the like. The memory in the computer system 2600 is not limited to main memory such as memory 2620. More specifically, the computer system 2600 may also include other forms of memory, such as cache memory in the processor subsystem 2680 and auxiliary memory (e.g., hard disk drive, storage array, etc.) on the I / O device 2650. In some embodiments, these other forms of storage devices may also store program instructions that can be executed by the processor subsystem 2680. In some embodiments, program instructions that, when executed, implement the operating entity 110 , the controller module 120 , the database 130 , the authorization service 140 , and / or the testing engine 150 may be included / stored within the system memory 2620 .

[0234] According to various embodiments, the I / O interface 2640 can be any of various types of interfaces configured to couple to and communicate with other devices. In one embodiment, the I / O interface 2640 is a bridge chip (e.g., Southbridge) from the front side to one or more back side buses. The I / O interface 2640 can be coupled to one or more I / O devices 2650 via one or more corresponding buses or other interfaces. Examples of I / O devices 2650 include storage devices (hard drives, optical drives, removable flash drives, storage arrays, SANs, or their associated controllers), network interface devices (e.g., connected to a local or wide area network), or other devices (e.g., graphics, user interface devices, etc.). In one embodiment, the computer system 2600 is coupled to a network via a network interface device 2650 (e.g., configured to communicate via WiFi, Bluetooth, Ethernet, etc.).

[0235] Implementations of the subject matter of the present application include, but are not limited to, the following Examples 1 to 20.

[0236] 1. A method for managing an operating scenario of a target computer environment, the method comprising:

[0237] accessing, by a computer system, operational information defining a set of commands for the operational scenario;

[0238] Accessing, by the computer system, a blueprint of a set of operation entities in the target computer environment to be used to implement the operation scenario, wherein the set of operation entities includes hardware entities, software entities, and information entities; and

[0239] Implementing, by the computer system, an operation scenario for the target computer environment, wherein the implementation includes:

[0240] A hierarchy of execution controller modules, wherein the hierarchy includes a coordinator controller module at the top level of the hierarchy, the coordinator controller module executable to execute the command set by issuing instructions to a controller module at a next level of the hierarchy, and wherein the controller module hierarchy includes controller modules executable to manage the set of operation entities according to a corresponding blueprint so as to complete the operation scenario, including by changing the state of one or more of the set of operation entities.

[0241] 2. The method of example 1, wherein a given operating entity is associated with a unique identifier that identifies the given operating entity, wherein a particular one of the instructions is associated with the given operating entity, and wherein issuing the particular instruction comprises:

[0242] determining a particular one of the controller modules that manages the given operational entity based on the unique identifier; and

[0243] The specific instruction is issued to the specific controller module.

[0244] 3. A method according to Example 1, wherein for a corresponding first operation entity in the operation entity set, a given blueprint indicates a set of relationships between the first operation entity and one or more other operation entities in the operation entity set, and wherein the set of relationships affects the order in which commands in the command set can be executed.

[0245] 4. A method according to Example 3, wherein the set of relationships includes a relationship between the first operating entity and a second operating entity in the set of operating entities, and wherein executing a specific one of the instructions to change the state of the first operating entity includes changing the state of the second operating entity before changing the state of the first operating entity.

[0246] 5. The method according to example 4, wherein the relationship between the first operating entity and the second operating entity is a dependency relationship, wherein the first operating entity depends on the existence of the second operating entity.

[0247] 6. A method according to Example 1, wherein a given operating entity implements one or more functions from a set of functions supported by a control application programming interface (API), and wherein the one or more implemented functions allow a controller module to change the state of the given operating entity.

[0248] 7. A method according to Example 6, wherein a specific one of the blueprints is associated with the given operational entity, wherein the specific blueprint specifies a life cycle value representing a current life cycle stage associated with the given operational entity, and wherein the life cycle value is used by a controller module to determine which of one or more implemented functions is callable for the life cycle stage.

[0249] 8. A method according to Example 1, wherein a first operating entity in the operating entity set and a second operating entity in the operating entity set are at different levels within the hierarchical structure, and wherein modules in the controller module executable to manage the operating entity set are at different levels of the hierarchical structure.

[0250] 9. The method of Example 1, wherein executing specific ones of the instructions comprises causing the software entity to instantiate another information entity.

[0251] 10. The method of example 1, wherein the operational scenario includes changing a state of one or more software entities included in the operational entity set to convert the one or more software entities from a first software version to a second software version.

[0252] 11. The method of example 1, wherein the hardware entity corresponds to a processor set, the software entity corresponds to a database server executing on the processor set, and the information entity corresponds to a logical database managed by the database server.

[0253] 12. A non-transitory computer readable medium having program instructions stored thereon, the program instructions enabling a computer system to perform operations comprising:

[0254] accessing operational information defining a set of commands for an operational scenario involving a target computer environment;

[0255] accessing a blueprint of a set of operation entities in the target computer environment to be used to implement the operation scenario, wherein the set of operation entities includes hardware entities, software entities, and information entities; and

[0256] Implement the operation scenario, wherein the implementation includes:

[0257] A hierarchy of execution controller modules, wherein the hierarchy includes a coordinator controller module at the top level of the hierarchy, the coordinator controller module executable to execute the command set by issuing instructions to a controller module at a next level of the hierarchy, and wherein the controller module hierarchy includes controller modules executable to manage the set of operation entities according to a corresponding blueprint so as to complete the operation scenario, including by changing the state of one or more of the set of operation entities.

[0258] 13. A medium according to Example 12, wherein a particular one of the accessed blueprints indicates a lifecycle value and a type value of a corresponding one of the operation entities in the set of operation entities, and wherein the lifecycle value and the type value can be used to determine one or more functions that can be called to change the state of the corresponding operation entity.

[0259] 14. A medium according to Example 12, wherein a specific one of the accessed blueprints specifies a relationship in which a corresponding one of the operation entities in the operation entity set depends on another specific operation entity in the operation entity set, and wherein executing a specific one of the instructions for initializing the corresponding operation entity includes initializing the other specific operation entity before initializing the corresponding operation entity.

[0260] 15. The medium of example 12, wherein the operations further comprise:

[0261] Verifying a specific blueprint among the accessed blueprints to determine whether the specific blueprint is valid, wherein the verification comprises:

[0262] accessing a corresponding definition that identifies a set of acceptable values ​​specified in a given blueprint corresponding to the definition; and

[0263] Based on the definition of the access, a determination is made as to whether the particular blueprint specifies a value not included in the set of acceptable values.

[0264] 16. A method for managing an operation entity set, comprising:

[0265] executing, by a computer system including the set of operational entities, a hierarchy of controller modules, the hierarchy of controller modules having a coordinator controller module at a top level of the hierarchy, the coordinator controller module being operable to communicate with other controller modules in the hierarchy to manage the set of operational entities, wherein the set of operational entities includes hardware entities, software entities, and information entities;

[0266] accessing, by the coordinator controller module, operational information specifying a workflow having commands for a series of steps for implementing an operational scenario involving the set of operational entities;

[0267] The commands of the workflow are implemented by the coordinator controller module to implement the operation scenario, wherein the implementation includes issuing instructions to one or more of the other controller modules to change the state of one or more of the sets of operation entities.

[0268] 17. The method of example 16, wherein a particular controller module within the hierarchical structure is operable to manage the set of operational entities according to a corresponding blueprint defining properties of the set of operational entities.

[0269] 18. A method according to Example 17, wherein the attributes include relationship attributes, which define information related to the relationship between some operating entities in the set of operating entities, wherein the relationship affects the order in which the state of one or more operating entities will change based on the instruction.

[0270] 19. The method of example 17, wherein the one or more other controller modules are operable to route one or more instructions received from the coordinator controller module to a specific controller module that manages the set of operational entities.

[0271] 20. The method of example 19, wherein the one or more other controller modules are operable to route the one or more instructions based on a set of unique identifiers corresponding to the set of operational entities.

[0272] Although specific embodiments have been described above, these embodiments are not intended to limit the scope of the present invention, even if only a single embodiment is described for specific features. Unless otherwise specified, the examples of features provided in the present invention are intended to be illustrative rather than restrictive. The above description is intended to cover such substitutions, modifications and equivalents that are readily understood by those skilled in the art who benefit from the present invention.

[0273] The scope of the present invention includes any feature or combination of features disclosed herein (explicitly or implicitly), or any generalization thereof, whether or not it mitigates any or all of the problems raised herein. Accordingly, new claims may be formulated during the prosecution of any such combination of features in the present application (or an application claiming priority thereto). In particular, with reference to the appended claims, features from dependent claims may be combined with features of the independent claims, and features from individual independent claims may be combined in any appropriate manner, and not merely in the specific combinations listed in the appended claims.

Claims

1. A method for managing an operating scenario of a target computer environment, the method comprising: Accessing, by a computer system, operational information defining a set of commands for implementing the operational scenario; Accessing, by the computer system, a blueprint of a set of operation entities of the target computer environment that implements the operation scenario, wherein the set of operation entities includes hardware entities, software entities, and information entities, and wherein a specific blueprint among the blueprints specifies, for a corresponding operation entity in the set of operation entities, a life cycle value and a type value that can be used to determine one or more functions of a control application programming interface, the one or more functions being implemented by the corresponding operation entity and being callable to change a state of the corresponding operation entity; and The operation scenario is implemented by the computer system, including: executing a coordinator controller module located at a top level of a hierarchy of controller modules to execute the set of commands by issuing instructions to controller modules located at one or more other levels of the hierarchy; and The controller module is executed to use functions of the control application programming interface implemented by the operational entity sets and to manage the operational entity sets according to the blueprint so as to change the state of one or more of the operational entity sets.

2. The method of claim 1 , wherein a given operating entity is associated with a unique identifier that identifies the given operating entity, wherein a particular one of the instructions is associated with the given operating entity, and wherein issuing a particular instruction comprises: determining, based on the unique identifier, a particular one of the controller modules that manages the given operational entity; as well as The specific instruction is issued to a specific controller module.

3. A method according to claim 1 or 2, wherein for a corresponding first operating entity in the operating entity set, a given blueprint indicates a set of relationships between the first operating entity and one or more other operating entities in the operating entity set, and wherein the set of relationships affects the order in which commands in the command set can be executed.

4. The method of claim 3 , wherein the set of relationships comprises a relationship between the first operating entity and a second operating entity in the set of operating entities, and wherein executing a particular one of the instructions to change the state of the first operating entity comprises changing the state of the second operating entity before changing the state of the first operating entity.

5. The method according to claim 4, wherein the relationship between the first operation entity and the second operation entity is a dependency relationship, wherein the first operation entity depends on the existence of the second operation entity.

6. The method according to claim 1, wherein a first specific operation entity in the operation entity set and a second specific operation entity in the operation entity set are at different levels within the hierarchical structure, and wherein controller modules in the controller modules are at different levels of the hierarchical structure.

7. The method of claim 1, wherein executing a particular one of the instructions comprises causing the software entity to instantiate another information entity.

8. The method of claim 1, wherein the operational scenario comprises changing a state of one or more software entities included in the operational entity set to convert the one or more software entities from a first software version to a second software version.

9. The method of claim 1, wherein the hardware entity corresponds to a processor set, the software entity corresponds to a database server executing on the processor set, and the information entity corresponds to a logical database managed by the database server.

10. A computer readable medium having program instructions stored thereon, the program instructions enabling a computer system to perform operations comprising: accessing operational information defining a set of commands for implementing an operational scenario involving a target computer environment; Accessing a blueprint of a set of operation entities of the target computer environment that implement the operation scenario, wherein the set of operation entities includes hardware entities, software entities, and information entities, and wherein a specific blueprint among the blueprints specifies, for a corresponding operation entity in the set of operation entities, a life cycle value and a type value that can be used to determine one or more functions of a control application programming interface, the one or more functions being implemented by the corresponding operation entity and being callable to change a state of the corresponding operation entity; and Implementing the operation scenario includes: executing a coordinator controller module located at a top level of a hierarchy of controller modules to execute the set of commands by issuing instructions to controller modules located at one or more other levels of the hierarchy; and The controller module is executed to use functions of the control application programming interface implemented by the operational entity sets and to manage the operational entity sets according to the blueprint so as to change the state of one or more of the operational entity sets.

11. A medium according to claim 10, wherein the specific blueprint specifies a relationship in which the corresponding operating entity depends on another specific operating entity in the operating entity set, and wherein executing a specific one of the instructions for initializing the corresponding operating entity includes initializing the other specific operating entity before initializing the corresponding operating entity.

12. The medium of claim 10 or 11, wherein the operations further comprise: Verifying a given blueprint among the accessed blueprints to determine whether the given blueprint is valid, wherein the verifying comprises: accessing a corresponding definition, the definition identifying a set of acceptable values ​​specified in a blueprint corresponding to the definition; and Based on the definition of the access, a determination is made as to whether the given blueprint specifies a value not included in the set of acceptable values.

13. A system comprising at least one processor and a memory having program instructions stored thereon, the program instructions being executable by the at least one processor to cause the system to perform operations including the steps of the method according to any one of claims 1 to 9.

Citation Information

Patent Citations

  • Configuration management data model using blueprints

    US20060037000A1

  • System and method for customizing a deployment plan for a multi-tier application in a cloud infrastructure

    US20130232463A1

  • Instantiating a topology-based service using a blueprint as input

    US20160239595A1

  • Post-deployment modification of information-technology application using lifecycle blueprint

    US20180165071A1

  • Systems and methods for blueprint-based cloud management

    US20180322556A1