Semi-automated deployment for intra-service communication infrastructure

JP2025515420A5Active Publication Date: 2025-08-05ORACLE INT CORP
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
JP2024557651
Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
Priority Date
2022-05-12
Filing Date
2022-08-17
Publication Date
2025-08-05
Estimated Expiration
2042-08-17

AI Technical Summary

Technical Problem

Deploying new services within large enterprise software infrastructures is cumbersome, error-prone, and time-consuming, especially when data sharing or exchange is required, necessitating significant development resources and time to create connections.

Method used

The system generates a topology of components by selecting user-specified components and additional components based on their characteristics, such as rules, requirements, data input types, and output types, to create a connected architecture within a cloud environment.

Benefits of technology

This approach enables efficient deployment of new services by automating the selection and connection of components, reducing the time and resources required for development and improving the reliability of data sharing and exchange within the infrastructure.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000000_0000_ABST
    Figure 00000000_0000_ABST
Patent Text Reader

Abstract

Techniques are disclosed for generating a topology of components based on a set of components provided by a user. The system identifies one or more characteristics for each particular component of the first set of components. These characteristics may include at least one of a rule associated with the particular component, a requirement associated with the particular component, a type of data input corresponding to the particular component, and a type of data output corresponding to the particular component. Based on these characteristics, the system determines that an additional component not included in the first set of components is required to connect the first set of components. The system selects the additional component and determines a topology of components including the first set of components and the additional component. The system also determines data flows between components in the topology of components.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] Incorporation by Reference; Disclaimer Application No. 17 / 742,626, filed May 12, 2022, and Application No. 63 / 325,106, filed March 29, 2022, are incorporated herein by reference. Applicant hereby cancels all disclaimers of claims in this application or its prosecution history, and advises the USPTO that the claims in this application may be broader than all claims in the parent application.

[0002] Technical Field The present disclosure relates to deploying an intra-service communications infrastructure in a cloud environment. [Background technology]

[0003] background Deployment of new services in large enterprise-wide software infrastructures is cumbersome, error-prone, and time-consuming. The difficulty in deploying new services is compounded when data sharing or data exchange is required, as creating these connections requires both significant development resources and time.

[0004] The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have already been conceived or pursued, and thus, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art by mere inclusion in this section.

[0005] Embodiments are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings, in which: It should be noted that references to "an" or "one" embodiment in this disclosure do not necessarily refer to the same embodiment, but rather mean at least one. [Brief description of the drawings]

[0006] [Figure 1] FIG. 1 illustrates a block diagram of an example system according to one or more embodiments. [Diagram 2] FIG. 1 illustrates an example system for generating a topology according to one or more embodiments. [Diagram 3] FIG. 1 illustrates an exemplary topology generating system according to one or more embodiments. [Figure 4] FIG. 1 illustrates a set of example operations for generating a topology and data flow in accordance with one or more embodiments. [Diagram 5] FIG. 1 shows a block diagram illustrating a computer system according to one or more embodiments. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0007] Detailed Description In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding. One or more embodiments may be practiced without those specific details. Features described in one embodiment may be combined with features described in a different embodiment. In some instances, well-known structures and devices are described with reference to block diagram form in order to avoid unnecessarily obscuring the present invention. 1. Overview 2. System Architecture 3. Machine learning models 4. Example of embodiment 5. Computer Networks and Cloud Networks 6. Hardware Overview 7.Other, Expansion 1. Overview One or more embodiments generate a topology of components that includes user-selected components and system-selected components. The system selects components that are required by the user-selected components. The system may select components based on any of the characteristics of the user-selected components to include in the topology of components. Characteristics associated with the user-selected components may include, but are not limited to, rules, requirements, types of data input, and types of data output. In one example, the user-selected components may require a particular type of data input that is not output by any of the other user-selected components. The system may select components that output a particular type of data, and the components selected by the system for the set of components are used to create the topology. The system may select additional components not included in the user-selected components in response to determining that the user-selected components are insufficient to perform the function performed by the topology of components and that additional components would enable performance of the function.

[0008] The system may select implementation environments for the user-selected components in the topology of components and the system-selected components. As an example, the system may select one of an on-premise environment, an off-premise environment, and a cloud environment for each of the components. The implementation environments may be selected based on efficiency, performance, security, and accessibility criteria, for example.

[0009] One or more embodiments update the current topology of a component while it is running, without pausing or terminating the components in the current topology. As an example, the system may add a component to the current topology of the component and establish a connection with a component in the current topology of the component. The current component may be configured to periodically or continuously obtain data corresponding to any component. This data may be used to implement a communication channel with the additional component.

[0010] One or more embodiments describe updating a topology of a component based on machine learning algorithms and models configured to optimize the determined topology of the component based on manipulating an implementation of the determined topology of the component using production data. The machine learning algorithms and models may receive feedback regarding the performance of the implemented topology and update the set of components and / or data flows between the components to improve performance of the updated topology.

[0011] In an embodiment, the system removes a component from the set of components provided by the user in response to a more optimized topology of components that does not include the removed component being able to provide the desired functionality, purpose, goal, or output of the topology. In a further embodiment, the desired functionality, purpose, goal, or output of the topology may be specified by the user. In an alternative embodiment, the desired functionality, purpose, goal, or output of the topology may be derived from at least the set of components provided by the user.

[0012] One or more embodiments described herein and / or recited in the claims may not be included in the Summary section.

[0013] 2. System Architecture One or more embodiments described below include an infrastructure service that semi-autonomously deploys an infrastructure service communications infrastructure in a cloud environment based on user input that describes a partial set of components to be implemented. The user input may be used to determine which resources and / or components are required in the topology and how the resources and / or components are connected in the topology.

[0014] For ease of explanation, examples are described herein with reference to components manufactured by one or more particular vendors. For example, some examples include one or more components manufactured by Oracle International Corporation. Various embodiments are not limited to the specific components manufactured by a particular vendor used in these examples.

[0015] FIG. 1 illustrates a block diagram of an example system 100 according to one or more embodiments. As shown in FIG. 1, the system 100 includes an infrastructure service 114 including a component analyzer 106, a rule generator 108, a topology generator 110, and a system builder 112. In one or more embodiments, the infrastructure service 114 may be implemented in hardware, software, or a combination thereof. In an embodiment, the infrastructure service 114 and / or one or more components thereof may be provided as Software-as-a-Service (SaaS). The infrastructure service 114 may generate and / or develop one or more types of architectures and / or services for multiple users and / or tenants. Some example architectures and / or services include, but are not limited to, communication services, networks, data processing, data pipeline scaling, data storage, content and media platform management, knowledge management, system and workflow automation, user application configuration, Internet of Things (IoT) management, user device management, information security, and resiliency.

[0016] In one or more embodiments, the infrastructure service 114 is configured to receive user input 102 via one or more interface components 104. Any type of interface component 104 may be used to receive user input 102, such as a website, a virtual private network (VPN), the Internet, a remote application, etc.

[0017] In one or more embodiments, the user input 102 may include a set of resources and / or components that are intended to be included in the topology and / or architecture. In the remainder of the description, the user input 102 is described as including a set of components, but may include any combination of components, elements, modules, functions, resources, and / or processes, as would be understood by one of ordinary skill in the art. A topology or architecture is designed for at least one specific purpose and / or to perform some function. In one embodiment, the user input 102 may include a specific purpose and / or desired function. In one or more embodiments, the user input 102 may include one or more system dependencies and / or connections between at least two of the components specified in the user input 102.

[0018] These system dependencies and / or connections may be used by the infrastructure service 114 to connect together various components in a determined topology and to determine what possible topologies can connect the components specified as described in the user input 102 while ascertaining whether the topology can provide a particular purpose and / or desired functionality.

[0019] In one or more embodiments, the component analyzer 106 is configured to analyze the user input 102 and determine an essential or initial set of components specified in the user input 102 for inclusion in at least a topology determined by the system. Additional components may be required to perform a particular purpose and / or desired function and / or to interconnect the set of components according to one or more rules (as specified by the rule generator 108). In one embodiment, some components specified in the user input 102 may be identified by the component analyzer 106 as redundant, unnecessary, harmful, and / or unusable. In one embodiment, the component analyzer 106 is configured to not include any of these identified components in the essential set of components. However, the component analyzer 106 ensures, where possible, that any topology generated by the topology generator 110 includes every component specified in the user input 102.

[0020] The component analyzer 106 may be implemented in hardware, software, or a combination thereof. After the component analyzer 106 generates the requisite set of components, it passes this information to the rule generator 108 and the topology generator 110.

[0021] In one or more embodiments, the rule generator 108 is configured to receive the set of essential components as determined by the component analyzer 106 and, if applicable, generate one or more rules to ensure that any generated topology operates, minimizes repetition, optimizes data flow, follows conventions and protocols, isolates tenant information, adheres to security and privacy restrictions, connects components according to any interconnections specified in the user input 102 (if available), and performs a particular purpose and / or desired function (if specified). The rule generator 108 may be implemented in hardware, software, or a combination thereof. After the rules are generated, or in parallel with the functionality of the topology generator 110, the rule generator 108 provides the set of rules to the topology generator 110 for use in generating one or more topologies of the components 116.

[0022] In one or more embodiments, the topology generator 110 generates at least one topology 116 of components that includes all essential components, connects the components according to any specified interconnections (if available), and is configured to perform a particular purpose and / or desired function (if specified). For any particular set of conditions, multiple possible topologies may be generated. In one or more embodiments, an iterative process may be employed to narrow down the possible topologies to arrive at a preferred topology that optimizes connections, components, and resource usage, minimizes latency and delays, and operates most efficiently. Furthermore, in one or more embodiments, the topology generator 110 may utilize at least one machine learning model to generate the topology 116 of components to follow the set of rules provided by the rule generator 108 in a "best fit" manner.

[0023] The topology generator 110 may be implemented in hardware, software, or a combination thereof. After the topology generator 110 creates the topology 116 of the components, it passes this information to the system builder 112.

[0024] In one or more embodiments, the system builder 112 is configured to build a practical architecture based on the topology 116 of components that includes and optimizes the data flows 118 between the components. The system builder 112 considers and analyzes the positioning and hierarchy of various components in the topology 116 of components along with all necessary interconnections and dependencies of various components in the topology 116 of components to achieve a particular purpose and / or desired functionality, and builds the practical architecture. In one or more embodiments, the system builder 112 may utilize at least one machine learning model to generate the practical architecture and / or the data flows 118 between the components. Furthermore, an iterative process may be employed to refine the generated topology 116 of components and the data flows 118 between the components that make up the practical architecture over time, further optimizing the product and improving the user experience while maintaining minimal user input into the entire process.

[0025] In one or more embodiments, the topology generator 110 and / or the system builder 112 may utilize at least one machine learning model to generate the topology 116 of components and / or the data flows 118 between components in a variety of ways. In embodiments, the machine learning model may be provided by a tenant, a user, etc., via the interface component 104 or some other input technique. In one or more embodiments, the topology generator 110 and / or the system builder 112 may develop its own machine learning model based on one or more feedback loops, user input, past runs, scoring, training, or a combination thereof.

[0026] Figure 2 illustrates an exemplary system 200 for generating a topology, according to one or more embodiments. Although the various functions illustrated in Figure 2 are described as being performed by a "system," any combination of hardware and software may be utilized to perform the various functions illustrated in the figure. In contrast to the more generalized description of Figure 1, in Figure 2 further details of individual functions of system 200 are provided.

[0027] Referring again to FIG. 2 , a user 202 (such as an administrator, information technology (IT) professional, IT manager, etc.) inputs at least a set of components 206 for inclusion in a topology determined by the system. The set of components may be partial or incomplete in one or more embodiments. The user 202 utilizes an interface 204 for input of the set of components 206, such as a GUI, a website, a VPN, a microphone, a pointing device, etc. The user 202 may attempt to include all components required to complete a particular task, goal, calculation, function, or objective. However, in some approaches, the set of components 206 may be incomplete and / or may lack necessary components and / or may include unnecessary, redundant, and / or harmful components. To determine whether all required components are present and no extra components are present in the set of components 206, the inclusion or exclusion of components in the set of components 206 may be weighted against achieving the desired functionality of the set of components.

[0028] In one or more embodiments, the set of components 206 may include metadata associated with each of the selected components, or this metadata may be entered individually by the user 202. Each of the components selected by the user may be associated with respective metadata that describes one or more characteristics of the various components, such as name, function, elements required for use with the component, etc. In one example, the metadata may describe the inputs / outputs. In a further example, the metadata may indicate any of the format, protocol, bandwidth, speed, throughput, etc., for at least one of the inputs / outputs and / or the component as a whole.

[0029] In one example, the metadata may include one or more rules that dictate the necessary or required conditions for the implementation of the respective components. For example, to use component w, system 200 must implement security component x, encryption component y, data compression component z, etc. Thus, the rules are not necessarily generated by system 200 or an element of system 200 (e.g., a rule generator), but may be supplemented or provided entirely by another source, such as metadata associated with the components. In one approach, the rules may be received (or any of the other characteristics for making topology decisions), and system 200 determines, based on the received rules, which additional components are required based on these characteristics (and possibly the desired functionality of the set of components, if known).

[0030] In one or more embodiments, infrastructure service 208 receives set of components 206 and generates topology 210 based on set of components 206. Each component 212 (e.g., component 212a, component 212b, ..., component 212n) in determined topology 210 is positioned and appropriately interconnected within determined topology 210 relative to one another to achieve a desired purpose or functionality. The desired purpose or functionality may be provided by user 202 or may be derived from set of components 206 in one or more embodiments. Infrastructure service 208, in one or more embodiments, may derive, calculate, or otherwise determine the desired purpose or functionality based on past preferences, analysis of possible configurations, analysis of machine learning models, etc.

[0031] The builder 214 analyzes the topology 210 against one or more rules 216 (e.g., rule 216a, rule 216b, ..., rule 216n) to arrange the set of components 206, one or more additional components, remove redundant or unnecessary components from the set of components 206, create appropriate interconnections between the components, determine if one or more functions 238 are required to process results and / or intermediate values, determine if one or more applications 236 are required to provide a desired purpose or functionality, and generate at least one topology. The infrastructure service 208 generates the rules 216 to ensure that a practical architecture is generated for a tenant that is implemented on-premise 234 and / or remotely (e.g., in the cloud 240). The rules 216 may be generated based on any of the set of components 206, the desired purpose or functionality, and any specified interconnections and / or dependencies between the various components 212.

[0032] The infrastructure services 208 determine which components are located on-premise 234 and which components are located remotely (e.g., in the cloud 240). Of course, the placement, interconnection, and containment of some or all of the components 224, 226, object stores 228, streams 230, and callers 232 on-premise 234, as well as the functions 238 and applications 236 running in the cloud 240, may be adjusted and / or changed based on the topology and changing requirements of the users 202 and the desired purpose or functionality for the data flows 218 to the data pipeline 222. The topology depicted in FIG. 2 is for illustrative purposes only and is not intended to be limiting on any possible placement of elements with respect to the determined topology.

[0033] In one example topology, a set of components 224 (e.g., component 224a, component 224b, ..., component 224n) are connected to a data pipeline 222 for data ingestion. The data pipeline 222 receives data from one or more sources (e.g., data 218a, data 218b, ..., data 218n), which may be collected and / or aggregated (e.g., aggregation 220) before being delivered to the data pipeline 222. In some embodiments, the data 218 may be filtered according to one or more rules 216 before or after it enters the data pipeline 222.

[0034] In the illustrated example topology, component 224a provides data to stream 230 that is accessed by caller 232. Stream 230 and caller 232 are example types of components that may be included in the topology, among many other types of components. In this example, component 224a, stream 230, and caller 232 can each receive and send data to each other (bidirectional communication). However, in other examples, communication between one or more of these elements may be unidirectional. Additionally, caller 232 communicates bidirectionally with function 238a in cloud 240, although in some examples this communication may be unidirectional.

[0035] In this example topology, on-premise 234, at least one database and / or object store 228 may receive data from the data pipeline 222 and / or receive data from one or more of the other components 224, 226. A set of components 224 (e.g., component 224a, component 224b, ..., component 224n) also process the data from the data pipeline 222 and provide the processed data to components 226 (e.g., components 226a, ..., component 226n) and / or streams 230 and callers 232. Components 226 further process the data on-premise 234 before providing it to various functions 238 (e.g., functions 238a, ..., function 238n) in the cloud 240.

[0036] For example, in addition to providing data to component 226a, component 224b receives feedback or instructions directly from function 238b in cloud 240. However, this feedback may be provided to component 226a in one example, or passed from component 226a to component 224b in another example. Function 238b then processes the data according to a particular logic or programming and provides the results to application 236. Infrastructure service 208 has determined that the various functions 238 and applications 236 provide an optimized topology for providing a desired purpose or function, and thus directs the placement and inclusion of those functions 238 and applications 236 as shown in the exemplary topology.

[0037] On-premise 234, each of the various components 224, 226, object stores 228, streams 230, and callers 232 may be located, positioned, connected, and / or separated to achieve a desired purpose or functionality of the topology.

[0038] Within the cloud 240, various functions 238 (e.g., function 238a, function 238b, ..., function 238n) may have any purpose, function, design, algorithm, calculation, input, output, and / or parameters to perform a specified task. These functions 238 may return results to any components 224, 226 or object store 228 on-premise 234 and / or to one or more applications 236 or object stores in the cloud 240. In some examples, a set of functions 238 may be employed to generate complex results from one or more data inputs. Additionally, additional applications 236 may be employed to perform multi-level processing and complex decisions of the example topology.

[0039] As the set of components 206 of a topology, the specified interconnections, dependencies, and / or desired purpose or functionality change over time, at least one topology generated by infrastructure service 208 may also change to reflect differences in the input conditions of builder 214 and rules 216. These changes may, in some approaches, be implemented during operation in cloud 240 and on-premise 234 to account for changing environments.

[0040] In one example, data streams may be used as an asynchronous message bus that operates independently at its own speed to decouple components of a larger system. Data stream 230 is a component that may be used as an alternative to traditional file scraping techniques, helping to make important operational data available more quickly for indexing, analysis, and visualization. In another example, data stream 230 may capture activity such as page views, searches, or other user actions from a website or mobile app. This information may be used for real-time monitoring and analysis, or for offline processing and reporting in a data warehousing system. In another example, data stream 230 may be used as a unified entry point for cloud components to report cloud component lifecycle events for auditing, accounting, and related activities.

[0041] One particular example of data stream 230 and its corresponding elements is a series of data transactions generated by clickstream data and grouped together in collection 220. Examples of elements in a data stream may include web page requests, updates to a shopping cart associated with a user account, changes to a user profile, purchases, returns, etc. Other examples of elements in data stream 230 include changes to streamed sensor data, such as steps, elevation changes, location tracking coordinates, data transmissions associated with changes in temperature, humidity, manufacturing process conditions, etc. Additionally, data stream 230 may include similar events tracked over successive units of time, e.g., every 10 milliseconds (ms), every 100 ms, every second, every minute, etc.

[0042] Another example of an element in data stream 230 (a processing pipeline or workflow data stream) includes an operation, analysis, or process performed on a set of data items. An embodiment of a processing pipeline includes a set of algorithms arranged in series that operate on corresponding elements in the set of data items. Yet another example of a data stream 230 may include events, each event being a vector representation of a data item. For example, an event that is an algorithm in a first data stream may operate on a corresponding data item event in a second data stream, thereby generating a third data stream of vector events, each vector event being a representation of a corresponding non-vector data item event in the first data stream.

[0043] Additionally, some data streams may be accessed and manipulated by other data streams and / or computing applications to convert events in a first data stream from one object type or data type to another. That is, a data stream may be manipulated, analyzed, and / or transformed multiple times in succession to generate a desired result data stream. In some examples, this successive processing is referred to as a "processing pipeline." In some examples, the result data stream may include vector representations of data items or transformed (e.g., converted to an alternative data type or data representation structure) versions of data items. In other examples, the result data stream may include transformed data generated by the operation of one or more applications and / or algorithms (e.g., machine learning, document-to-vector, etc.) on another data stream.

[0044] Examples of associations from which a data stream may be generated include associations that generate events (e.g., data transactions / updates) from a common source, a common computing application, a common web page, a common transaction / data type, and / or a common entity (e.g., a business or organization). The associated transactions may be collectively grouped together to form data stream 230. In a further example, the data stream of associated events may be processed by one or more machine learning applications, thereby generating analytics that interpret the data (e.g., by querying or real-time data trending), result data streams, and / or predictions.

[0045] Invoker 232 is a component that can implement client-side communication protocol operations used as a communication channel between applications, such as enterprise applications, distributed applications, cloud applications, etc. In one example, invoker 232 may be used for client-side Hypertext Transfer Protocol (HTTP) protocol operations to perform simple HTTP requests, as well as to invoke representational state transfer (REST) ​​and / or simple object access protocol (SOAP) web services.

[0046] In another example, the caller 232 may be used to hide the details of the call into the implementation of the application endpoint. In this example, the container hands over the caller 232 implementation to the JAX-WS runtime, which calls invoke(java.lang.reflect.Method, java.lang.Object...) to invoke the Web service. Finally, the caller 232 makes the actual invocation of the Web service on the endpoint instance. The container also populates the provided WebServiceContext with the endpoint implementation and undertakes the invocation of the javax.annotation.PostConstruct method, if present.

[0047] In one or more embodiments, infrastructure service 208 may utilize at least one machine learning model to generate topology 210 and / or data flows between components in various manners. In embodiments, the machine learning model may be provided by a tenant, a user, etc., via interface 204 or some other input technique. In one or more embodiments, builder 214 and / or infrastructure service 208 may develop their own machine learning model based on one or more feedback loops, user input, past runs, scoring, training, or a combination thereof.

[0048] Further embodiments and / or examples relating to computer networks are described below in the section entitled "Computer Networks and Cloud Networks."

[0049] In one or more embodiments, one or more components of system 100 and / or system 200 may be implemented on one or more digital devices. The term "digital device" generally refers to any hardware device that includes a processor. A digital device may refer to a physical device that runs an application or a virtual machine. Examples of digital devices include computers, tablets, laptops, desktops, netbooks, servers, web servers, network policy servers, proxy servers, generic machines, function-specific hardware devices, hardware routers, hardware switches, hardware firewalls, hardware firewalls, hardware network address translators (NATs), hardware load balancers, mainframes, televisions, content receivers, set-top boxes, printers, mobile handsets, smartphones, personal digital assistants (PDAs), wireless receivers and / or transmitters, base stations, communication management devices, routers, switches, controllers, access points, and / or client devices.

[0050] In one or more embodiments, system 100 and / or system 200 may include a data repository (not shown in FIGS. 1 and 2). A data repository is any type of storage unit and / or device for storing data (e.g., a file system, a database, a collection of tables, and / or any other storage mechanism). A data repository may include multiple different storage units and / or devices. The multiple different storage units and / or devices may be of the same or different types, and may or may not be located at the same physical site. A data repository may be implemented or run on the same computing system as one or more other components shown in FIGS. 1 and 2 and / or on a separate computing system. A data repository may be communicatively coupled to one or more other components via a direct connection or via a network. Information may be implemented via any of the components of the platform other than the data repository.

[0051] In one or more embodiments, system 100 and / or system 200 may include a user interface (e.g., interface component 104, interface 204). A user interface refers to hardware and / or software configured to facilitate communication between a user and one or more components of system 100 and / or system 200. An interface renders user interface elements and receives inputs through user interface elements. Examples of interfaces include graphical user interfaces (GUI), command line interfaces (CLI), haptic interfaces, and voice command interfaces. Examples of user interface elements include check boxes, radio buttons, drop-down lists, list boxes, buttons, toggles, text fields, date and time selectors, command lines, sliders, pages, and forms. Different components of an interface may be specified in different languages. For example, the behavior of user interface elements may be specified in a dynamic programming language such as JavaScript. The content of user interface elements may be specified in a markup language such as hypertext markup language (HTML) or XML User Interface Language (XUL). The layout of user interface elements may be specified in a style sheet language such as Cascading Style Sheets (CSS). Alternatively, the interface may be specified in one or more other languages, such as Java, Python, C, or C++.

[0052] 3. Machine learning models In one or more embodiments, a machine learning algorithm may be included in system 100 and / or system 200 for determining at least one topology, interconnections, rules, dependencies, and any other relevant features, aspects, and / or characteristics of the architecture generated by the infrastructure service. A machine learning algorithm is an algorithm that may iterate using a set of training data to learn a target model that best maps a set of input variables to one or more output variables. The training data includes a dataset and an associated label. The dataset is associated with the input variables of the target model. The associated label is associated with the output variables of the target model. For example, a label associated with a dataset in the training data may indicate whether the dataset exists in one of a set of possible data categories. The training data may be updated, for example, based on feedback regarding the accuracy of the current target model. The updated training data may be fed back to the machine learning algorithm, which may then update the target model.

[0053] The machine learning algorithm may generate a target model such that the target model best matches the dataset of training data to the labels of the training data. In particular, the machine learning algorithm may generate the target model such that when the target model is applied to the dataset of training data, a maximum number of results determined by the target model match the labels of the training data. Different target models are generated based on different machine learning algorithms and / or different sets of training data.

[0054] Machine learning algorithms may include supervised and / or unsupervised components. Various types of algorithms may be used, such as linear regression, logistic regression, linear discriminant analysis, classification and regression trees, naive Bayes, K-nearest neighbors, learning vector quantization, support vector machines, bagging and random forests, boosting, backpropagation, and / or clustering.

[0055] In an embodiment, the system 100 may include a training pipeline (not shown in FIG. 1 ) configured to train the machine learning model. The training may occur after the topology 116 of components and / or the data flows 118 between components are generated by the infrastructure service 114. In another embodiment, the system 200 may include a training pipeline (not shown in FIG. 2 ) configured to train the machine learning model. The training may occur after the topology 210 and / or the data flows between components are generated by the infrastructure service 208. In a further approach, the training may occur before using the machine learning model on production data. Alternatively or additionally, the training may occur on the fly in a feedback loop that improves the machine learning model based on results obtained using the production data.

[0056] In a training pipeline, a scheduler may be configured to cause an orchestrator to obtain information about the machine learning model. The orchestrator is configured to enable or "spin up" an enterprise integrator model for the pipeline. The enterprise integrator model is configured to enable or "spin up" a job (e.g., a Kubernetes job) to perform the training. The job runs the training against the machine learning model and continues to run until one or more completion criteria are met (e.g., all training data has been processed). The orchestrator may be configured to poll the status of any training jobs.

[0057] In an embodiment, a scoring pipeline may be used with the machine learning model. The scoring pipeline is configured to perform scoring using the trained machine learning model. The scoring pipeline generates one or more insights by applying the trained machine learning model to production data. Scoring is just one example of how the machine learning model may be used, other examples include, but are not limited to, generating one or more predictions, adjusting parameters and / or results based on execution with production data, and / or continuing to train the machine learning model using the output of the machine learning model.

[0058] To perform the scoring, the orchestrator may initiate a scoring pipeline (e.g., in a corresponding Kubernetes pod). The scoring pipeline may be configured to take data from a source (e.g., one or more data platforms external to the secure modular machine learning platform) and store this data in storage specific to the tenant (e.g., an object store associated with the tenant). The scoring pipeline (e.g., code running in the Kubernetes pod) is configured to retrieve the data from the storage and apply a machine learning model to the data. The scoring pipeline may be configured to store the output of the machine learning model (e.g., the newly scored data) in the object storage and / or send this output to an external data source.

[0059] In embodiments, the secure modular machine learning platform includes one or more components described herein that help isolate tenants and / or users from each other. The secure modular machine learning platform may be configured to run an orchestrator on an existing cluster (e.g., a Kubernetes cluster) separate from a tenant-specific cluster. The tenant-specific cluster may be configured to run only images and / or machine learning models provided by the tenant. The orchestrator may be configured to send instructions to the pipeline to perform the respective functions.

[0060] In some examples (e.g., data science applications), the orchestrator may be configured to utilize an autonomous database for transaction processing (ATP). The orchestrator may be configured to use machine learning models provided by one or more platforms ("out of the box"). Alternatively or additionally, the orchestrator may be configured to use a microservices framework such as Minerva produced by Oracle International Corporation. Alternatively or additionally, the orchestrator may be configured to invoke tenant-specific machine learning models in tenant-specific clusters. Tenant-provided code running in the tenant-specific clusters is configured to utilize the respective tenant-specific machine learning models. In an embodiment, all communication with the tenant-specific clusters (e.g., calls to start the scoring process) initiates from the orchestrator's "master" cluster.

[0061] In an embodiment, each tenant's code runs within its own virtual cloud network (VCN). Each tenant's respective VCN may be isolated from other VCNs by firewall rules. Each VCN may be configured to only receive inbound data ("ingress") to a cluster specific to the tenant. Alternatively or additionally, each cluster may expose only a limited set of ports. For example, a cluster may expose only port 22 for secure shell (SSH), port 80 for hypertext transfer protocol (HTTP), and port 443 for secure HTTP (HTTPS). The platform may not include any mechanism for allowing the respective VCNs of the tenants to communicate with each other.

[0062] 4. Example of embodiment In the following, detailed examples are described for clarity. The components and / or operations described below should be understood as one particular example that may not be applicable to an embodiment. Therefore, the components and / or operations described below should not be interpreted as limiting the scope of any of the claims.

[0063] FIG. 3 illustrates an exemplary topology generating system 300 according to one or more embodiments. One or more of the operations illustrated in FIG. 3 may be modified, rearranged, or omitted altogether. Thus, the particular sequence of operations illustrated in FIG. 3 should not be construed as limiting the scope of one or more embodiments. Although operations are described in FIG. 3 as being performed by system 300, in one or more embodiments, any hardware, software, or combination thereof may be used to perform the various operations described in FIG. 3.

[0064] A user 302 inputs a set of components 306 for inclusion in a topology determined by the system. The set of components 306 may, in one approach, be incomplete and / or may, in one approach, include unrelated components. The user 302 utilizes a website 304 to input the set of components 306.

[0065] In one or more embodiments, the set of components 306 may include metadata associated with each of the selected components, or this metadata may be entered individually by the user 302. Each of the components selected by the user may be associated with respective metadata that describes one or more characteristics of the various components, such as name, function, elements required for use with the component, etc. In one example, the metadata may describe the inputs / outputs. In a further example, the metadata may indicate any of the format, protocol, bandwidth, speed, throughput, etc., for at least one of the inputs / outputs and / or the component as a whole.

[0066] In one example, the metadata may include one or more rules that dictate the necessary or required conditions for the implementation of the respective components. For example, to use component w, system 300 must implement security component x, encryption component y, data compression component z, etc. Thus, the rules are not necessarily generated by system 300 or an element of system 300 (e.g., a rule generator), but may be supplemented or provided entirely by another source, such as metadata associated with the components. In one approach, the rules may be received (or any of the other characteristics for making topology decisions), and system 300 determines, based on the received rules, which additional components are required based on these characteristics (and possibly the desired functionality of the set of components, if known).

[0067] In one or more embodiments, infrastructure service 308 receives set of components 306 and generates one or more topologies 310 based on set of components 306, each topology including each of the components from set of components 306 arranged to perform a particular function or purpose. In this example, set of components 306 includes Oracle International Corporation Maxymiser 312, Oracle International Corporation Unity 314, and Webhook 316. Additionally, there is an interconnection from Unity 314 to Maxymiser 312 as indicated by user 302. This example includes only three components for simplicity, and more components, complexities, interconnections, and dependencies may be indicated by user 302 when developing a complete architecture.

[0068] The builder 318 component of the infrastructure services 308 determines at least one topology 310 including the requested components Maxymiser 312, Unity 314, and Webhook 316 along with the interconnections from Unity 314 to Maxymiser 312. The determination of the various topologies 310 is based on one or more rules 320 determined by the infrastructure services 308 to ensure that data flow between the various components is possible, that inputs match outputs, that necessary data transformations and modifications between components are performed, etc. After the various topologies are created, the best topology to perform a particular function or purpose is selected by the infrastructure services 308 to generate an architecture.

[0069] A topology 310 is determined and selected, and then a system is implemented on-premise 340 and / or in the cloud 350 according to the selected topology 310. Thereafter, in one approach, production data 322 from one or more sources is received and input into a collection 324 from which a data pipeline 326 is generated. As shown in this example, there are three streams 328, 332, 336 on-premise 340, where streams 328 and 332 receive data from the data pipeline 326, while stream 336 receives processed data from a caller 334. Each stream 328, 332, 336 feeds data to a respective caller 330, 334, 338, which passes the data to various functions configured in the cloud 350 according to the selected topology 310. As shown, caller 330 provides data to webhook function 344, caller 334 sends and receives data to Unity function 346, and caller 338 sends and receives data to Maxymiser function 348. Because topology 310 requires an interconnection from Unity 314 to Maxymiser 312, Unity function 346 returns data to caller 334, which passes this data to caller 338's stream 336, which passes this data to Maxymiser function 348, thereby providing the required interconnection within topology 310.

[0070] Each of the functions in cloud 350 provides results to applications 342, which are selected and / or configured by infrastructure services 308 to use the results of the various functions to perform a particular function or purpose specified for topology 310.

[0071] Because the set of components 306, specified interconnections, dependencies, and / or specific function or purpose of a topology change over time, at least one topology 310 generated by infrastructure service 308 may also change to reflect differences in the input conditions of builder 318 and rules 320. These changes may, in some approaches, be implemented during operation in cloud 350 and on-premise 340 to account for changing environments. Additionally, infrastructure service 308 may iteratively modify topology 310 to improve and refine functionality, efficiency, resource usage, and other measurable qualities of topology 310 and / or generate additional potential topologies in an attempt to refine topology 310.

[0072] FIG. 4 illustrates an example set of operations 400 for generating a topology and data flows, according to one or more embodiments. One or more of the operations illustrated in FIG. 4 may be modified, rearranged, or omitted altogether. Thus, the particular sequence of operations illustrated in FIG. 4 should not be construed as limiting the scope of one or more embodiments. Although the operations are described in FIG. 4 as being performed by a system, in one or more embodiments, any hardware, software, or combination thereof may be used to perform the set of operations 400.

[0073] At operation 402, the system receives user input including at least a first set of components to be used to define a topology of components. This user input may include interconnections between one or more components, dependencies between one or more components, an order or sequence of the components, desired functionality, purpose, goals, or outputs of the first set of components, etc. In an embodiment, any and / or all of this information may be inferred, identified, and / or determined based on the first set of components, alone or in addition to other available information (such as past preferences, machine learning models, scoring, past results, identity of the requester, activities to be performed, etc.). At operations 404-412, the system generates a topology of components based on the set of components.

[0074] In one embodiment, the first set of components may be a selection of commercially available products from one or more software / architecture / network vendors. These components may be selected to achieve a business or organizational objective.

[0075] For each particular component in the first set of components, the system identifies one or more characteristics that describe the component, at operation 404. The characteristics may include any relevant information about the component, such as a name, a function, a source, a number of inputs, a number of outputs, a value and / or a name of a parameter associated with the particular component, a type of data input of the particular component, a type of data output of the particular component, a rule associated with the particular component, a requirement associated with the particular component, a constraint on the particular component, other types of components related to the particular component, etc. A component may be of any type known in the art, such as a stream, an object store, a database, a caller, a consumer, a function block, a collector, a parser, a filter, etc.

[0076] The system determines whether additional components (not included in the first set of components) are required to connect the first set of components, such as to achieve a desired function, purpose, goal, or output, in operation 406. This determination, in one embodiment, is based on one or more characteristics respectively associated with each component in the first set of components. In further embodiments, this determination may take into account resources available on-premise and / or in the cloud (which may be unknown to the user), components that are more efficient or performant than the components specified in the first set of components, components that perform multiple tasks specified by the components in the first set of components, interconnection constraints and / or rules that affect how the components in the first set of components may be interconnected, etc.

[0077] The additional components may be of the type specified in the first set of components or a different type of component. Further, the additional components may be selected to ensure that all components in the first set of components can function together, communicate properly, share data, protect data and privacy, and achieve a desired function, purpose, goal, or output after being implemented in the architecture on-premise and / or in the cloud.

[0078] In response to the system determining that additional components are needed, at operation 408 the system selects the additional components to be included in the second topology of components. The selection of the second components may be based on any relevant information available to the system, which in one embodiment includes (a) one or more characteristics respectively associated with each component of the first set of components, and (b) one or more characteristics of the additional components. The characteristics of the additional components may be compared to needs, deficiencies, problems, and / or inefficiencies in the first set of components when attempting to design a topology that can achieve a desired function, purpose, goal, or output.

[0079] According to one or more embodiments, the system selects an implementation environment for the additional components and / or the first set of components. The implementation environment may be selected based on any relevant information, such as where the components are physically located, the cost to acquire and / or implement the components in different environments, the required or allowable arrangement or order of the components, the desired functionality, purpose, goal, or output, etc. Any available environment may be specified, such as an on-premise environment, an off-premise environment, a split installation environment, a remote computing environment, and / or a cloud environment. In one embodiment, the topology of the components may be distributed across different environments.

[0080] In one or more embodiments, the system selects the additional component in response to determining that the additional component is associated with a first data input type that matches a first data output type corresponding to a first component in the first set of components. In other words, an output of one component may be used to select a second component to add to the topology based on an input of the second component that matches an output of the first component. In this approach, the additional component is placed in a position to receive data from the first component in the topology.

[0081] Various types of data input and output types are possible for use with the various components and may be based on any possible distinctions such as data protocol, data format, data size, data transmission rate, type of physical connection, hardware or software based implementation of the components, etc.

[0082] In a further embodiment, the system may select an additional component in response to determining that no component in the first set of components is associated with any data input type that matches a first data output type corresponding to a first component in the first set of components. In other words, the system may determine that there are insufficient data input types in the first set of components to receive data from a particular data output type of the first component. Thus, the system selects a component that is configured to receive as an input the data output type of the first component. The system then connects an output of the first component to an input of the additional component.

[0083] In one or more embodiments, the system selects the additional component in response to determining that the additional component is associated with a first data output type that matches a first data input type corresponding to a first component in the first set of components. In other words, an input of one component may be used to select a second component to add to the topology based on an output of the second component that matches an input of the first component. In this approach, the additional component is placed in a position to provide data to the first component in the topology.

[0084] In a further embodiment, the system may select an additional component in response to determining that no component in the first set of components is associated with any data output type that matches a first data input type corresponding to a first component in the first set of components. In other words, the system may determine that there are insufficient data output types in the first set of components to provide data for a particular data input type of the first component. Thus, the system selects a component that is configured to provide as an output data that corresponds to the data input type of the first component. The system then connects an input of the first component to an output of the additional component.

[0085] According to one or more embodiments, the system selects the additional components based on the data input type of the data sent to the topology of the component. In other words, the data in the data pipeline is considered when selecting additional components to add to the topology of the component, and may include applications, functions, or some other type of component.

[0086] In one embodiment, the system may generate a second topology for the component by modifying a previous topology of the component, thereby creating a second topology for the component that improves on the previous topology in some way that can actually perform a desired function, purpose, goal, or output, for example, operates faster, operates more efficiently, operates less expensively, operates using fewer components, operates using more reliable components, etc.

[0087] In a further embodiment, the second topology of the component may be generated by the system at run-time while the components in the component's previous topology are executing without interrupting the functionality of the component's previous topology while the component's second topology is being generated, until the system finishes execution and transitions to the component's second topology.

[0088] The system determines (a) a second topology of components including the first set of components and the additional component, and (b) data flow between components in the second topology of components based on the selection of the second component, at operation 410. The data flow between components may be based on an order, sequence, interconnection, and / or dependency between at least some of the components to achieve a desired function, purpose, goal, or output of the second topology of components.

[0089] In response to the system determining that additional components are not required (e.g., to achieve a desired function, purpose, goal, or output), the system determines (a) a first topology of components that includes a first set of components, and (b) data flow between components in the first topology of components, at operation 412. The data flow between components may be based on an order, arrangement, interconnection, and / or dependencies between at least some of the components to achieve the desired function, purpose, goal, or output of the first topology of components.

[0090] In one embodiment, before the system selects additional components, the system may determine that the first set of components is insufficient to complete any topology of components that can operate together, to perform a required task or function, and / or to achieve a desired function, purpose, goal, or output. This determination may be based on some criteria not being met, such as a maximum total execution time, a maximum or minimum number of cycles, all components in the first set of components not being able to communicate with each other in any topology, the cost of execution exceeding a threshold, etc. After this determination is made, the system may determine whether removing components, adding components, and / or substituting components increases the likelihood that the desired function, purpose, goal, or output of the new topology is feasible, and whether all criteria for the execution of the topology of components are met. The system may make these determinations iteratively until a topology that can execute as needed is selected.

[0091] Additionally, after a topology is implemented, the system may monitor the performance of the implemented topology to determine whether a better topology is available to perform the desired function, purpose, goal, or output. For example, the system may determine a topology that can actually perform the desired function, purpose, goal, or output more quickly, more efficiently, less expensively, using fewer components, using more reliable components, etc. If a better topology is determined, the system may modify the implementation to match the improved topology to improve performance of the implemented solution during operation. As described herein in one or more embodiments, machine learning algorithms and / or models may be used to help make these determinations and / or to suggest additional topologies and data flows between components in the additional topologies.

[0092] In another embodiment, the system may receive an updated, modified, and / or additional set of components for the creation of the topology. In the case of an updated set of components, the system may modify the existing topology to account for changes made to a previously received set of components, and may work in an iterative manner to converge on a best-fit topology for achieving a desired function, purpose, goal, or output. In the case of a new set of components, the system may perform operation 400 again to provide a new topology that meets all the requirements of the user and the available installation environment.

[0093] In one or more embodiments, the system receives a second user input that specifies and / or includes a functionality of the first set of components and / or the topology of components, the functionality representing an overall purpose, e.g., functionality, of the topology as a whole. In these embodiments, in response to determining that additional components are required to implement the functionality of the topology of components, any required additional components may be selected by the system.

[0094] In one embodiment, the system may optimize the topology by determining which components can receive outputs from a specified component in the first set of components. For example, if the set of components includes a webhook, a component configured to receive all outputs from the webhook may be selected as an additional component even if it would cause a different component in the set of components to become redundant and / or unavailable. In this case, the redundant / unused component is simply removed from the topology, resulting in a more optimized topology of components for implementation. In another example, assuming Oracle International Corporation Unity is selected as a component and a specific component in the first set of components that can receive one of the outputs from Unity is also specified, the additional component being selected may be a duplicate of this specific component to receive the other output from Unity.

[0095] In one or more embodiments, the system may receive a second user input including an updated set of components. In response to this second user input, the system determines which components are being removed or added from the first set of components to form the updated set of components. Based on this information, the system selects one or more first components to add to the second topology and / or one or more second components to remove from the second topology of components. The selection and choice of adding or removing components is based on (a) one or more characteristics respectively associated with each first component, (b) one or more characteristics respectively associated with each second component, and (c) one or more characteristics of the components removed or added from the first set of components. In this way, the system can optimize the topology based on the characteristics of the added / removed / remaining components in the updated set of components while taking into account all changes made to the first set of components when devising a new topology for placing the updated set of components. In one approach, the system uses this information to determine (a) a third topology of components (based on the first set of components, the additional component, the one or more first components, and the one or more second components) and (b) data flow between components in the third topology of components.

[0096] 5. Computer Networks and Cloud Networks In one or more embodiments, a computer network provides connectivity between a set of nodes. The nodes may be local and / or remote from one another. The nodes are connected by a set of links. Examples of links include coaxial cable, unshielded twisted cable, copper cable, optical fiber, and virtual links.

[0097] A subset of nodes implements computer networks. Examples of such nodes include switches, routers, firewalls, and network address translators (NATs). Another subset of nodes uses computer networks. Such nodes (also called "hosts") may execute client processes and / or server processes. A client process makes requests for computing services (such as running a particular application and / or storing a particular amount of data). A server process responds by performing the requested service and / or returning the corresponding data.

[0098] A computer network may be a physical network that includes physical nodes connected by physical links. A physical node is any digital device. A physical node may be a function-specific hardware device, such as a hardware switch, a hardware router, a hardware firewall, and a hardware NAT. Additionally or alternatively, a physical node may be a general-purpose machine configured to run various virtual machines and / or applications that perform respective functions. A physical link is a physical medium that connects two or more physical nodes. Examples of links include coaxial cable, unshielded twisted cable, copper cable, and optical fiber.

[0099] A computer network may be an overlay network. An overlay network is a logical network implemented on top of another network (such as a physical network). Each node in an overlay network corresponds to a respective node in the underlying network. Thus, each node in an overlay network is associated with both an overlay address (for addressing the overlay node) and an underlay address (for addressing the underlay node that implements the overlay node). An overlay node may be a digital device and / or a software process (such as a virtual machine, application instance, or thread). The links connecting the overlay nodes are implemented as tunnels through the underlying network. The overlay nodes at both ends of the tunnel treat the underlying multi-hop path between them as a single logical link. The tunnels are performed by encapsulation and decapsulation.

[0100] In an embodiment, the client may be local and / or remote from the computer network. The client may access the computer network via a private network or another computer network, such as the Internet. The client may communicate the request to the computer network using a communication protocol, such as the Hypertext Transfer Protocol (HTTP). The request is communicated through an interface, such as a client interface (such as a web browser), a program interface, or an application programming interface (API).

[0101] In an embodiment, a computer network provides connectivity between clients and network resources. The network resources include hardware and / or software configured to execute server processes. Examples of network resources include processors, data storage, virtual machines, containers, and / or software applications. The network resources are shared among multiple clients. The clients request computing services from the computer network independently of one another. The network resources are dynamically allocated to requests and / or clients on demand. The network resources allocated to each request and / or client may be scaled up or down based on, for example, (a) the computing services requested by a particular client, (b) the aggregated computing services requested by a particular tenant, and / or (c) the requested aggregated computing services of the computer network. Such a computer network may be referred to as a "cloud network."

[0102] In an embodiment, a service provider provides a cloud network to one or more end users. A variety of service models may be implemented by the cloud network, including, but not limited to, Software-as-a-Service (SaaS), Platform-as-a-Service (PaaS), and Infrastructure-as-a-Service (IaaS). In SaaS, the service provider provides end users with the ability to use the service provider's applications running on the network resources. In PaaS, the service provider provides end users with the ability to deploy custom applications to the network resources. The custom applications may be created using programming languages, libraries, services, and tools supported by the service provider. In IaaS, the service provider provides end users with the ability to provision processing, storage, network, and other basic computing resources provided by the network resources. Any arbitrary application, including operating systems, may be deployed to the network resources.

[0103] In an embodiment, a computer network may implement various deployment models, including, but not limited to, private cloud, public cloud, and hybrid cloud. In a private cloud, network resources are provisioned for exclusive use by a particular group of one or more entities (the term "entity" as used herein refers to a business, organization, person, or other entity). The network resources may reside locally on the premises of the particular group of entities and / or remotely from the premises. In a public cloud, cloud resources are provisioned for multiple entities (also called "tenants" or "customers") that are independent of each other. The computer network and its network resources are accessed by clients corresponding to different tenants. Such a computer network may be referred to as a "multi-tenant computer network." Multiple tenants may use the same particular network resources at different times and / or simultaneously. The network resources may reside locally on the premises of the tenants and / or remotely from the premises. In a hybrid cloud, the computer network includes a private cloud and a public cloud. The interface between the private cloud and the public cloud allows for data and application portability. Data stored in a private cloud and data stored in a public cloud may be exchanged through an interface. Applications implemented in a private cloud and applications implemented in a public cloud may have dependencies on each other. Calls from applications in a private cloud to applications in a public cloud (and vice versa) may be made through an interface.

[0104] In an embodiment, tenants of a multi-tenant computer network are independent of one another. For example, the business or operations of one tenant may be separated from the business or operations of another tenant. Different tenants may require different network requirements for the computer network. Examples of network requirements include processing speed, amount of data storage, security requirements, performance requirements, throughput requirements, latency requirements, resilience requirements, Quality of Service (QoS) requirements, tenant isolation, and / or consistency. The same computer network may need to implement different network requirements required by different tenants.

[0105] In one or more embodiments, tenant isolation is implemented within a multi-tenant computer network to ensure that applications and / or data of different tenants are not shared with each other. Various tenant isolation techniques may be used.

[0106] In an embodiment, each tenant is associated with a tenant ID. Each network resource in the multi-tenant computer network is tagged with a tenant ID. A tenant is permitted access to a particular network resource only if the tenant and the particular network resource are associated with the same tenant ID.

[0107] In an embodiment, each tenant is associated with a tenant ID. Each application implemented by the computer network is tagged with a tenant ID. Additionally or alternatively, each data structure and / or data set stored by the computer network is tagged with a tenant ID. A tenant is granted access to a particular application, data structure, and / or data set only if the tenant and the particular application, data structure, and / or data set are associated with the same tenant ID.

[0108] As an example, each database implemented by a multi-tenant computer network may be tagged with a tenant ID. Only the tenant associated with the corresponding tenant ID may access the data of a particular database. As another example, each entry in a database implemented by a multi-tenant computer network may be tagged with a tenant ID. Only the tenant associated with the corresponding tenant ID may access the data of a particular entry. However, a database may be shared by multiple tenants.

[0109] In an embodiment, a subscription list indicates which tenants have permission to access which applications. For each application, a list of tenant IDs of tenants authorized to access the application is stored. A tenant is authorized to access a particular application only if the tenant's tenant ID is included in the subscription list corresponding to the particular application.

[0110] In an embodiment, network resources (such as digital devices, virtual machines, application instances, and threads) corresponding to different tenants are separated into tenant-specific overlay networks maintained by a multi-tenant computer network. As an example, packets from any source device in a tenant overlay network may be sent only to other devices in the same tenant overlay network. An encapsulation tunnel is used to prohibit all transmissions from a source device on a tenant overlay network to devices in other tenant overlay networks. In particular, a packet received from a source device is encapsulated in an outer packet. The outer packet is sent from a first encapsulation tunnel endpoint (which communicates with a source device in a tenant overlay network) to a second encapsulation tunnel endpoint (which communicates with a destination device in a tenant overlay network). The second encapsulation tunnel endpoint decapsulates the outer packet to obtain the original packet sent by the source device. The original packet is sent from the second encapsulation tunnel endpoint to a destination device in the same specific overlay network.

[0111] 6. Hardware Overview According to one embodiment, the techniques described herein are implemented by one or more special-purpose computing devices. The special-purpose computing devices may include digital electronic devices such as one or more application-specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or network processing units (NPUs) that may be hardwired to perform the techniques or that are persistently programmed to perform the techniques, or may include one or more general-purpose hardware processors that are programmed to perform the techniques according to program instructions contained in firmware, memory, other storage, or a combination thereof. Such special-purpose computing devices may combine custom hardwired logic, ASICs, FPGAs, or NPUs with custom programming to realize the techniques. The special-purpose computing devices may be desktop computer systems, portable computer systems, handheld devices, network devices, or any other devices that incorporate hardwired and / or program logic to implement the techniques.

[0112] For example, Figure 5 is a block diagram illustrating a computer system 500 in which embodiments of the invention may be implemented. Computer system 500 includes a bus 502 or other communication mechanism for communicating information, and a hardware processor 504 coupled with bus 502 for processing information. Hardware processor 504 may be, for example, a general-purpose microprocessor.

[0113] Computer system 500 also includes a main memory 506, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 502 for storing information and instructions executed by processor 504. Main memory 506 may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 504. Such instructions, when stored in a non-transitory storage medium accessible by processor 504, make computer system 500 a special-purpose machine customized to perform operations specified in the instructions.

[0114] Computer system 500 further includes a read only memory (ROM) 508 or other static storage device coupled to bus 502 for storing static information and instructions for processor 504. A storage device 510, such as a magnetic disk or optical disk, is provided and coupled to bus 502 for storing information and instructions.

[0115] The computer system 500 may be coupled via bus 502 to a display 512, such as a cathode ray tube (CRT), for displaying information to a computer user. An input device 514, including alphanumeric or other keys, is coupled to the bus 502 for communicating information and command selections to the processor 504. Another type of user input device is a cursor control 516, such as a mouse, trackball, or cursor direction keys, for communicating directional information and command selections to the processor 504 and for controlling movement of a cursor on the display 512. This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allow the device to specify a position in a plane.

[0116] The computer system 500 may implement the techniques described herein using customized hardwired logic, one or more ASICs or FPGAs, firmware, and / or program logic that in combination with the computer system causes or programs the computer system 500 to be a special-purpose machine. According to one embodiment, the techniques herein are performed by the computer system 500 in response to the processor 504 executing one or more sequences of one or more instructions contained in the main memory 506. Such instructions may be read into the main memory 506 from another storage medium, such as the storage device 510. Execution of the sequences of instructions contained in the main memory 506 causes the processor 504 to perform the process steps described herein. In alternative embodiments, hardwired circuitry may be used in place of or in combination with software instructions.

[0117] The term "storage medium" as used herein refers to any non-transitory medium that stores data and / or instructions that cause a machine to operate in a particular manner. Such storage media may include non-volatile media and / or volatile media. Examples of non-volatile media include optical or magnetic disks, such as storage device 510. Examples of volatile media include dynamic memory, such as main memory 506. Examples of common forms of storage media include floppy disks, flexible disks, hard disks, solid state drives, magnetic tape, or any other magnetic data storage medium, CD-ROMs, any other optical data storage medium, any physical medium with a pattern of holes, RAM, PROMs, and EPROMs, flash EPROMs, NVRAMs, any other memory chips or memory cartridges, content-addressable memories (CAMs), and ternary content-addressable memories (TCAMs).

[0118] Storage media are distinct from, but may be used in conjunction with, transmission media. Transmission media participate in transferring information between storage media. Examples of transmission media include coaxial cables, copper wire, and fiber optics, such as the wires that comprise bus 502. Transmission media can also take the form of acoustic or light waves, such as those generated during radio wave and infrared data communications.

[0119] Various forms of media may be involved in carrying one or more sequences of one or more instructions to the processor 504 for execution. For example, the instructions may initially be carried on a magnetic disk or solid state drive of a remote computer. The remote computer can load the instructions into a dynamic memory and send the instructions over a telephone line using a modem. A modem local to the computer system 500 can receive the data on the telephone line and use an infrared transmitter to convert the data to an infrared signal. An infrared detector can receive the data carried in the infrared signal and appropriate circuitry can place the data on the bus 502. The bus 502 carries the data to the main memory 506, from which the processor 504 retrieves and executes the instructions. The instructions received by the main memory 506 may optionally be stored on a storage device 510 either before or after execution by the processor 504.

[0120] Computer system 500 also includes a communication interface 518 coupled to bus 502. The communication interface 518 provides a two-way data communication coupling to a network link 520 that is connected to a local network 522. For example, the communication interface 518 may be an integrated services digital network (ISDN) card, cable modem, satellite modem, or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, the communication interface 518 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. A wireless link may also be implemented. In any such implementation, the communication interface 518 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.

[0121] Network link 520 typically provides data communication through one or more networks to other data devices. For example, network link 520 may provide a connection through a local network 522 to a host computer 524 or to data equipment operated by an Internet Service Provider (ISP) 526. ISP 526 in turn provides data communication services through the worldwide packet data communication network now commonly referred to as the "Internet" 528. Local network 522 and Internet 528 both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on network link 520 and through communication interface 518, which carry the digital data to and from computer system 500, are exemplary forms of transmission media.

[0122] Computer system 500 can send messages and receive data, including program code, through the network(s), network link 520 and communication interface 518. In the Internet example, a server 530 might transmit a requested code for an application program through Internet 528, ISP 526, local network 522 and communication interface 518.

[0123] The received code may be executed by processor 504 as it is received, and / or stored in storage device 510, or other non-volatile storage for later execution.

[0124] 7.Other, Expansion Each embodiment is directed to a system that includes one or more devices that include a hardware processor and are configured to perform any of the operations described herein and / or recited in any of the claims below.

[0125] In an embodiment, a non-transitory computer-readable storage medium includes instructions that, when executed by one or more hardware processors, cause performance of any of the operations described herein and / or recited in any of the claims.

[0126] Any combination of the features and functions described herein may be used according to one or more embodiments. In the foregoing specification, each embodiment has been described with reference to numerous specific details that may vary from implementation to implementation. Therefore, the specification and drawings should be considered in an illustrative, not restrictive sense. The only exclusive indication of the scope of the invention, and what is intended to be the scope of the invention by this application, is the literal equivalent range of the set of claims issuing from this application in the particular form in which the claims arise, including any subsequent amendments.

Claims

1. A computer readable program comprising instructions that, when executed by at least one hardware processor, cause operations to be performed, the operations including: receiving user input identifying a first set of user-selected components to be used to define a topology of components; generating a topology of the component by at least the steps of: The following steps include identifying one or more characteristics for each particular component of the first set of components selected by the user; The one or more characteristics are: a rule associated with said particular component; requirements associated with said particular component; The type of data input corresponding to said particular component; and selected from a group including the type of data output corresponding to the particular component; The following steps: determining, based on the one or more characteristics associated with at least one component of the first set of components selected by the user, that additional components not included in the first set of components selected by the user are required to implement a particular data flow corresponding to the topology of components; selecting, by the system, the additional components to be included in the topology of the component based on (a) the one or more characteristics respectively associated with at least one component of the first set of components selected by the user, and (b) one or more characteristics of the additional components; and (b) determining, by the system, (a) the topology of the components including the first set of components selected by the user and additional components selected by the system, and (b) the specific data flow corresponding to the topology of the components.

2. 2. The computer-readable program of claim 1, wherein the operations further comprise determining that the first set of components selected by the user is insufficient to complete any topology of components before the system selects additional components selected by the system.

3. 3. The computer-readable program of claim 1, wherein the operations further include selecting, by the system, an implementation environment for the additional component selected by the system, the implementation environment comprising one of an on-premise environment, an off-premise environment, and / or a cloud environment.

4. 3. The computer-readable program of claim 1, wherein the operations further include selecting the additional component selected by the system in response to determining, by the system, that the additional component selected by the system is associated with a first data input type that matches a first data output type corresponding to a first component of the first set of components selected by the user.

5. 5. The computer-readable program of claim 4, wherein the operations further include selecting an additional component selected by the system in response to further determining that no component in the first set of components selected by the user is associated with any data input type that matches the first data output type corresponding to the first component in the first set of components selected by the user.

6. 3. The computer-readable program of claim 1, wherein the operations further include selecting the system-selected additional component in response to determining, by the system, that the system-selected additional component is associated with a first data output type that matches a first data input type corresponding to a first component of the first set of components selected by the user.

7. 7. The computer-readable program of claim 6, wherein the operations further include selecting an additional component selected by the system in response to further determining that no component in the first set of components selected by the user is associated with any data output type that matches the first data input type corresponding to the first component in the first set of components selected by the user.

8. 3. The computer-readable program of claim 1, wherein the operations further include receiving a second user input including a function of the topology of components, and wherein the additional components selected by the system are selected by the system in response to determining that the additional components selected by the system are required to implement the function of the topology of components.

9. The computer readable program of claim 1 or 2, wherein the additional components selected by the system are selected further based on a data input type of data sent to the topology of the components.

10. The computer-readable program of claim 1 or 2, wherein generating the topology of the component comprises modifying a previous topology of the component to generate the topology of the component.

11. 11. The computer readable program of claim 10, wherein the topology for the component is generated at runtime while a previous topology for the component is running without interruption while the topology for the component is being generated.

12. The operation is receiving a second user input including an updated set of components; determining, by the system, which components have been removed or added from the first set of components selected by the user to form the updated set of components; selecting, by the system, one or more first components to add to the topology and one or more second components to remove from the topology of components based on (a) one or more characteristics respectively associated with each first component, (b) one or more characteristics respectively associated with each second component, and (c) one or more characteristics of the components removed or added from the first set of components selected by the user; 3. The computer-readable program of claim 1, further comprising determining, by the system: (a) a third topology of components based on the first set of components selected by the user, additional components selected by the system, the one or more first components, and the one or more second components; and (b) data flow between components in the third topology of components.

13. at least one hardware processor; and a computer-readable medium containing instructions, the instructions comprising: When executed by the at least one hardware processor, the operations perform: receiving user input identifying a first set of user-selected components to be used to define a topology of components; generating a topology of the component by at least the steps of: The following steps include identifying one or more characteristics for each particular component of the first set of components selected by the user; The one or more characteristics are: a rule associated with said particular component; requirements associated with said particular component; The type of data input corresponding to said particular component; and selected from a group including the type of data output corresponding to the particular component; The following steps: determining, based on the one or more characteristics associated with at least one component of the first set of components selected by the user, that additional components not included in the first set of components selected by the user are required to implement a particular data flow corresponding to the topology of components; selecting the additional components to be included in the topology of components based on (a) the one or more characteristics respectively associated with at least one component of the first set of components selected by the user, and (b) one or more characteristics of the additional components; (a) determining the topology of the components including the first set of components selected by the user and the additional components; and (b) determining the specific data flows of the components.

14. 14. The system of claim 13, wherein, prior to selecting the additional components, the operations further include determining that the first set of components selected by the user is insufficient to complete any topology of components.

15. 15. The system of claim 13 or 14, wherein the operations further include selecting, by the system, an implementation environment for the additional component, the implementation environment comprising one of an on-premise environment, an off-premise environment, and / or a cloud environment.

16. 15. The system of claim 13 or 14, wherein the operations further include receiving a second user input including a function of the topology of the component, and wherein the additional component is selected in response to determining that the additional component is required to implement the function of the topology of the component.

17. 1. A method comprising: receiving user input identifying a first set of user-selected components to be used to define a topology of components; generating a topology of the component by at least the steps of: The following steps include identifying one or more characteristics for each particular component of the first set of components selected by the user; The one or more characteristics are: a rule associated with said particular component; requirements associated with said particular component; The type of data input corresponding to said particular component; and selected from a group including the type of data output corresponding to the particular component; The following steps: determining, based on the one or more characteristics associated with at least one component of the first set of components selected by the user, that additional components not included in the first set of components selected by the user are required to implement a particular data flow corresponding to the topology of components; selecting the additional components to be included in the topology of components based on (a) the one or more characteristics respectively associated with at least one component of the first set of components selected by the user, and (b) one or more characteristics of the additional components; (a) determining the topology of components including the first set of components selected by the user and the additional component; and (b) determining the particular data flow corresponding to the topology of components; The method is performed by a system including at least one hardware processor.

18. 20. The method of claim 17, further comprising, before selecting the additional components, determining that the first set of components selected by the user is insufficient to complete any topology of components.

19. 19. The method of claim 17 or 18, further comprising selecting, by the system, an implementation environment for the additional component, wherein the implementation environment comprises one of an on-premise environment, an off-premise environment, and / or a cloud environment.

20. 19. The method of claim 17 or 18, further comprising receiving a second user input including a function of the topology of components, wherein the additional component is selected in response to determining that the additional component is required to implement the function of the topology of components.