Dynamically assigning user equipment to workload cluster

By executing device agents on user equipment and dynamically monitoring and allocating resources, the problem of low resource utilization efficiency in distributed computing environments is solved, and more efficient resource utilization and cost reduction is achieved.

CN119987990APending Publication Date: 2025-05-13SAP SE
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202411607066.7
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2023-11-13
Filing Date
2024-11-12
Publication Date
2025-05-13

AI Technical Summary

Technical Problem

In distributed computing environments, enterprises face high-cost dedicated cluster resources and underutilized local machine resources, resulting in suboptimal or inefficient use of computing resources.

Method used

By executing device agents on user devices, monitoring resource utilization, and dynamically assigning workload execution requests to a cluster including multiple user devices based on resource requirements of cluster workloads and resource utilization of user devices, thereby optimizing resource usage.

Benefits of technology

It realizes more efficient use of user equipment resources within the enterprise, reduces dependence on dedicated computing nodes, reduces infrastructure costs, and improves the utilization rate of computing resources.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN119987990A_ABST
    Figure CN119987990A_ABST
Patent Text Reader

Abstract

Systems and methods described herein relate to assignment of user equipment to a cluster of workloads. Resource utilization on a plurality of user devices is monitored. A device agent on each user device may be used to monitor resource utilization. The workload execution request identifies a resource requirement of the cluster workload. A workload execution request is assigned to the cluster based on resource requirements of the cluster workload and resource utilization on the plurality of user devices. The cluster includes a plurality of user devices. The workload execution request is caused to execute on the cluster. Each user device performs a respective portion of the user workload and the cluster workload.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] The subject matter disclosed herein generally relates to distributed computing environments. More specifically, but not exclusively, the subject matter relates to assigning user devices to workload clusters in a distributed computing environment. Background Art

[0002] Many modern enterprises utilize distributed computing environments to meet their computing needs. For example, an enterprise involved in developing and providing software solutions can use a workload cluster that includes a collection of cloud-based computing nodes to handle various workloads during application development, testing, and production.

[0003] The costs associated with supplying, using or maintaining dedicated cluster resources may be relatively high. At the same time, enterprises may incur a lot of costs when providing user devices (such as laptops or desktop computers) to workers. In the case where many workloads are assigned to cloud-based cluster resources, local machines associated with the enterprise may have a lot of unused capacity. For example, workers in a software development team can offload various workloads to cloud-based resources while primarily using their own user devices as terminals for accessing those resources or communicating with those resources. This may result in suboptimal or inefficient use of computing resources (e.g., processing, memory, or data storage resources) paid for by the enterprise. Summary of the invention

[0004] An example of the present disclosure relates to a system, comprising: at least one memory storing instructions; and one or more processors configured by the instructions to perform operations, the operations comprising: monitoring resource utilization on multiple user devices via a device agent executed on each of the multiple user devices; accessing a workload execution request identifying resource requirements of a cluster workload; assigning the workload execution request to a cluster including multiple user devices based on the resource requirements of the cluster workload and the resource utilization on the multiple user devices; and causing the workload execution request to be executed on the cluster, wherein corresponding portions of the user workload and the cluster workload are executed on each of the multiple user devices. BRIEF DESCRIPTION OF THE DRAWINGS

[0005] For purposes of illustration and not limitation, some examples are shown in the figures of the accompanying drawings. In the drawings, which are not necessarily drawn to scale, the same numerals may describe similar components in different views or examples. To more easily identify the discussion of any particular element or action, the most significant digit or digits in the reference numeral refer to the figure number in which the element is first introduced.

[0006] Figure 1 is an illustration of a network environment including a cluster workload management system according to some examples.

[0007] Figure 2 is a block diagram of some components in a distributed computing environment according to some examples.

[0008] Figure 3 is a flow diagram illustrating the operation of a method suitable for assigning user equipment to a cluster and using the cluster to process a cluster workload.

[0009] Figure 4 is a block diagram of a cluster controller and certain components within a cluster communicatively coupled to the cluster controller according to some examples.

[0010] Figure 5 is a swim lane diagram illustrating operations performed by a cluster controller, a cluster agent, and a user device to monitor resource utilization, assign workload execution requests to a cluster, and fulfill the workload execution requests, respectively, according to some examples.

[0011] Figure 6 is a block diagram illustrating a software architecture for a computing device according to some examples.

[0012] Figure 7 is a block diagram of a machine in the form of a computer system according to some examples within which instructions may be executed to cause the machine to perform any one or more of the methodologies discussed herein. DETAILED DESCRIPTION

[0013] An entity that has access to a pool of user devices may have significant potential computing power. The examples described herein may allow an enterprise or other entity to more fully or efficiently utilize these available resources, thereby reducing overall infrastructure costs or infrastructure footprint. In some examples, unused capacity on user devices is utilized to form workload clusters in a dynamic and adaptable manner. Such unused capacity can be used with dedicated computing nodes to provide a hybrid cluster.

[0014] As used herein in the context of computing workloads, the term "resource" refers to any computing asset that can be used or allocated to execute a workload. For example, resources such as central processing unit (CPU) resources, graphics processing unit (GPU) resources, memory, storage, network connections, or bandwidth can be utilized.

[0015] The terms "workload cluster" and "cluster" are used interchangeably in this disclosure. As used herein, a "cluster" refers to a group or collection of (directly or indirectly) interconnected computing resources that work together to process one or more workloads. The corresponding computing resources are often referred to as "nodes". A node in a cluster can be a physical machine or a virtual machine. A node can be logically viewed as a single unit with respect to the execution of the workload assigned to the cluster. Cluster sizes can range from a few nodes to hundreds or thousands of nodes. A cluster can share workload processing and storage resources, and can allow parallel processing or high availability by distributing work across nodes.

[0016] In some examples, a method includes monitoring resource utilization on a plurality of user devices. For example, a pool of user devices may be monitored to track or evaluate their respective resource utilization. In some examples, based on resource utilization (e.g., detected resource availability), one or more user devices are selected from the pool of user devices and assigned to a cluster, as described in greater detail elsewhere. Clusters may be created dynamically or temporarily to handle cluster workloads.

[0017] As used herein, the term "user device" refers to a physical computing device that can be connected to a network and directly operated by a user. For example, an enterprise may provide user devices, such as desktop computers or laptop computers, to their workers for performing their daily work tasks, which may include general tasks (e.g., using word processing or email applications) or more specialized tasks (e.g., performing software development, data analysis, or machine learning tasks). A user device is not a shared resource that is remotely accessed by multiple users to perform computing tasks, such as a server or a thin client that relies on a server to perform its computing tasks. The term "user device" does not refer to a dedicated infrastructure for a cluster environment, such as a dedicated computing node that serves the main function of processing cluster workloads. A user device can be personalized for use by a specific user (e.g., a user device contains the user's files and settings, a user device has a user profile of the user stored thereon, or a user account of the user is associated with the user device).

[0018] The present disclosure describes both "cluster workloads" and "user workloads". As used herein, the term "cluster workload" refers to a computing workload or task assigned to a cluster for execution. For example, a cluster workload can be assigned to a cluster by a scheduler or orchestration component and automatically distributed across the nodes of the cluster for parallel processing. Cluster workloads can include, but are not limited to, high-performance computing tasks, simulations, analysis, batch jobs, or other resource-intensive operations. In some examples, cluster workloads can be general-purpose operations and are therefore not limited to dedicated operations. Cluster workloads can be triggered or requested, for example, by an end user or by a software developer who is working with an application in a cluster (e.g., testing an application in a cluster).

[0019] As used herein, the term "user workload" refers to a computing workload or task performed on a user device based on instructions or selections made by a user of the user device. User workloads are not assigned to clusters. For example, a user device can run various programs and applications to allow a user to browse the Internet, access emails, access cloud-based resources, use software installed on the user device to perform tasks or view (e.g., streaming) media. Therefore, a user workload refers to a user-driven workload running on the hardware of the user device, while a cluster workload is centrally assigned to multiple nodes for execution. The examples described herein allow a user device to run both a user workload and a cluster workload.

[0020] In the context of the present disclosure, dedicated cluster nodes do not execute user workloads. For example, even though an administrator may be able to access a dedicated cluster node to perform diagnostic or configuration applications, such applications are not "user workloads" in the context of the present disclosure. In addition, operating systems, network drivers, or other system-level processes that may run on cluster nodes are not considered "user workloads."

[0021] Resource utilization on a user device may be monitored to determine whether the user device has excess resources available to contribute to a cluster. For example, a device agent executing on a user device may determine resources that the user device can contribute to a cluster when executing one or more user workloads. The method may include causing a device agent to be installed on a user device to monitor resource utilization. In some examples, the method includes monitoring resource utilization on multiple user devices by receiving an indication of resources that the user device can contribute to a cluster from a device agent executing on each user device.

[0022] The cluster may include a cluster agent. For example, a cluster agent executing on the cluster aggregates resource utilization data from nodes in the cluster, and a cluster controller receives the aggregated resource utilization data from the cluster agent (see, e.g., Figure 2 and Figure 4, which is discussed in more detail below). A cluster controller can be a processor-implemented component that is communicatively coupled to a cluster and multiple other clusters in a distributed computing environment. The cluster controller can be responsible for, for example, evaluating resource utilization or availability, assigning workload execution requests to appropriate clusters, performing scheduling, creating or adjusting (e.g., scaling) clusters, or sending task instructions.

[0023] Clusters can be created or configured dynamically. For example, user devices with excess or spare resources can be dynamically and temporarily assigned to a cluster for processing or assisting cluster workloads. In some examples, a connection to a cluster is created by a cluster agent executed on a user device to allow the user device to provide available resources to the cluster.

[0024] In some examples, the method includes receiving or accessing a workload execution request that identifies a resource requirement of a cluster workload. The workload execution request can be assigned to a cluster based on the resource requirement of the cluster workload and resource utilization on a plurality of user devices. In some examples, a cluster is created in response to receiving the workload execution request. In other examples, the cluster is a previously created or pre-existing cluster selected based on the resource requirement of the cluster workload and resource utilization on a plurality of user devices.

[0025] A cluster includes one or more user devices. In some examples, a cluster includes one or more user devices and one or more dedicated computing nodes. In the context of a cluster, and as described above, a user device is distinct from a dedicated computing node. For example, while a user device may be assigned to a cluster so that unused capacity may be applied to execute a workload, the user device may still be operated by the user (e.g., to perform the primary task for which the user device was provided to the user).

[0026] On the other hand, a dedicated computing node can process cluster workloads assigned to it by a processor-implemented cluster controller or a processor-implemented scheduler component and is not directly operated by a user. In other words, a dedicated computing node can be a computing resource that is specifically provisioned within a cluster environment to provide processing capabilities for cluster workloads without any other primary functions, while a user device can process user workloads and, if capabilities permit, cluster workloads.

[0027] The method may include causing the workload execution request to be executed on the selected or assigned cluster.Where the cluster comprises a plurality of user devices, both the user workload and a corresponding portion of the cluster workload are executed on each of the plurality of user devices.

[0028] For example, user devices in a cluster may execute one or more user workloads and a cluster workload simultaneously (e.g., in parallel). Thus, in some examples, a user device may execute a portion of a cluster workload even when the user device is not otherwise "idle" (e.g., when the user device is operating to run a user application as part of one or more user workloads), provided that the user device is determined to have sufficient excess resources to contribute to the cluster. Where the cluster additionally includes one or more dedicated computing nodes, a corresponding portion of the cluster workload may be executed on each dedicated computing node.

[0029] In some examples, a particular user device may be assigned to a cluster based on the user device satisfying one or more cluster contribution criteria. The cluster contribution criteria may include predetermined requirements, conditions, or restrictions that are checked to determine whether the user device is eligible to be selected (or eligible) to allocate a portion of its resources to perform cluster workloads. Examples of cluster contribution criteria may include resource availability (e.g., based on resource utilization data of the user device), connectivity, geographic location, security protocols, or usage patterns. For example, the cluster contribution criteria may specify that if the available CPU resources and available memory resources of the user device exceed a predetermined threshold, the user device may be added to the cluster. The cluster contribution criteria may also include user-defined criteria, such as user-specified constraints (e.g., when running only on battery power, the user device cannot be added to the cluster).

[0030] In some examples, the cluster controller sends an instruction to a user device that is part of the cluster (e.g., to a device agent executing on the user device) to allocate a first portion of resources on the user device to the cluster. For example, a portion of the CPU and memory resources of the user device may be allocated to the cluster for assisting the cluster workload, while a second portion of the resources on the user device is used to execute the user workload.

[0031] In some examples, the user device has a cluster environment in which the cluster workload is executed or processed. The cluster environment can be separate from the user environment on the user device in which the user workload is executed.

[0032] In some examples, the cluster environment provides an isolated runtime space configured on a user device to execute cluster workloads, while the user environment is a standard runtime space (or space) configured on the user device for user workloads. The cluster environment can separate cluster-specific tasks from the standard user environment. Examples of cluster environments may include one or more virtual machines, containers, sandboxes, or other dedicated or isolated runtime environments. Resources such as CPUs, memory, and storage devices may be allocated to the cluster environment.

[0033] Thus, resources allocated to the cluster environment can be capped or limited to ensure that cluster workloads can run without significantly impacting user experience. Resources not allocated to the separate cluster environment can remain available for user environments and applications or tasks not related to the cluster.

[0034] The method may include sending a message to the user equipment to indicate that the user equipment has been assigned to the cluster. For example, the cluster controller may inform the device agent that the user equipment has been selected to operate as part of a particular cluster, after which the user equipment automatically contributes some of its resources to the cluster.

[0035] The techniques or architectures described herein can be used in a variety of applications. For example, a software organization can use cluster deployment to facilitate the development and testing of features and services. This can be referred to as cluster application development.

[0036] While supplying a separate cluster for each software developer (or developer team) can provide sufficient resources and prevent interference, it can also result in higher infrastructure costs in cluster application development. At the same time, an organization can access a pool of user devices, such as user devices of corresponding software developers. The user devices of software developers can be relatively powerful machines (e.g., compared to the machines of some colleagues) that have significant potential resources if not efficiently utilized. The techniques described herein can be used to run clusters at least partially across local machines (e.g., user devices of software developers) to utilize resources more efficiently.

[0037] A device agent may be installed on each user device. The device agent may monitor and continuously report resource utilization data (e.g., for a particular user device, the device agent may indicate how much storage space, free memory, or free CPU resources are available to the user device). The resource utilization data may be fed into a cluster agent and aggregated on a per-cluster basis. A cluster controller may determine, based on the resource utilization data, that one or more particular user devices or a particular cluster including user devices has spare capacity to run (or assist) a cluster workload. In some examples, the method may include generating a resource utilization forecast based on historical data to determine whether a user device can be added to a cluster.

[0038] Using the available resources of the user's device to handle cluster workloads can unlock potential or neglected resources and reduce cloud infrastructure requirements (e.g., rental fees). In some examples, both local devices and cloud resources can be used in the same cluster to define a hybrid cluster. Cluster workloads can therefore be distributed across both cloud devices and local devices to increase cluster efficiency at a lower cost. As described above, local machines can be utilized in an intelligent manner without significantly or noticeably affecting the user's on-device experience.

[0039] The examples described herein can solve or alleviate the technical problem of providing sufficient computing resources for software development, testing or other computing operations without underutilizing or wasting local resources. The technical problem can be solved or alleviated by real-time monitoring of resource utilization across user devices and assigning workload requests to clusters including these user devices based on the available resources of the user devices. This allows the use of unused user device capacity, for example, to supplement dedicated cluster infrastructure. Therefore, local machines (e.g., less idle CPU or memory resources across enterprises) can be better utilized while reducing cloud costs.

[0040] The examples described herein may also solve or mitigate the technical problem of assigning cluster workloads to appropriate clusters. This technical problem may be solved or mitigated by monitoring resource utilization on user devices and merging them into clusters (optionally with dedicated computing nodes). This may enable workloads to be dynamically assigned to heterogeneous clusters and executed on heterogeneous clusters (such as clusters that include both local user devices and dedicated computing nodes). Again, by utilizing otherwise idle assets, resource utilization may be improved while reducing costs.

[0041] Cluster workloads can be distributed across clusters based on real-time evaluation of available local resources. In some examples, cluster workloads are securely executed on user devices via isolated cluster environments. A central cluster controller or scheduling component can automatically coordinate the efficient distribution between dedicated computing nodes (e.g., cloud nodes) and user devices (e.g., local machines). This can improve efficiency, reduce waste associated with unused local capacity, and reduce infrastructure costs.

[0042] When considering the effects in the present disclosure as a whole, one or more of the methods described herein can therefore eliminate the need for certain efforts or resources that would otherwise be involved in processing cluster workloads. For example, as a result of improved local machine utilization, computing resources utilized by a system, device, database, or network can be more efficiently utilized or reduced. Examples of such computing resources may include processor cycles, network traffic, memory usage, GPU resources, data storage capacity, power consumption, and cooling capabilities.

[0043] Figure 1 1 is an illustration of a networked computing environment 100 in which some examples of the present disclosure may be implemented or deployed. One or more servers in a server system 104 provide server-side functionality to networked devices, such as user devices 106 accessed by users 128, via a network 102. A network client 110 (e.g., a browser) or a programmatic client 108 (e.g., an "app") may be hosted and executed on the user device 106.

[0044] Application program interface (API) server 118 and web server 120 provide respective programming and web interfaces to the components of server system 104. Specific application server 116 hosts cluster workload management system 122, which includes components, modules or applications.

[0045] The user device 106 can communicate with the application server 116, for example, via a web interface supported by the web server 120 or via a programming interface provided by the API server 118. Figure 1 Only a single user device 106 is shown, but multiple user devices may be communicatively coupled to the server system 104. In some examples, and as shown in reference Figure 2 As described, server system 104 is connected to a pool of user devices to allow monitoring of resource utilization on user devices and allocation of at least some of the user devices to clusters. In this way, one or more user devices can be dynamically assigned to a cluster to (completely or partially) handle cluster workloads.

[0046] User device 106 (and in some cases, other user devices connected to server system 104) may be associated with an enterprise or organization (such as software provider 134), such as Figure 1 As shown. For example, software provider 134 may have multiple workers, such as software developers, and the workers may be provided with corresponding user devices, wherein user device 106 is a non-limiting example of such a user device. User device 106 may be, for example, a laptop or desktop computer.

[0047] Application servers 116 are communicatively coupled to database servers 124, facilitating access to one or more information repositories, such as database 126. In some examples, database 126 includes a storage device that stores information to be processed by cluster workload management system 122.

[0048] Application server 116 accesses application data (e.g., application data stored by database server 124) to provide one or more applications or software tools to user device 106 via web interface 130 or app interface 132. Specifically, in some examples, application server 116 using cluster workload management system 122 can provide one or more tools or functions for processing or managing cluster workloads.

[0049] The cluster workload management system 122 can be implemented using hardware (e.g., one or more processors of one or more machines) or a combination of hardware and software. For example, the cluster workload management system 122 can be implemented by one or more processors configured to perform the operations described herein for that component. The functionality described herein for the cluster workload management system 122 can be subdivided among multiple components. The cluster workload management system 122 can be provided by a single machine or device or distributed across multiple machines or devices.

[0050] In some examples, cluster workload management system 122 manages or coordinates execution of a cluster workload across a cluster of computing nodes.As described in more detail elsewhere, a cluster may include user devices, dedicated computing nodes, or a combination thereof.

[0051] The cluster workload management system 122 may allow for monitoring of resource utilization on a user device (e.g., a user device associated with a software provider 134) or a cluster including user devices. The cluster workload management system 122 may also be communicatively coupled to dedicated computing nodes (e.g., dedicated cloud-based cluster resources leased or owned by a software provider 134) to monitor resource utilization or available on such computing nodes.

[0052] The cluster workload management system 122 can receive workload execution requests and automatically assign cluster workloads to appropriate clusters, for example, by matching the resource requirements of the cluster workloads in the workload execution request with the resource availability in the cluster. The cluster workload management system 122 can provide an interface that allows a user to submit workload execution requests and monitor the fulfillment of such requests. For example, the cluster workload management system 122 can provide a graphical user interface via the web interface 130 that allows the user 128 to submit workload execution requests. The workload execution request can, for example, indicate that a cluster with 20 CPUs and 300 gigabytes (GB) of memory is desired or required to run multiple applications associated with a software development project.

[0053] When a workload execution request is received, the cluster workload management system 122 can evaluate the current utilization and availability of resources across the existing cluster or across other nodes (e.g., user devices or dedicated computing nodes) that may be added to the cluster. In some examples, resource utilization data from device agents running on individual user devices is aggregated to determine which nodes or clusters have sufficient available capacity to meet the requested resource requirements. The cluster workload management system 122 can also generate predictions about resource utilization in future time periods to perform appropriate cluster assignments.

[0054] In some examples, cluster workload management system 122 is configured to build new clusters in real time (e.g., in response to workload execution requests). For example, cluster workload management system 122 may determine that an existing cluster does not have the capacity to accommodate the request and then leverage its connection to a pool of user devices. Cluster workload management system 122 may identify idle or underutilized user devices that can contribute resources (e.g., based on reports received from corresponding device agents). Cluster workload management system 122 may then build a new on-demand cluster that includes appropriate user devices, optionally along with dedicated computing nodes, to meet the resource requirements.

[0055] Once the appropriate cluster is identified or created, the cluster workload management system 122 can assign workload execution requests to the cluster. The cluster workload management system 122 can instruct the cluster to allocate resources, for example, by initializing or selecting a cluster environment on a user device in the cluster. The cluster workload is then executed in a distributed manner across the cluster nodes, as described in more detail elsewhere. The cluster workload management system 122 may include or implement a cluster controller, such as reference Figure 2 The cluster controller 204 is shown and described. The cluster controller may be responsible for one or more functions of the cluster workload management system 122.

[0056] During workload execution, the cluster workload management system 122 can continue to monitor resource utilization data or other metrics (e.g., connectivity, bandwidth, or device location). The cluster workload management system 122 can dynamically scale the cluster by adding or removing nodes (e.g., user devices from a pool of user devices) as needed based on fluctuating resource demands, availability, or limitations. The cluster workload management system 122 can thus achieve robust, on-demand provisioning and efficient utilization of resources.

[0057] The cluster workload management system 122 may be responsible for one or more aspects of cluster provisioning. Provisioning refers to the process of acquiring, allocating, and deploying the necessary computing resources to assemble a cluster. This may include determining the type and amount of resources required, requesting and configuring nodes, installing required software or tools on nodes, or integrating or connecting nodes into a unified cluster environment.

[0058] In some examples, application server 116 is part of a cloud-based platform provided by software provider 134 that allows user 128 to utilize the tools of cluster workload management system 122. User 128 may have a user account (e.g., an enterprise account) with software provider 134. User 128 may access web interface 130 or app interface 132 using account credentials.

[0059] One or more of the application server 116, the database server 124, the API server 118, the web server 120, and the cluster workload management system 122 may each be implemented in whole or in part in a computer system, as described below with respect to Figure 7 In some examples, an external application (which may be a third-party application or an application provided by software provider 134), such as external application 114 executing on external server 112, may communicate with application server 116 via a programming interface provided by API server 118. For example, a third-party application may support one or more features or functions on a website or platform hosted by a third party, or may execute certain methods and provide input or output information to application server 116 for further processing or publication.

[0060] As an example, the cluster workload management system 122 can be linked to one or more external computing nodes provided by a cloud service provider. The external server 112 can provide cloud-based dedicated computing nodes that are available to the software provider 134 (e.g., leased by the software provider 134). The cluster workload management system 122 can thus communicate with the external server 112 (e.g., via the external application 114 of the external server 112), for example, to monitor resource utilization on the computing nodes, assign workloads, or request adjustments (e.g., scaling) of the computing nodes. In some examples, the cluster spans cloud-based resources (such as computing nodes of the external server 112) and local resources (such as user devices of the software provider 134).

[0061] The network 102 may be any network that enables communication between or among machines, databases, and devices. Thus, the network 102 may be a wired network, a wireless network (e.g., a mobile or cellular network), or any suitable combination thereof. The network 102 may include one or more portions that constitute a private network, a public network (e.g., the Internet), or any suitable combination thereof.

[0062] Figure 2 2 is a diagram 200 illustrating certain components in a distributed computing environment 202 according to some examples. The distributed computing environment 202 includes an interconnected infrastructure that facilitates coordinated workload processing across a cluster of nodes. The distributed computing environment 202 may include physical and virtual assets across user devices, local servers, and cloud hosting systems.

[0063] The distributed computing environment 202 is shown to include a cluster controller 204 that is communicatively coupled to clusters 206, 208, and 210, and to Figure 1100 and 101. Cluster 206 is shown as including compute node 212, compute node 214, user device 216, user device 218, and cluster proxy 220. Cluster 208 is shown as including compute node 222, user device 224, user device 226, user device 228, and cluster proxy 230. Cluster 210 is shown as including user device 232, user device 234, user device 236, user device 238, and cluster proxy 240.

[0064] Cluster controller 204 oversees and controls clusters operating within distributed computing environment 202. In some examples, cluster controller 204 is composed of Figure 1 The cluster workload management system 122 is provided to provide a common management and orchestration system for distributing loads and tasks among physical or virtual resources (e.g., nodes).

[0065] The cluster controller 204 can receive, aggregate, and evaluate data about cluster resource utilization and availability. For example, the cluster controller 204 evaluates new workload requests (e.g., received from the user devices 106 of the users 128) and determines appropriate cluster assignments based on real-time resource metrics and workload needs. The cluster controller 204 can manage scheduling or intra-cluster communication and coordination throughout the workload execution. In some examples, the cluster controller 204 provides centralized intelligent management of clusters within the distributed computing environment 202.

[0066] The distributed computing environment 202 may include one or more clusters, and Figure 2 The clusters 206-210 are shown primarily as examples. Each of the clusters 206-210 is shown as including four nodes and cluster agents (cluster agent 220, cluster agent 230, and cluster agent 240, respectively). However, as described above, a cluster may include from a few to a large number (e.g., hundreds or thousands) of nodes, and Figure 2 The nodes shown in are shown primarily as examples.

[0067] Cluster 206 includes two dedicated computing nodes (computing node 212 and computing node 214) and two user devices (user device 216 and user device 218) that also function as cluster nodes. Cluster 208 includes one dedicated computing node (computing node 222) and three user devices (user devices 224-228) that function as cluster nodes. Cluster 210 includes four user devices (user devices 232-238) that function as cluster nodes. Clusters 206 and 208 can be considered hybrid clusters, while cluster 210 is not a hybrid cluster because it does not include any dedicated computing nodes.

[0068] For ease of reference, the following description only refers to Figure 2The cluster 206 of FIG. 206 is used as a non-limiting example of a cluster. The cluster 206 provides a pooled collection of resources for executing cluster workloads. The cluster 206 can be scaled based on workload requirements. For example, additional user devices can be added to the cluster 206 to increase its capacity, or user devices (e.g., user device 216) can be removed from the cluster 206 to reduce capacity.

[0069] A dedicated computing node in cluster 206, such as computing node 212, represents a dedicated physical or virtual machine instance. It provides computing resources for cluster workloads executed within cluster 206. Computing node 212 runs its assigned portion of the cluster workload. Computing node 212 can be scaled to meet workload processing requirements. In the context of the present disclosure, a dedicated cluster computing node, such as computing node 212, does not run user workloads.

[0070] The cluster agent 220 of the cluster 206 is a processor-implemented component that monitors resources within the cluster 206. For example, the cluster agent 220 tracks utilization metrics of cluster nodes. The cluster agent 220 can aggregate and report data about the utilization or availability of the nodes to the cluster controller 204. The cluster agent 220 can also facilitate the integration of user devices into the cluster by interfacing with the device agent, as described below with reference to Figure 4 described.

[0071] A variety of deployment and execution technologies can be used to provision the cluster 206. For example, Kubernetes TM It is an open source system for deploying clusters. TM In the framework, clusters allow containers to run across multiple machines and environments. Unlike traditional virtual machines, containers are not limited to a specific operating system. Nodes in cluster 206 (e.g., computing node 212, computing node 214, user device 216, and user device 218) can use containers to run applications in cluster 206.

[0072] In Kubernetes TM In the framework, when a new workload execution request is assigned to cluster 206, cluster controller 204 can communicate its details to Kubernetes running in cluster 206. TM API server. The API server can validate workload execution requests and store workload specifications, such as application containers required for the workload, computing resource requirements for each container (CPU, memory, etc.), and policies on how the container should run (restart, replication, etc.). The scheduler component (which can be the cluster controller 204 or another component) applies a predefined algorithm to determine how to distribute the required containers across available nodes. The scheduler component can be configured to optimize workload distribution for performance while minimizing resource contention.

[0073] Still referring to Kubernetes TM Framework, each node can run a "kubelet" agent to start the required containers. The kubelet communicates with the container runtime, for example, to pull the relevant images and start the container. When the workload runs, the agent monitors the resource usage of these containers and reports metrics back to the API server.

[0074] Therefore, in some examples, Kubernetes can be used TM framework, and can register related resources (such as computing nodes 212, computing nodes 214, user devices 216, and user devices 218 of cluster 206) as nodes joining cluster 206. However, it should be noted that Kubernetes TM The framework is described as a non-limiting example, and other cluster deployments are possible. For example, user devices may be treated differently from dedicated computing nodes. For each user device in the cluster, a relatively small virtual machine may be provisioned as part of the cluster to run the cluster workload to provide separation from the user workload or prevent interference with the user workload.

[0075] In some examples, Figure 2 At least some of the components shown in the are configured to communicate with each other to implement the aspects described herein. One or more components described herein can be implemented using hardware (e.g., one or more processors of one or more machines) or a combination of hardware and software. For example, the components described herein can be implemented by a processor configured to perform the operations described herein for the components. In addition, for some components, two or more components can be combined into a single component, or the functions described herein for a single component can be subdivided among multiple components.

[0076] Figure 3 is a flow chart illustrating the operation of a method 300 suitable for assigning user devices to a cluster and executing the cluster workload. By way of example and not limitation, aspects of the method 300 may be Figure 1 or Figure 2 Therefore, the following will be Figure 2 Cluster controller 204 and cluster 206 are used as non-limiting examples.

[0077] Method 300 begins at open loop element 302 and proceeds to operation 304, where cluster controller 204 monitors resource utilization in a pool of user devices. Some user devices in the pool may form part of a pre-existing cluster, while other user devices are not assigned to a cluster. The user devices are used by their respective users to perform user workloads.

[0078] For example, a user device may be dynamically selected from a pool of user devices that is continuously monitored by the cluster workload management system 122 or the cluster controller 204. Figure 2 The organization can monitor the resource utilization of its workers' user devices, which are all connected via the network, and use the cluster controller 204 to dynamically assign user devices in the pool with excess or sufficient spare capacity to one of the clusters 206-210, remove user devices from a cluster, or establish a new cluster that includes one or more user devices in the pool.

[0079] Resource utilization can be monitored in a variety of ways. For example, metrics such as current CPU and memory utilization, available storage, or network resource usage can be used to quantify resource utilization. Device agents running on user devices can inspect and report on resource utilization of user devices. Reports can be aggregated centrally in the cluster (e.g., by a cluster agent) or by a cluster controller 204 operating outside the cluster. In some examples, and as described in reference Figure 4 As further described, the device agent specifically checks the resource utilization of the user device against predetermined constraints or cluster contribution criteria to determine (or facilitate downstream determination) whether the user device has sufficient excess or spare resources to qualify for the cluster.

[0080] In some examples, cluster controller 204 examines resource utilization data received from each user device or cluster. The resource utilization data may indicate or be processed to indicate whether the user device has sufficient excess or spare capacity to contribute to the cluster. In the case of a pre-existing cluster, the resource utilization data may indicate the ability of the cluster to handle new workload execution requests. For example, resource utilization data from all nodes in the cluster may be aggregated (e.g., by a cluster agent) and reported to cluster controller 204 for evaluation.

[0081] At operation 306, the cluster controller 204 accesses a workload execution request. For example, the cluster controller 204 receives a new workload execution request from the user device 106 of the user 128. The workload execution request may, for example, indicate that the user 128 needs a cluster that can handle a certain cluster workload. Thus, the workload execution request may include the resource requirements of the cluster workload (e.g., how many CPUs of a certain type are needed, what the memory resource requirements are, and the storage space expected to be utilized).

[0082] Resource requirements may be identified based on tasks or operations that form part of the cluster workload. For example, a workload execution request may specify one or more applications that the user 128 wishes to run on the cluster. The cluster controller 204 may then determine resource requirements (e.g., CPU, GPU, main memory, or storage resources) based on an evaluation of the application to be processed.

[0083] In some cases, the workload execution request may specify additional resource requirements, such as requirements regarding the location of the cluster. For example, the cluster may need to be located within the European Union to comply with data regulations, or user 128 may wish to utilize a cluster with user devices located in the same office as user 128 to reduce or minimize latency.

[0084] At operation 308 of method 300, cluster controller 204 selects at least a subset of user devices from the pool to assign to the cluster. For example, cluster controller 204 may detect Figure 2 User devices 216 and 218 are eligible to be added to a cluster and are assigned to cluster 206. As described above, cluster 206 is a hybrid cluster. In other examples, user devices may be added to a cluster consisting exclusively of user device nodes (e.g., Figure 2 of cluster 210).

[0085] The method 300 proceeds to operation 310, where the workload execution request is assigned to the cluster 206. In some examples, as described above, the cluster 206 can be formed or configured in response to receiving the workload execution request to match or accommodate the resource requirements of the workload execution request. In other examples, the cluster 206 can be a pre-existing cluster (when the workload execution request is received) that is determined by the cluster controller 204 to have sufficient free resources to process or accommodate the workload execution request.

[0086] Then, at operation 312, cluster controller 204 causes the workload execution request to be executed on cluster 206. For example, cluster controller 204 may send instructions to cluster 206 to process the workload execution request, after which cluster 206 automatically distributes the cluster workload across one or more of its nodes. Cluster 206 may perform automatic scheduling of tasks and assign tasks (e.g., containerized applications) to corresponding nodes.

[0087] Thus, user device 216 and user device 218 each continue to execute both the respective portions of the assigned cluster workload and their respective user workloads (e.g., the normal workload of user device 216 that is not associated with cluster 206). In some examples, user device 216 and user device 218 execute their one or more respective user workloads simultaneously or at least partially concurrently with one or more respective cluster workloads. This allows user devices (such as user device 216) to contribute to the cluster even when the user device is not otherwise "idle" (such as when the user device is directly operated by a user to run a user-driven application).

[0088] On the other hand, computing nodes 212 and computing nodes 214, which are dedicated cluster resources, only process cluster workloads and do not process user workloads. Therefore, in the case of cluster 206, user devices are used to occupy a portion of the cluster workload, while conventional dedicated computing nodes occupy the remaining portion of the cluster workload. This can reduce the overall requirements for dedicated computing nodes and the associated infrastructure costs.

[0089] When the cluster workload is being executed on the cluster 206, the cluster controller 204 can continuously monitor the resource utilization within the cluster 206 and adjust the cluster 206 to the desired extent. For example, if the cluster controller 204 determines that the user workload on the user device 216 has risen to the extent that the user device 216 can no longer contribute to the cluster 206 (e.g., the user device 216 is using most of its CPU and memory resources to process its own user workload), the cluster controller 204 can automatically remove the user device 216 from the cluster 206 and add another node to the cluster 206. For example, the cluster controller 204 can add another user device (e.g., from a pool of user devices) to the cluster 206 to process a portion of the cluster workload. The method 300 ends at the closed loop element 314.

[0090] Using user devices to assist cluster workloads can be very beneficial. For example, in a cluster application development scenario, a development team can leverage a cluster of user devices available within an organization to run general-purpose applications with relatively lightweight resource requirements, while using cloud-based dedicated computing nodes to run more specialized operations, such as in-memory databases that may require hundreds of processing cores and terabytes of main memory. The resources provided by user devices can be cheaper than dedicated resources that must be rented from a cloud service provider, for example.

[0091] As mentioned, cluster controller 204 can control multiple clusters or interface with multiple clusters. The examples described herein provide coordinated and automated techniques for assigning resources across multiple clusters and user devices. Cluster controller 204 can have a global view beyond individual cluster boundaries. For example, cluster controller 204 can assign user devices from a shared resource pool to supplement a particular cluster on demand, rather than scaling each cluster independently. Cluster controller 204 can determine which user devices have sufficient spare capacity to take on additional workloads, and temporarily add them as active participants in the cluster.

[0092] In some examples, coordinated pooling and assignment of user devices (optionally with dedicated cloud-based computing nodes) provides dynamic scalability. The system described herein can elastically grow cluster capacity by loading resources from a pool of user devices.

[0093] Figure 4 According to some examples, the cluster controller 204 and Figure 2 FIG400 is a diagram of certain components of the cluster 206 of FIG400. In the diagram 400, only the cluster broker 220 and one of the nodes of the cluster 206 (the user device 216) are shown to illustrate certain aspects of the present disclosure.

[0094] User device 216 is shown as implementing user environment 402 and cluster environment 404. User workload 406 and device agent 408 execute in user environment 402, while cluster workload 410 executes in cluster environment 404. Although user device 216 is shown as part of cluster 206, it should be understood that at some point in time (e.g., when user device 216 does not have sufficient excess capacity), user device 216 may be removed from cluster 206 to run only user workload 406. Alternatively, user device 216 may remain in cluster 206, but be marked as unable / ineligible to contribute to the processing of the cluster workload.

[0095] User environment 402 may provide a local execution space on user device 216. User environment 402 is used to run the user's own applications (as an example of a user workload). For example, user environment 402 may be provided by a local operating system and installed applications such as "office" software, a browser, or an integrated development environment (IDE). User environment 402 may also provide a default space in which background processes and services of user device 216 execute.

[0096] In some examples, device agent 408 is installed and executed in user environment 402. Device agent 408 can be a lightweight software module installed on user device 216 to monitor resource utilization. Alternatively or additionally, device agent 408 can process resource utilization data to determine whether user device 216 is eligible to be added to a cluster (e.g., if user device 216 is not part of a cluster at a given point in time) or how much (e.g., how much amount) of resources it can contribute to the cluster.

[0097] As mentioned, the cluster contribution criteria may specify that a user device may be added to a cluster under certain conditions. For example, the device agent 408 may check whether the available CPU resources and available memory resources exceed a predetermined threshold. In some examples, the device agent 408 may take into account a custom configuration or setting on a particular user device 216. For example, a user of the user device 216 may specify certain resource availability thresholds or user-defined constraints. As an example, a user may not want to contribute to a cluster when the user device 216 is running on battery power (e.g., not connected to a power supply), or when the user is working from home (e.g., to avoid increasing their home electricity bill due to cluster contributions). The device agent 408 (or another component, such as the cluster agent 220 or the cluster controller 204) may take into account such constraints or criteria and perform cluster allocation accordingly. The device agent 408 may also take into account historical data to predict or identify the appropriate time for cluster contribution. For example, device agent 408 may detect that a user of user device 216 is inactive or less active during a certain period on most days (e.g., between 1:00 PM and 2:00 PM when the user takes a lunch break) and use, propose, or identify that time period as a cluster contribution time period.

[0098] Device agent 408 can obtain resource utilization data and report such data (e.g., in the form of metrics) to cluster agent 220. In some examples, device agent 408 collects real-time utilization data across key resources (such as CPU, memory, disk, and network). Device agent 408 can track which applications and processes are consuming resources to determine available spare capacity. Configuration settings can control how much of the total capacity of user device 216 can be shared or contributed to cluster 206.

[0099] The device agent 408 may periodically send reports, such as utilization summaries, to the cluster agent 220. In some examples, the device agent 408 determines how much potential capacity can be contributed to the cluster without significantly impacting the local user experience. The device agent 408 may also monitor defined constraints that temporarily prevent cluster contribution (e.g., if the database 126 has limited Internet connectivity or is located outside a certain geographic region (such as the European Union), the device agent 408 may prevent cluster contribution).

[0100] Specific implementations of device agent 408 may have one or more of the following features:

[0101] The device agent 408 is installed locally on the user device 216 to run in the user environment 402.

[0102] • The device agent 408 collects resource utilization data (eg, utilization metrics) and causes them to be sent to the cluster agent 220. The device agent 408 may also examine cluster contribution criteria other than resource utilization, such as latency and user device location.

[0103] • The device agent 408 has pre-configured settings that indicate the maximum CPU resources (eg, maximum percentage of total CPU) or maximum memory resources (eg, maximum percentage of total memory) that the user device 216 can provide to the cluster.

[0104] The device agent 408 has preconfigured settings that indicate minimum CPU resources (eg, minimum percentage of total CPU) or minimum memory resources (eg, minimum percentage of total memory) that must remain available to the user workload 406 in the user environment 402.

[0105] Based on current resource utilization and cluster contribution criteria (e.g., the above-described maximum and minimum settings, connectivity, latency, or device location), the device proxy 408 determines whether the user device 216 can contribute to the cluster. For example, if the user device 216 has sufficient free resources and meets all other cluster contribution criteria, the device proxy 408 determines that the user device 216 can contribute to the cluster. On the other hand, if the user device 216 does not have sufficient resources to contribute, or does not meet some other cluster contribution criteria (e.g., the user device has no Internet connection or the user device is in a restricted location), the device proxy 408 determines that the user device 216 cannot contribute to the cluster.

[0106] • The device agent 408 informs the cluster agent 220 (or cluster controller 204) whether the user device 216 can contribute to the cluster. Alternatively or additionally, the device agent 408 informs the cluster agent 220 (or cluster controller 204) how many resources the user device 216 can contribute to the cluster.

[0107] • In some examples, device proxy 408 may be responsible for establishing a connection with a selected or indicated cluster to enable user device 216 to contribute to the cluster.

[0108] While the above examples indicate that the device proxy 408 determines whether the user device 216 can contribute to the cluster, in other examples, the cluster controller 204 uses feedback (e.g., resource utilization data or data related to other cluster contribution criteria) to determine whether the user device 216 can contribute to the cluster. In any case, if the user device 216 is designated as ineligible or unable to contribute to the cluster at a given stage or point in time, the user device 216 can be temporarily removed from the cluster 206, or if the user device 216 has not yet been assigned to the cluster 206, it can be temporarily removed from the candidate user device pool.

[0109] The cluster environment 404 may provide an execution space that is isolated or otherwise separate from the general environment in which the user workload 406 is executed. The cluster environment 404 allows the user device 216 to contribute resources to the cluster while ensuring that the cluster workload 410 runs securely or in a manner in which it is protected or separate from the user environment 402. In some examples, and as described elsewhere, the user device 216 may be configured to prioritize the user workload 406 over the cluster workload 410, such that the cluster workload 410 is “taken over” only when the user device 216 meets the cluster contribution criteria (e.g., sufficient excess resources, connectivity, power or battery life, and availability).

[0110] The cluster environment 404 may be provided, for example, by one or more virtual machines or one or more containers provisioned to the user device 216. However, virtual machines and containers are non-limiting examples, and other "sandbox" or virtualized runtime environments that provide separation between a local environment on the user device 216 and a network or cluster environment of the cluster 206 may be utilized.

[0111] During operation, as user device 216 runs its user workload 406, its resource utilization profile may be dynamic. At a first point in time, its resource utilization may be low enough for device agent 408 (or another component, such as cluster agent 220 or cluster controller 204) to mark it as eligible for cluster contribution (e.g., in a database such as Figure 1At a second point in time, the capacity occupied by the user workload 406 may increase, resulting in fewer resources being available for use with respect to the cluster workload. In response, the device proxy 408 or cluster controller 204 may mark the user device 216 as ineligible or unavailable and may remove it from the cluster or from a list of available cluster resources.

[0112] In some examples, cluster workload 410 is part of a distributed job executed on user devices 216 within cluster environment 404. Cluster workload 410 can be executed concurrently with one or more of user workloads 406 to improve overall resource utilization within user devices 216.

[0113] Turning again to cluster agent 220, in some examples, cluster agent 220 can be considered a "cluster metric agent." Cluster agent 220 can run in cluster 206 to collect resource utilization metrics from nodes in cluster 206, thereby aggregating real-time resource utilization data from the nodes. In some examples, cluster agent 220 determines how much resources cluster 206 can provide to cluster users (e.g., users 128 who wish to execute cluster workloads) based on the aggregated resource utilization data from the nodes in cluster 206.

[0114] In some examples, cluster agent 220 enables cluster controller 204 to query nodes in cluster 206. For example, cluster agent 220 can provide an API for cluster controller to query node status or capacity. Cluster agent 220 can use algorithms to predict availability and ensure that nodes are not over-utilized.

[0115] In some examples, cluster proxy 220 can trigger throttling of cluster workloads or disabling of nodes as needed to maintain performance. Cluster proxy 220 can also handle aspects of workload scheduling based on instructions from cluster controller 204.

[0116] As mentioned elsewhere, cluster controller 204 may control multiple clusters (e.g., Figure 2Clusters 206-210) or docking with multiple clusters. Clusters can be registered with cluster controller 204 so that cluster controller 204 receives resource utilization data and other information about the clusters. In this way, when cluster controller 204 receives an incoming workload execution request, cluster controller 204 can assign the workload execution request to an appropriate cluster based on the resources available to the cluster (or predicted to be available based on historical data). Cluster controller 204 then dispatches the relevant cluster workload to the cluster for execution. In some cases, cluster controller 204 can create a new cluster on demand in response to receiving a workload execution request (e.g., when no cluster matching the resource requirements of the workload execution request is available).

[0117] In some examples, the cluster controller 204 can communicate directly with the device agent 408. For example, the cluster controller 204 can send instructions to the device agent 408 executing on the user device 216 to initiate or trigger the cluster environment 404. For example, the cluster controller 204 can send instructions to the user device 216 to allocate a first portion of the resources on the user device 216 to the cluster 206 via the cluster environment 404, and then a second portion of the resources on the user device 216 is used to execute the user workload 406. As described above, resource usage can be dynamic, so these "portions" are not necessarily fixed.

[0118] The cluster controller 204 may notify the user devices that they are included in the cluster. For example, the cluster controller 204 may select the user device 216 from the pool of user devices and add it to the cluster 206. The cluster controller 204 may then send a message to the user device 216 to indicate that the user device 216 has been assigned to the cluster 206. In some examples, the user device 216 initiates or implements the cluster environment 404 in response to receiving such a message.

[0119] In some examples, Figure 4 At least some of the components shown in the are configured to communicate with each other to implement the aspects described herein. One or more components described herein can be implemented using hardware (e.g., one or more processors of one or more machines) or a combination of hardware and software. For example, the components described herein can be implemented by a processor configured to perform the operations described herein for the components. In addition, for some components, two or more components can be combined into a single component, or the functions described herein for a single component can be subdivided among multiple components.

[0120] Figure 55 is a swim-lane flow chart illustrating operations performed by a cluster controller 502, a cluster agent 504, and a user device 506 in a method 500 according to some examples, the method 500 including monitoring resource utilization, assigning workload execution requests to a cluster, and fulfilling the workload execution requests. The cluster controller 502 may be similar to Figure 2 The cluster controller 204, the cluster agent 504 can be similar to Figure 2 One of the cluster agents 220, 230, 240, and the user device 506 can be similar to Figure 2 and Figure 4 of user equipment 216.

[0121] User device 506 is provided by a user (e.g., Figure 1 134) of the software provider. Figure 5 In the example method 500, a user device 506 has been assigned to a cluster (eg, Figure 2 As mentioned, the cluster may include one or more other user devices, one or more dedicated computing nodes, or a combination thereof. User device 506 may have been dynamically assigned to a cluster from a pool of user devices, as described elsewhere.

[0122] During operation, the user device 506 executes a user workload. At operation 508, the user device 506 generates resource utilization data and sends the resource utilization data to the cluster proxy 504. For example, the user device 506 may have a device agent running on it, such as Figure 4 The device agent 408 is responsible for collecting resource utilization data and causing the data to be sent to the cluster agent 504. The device agent can run as a background process so that resource utilization data is collected and sent to the cluster agent 504 without any active selection or input from the user. The resource utilization data can indicate how much resources the user device 506 can provide or contribute to the cluster (e.g., how much the user device 506 can "spare" when running its own user workload).

[0123] At operation 510 , cluster agent 504 running on the cluster receives resource utilization data from user devices 506 and also collects resource utilization data from other nodes in the cluster. At operation 512 , cluster agent 504 aggregates resource utilization data of all nodes in the cluster and sends the aggregated resource utilization data to cluster controller 502 .

[0124] The cluster controller 502 receives aggregated resource utilization data from the cluster proxy 504 and also receives aggregated resource utilization data of other clusters it controls. At operation 514 of the method 500, the cluster controller 502 monitors the respective utilization of the clusters it controls (e.g., tracking the available capacity for each cluster, or predicting the expected capacity of each cluster in a future period based on historical capacity).

[0125] At operation 516, the cluster controller 502 receives and evaluates the new workload execution request. The cluster controller 502 may be managed by a cluster workload management system (e.g., Figure 1 The cluster workload management system 122 of the embodiment of the present invention provides or forms part of the cluster workload management system. The workload execution request may originate from a user who wishes to assign or offload one or more computing tasks to the cluster, such as Figure 1 128 users.

[0126] The cluster controller 502 may use the workload execution request to determine or identify the resource requirements of the cluster workload to be assigned to one of its clusters. The cluster controller 502 may compare the resource requirements of the cluster workload with the available resources or predicted available resources of each cluster. Figure 5 In the method 500 , the cluster controller 502 determines that the cluster including the user device 506 is capable of handling the new cluster workload, and therefore assigns the workload execution request to the cluster at operation 518 .

[0127] At operation 520, cluster controller 502 sends workload execution instructions to the selected cluster. In other words, cluster controller 502 can decide which cluster to assign a particular workload to, and then forward the workload execution instructions to the cluster. Conventional clustering techniques can be applied to ensure appropriate scheduling of related tasks or jobs within the cluster, thereby distributing the cluster workload across at least some nodes in the cluster (including user devices 506). Then, at operation 522, user devices 506 execute their respective portions of the cluster workload.

[0128] The device agent executed at the user device 506 can limit the resources of the user device 506 that can be applied to the cluster workload. For example, a predetermined configuration or setting can indicate that the user device 506 can use no more than a certain percentage of its CPU resources or memory resources to process the cluster workload. In this way, the user device 506 can still process its user workload without the user experiencing a significant impact.

[0129] The techniques described herein can enable local machines that process user workloads as their primary function to dynamically contribute to cluster workloads as needed, while maintaining local performance for users of those devices in a robust manner. In some examples, benefits are obtained while minimizing the performance impact on end users of user devices that contribute resources to the cluster. In some examples, due to the effective "background" management and balancing of resources for user workloads and cluster workloads, users may not be aware that their machine's resources are being used for cluster workloads.

[0130] However, in some examples, the cluster workload management system 122 may send a notification to the user device to indicate that the user device is assigned to or participates in a cluster. For example, the system may be implemented so that a user device may be considered for cluster contribution only after the user has explicitly opted in or agreed to allow the user device to be added to one or more clusters.

[0131] In some examples, the cluster can be configured to be substantially resilient to potential failures. For example, by pooling a large number of user devices into a cluster, individual devices that are turned off or disconnected from the network may have minimal impact. A cluster management component (such as a cluster controller 204) can detect node failures and automatically reassign workloads to other available nodes, add additional nodes, or a combination thereof. For example, if a user device is turned off by a user or otherwise becomes available, the device agent can notify the cluster node that it is no longer available. The containers or applications running on the user device can then be automatically rescheduled or reassigned to other nodes.

[0132] In view of the above-mentioned embodiments of the subject matter, the present application discloses the following list of examples, wherein one feature of a separate example or more than one feature of an example, a combination and further examples optionally combined with one or more features of one or more further examples also fall within the disclosure of the present application.

[0133] Example 1 is a system comprising: at least one memory storing instructions; and one or more processors configured by the instructions to perform operations, the operations comprising: monitoring resource utilization on multiple user devices via a device agent executed on each of the multiple user devices; accessing a workload execution request identifying resource requirements of a cluster workload; assigning the workload execution request to a cluster comprising multiple user devices based on the resource requirements of the cluster workload and the resource utilization on the multiple user devices; and causing the workload execution request to be executed on the cluster, wherein corresponding portions of the user workload and the cluster workload are executed on each of the multiple user devices.

[0134] In Example 2, the subject matter of Example 1 includes: wherein the cluster includes a plurality of user devices and one or more dedicated computing nodes, and a corresponding portion of the cluster workload is executed on each dedicated computing node.

[0135] In Example 3, the subject matter of any one of Examples 1-2 includes: the operations further comprising, for each user equipment: assigning the user equipment to a cluster based on the user equipment satisfying one or more cluster contribution criteria.

[0136] In Example 4, the subject matter of any of Examples 1-3 includes, wherein monitoring resource utilization on multiple user devices includes monitoring resource utilization on a user device pool including multiple user devices, the operation further comprising: selecting multiple user devices from the user device pool; and assigning the multiple user devices to a cluster.

[0137] In Example 5, the subject matter of any of Examples 1-4 includes, wherein monitoring resource utilization on the plurality of user devices comprises using a device agent for each user device to determine that the user device has excess resources available to contribute to the cluster.

[0138] In Example 6, the subject matter of any of Examples 1-5 includes wherein a device agent executed on each user device determines resources that the user device can contribute to the cluster when executing the user workload.

[0139] In Example 7, the subject matter of Example 6 includes, wherein monitoring resource utilization on the plurality of user devices comprises receiving, from a device agent executing on each user device, an indication of resources that the user device is capable of contributing to the cluster when executing the user workload.

[0140] In Example 8, the subject matter of any of Examples 6-7 includes, wherein a cluster agent executing on the cluster aggregates resource utilization data from device agents of the plurality of user devices, and monitoring resource utilization on the plurality of user devices comprises receiving the aggregated resource utilization data from the cluster agent.

[0141] In Example 9, the subject matter of any of Examples 1-8 includes, wherein causing a workload execution request to be executed on a cluster includes: sending instructions to a device agent executing on each user device to allocate a first portion of resources on the user device to the cluster, wherein a second portion of resources on the user device is used to execute the user workload.

[0142] In Example 10, example undefined subject matter includes, wherein causing the workload execution request to be executed on the cluster includes: on each user device, causing at least a portion of the user workload and at least a portion of a corresponding portion of the cluster workload to be executed simultaneously.

[0143] In Example 11, the subject matter of any of Examples 1-10 includes: wherein the cluster workload is executed in a cluster environment on the user device, the cluster environment being separate from a user environment in which the user workload on the user device is executed.

[0144] In Example 12, the subject matter of Example 11 includes, wherein the cluster environment includes at least one of a virtual machine or a container.

[0145] In Example 13, the subject matter of any of Examples 1-12 includes, wherein the workload execution request is assigned to the cluster by a processor-implemented cluster controller that is communicatively coupled to the cluster and a plurality of other clusters in a distributed computing environment.

[0146] In Example 14, the subject matter of any one of Examples 1-13 includes: the operations further comprising, for each user equipment: sending a message to the user equipment to indicate that the user equipment has been assigned to the cluster.

[0147] Example 15 is a method comprising: monitoring resource utilization on multiple user devices via a device agent executed on each of the multiple user devices; accessing a workload execution request that identifies resource requirements of a cluster workload; assigning the workload execution request to a cluster comprising multiple user devices based on the resource requirements of the cluster workload and the resource utilization on the multiple user devices; and causing the workload execution request to be executed on the cluster, wherein corresponding portions of the user workload and the cluster workload are executed on each of the multiple user devices.

[0148] In Example 16, the subject matter of Example 15 includes: wherein the cluster includes a plurality of user devices and one or more dedicated computing nodes, and a corresponding portion of the cluster workload is executed on each dedicated computing node.

[0149] In Example 17, the subject matter of any of Examples 15-16 includes: wherein the cluster workload is executed in a cluster environment on the user device, the cluster environment being separate from a user environment in which the user workload on the user device is executed.

[0150] Example 18 is a non-temporary computer-readable medium storing instructions that, when executed by one or more processors, cause the one or more processors to perform operations comprising: monitoring resource utilization on multiple user devices via a device agent executed on each of the multiple user devices; accessing a workload execution request that identifies resource requirements of a cluster workload; assigning the workload execution request to a cluster comprising multiple user devices based on the resource requirements of the cluster workload and the resource utilization on the multiple user devices; and causing the workload execution request to be executed on the cluster, wherein corresponding portions of the user workload and the cluster workload are executed on each of the multiple user devices.

[0151] In Example 19, the subject matter of Example 18 includes: wherein the cluster includes a plurality of user devices and one or more dedicated computing nodes, and a corresponding portion of the cluster workload is executed on each dedicated computing node.

[0152] In Example 20, the subject matter of any of Examples 18-19 includes: wherein the corresponding portion of the cluster workload is executed in a cluster environment on each user device, and the cluster environment is separate from the user environment in which the user workload on the user device is executed.

[0153] Example 21 is at least one machine-readable medium comprising instructions that, when executed by a processing circuit, cause the processing circuit to perform operations to implement any of Examples 1-20.

[0154] Example 22 is an apparatus comprising components for implementing any of Examples 1-20.

[0155] Example 23 is a system implementing any of Examples 1-20.

[0156] Example 24 is a method of implementing any of Examples 1-20.

[0157] Figure 6 6 is a block diagram 600 illustrating a software architecture 602 for a computing device according to some examples. The software architecture 602 can be used in conjunction with various hardware architectures, for example, as described herein. Figure 6 This is merely a non-limiting illustration of a software architecture, and many other architectures may be implemented to facilitate the functionality described herein. A representative hardware layer 604 is shown and may represent, for example, any of the computing devices referenced above. In some examples, the hardware layer 604 may be based on Figure 7 It is implemented by the architecture of the computer system.

[0158] The representative hardware layer 604 includes one or more processing units 606 with associated executable instructions 608. The executable instructions 608 represent executable instructions of the software architecture 602, including implementations of the methods, modules, subsystems, components, etc. described herein, and may also include a memory and / or storage module 610, which also has executable instructions 608. The hardware layer 604 may also include other hardware indicated by other hardware 612 and other hardware 622, which represents any other hardware of the hardware layer 604, such as other hardware shown as part of the software architecture 602.

[0159] exist Figure 6 In the architecture of , software architecture 602 can be conceptualized as a stack of layers, wherein each layer provides specific functionality. For example, software architecture 602 may include layers such as operating system 614, library 616, framework / middleware layer 618, application 620, and presentation layer 644. In operation, application 620 or other components within a layer may call API call 624 through the software stack, and in response to API call 624 access responses, return values, etc. shown as messages 626. The layers shown are representative in nature, and not all software architectures have all layers. For example, some mobile or dedicated operating systems may not provide framework / middleware layer 618, while other operating systems may provide such a layer. Other software architectures may include additional or different layers.

[0160] The operating system 614 can manage hardware resources and provide public services. The operating system 614 can include, for example, a kernel 628, a service 630, and a driver 632. The kernel 628 can act as an abstraction layer between the hardware and other software layers. For example, the kernel 628 can be responsible for memory management, processor management (e.g., scheduling), component management, networking, security settings, etc. The service 630 can provide other public services for other software layers. In some examples, the service 630 includes an interrupt service. The interrupt service can detect the reception of an interrupt, and in response, when the interrupt is accessed, the software architecture 602 is caused to suspend its current processing and execute an interrupt service routine (ISR).

[0161] Driver 632 may be responsible for controlling or interfacing with the underlying hardware. For example, depending on the hardware configuration, driver 632 may include a display driver, a camera driver, a Bluetooth driver, a drivers, flash memory drivers, serial communication drivers (e.g., Universal Serial Bus (USB) drivers), Drivers, Near Field Communication (NFC) drivers, audio drivers, power management drivers, etc.

[0162] The library 616 may provide a common infrastructure that may be utilized by the application 620 or other components or layers. The library 616 generally provides functions that allow other software modules to perform tasks in an easier manner than directly interfacing with the underlying operating system 614 functions (e.g., kernel 628, service 630, or driver 632). The library 616 may include a system library 634 (e.g., C standard library), which may provide functions such as memory allocation functions, string manipulation functions, mathematical functions, etc. In addition, the library 616 may include an API library 636, such as a media library (e.g., a library for supporting the rendering and manipulation of various media formats (such as MPEG4, H.264, MP3, AAC, AMR, JPG, PNG)), a graphics library (e.g., an OpenGL framework that may be used to render two-dimensional and three-dimensional graphics content on a display), a database library (e.g., SQLite that may provide various relational database functions), a web library (e.g., WebKit that may provide web browsing functions), etc. The library 616 may also include a variety of other libraries 638 to provide many other APIs to the application 620 and other software components / modules.

[0163] The framework / middleware layer 618 may provide a higher level common infrastructure that may be utilized by the applications 620 or other software components / modules. For example, the framework / middleware layer 618 may provide various graphical user interface (GUI) functions, advanced resource management, advanced location services, etc. The framework / middleware layer 618 may provide a wide range of other APIs that may be utilized by the applications 620 or other software components / modules, some of which may be specific to a particular operating system or platform.

[0164] Applications 620 include built-in applications 640 or third-party applications 642. Examples of representative built-in applications 640 may include, but are not limited to, contact applications, browser applications, book reader applications, location applications, media applications, messaging applications, or game applications. Third-party applications 642 may include any built-in applications as well as a wide variety of other applications. In a specific example, third-party applications 642 (e.g., applications created by entities other than the vendor of a particular platform using Android TM or iOS TM Software Development Kit (SDK) can be used to develop applications on mobile operating systems such as iOS. TM 、Android TM , Mobile software running on a mobile phone or other mobile computing device operating system). In this example, third-party application 642 can call API calls 624 provided by a mobile operating system such as operating system 614 to facilitate the functions described herein.

[0165] Applications 620 may utilize built-in operating system functionality (e.g., kernel 628, services 630, or drivers 632), libraries (e.g., system libraries 634, API libraries 636, and other libraries 638), and framework / middleware layer 618 to create a user interface to interact with a user of the system. Alternatively or additionally, in some systems, interaction with the user may occur through a presentation layer (such as presentation layer 644). In these systems, the application / module "logic" may be separated from the aspects of the application / module that interact with the user.

[0166] Some software architectures make use of virtual machines. Figure 6 In the example of , this is illustrated by virtual machine 648. A virtual machine creates a software environment in which applications / modules can execute as if they were executed on a hardware computing device. The virtual machine is hosted by a host operating system (operating system 614) and typically, but not always, has a virtual machine monitor 646 that manages the operation of the virtual machine and the interface with the host operating system (e.g., operating system 614). Software architecture is executed within virtual machine 648, such as operating system 650, library 652, framework / middleware 654, application 656, or presentation layer 658. These software architecture layers executed within virtual machine 648 may be the same as the corresponding layers previously described or may be different.

[0167] Certain examples are described herein as including logic or multiple components, modules, or mechanisms. A module or component may constitute a software module / component (e.g., code embodied (1) on a non-transitory machine-readable medium or (2) in a transmission signal) or a hardware-implemented module / component. A hardware-implemented module / component is a tangible unit capable of performing certain operations and may be configured or arranged in a certain manner. In an example, one or more computer systems (e.g., stand-alone, client, or server computer systems) or one or more hardware processors may be configured by software (e.g., an application or application portion) to operate as a hardware-implemented module / component to perform certain operations as described herein.

[0168] In various examples, hardware-implemented modules / components may be implemented mechanically or electronically. For example, hardware-implemented modules / components may include dedicated circuits or logic that are permanently configured to perform certain operations (e.g., as a dedicated processor, such as a field programmable gate array (FPGA) or an application-specific integrated circuit (ASIC)). Hardware-implemented modules / components may also include programmable logic or circuits (e.g., contained within a general-purpose processor or another programmable processor) that are temporarily configured by software to perform certain operations. It should be understood that the decision to mechanically implement a hardware-implemented module / component in a dedicated and permanently configured circuit or in a temporarily configured circuit (e.g., configured by software) may be driven by cost and time considerations.

[0169] Thus, the term "hardware-implemented module" or "hardware-implemented component" should be understood to encompass a tangible entity, i.e., an entity that is physically constructed, permanently configured (e.g., hardwired), or temporarily or transiently configured (e.g., programmed) to operate in a certain manner or perform certain operations described herein. Considering examples in which the hardware-implemented modules / components are temporarily configured (e.g., programmed), each of the hardware-implemented modules / components need not be configured or instantiated at any one time. For example, where the hardware-implemented modules / components include a general-purpose processor configured using software, the general-purpose processor can be configured into correspondingly different hardware-implemented modules / components at different times. The software can configure the processor accordingly, for example, to constitute a particular hardware-implemented module / component at one time, and to constitute different hardware-implemented modules / components at different times.

[0170] The modules / components of hardware implementations can provide information to the modules / components of other hardware implementations and receive information from the modules / components of other hardware implementations. Therefore, the modules / components of the described hardware implementations can be regarded as coupled in communication. In the case where there are multiple such modules / components of hardware implementations at the same time, communication can be achieved by signal transmission (for example, by connecting the appropriate circuits and buses of the modules / components of hardware implementations). In the example where multiple modules / components of hardware implementations are configured or instantiated at different times, the communication between the modules / components of such hardware implementations can be achieved, for example, by storing and retrieving information in a memory structure accessible to the modules / components of multiple hardware implementations. For example, a module / component of hardware implementation can perform an operation, and the output of the operation is stored in a memory device coupled with it in communication. Then, another module / component of hardware implementation can access the memory device later to retrieve and process the stored output. The modules / components of hardware implementations can also initiate communication with input or output devices, and can operate on resources (for example, a collection of information).

[0171] The various operations of the example methods described herein may be performed at least in part by one or more processors that are temporarily configured (e.g., by software) or permanently configured to perform the relevant operations. Whether temporarily or permanently configured, such processors may constitute processor-implemented modules / components that operate to perform one or more operations or functions. In some examples, the modules / components mentioned herein may include processor-implemented modules / components.

[0172] Similarly, the method described herein can be implemented at least in part by a processor. For example, at least some operations of the method can be performed by one or more processors or modules / components implemented by the processor. The execution of certain operations can be distributed among one or more processors, not only resident in a single machine, but also deployed on multiple machines. In some examples, one or more processors can be located in a single location (for example, in a home environment, an office environment, or a server farm), and in other examples, the processor can be distributed across multiple locations.

[0173] The one or more processors may also operate to support performance of related operations in a "cloud computing" environment or as "software as a service (SaaS)". For example, at least some of the operations may be performed by a group of computers (as an example of a machine including a processor) that are accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., APIs).

[0174] Examples may be implemented in digital electronic circuitry, or in computer hardware, firmware, or software, or in a combination of these. Examples may be implemented using a computer program product, for example, a computer program tangibly embodied in an information carrier, for example, in a machine-readable medium, for execution by a data processing apparatus (e.g., a programmable processor, a computer, or multiple computers), or to control the operation of a data processing apparatus.

[0175] A computer program may be written in any form of programming language, including compiled or interpreted languages, and it may be deployed in any form, including as a stand-alone program or as a module, subroutine, or other unit suitable for use in a computing environment. A computer program may be deployed to be executed on one computer or on multiple computers at one site or distributed across multiple sites and interconnected by a communication network.

[0176] In an example, the operations may be performed by one or more programmable processors executing a computer program to perform functions by operating on input data and generating output. The method operations may also be performed by a special purpose logic circuit (e.g., FPGA or ASIC), and some example devices may be implemented as a special purpose logic circuit (e.g., FPGA or ASIC).

[0177] The computing system may include a client and a server. The client and the server are usually far away from each other and usually interact through a communication network. The relationship between the client and the server is generated by means of a computer program that runs on a corresponding computer and has a client-server relationship with each other. In the example of deploying a programmable computing system, it should be understood that both hardware and software architectures are worth considering. Specifically, it should be understood that the choice of implementing certain functions in permanently configured hardware (e.g., ASIC), in temporarily configured hardware (e.g., a combination of software and a programmable processor), or in a combination of permanently and temporarily configured hardware can be a design choice. The hardware (e.g., machine) and software architecture that can be deployed in various examples are described below.

[0178] Figure 7 It is a block diagram of a machine in the example form of a computer system 700, within which instructions 724 can be executed so that the machine performs any one or more methods discussed herein. In an alternative example, the machine operates as a standalone device or can be connected (e.g., networked) to other machines. In a networked deployment, the machine can operate with the ability of a server or client machine in a server-client network environment, or as a peer machine in a peer (or distributed) network environment. The machine can be a personal computer (PC), a tablet PC, a set-top box (STB), a personal digital assistant (PDA), a cellular phone, a web device, a network router, a switch or a bridge, or any machine capable of executing instructions (sequential or otherwise) specifying the action to be taken by the machine. In addition, although only a single machine is shown, the term "machine" should also be considered to include a set (or multiple sets) of instructions that are executed individually or jointly to perform any set of machines of any one or more methods discussed herein.

[0179] The example computer system 700 includes a processor 702 (e.g., a central processing unit (CPU), a GPU, or both), a primary or main memory 704, and a static memory 706, which communicate with each other via a bus 708. The computer system 700 may also include a video display unit 710 (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)). The computer system 700 also includes an alphanumeric input device 712 (e.g., a keyboard or a touch-sensitive display screen), a UI navigation (or cursor control) device 714 (e.g., a mouse), a storage unit 716, a signal generating device 718 (e.g., a speaker), and a network interface device 720.

[0180] The storage unit 716 includes a machine-readable medium 722 on which is stored one or more sets of data structures and instructions 724 (e.g., software) embodying or utilized by any one or more of the methodologies or functions described herein. The instructions 724 may also reside, completely or at least partially, within the main memory 704 or within the processor 702 during execution by the computer system 700, wherein the main memory 704 and the processor 702 also each constitute the machine-readable medium 722.

[0181] Although the machine-readable medium 722 is shown as a single medium according to some examples, the term "machine-readable medium" may include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) storing one or more instructions 724 or data structures. The term "machine-readable medium" should also be deemed to include any tangible medium that can store, encode, or carry instructions 724 for execution by a machine and cause the machine to perform any one or more methods of the present disclosure, or any tangible medium that can store, encode, or carry data structures utilized by or associated with such instructions 724. Therefore, the term "machine-readable medium" should be deemed to include, but is not limited to, solid-state memory and optical and magnetic media. Specific examples of machine-readable media 722 include non-volatile memory, including, for example, semiconductor memory devices, such as erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), and flash memory devices; magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and compact disk read-only memory (CD-ROM) and digital versatile disk read-only memory (DVD-ROM) disks. Machine-readable media are not transmission media.

[0182] The instructions 724 may also be sent or received over a communication network 726 using a transmission medium. The instructions 724 may be sent using the network interface device 720 and any of a number of well-known transfer protocols, such as the Hypertext Transfer Protocol (HTTP). Examples of communication networks include a local area network (LAN), a wide area network (WAN), the Internet, a mobile phone network, a plain old telephone (POTS) network, and wireless data networks (e.g., Wi-Fi and Wi-Max networks). The term "transmission medium" shall be deemed to include any intangible medium capable of storing, encoding, or carrying the instructions 724 for execution by the machine, and includes digital or analog communication signals or other intangible media to facilitate the communication of such software.

[0183] Although specific examples are described herein, it is apparent that various modifications and changes may be made to these examples without departing from the broader spirit and scope of the present disclosure. Therefore, the specification and the drawings are to be considered illustrative rather than restrictive. The drawings forming a part thereof illustrate specific examples in which the subject matter may be practiced by way of illustration and not limitation. The examples shown are described in sufficient detail to enable those skilled in the art to practice the teachings disclosed herein. Other examples may be utilized and derived therefrom so that structural and logical substitutions and changes may be made without departing from the scope of the present disclosure. Therefore, this specific embodiment should not be considered to have a limiting meaning, and the scope of the various examples is limited only by the appended claims and the full scope of equivalents to which these claims are assigned.

[0184] Such examples of the subject matter of the present invention may be referred to herein individually or collectively by "examples", which is merely for convenience and is not intended to voluntarily limit the scope of the present application to any single example or concept (if more than one example or concept is actually disclosed). Therefore, although specific examples have been shown and described herein, it should be understood that any arrangement that is calculated to achieve the same purpose can replace the specific examples shown. The present disclosure is intended to cover any and all adaptations or variations of the various examples. After reading the above description, combinations of the above examples and other examples not specifically described herein will be clear to those skilled in the art.

[0185] Some parts of the subject matter discussed herein can be presented according to an algorithm or symbolic representation of the operation of data stored in a machine memory (e.g., computer memory) as a bit or binary digital signal. Such an algorithm or symbolic representation is an example of a technique used by a person of ordinary skill in the field of data processing to convey the essence of their work to other persons of ordinary skill in the art. As used herein, an "algorithm" is a self-consistent sequence of operations or similar processing that leads to a desired result. In this context, algorithms and operations involve the physical manipulation of physical quantities. Typically, but not necessarily, such a quantity can take the form of an electrical signal, a magnetic signal, or an optical signal that can be stored, accessed, transmitted, combined, compared, or otherwise manipulated by a machine. Sometimes, primarily for general reasons, it is convenient to use words such as "data", "content", "bit", "value", "element", "symbol", "character", "term", "number", "numeral", etc. to refer to such a signal. However, these words are merely convenient labels and are associated with appropriate physical quantities.

[0186] Unless otherwise specifically stated, discussions herein using words such as "process," "compute," "calculate," "determine," "present," "display," and the like may refer to the action or process of a machine (e.g., a computer) that manipulates or transforms data represented as physical (e.g., electronic, magnetic, or optical) quantities within one or more memories (e.g., volatile memory, non-volatile memory, or any suitable combination thereof), registers, or other machine components that receive, store, send, or display information. Furthermore, unless otherwise specifically stated, as is common in patent literature, the terms "a" and "an" are used herein to include one or more than one instance. Finally, as used herein, unless otherwise specifically stated, the conjunction "or" refers to a non-exclusive "or."

[0187] Unless the context clearly requires otherwise, throughout the specification and claims, the words "comprise", "comprising", etc. should be interpreted in an inclusive sense, rather than in an exclusive or exhaustive sense, for example, in the sense of "including but not limited to". As used herein, the terms "connect", "couple" or any variation thereof mean any connection or coupling, direct or indirect, between two or more elements; the coupling or connection between elements may be physical, logical, or a combination thereof. Additionally, when used in this application, the words "herein", "above", "below", and words of similar meaning refer to this application as a whole, rather than to any particular part of this application. Where the context permits, words using the singular or plural may also include the plural or singular, respectively. The word "or" with respect to a list of two or more items encompasses all of the following interpretations of the word: any one of the items in the list, all of the items in the list, and any combination of the items in the list.

[0188] Although some examples (e.g., those depicted in the accompanying drawings) include specific sequences of operations, the sequence can be changed without departing from the scope of the present disclosure. For example, some of the depicted operations can be performed in parallel or in different orders that do not substantially affect the functions described in the examples. In other examples, different components of the example devices or systems that implement the example methods can perform functions substantially simultaneously or in a specific order. For ease of reference, the term "operation" is used to refer to the elements in the accompanying drawings of the present disclosure, and it should be understood that each "operation" can identify one or more operations, processes, actions or steps, and can be performed by one or more components.

Claims

1. A system comprising: at least one memory storing instructions; as well as One or more processors configured by the instructions to perform operations, the operations comprising: monitoring resource utilization on a plurality of user devices via a device agent executed on each of the plurality of user devices; Accessing a workload execution request identifying the resource requirements of a cluster workload; assigning workload execution requests to a cluster including the plurality of user devices based on resource requirements of the cluster workload and resource utilization on the plurality of user devices; and The workload execution request is caused to be executed on the cluster, wherein respective portions of the user workload and the cluster workload are executed on each of the plurality of user devices.

2. The system according to claim 1, wherein: The cluster includes the plurality of user devices and one or more dedicated computing nodes, and a corresponding portion of the cluster workload is executed on each dedicated computing node.

3. The system of claim 1, wherein the operations further comprise, for each user device: User equipment is assigned to a cluster based on the user equipment satisfying one or more cluster contribution criteria.

4. The system according to claim 1, wherein: Monitoring resource utilization on the plurality of user devices includes monitoring resource utilization on a user device pool including the plurality of user devices, the operation further comprising: selecting the plurality of user devices from a pool of user devices; and The plurality of user devices are assigned to clusters.

5. The system according to claim 1, wherein: Monitoring resource utilization on the plurality of user devices includes using a device agent for each user device to determine that the user device has excess resources available to contribute to the cluster.

6. The system according to claim 1, wherein: A device agent executing on each user device determines the resources that the user device can contribute to the cluster when executing the user workload.

7. The system according to claim 6, wherein: Monitoring resource utilization on the plurality of user devices includes receiving, from a device agent executing on each user device, an indication of resources that the user device is able to contribute to the cluster when executing a user workload.

8. The system according to claim 6, wherein: A cluster proxy executing on the cluster aggregates resource utilization data from device agents of the plurality of user devices, and monitoring resource utilization on the plurality of user devices includes receiving the aggregated resource utilization data from the cluster proxy.

9. The system according to claim 1, wherein: Enabling a workload execution request to be executed on the cluster includes: Instructions are sent to a device agent executing on each user device to allocate a first portion of resources on the user device to the cluster, wherein a second portion of the resources on the user device is used to execute the user workload.

10. The system according to claim 1, wherein: Causing the workload execution request to be executed on the cluster includes causing, on each user device, at least a portion of the user workload and at least a portion of a corresponding portion of the cluster workload to be executed simultaneously.

11. The system according to claim 1, wherein: The cluster workload executes in a cluster environment on the user device, which is separate from the user environment on the user device where the user workload executes.

12. The system according to claim 11, wherein: The cluster environment includes at least one of a virtual machine or a container.

13. The system of claim 1, wherein: Workload execution requests are assigned to the cluster by a processor-implemented cluster controller that is communicatively coupled to the cluster and to a plurality of other clusters in a distributed computing environment.

14. The system of claim 1, the operations further comprising, for each user device: A message is sent to the user equipment to indicate that the user equipment has been assigned to the cluster.

15. A method comprising: monitoring resource utilization on a plurality of user devices via a device agent executed on each of the plurality of user devices; Accessing a workload execution request identifying the resource requirements of a cluster workload; assigning workload execution requests to a cluster including the plurality of user devices based on resource requirements of the cluster workload and resource utilization on the plurality of user devices; as well as The workload execution request is caused to be executed on the cluster, wherein respective portions of the user workload and the cluster workload are executed on each of the plurality of user devices.

16. The method according to claim 15, wherein: The cluster includes the plurality of user devices and one or more dedicated computing nodes, and a corresponding portion of the cluster workload is executed on each dedicated computing node.

17. The method according to claim 15, wherein: The cluster workload executes in a cluster environment on the user device, which is separate from the user environment on the user device where the user workload executes.

18. A non-transitory computer-readable medium storing instructions that, when executed by one or more processors, cause the one or more processors to perform operations comprising: monitoring resource utilization on a plurality of user devices via a device agent executed on each of the plurality of user devices; Accessing a workload execution request identifying the resource requirements of a cluster workload; assigning workload execution requests to a cluster including the plurality of user devices based on resource requirements of the cluster workload and resource utilization on the plurality of user devices; as well as The workload execution request is caused to be executed on the cluster, wherein respective portions of the user workload and the cluster workload are executed on each of the plurality of user devices.

19. The non-transitory computer readable medium of claim 18, wherein: The cluster includes the plurality of user devices and one or more dedicated computing nodes, and a corresponding portion of the cluster workload is executed on each dedicated computing node.

20. The non-transitory computer readable medium of claim 18, wherein: The corresponding portion of the cluster workload is executed in a cluster environment on each user device, which is separate from the user environment on the user device in which the user workload is executed.