Patent ID: 12244668

DETAILED DESCRIPTION OF EXAMPLE EMBODIMENTS

Different types of file systems may be preferable for use in different types of computing systems. In one specific example, stateful protocols may be used by client devices to access and interact with gateways providing access to the distributed file system. For instance, a distributed file system may be implemented by a network file system (NFS) protocol, such as the NFSv4 protocol. Typically, such distributed file systems are implemented by creating and configuring gateways for the distributed file system on particular, dedicated computing hardware (or dedicated portions of computing hardware). These gateways may be initialized and assigned to handle requests for a particular portion of the distributed file system.

However, once a configuration for a distributed file system is set, it may typically be difficult to expand or otherwise alter the gateways assigned to the distributed file system. In particular, manual intervention may typically be required, with an administrator necessary to recognize bottlenecks, approve reassignments, and/or add gateways to the distributed file system. This can result in performance delays, as particular gateways field larger numbers of requests than others, increasing response latency for the particular gateways. Furthermore, because the gateways may typically be implemented by discrete, assigned computing hardware, it may be difficult both to assign greater computing resources to respond to increased request loads and to add new gateways to the distributed file system. Therefore, there exists a need to enable both computing resource allocation expansion and control for distributed file systems (“horizontal scaling”) and to enable gateways to be easily added to and removed from distributed file systems (“vertical scaling”).

One solution to this problem is to use one or more containers within a cloud computing environment to implement gateways for a distributed file system. In particular, gateways may be configured to receive and process requests to access subsets of the distributed file system (e.g., requests to access “exports” of the distributed file system). Gateways for the distributed file system may be implemented by one or more containers. Individual containers may be assigned to respond to one or more exports associated with the gateways. Distributing the workload for the gateways in this manner may enable both vertical and horizontal scaling of the distributed file system, allowing both additional containers to be assigned to process particular exports of the distributed file system and gateways to be added to the distributed file system as needed (e.g., to address geographical distribution of computing processes accessing the distributed file system.

FIG.1illustrates a system100for distributed file system management according to an exemplary embodiment of the present disclosure. The system100may be configured to provide a distributed file system100within a cloud computing environment102. The system100includes a cloud computing environment102communicating with two client devices104,106. The cloud computing environment102may be configured to execute various computing processes. For example, the cloud computing environment102may be implemented by multiple computing devices, including multiple computing devices in different locations. The cloud computing environment102may be configured to execute various computing processes using the multiple computing devices. For example, the cloud computing environment102may receive one or more requests from the client devices104,106to execute particular computing processes. In certain implementations, the cloud computing environment102may execute the computing processes within containers and/or within virtual machines. For example, the cloud computing environment102may be implemented at least in part a Red Hat OpenShift® environment.

The cloud computing environment102contains a distributed file system108. The distributed file system108may store data for use by computing processes executing on the cloud computing environment102. For example, while executing, the computing processes (e.g., containers or virtual machines implementing the computing processes) may access the distributed file system108to read and/or write data within the distributed file system108. In particular, the distributed file system108may be accessible via one or more gateways114,116,118contained within the distributed file system108. For example, the distributed file system108may be implemented as an NFS file system (e.g., an NFSv4 file system) and the gateways114,116,118may be implemented as NFS gateways or similar (e.g., NFS daemons, NFS nodes, NFS clusters). The gateways114,116,118may be configured to receive and process requests to access data stored within the distributed file system108and/or to store or update data within the distributed file system108. Each of the gateways114,116,118may be assigned to process requests for an exclusive subset of the distributed file system108. For example, the gateways114,116,118may be assigned particular exports of the distributed file system108, as discussed further below.

In practice, each of the gateways114,116,118may be implemented using containerization. In particular, each of the gateways114,116,118may be implemented by one or more containers120,122,124,126,128,130created by the cloud computing environment102. For example, the gateways114,116,118may be implemented as clusters of containers120,122,124,126,128,130(e.g., “gateway clusters”). In particular, each of the containers120,122,124,126,128,130that implement a particular gateway114,116,118may be assigned to respond to requests for different portions of the distributed file system108assigned to the corresponding gateway114,116,118. For example, the containers120,122,124,126,128,130may be assigned to respond to requests for one or more exports of the distributed file system108.

The distributed file system108also includes a location map112. The location map112may store associations between certain portions of the distributed file system108(e.g., certain exports of the distributed file system108) gateways114,116,118, such as addresses to which requests can be sent. In certain instances, each container120,122,124,126,128,130may be assigned to manage all exports assigned to a corresponding gateway114,116,118. In such instances, the location map112may store mappings between particular exports and an identifier of the gateway114,116,118(e.g., an address for the gateway114,116,118). In additional or alternative implementations, different containers120,122,124,126,128,130may manage different exports assigned to the gateways114,116,118and the location map112may store mappings between particular exports and an identifier of the container120,122,124,126,128,130implementing the export (e.g., an address for the container120,122,124,126,128,130). The location map112is discussed in greater detail below in connection withFIG.2.

The gateways114,116,118may be created and updated by a load balancer110of the distributed file system108. The load balancer110may be responsible for creating new gateways114,116,118, removing existing gateways114,116,118, adding new containers120,122,124,126,128,130to particular gateways114,116,118, and/or removing certain containers120,122,124,126,128,130from particular gateways114,116,118. In particular, the load balancer110may be configured to add or remove gateways114,116,118and/or containers120,122,124,126,128,130to the distributed file system108based on current workloads for existing gateways114,116,118and/or containers120,122,124,126,128. For example, if a particular container122of a gateway114is experiencing substantially higher request loads than other containers120,124of the gateway114, the load balancer110may add a new container to the gateway114. Additionally or alternatively, the load balancer110may reassign all or part of the exports assigned to the container122to the other containers120,124. In additional or alternative implementations, if a single container126implementing a gateway116experiences requests greater than a particular threshold, the load balancer110may create a new container to implement the gateway116and may assign a portion of the exports for the gateway116to the new container. As a further example, if a request is received for a portion of the distributed file system108that is not assigned to a gateway, or that is assigned to a gateway implemented by computing devices located far away from a requesting computing device, the load balancer110may create a new gateway executing within a new corresponding container for the distributed file system108and may assign the requested portion of the distributed file system108to the new gateway. Gateway and container scaling are discussed in greater detail below in connection withFIGS.3A-3B.

As explained further below, adding and removing gateways and containers to the distributed file system108may improve both resource utilization by the distributed file system108and response latency, as computing resources (and corresponding containers) are assigned to portions of the distributed file system and corresponding gateways that are experiencing the highest request loads. Furthermore, adding additional gateways may improve colocation of the distributed file system108with requesting computing processes. Furthermore, using multiple containers to implement gateway clusters improves reliability of the gateway clusters. For example, having multiple containers in a cluster assigned to manage all or part of the exports of a particular gateway may enable improved uptime if one of the containers fails, as each container in the cluster can participate in recovery of the exports (e.g., through coordinated grace periods).

In practice, the cloud computing environment102may communicate with the client devices104,106via one or more networks. Furthermore, multiple computing devices implementing the cloud computing environment102may communicate with one another via one or more networks. In particular, communications with the one or more may utilize one or more wired network interfaces (e.g., Ethernet interfaces) and/or wireless network interfaces (e.g., VVi-Fi®, Bluetooth®, and/or cellular data interfaces). In certain instances, the network may be implemented as a local network (e.g., a local area network), a virtual private network, L1 and/or a global network (e.g., the Internet).

The cloud computing environment102includes a memory132and a processor134. The memory132and the processor may implement one or more aspects of the cloud computing environment102. For example, the memory132and the processor134may implement the distributed file system108and corresponding containers120,122,124,126,128,130. In practice, as explained above, the cloud computing environment102may be implemented by multiple computing devices. In such instances, the memory132and the processor134may be implemented by multiple memories and/or multiple processors of the multiple computing devices implementing the cloud computing environment102. Furthermore, although not depicted, the client devices104,106may similarly contain memories and/or processors configured to implement one or more operational features of the client devices104,106.

FIG.2illustrates a file system management scenario200according to an exemplary embodiment of the present disclosure. The file management scenario200may be an exemplary implementation of the distributed file system108implemented by the cloud computing environment102. The file system management scenario200includes a load balancer202, which may be an exemplary implementation of the load balancer110, a location map210, which may be an exemplary implementation of the location map112, and a gateway204, which may be an exemplary implementation of one of the gateways114,116,118.

The gateway204is implemented by two containers206,208. Each container206is responsible for implementing one or more exports212,214,216,218. Each of the exports212,214,216,218may correspond to a particular, exclusive subsets of the distributed file system108. For example, the exports212,214,216,218may correspond to particular subtrees and/or subdomains of the distributed file system108. The exports212,214,216,218may serve as an access point for a shared subdirectory of the distributed file system108(e.g., a subdirectory available for access by computing processes). In particular, the exports212,214,216,218may contain or access one or more copies of data stored within the shared subdirectory. In certain instances, the exports212,214,216,218may provide access to one or more child directories of an assigned subdirectory, such as all child directories that have not themselves been assigned to a particular export212,214,216,218. In certain implementations, the exports212,214,216,218may be implemented as NFS exports for the distributed file system108.

Each of the exports212,214,216,218may correspond to one or more computing processes220,222,224,226. For example, the computing processes220,222,224,226may be executing and accessing (e.g., reading or writing) data stored within the exports212,214,216,218(e.g., data stored within corresponding portions of the distributed file system108). In response to requests received from the computing processes220,222,224,226, the containers206,208may provide copies of data and/or may update data stored within the corresponding portions of the distributed file system108.

The computing processes220,222,224,226may be configured to transmit requests directly to the containers206,208implementing the exports212,214,216,218. For example, the location map210may store information regarding which exports212,214,216,218are assigned to which containers206,208. In particular, the location map210may store export identifiers228,230,232,234associated with container identifiers236,238. The export identifiers228,230,232,234may identify a particular portion of the distributed file system108(e.g., a particular subtree or particular subdirectory) corresponding to an export212,214,216,218. The container identifier236,238may identify the containers206,208implementing the exports212,214,216,218. Additionally or alternatively, the container identifiers236,238may identify an address for the containers206,208to which requests to access the exports212,214,216,218may be transmitted. As depicted, the export identifier228may correspond to the exports212, the export identifier230may correspond to the exports214, the export identifier232may correspond to the export216, and the export identifier234may correspond to the export218. As further depicted, the container identifier236may correspond to the container206and the container identifier238may correspond to the container208.

To initially request data from the distributed file system108, the computing processes220,222,224,226may query the location map210for corresponding container identifier236,238. The computing processes220,222,224,226may then transmit the request directly to the container206,208based on the container identifier236,238. In certain implementations, the container identifier236,238may be stored and future requests to access the exports212,214,216,218may be transmitted directly to the containers206,208using the previously-stored container identifier236,238.

The load balancer202may be responsible for creating the containers206,208that implement the gateway204. For example, the load balancer202may be configured to create the containers206,208and to assign the exports212,214,216,218managed by each of the containers206,208. The load balancer202may also monitor operating conditions for the containers206,208, such as a number of requests fulfilled by the containers206,208and/or in amounts of computing resources utilized by the containers206,208. In certain instances, the load balancer202may create new containers206,208and/or may adjust the allocation of exports212,214,216,218between the containers206,208.

As one specific example, and turning toFIG.3A, the file system scaling scenario300depicts a scenario where the load balancer202has created a new containers302for the distributed file system108. Over time, the number of requests to access each export212,214,216,218may change. In certain instances, the differing request loads the exports212,214,216,218may overload or otherwise cause a disproportionate number of requests to be fulfilled by a particular container208. For example, initially, the requests to access the export212may be approximately equivalent to the combined requests to access the exports214,216,218. However, at a later time, the requests to access the export218may be greater than the request to access the export212. In such instances, the greater request load for the export216may utilize a large proportion of the computing resources allocated to the container208, increasing the latency for requests to access exports214,216,218implemented by the container208.

In response, the load balancer202may create a new container302associated with the gateway204. For example, the load balancer202and/or the distributed file system108may request the cloud computing environment102to create a new container302and to assign computing resources (e.g., from the memory132and the processor134) to implement the container302. The load balancer202may then assign the export218of the gateway204to the container302, such that the container302will respond to requests to access, add, and/or update data within a portion of the distributed file system108corresponding to the export218. The location map210may then be updated (e.g., by the load balancer202, by the distributed file system108) to add a container identifier304associated with the container302(e.g., containing an address for the container302) and reassign the export identifier234to the container identifier304.

The next time the computing process226attempts to access the export218, the computing process226may transmit a request to the container208. In response, the container208may transmit an error message because the export218is no longer assigned to the container208. In response to the error message, the computing process226may query the location map210for the container identifier304. The computing process226may then receive the container identifier304and may transmit the request to the container302via the address specified in the container identifier304. In this way, new containers302can be added to a gateway204of the distributed file system108without interrupting operation of the distributed file system108.

It should be understood that the above scenario300is merely exemplary implementation. In practice, the load balancer202may respond to overloaded containers208in different ways. For example, more than one container302may be added to the gateway204(e.g., if multiple exports216,218receiving disproportionately large request volumes). Additionally or alternatively, rather than creating a new container302, the load balancer202may reassign and export218to a different container206that is not currently experiencing high request loads. In such scenarios, the location map210may still be updated with a container identifier236corresponding to the newly assigned container206.

Returning toFIG.2, the load balancer202may also be responsible for creating the gateways204that implement the distributed file system108. For example, the load balancer202may be configured to create gateways204to implement the distributed file system108and to create and assign corresponding containers206,208to implement the distributed file system108. For example, the load balancer202may create new containers when requests are received for portions of the distributed file system108that have not been assigned to a particular gateway204and/or for requests received from computing processes executing on computing hardware located far from a computing device implementing a gateway assigned to manage requests for a particular portion of the distributed file system108.

As one specific example, and turning toFIG.3B, the file system scaling scenario310depicts a scenario where the load balancer202has created a new gateway312for the distributed file system108. As explained above, requests may be received to access portions of the distributed file system108that have not been directly assigned to a particular gateway204of the distributed file system108. As one example, a request may be received to access a first directory of the distributed file system108. A parent directory for the first directory may be assigned to a particular gateway of the distributed file system108, but the first directory itself may not be assigned to the particular gateway. In such instances, requests to access data stored within the first directory may generally be processed by one or more containers implementing the particular gateway. However, in certain instances, the request to access the first directory may be received from a computing process executing on a different portion of the cloud computing environment102(e.g., at a different the geographical location) from the computing devices implementing the containers of the particular gateway. Accordingly, requests to access the first directory may experience increased latency, reducing operating performance for the distributed file system108.

In response to receiving such a request, the load balancer202may create a new gateway312for the distributed file system108and may assign the new gateway312to manage an export316corresponding to the first directory that has not been directly assigned to a particular gateway204of the distributed file system108previously. In particular, while creating the new gateway312for the distributed file system108, the distributed file system108may create a new container314responsible for implementing the new gateway312. For example, the load balancer202and/or the distributed file system108may request that the cloud computing environment102create the new container314and assign computing resources (e.g., from the memory132and the processor134) to implement the container314. In certain instances, the container314may be created on a computing device located near the computing process318from which the request to access the first directory was received. An export316associated with the first directory may then be assigned to the container314. The location map210may also be updated by adding export identifier320associated with the export316and a container identifier322associated with the container314(e.g., containing an address for the container314).

In response to the request, the computing process318may receive an error from the container to which the request was transmitted, indicating that the export316is not assigned to that container. The computing process318may query be location map210for the container identifier322associated with the export identifier320. The computing process318may then receive the container identifier322and may transmit the request to the container314via the address specified in the container identifier322. In this way, new gateways can be added to a distributed file system108without interrupting operation of the distributed file system108.

It should be understood that the implementations discussed above in connection withFIGS.2,3A, and3Bare merely exemplary and that additional or alternative implementations may differ. For example, in certain implementations, the location map210may contain mappings between export identifiers and gateway identifiers (e.g., where all containers in a gateway cluster handle all exports of the gateway). The gateway identifiers may contain an address that can be used to communicate with the gateway cluster of containers. In such instances, adding a new container (e.g., as inFIG.2A) may not require the location map210to be updated because the gateway identifier has not changed. In further instances, the gateway identifiers may contain container identifiers for containers within a corresponding gateway cluster. In such instances, adding a new container may require the location map210to be updated (e.g., to add a container identifier for the newly-added container).

FIG.4illustrates a method400for distributed file system management according to an exemplary embodiment of the present disclosure. In particular, the method400may be performed to initialize a distributed file system108executing with gateways implemented by one or more containers of a cloud computing environment. The method400may be implemented on a computer system, such as the system100. For example, the method400may be implemented by the cloud computing environment102, the distributed file system108, and/or the load balancer110,202. The method400may also be implemented by a set of instructions stored on a computer readable medium that, when executed by a processor, cause the computer system to perform the method400. For example, all or part of the method400may be implemented by the processor134and the memory132. Although the examples below are described with reference to the flowchart illustrated inFIG.4, many other methods of performing the acts associated withFIG.4may be used. For example, the order of some of the blocks may be changed, certain blocks may be combined with other blocks, one or more of the blocks may be repeated, and some of the blocks described may be optional.

The method400may begin with creating a plurality of containers within a cloud computing environment (block402). For example, a plurality of containers120,122,124,126,128,130,206,208,302,314may be created within a cloud computing environment102. The containers120,122,124,126,128,130,206,208,302,314may be created in a response to implement a distributed file system108. For example, a request may be received to initialize a distributed file system108(e.g., from a computing process executing on the cloud computing environment102). Additionally or alternatively, a request may be received to begin executing a computing process that identifies the distributed file system108as a dependency for the computing process, and the containers120,122,124,126,128,130,206,208,302,314may be created in response to identifying the dependency. The containers120,122,124,126,128,130,206,208,302,314may be created by the cloud computing environment102and/or may be created by a load balancer110,202associated with the distributed file system108.

A plurality of gateways for the distributed file system may be executed within the plurality of containers (block404). For example, a plurality of gateways114,116,118,204,312for the distributed file system108may execute within the plurality of containers120,122,124,126,128,130206,208,302,314. In particular, each gateway114,116,118,204,312for the distributed file system108may be implemented by one or more containers120,122,124,126,128,130. Container identifiers236,238,304,322for containers120,122,124,126,128,130,206,208,302,314assigned to implement particular gateways114,116,118,204,312of the distributed file system108may be added to a location map210associated with the distributed file system108.

Exports of the distributed file system may be assigned to a subset of the plurality of gateways (block406). For example, at least a subset of the gateways114,116,118,204,312may be responsible for responding to requests to access, add, or update data stored within particular, exclusive subsets of the distributed file system108. In particular, exports212,214,216,218,316corresponding to exclusive subsets of the distributed file system108may be assigned to the gateways114,116,118. In one example, all exports assigned to a particular gateway114,116,118,204,312may be assigned to each of the containers120,122,124,126,128,130,206,208,302,314implementing the gateways114,116,118,204,312. In another example, particular exports212,214,216,218,316may be assigned to individual containers120,122,124,126,128,130,206,208,302,314implementing the gateways114,116,118,204. The exports212,214,216,218,316may be assigned to the containers120,122,124,126,128,130,206,208,302,314based on various considerations. For example, the exports212,214,216,218,316may be assigned according to a previous implementation configuration for the distributed file system108(e.g., the configuration the last time the distributed file system108was implemented). Additionally or alternatively, the exports212,214,216,218,316may be assigned based on the computing process whose request triggered initialization of the distributed file system108. In still further implementations, the distributed file system108may be initialized with a single container implementing a single gateway, and additional containers and/or gateways may be added to the distributed file system108using techniques similar to those discussed herein in connection with the scenarios300,310and the methods500,510. The location table112,210may be updated based on how the exports212,214,216,218,316are assigned to the gateways114,116,118,204,312. For example, the location map112,210may be updated to include export identifiers228,230,232,234,320corresponding to the assigned exports212,214,216,218,316. In particular, the export identifiers228,230,232,234,320may be added to the location map112,210in association with gateway identifier of an assigned gateway114,116,118,204,312and/or a container identifier236,238,304,322of an assigned container120,122,124,126,128,130,206,208,302,314.

Requests to access exports of the distributed file system may be responded to using containers executing gateways assigned to corresponding exports of the distributed file system (block408). For example, the distributed file system108may respond to requests from computing processes220,222,224,226,318to access particular portions (e.g., particular exports, particular subtrees, particular subdirectories) of the distributed file system108using containers120,122,124,126,128,130,206,208,302,314that implement corresponding exports212,214,216,218,316. In particular, as explained above, before requesting access to the distributed file system108, computing processes220,222,224,226,318may request a gateway identifier for a corresponding gateway114,116,118,204,312and/or a container identifier236,238,304,322for a corresponding container120,122,124,126,128,130,206,208,302,314implementing an export212,214,216,218,316used to access the desired subdirectory or subtree of the distributed file system108. The gateway identifier and/or the container identifier236,238,304,322may identify an address that may be used to communicate with the corresponding gateway114,116,118,204,312(e.g., gateway cluster) and/or container120,122,124,126,128,130,206,208,302,314. The computing processes220,222,224,226,318may then transmit a request to the specified address in order to access the distributed file system108. In response, the containers120,122,124,126,128,130,206,208,302,314may process the request, providing access to corresponding portions of the distributed file system (e.g., by providing copies of data within the distributed file system108, by updating data stored within the distributed file system108, and/or by adding data to the distributed file system108).

In this way, the method400enables the provisioning of a distributed file system within a cloud computing environment using one or more containers to implement gateways for the distributed file system. Implementing distributed file systems using multiple containers improves the flexibility of how the distributed file systems are deployed. Containerized implementations of distributed file systems and associated gateways may also improve the security of access requests to the distributed file system. For example, the distributed file system may be implemented as part of a cloud computing environment that executes many computing processes associated with multiple users (e.g., multiple entities). The distributed file system may store sensitive or confidential data that should only be accessed by the entity that requested it be implemented. Accordingly, to protect such access, the containers that implement the distributed file system may be configured to only respond to requests that are received from other containers associated with the same entity. For example, a container that receives a request from a particular computing process may analyze metadata associated with a container implementing the computing process. If the metadata indicates that the container implementing the computing process is associated with the same entity as the container implementing the gateway of the distributed file system, the container may proceed with processing the request. If not, the container may determine that the request is unauthorized and may halt processing of the request and/or may transmit an error message (e.g., to an administrator of the cloud computing environment, to the entity associated with the container). In this way, containerized implementations of distributed file systems may ensure that the distributed file system is only accessed by authorized users and authorized computing processes.

Furthermore, and as discussed further below, container-based implementations enable both vertical scaling, where additional gateways can be added to the distributed file system without interrupting access to the distributed file system, and horizontal scaling, where additional containers and computing resources can be added to implement a particular gateway without interrupting access to the distributed file system. Accordingly, such distributed file systems are better able to scale and reallocate resources to respond to changing demand across various exports of the distributed file system. This may help reduce overall computing resource utilization and/or reduce response latency.

FIGS.5A-5Billustrate methods500,510for distributed file system management according to an exemplary embodiment of the present disclosure. In particular, the method500be performed to add a new container to an existing gateway for a distributed file system executing within a cloud computing environment (e.g., to horizontally scale a distributed file system). The method510may be performed to add a new gateway to a distributed file system executing within a cloud computing environment (e.g., to vertically scale a distributed file system). The methods500,510may be implemented on a computer system, such as the system100. For example, the methods500,510may be implemented by the cloud computing environment102, the distributed file system108, and/or the load balancer110,202. The methods500,510may also be implemented by a set of instructions stored on a computer readable medium that, when executed by a processor, cause the computer system to perform the methods500,510. For example, all or part of the methods500,510may be implemented by the processor134and the memory132. Although the examples below are described with reference to the flowchart illustrated inFIGS.5A-5B, many other methods of performing the acts associated withFIGS.5A-5Bmay be used. For example, the order of some of the blocks may be changed, certain blocks may be combined with other blocks, one or more of the blocks may be repeated, and some of the blocks described may be optional.

To horizontally scale a distributed file system, the method500may begin with creating a new container associated with a first gateway (block502). For example, a load balancer110,202of the distributed file system108may determine that a request volume for at least one of the containers120,122,124,126,128,130,206,208,302,314implementing the distributed file system108exceeds a predetermined threshold. The predetermined threshold may include a total number of requests received in a predetermined period of time (e.g., requests per second, requests per minute) exceeding a predetermined number (e.g., 1000 requests per second, 10,000 requests per second, 100,000 requests per second). The predetermined threshold may additionally or alternatively include the container receiving a percentage of the total requests received for the distributed file system108exceeding a predetermined threshold (e.g., 5% of the requests, 10% of the requests, 25% of the requests, 50% of the requests). Additionally or alternatively, the predetermined threshold may include a percentage of requests received by a particular container120,122,124,126,128,130,206,208,302,314received for a particular export212,214,216,218,316exceeding a predetermined threshold (e.g., 10% of the requests received by the container, 25% of the requests received by the container, 50% of the requests received by the container, 75% of the requests received by the container). In still further implementations, the predetermined threshold may include one or more performance metrics for the container120,122,124,126,128,130,206,208,302,314. For example, the predetermined threshold may include one or more of a request response latency for the container120,122,124,126,128,130,206,208,302,314and/or a total computing resource utilization (e.g., number of CPU cores, percentage of memory capacity) utilized by the container120,122,124,126,128,130,206,208,302,314. In response to determining that a predetermined threshold has been exceeded, the balancer110,202may proceed with creating a new container. In one specific example, the load balancer202may determine that a request response latency for the container208exceeds a predetermined threshold (e.g., 50 ms, 100 ms). In response, the load balancer202may create a new container302associated with the same gateway204as the container208.

An export may be removed from at least one container (block504). For example, the load balancer202may remove an export218from the container208associated with the gateway204. The container208may be identified as the container whose request volume and/or performance metrics exceed a predetermined threshold. Additionally or alternatively, we container208may be identified as the container with the highest request load. The export218removed from the container208may be selected as the export218with the highest request load. Additionally or alternatively, the exports218may be selected such that a predicted request load for the container208in the container302(e.g., predicted based on recent request loads for the exports214,216,218originally implemented by the container208) is approximately equal. For example, the export218may have approximately the same number of requests as the exports214,216combined. Accordingly, the export218may be selected. In additional or alternative implementations, the load balancer202may select more than one export to remove the container208. For example, in additional alternative implementations, the load balancer202may select to remove the exports214,216from the container208instead of the exports218. In removing the export218from the container208, the load balancer202and/or the distributed file system108may update the location map210for the distributed file system108. For example, the location map210may be updated to remove an association between an export identifier234associated with the export218and a container identifier238associated with the container208.

The exports may be assigned to the new container (block506). For example, the export218may be assigned to the new container302. In particular, the load balancer202may transmit an indication to the container302of the exports218, including a copy and/or a reference of the subset of the distributed file system108to be serviced by the container302. Additionally, the location map210may be updated to include an association between the export identifier234associated with the export218and a container identifier304associated with the container302.

Turning now toFIG.5B, to vertically scale a distributed file system, the method510may begin with receiving a request for a first portion of a distributed file system unassigned to a gateway (block512). For example, a request may be received from a computing process318to access a subtree or subdirectory of the distributed file system is not previously been assigned to a particular gateway204of the distributed file system108. As explained further above, the unassigned portion of the distributed file system may include a portion of the distributed file system108that is not been directly assigned and/or a portion of the distributed file system108whose parent is been assigned to a gateway implemented by a computing device that is located greater than a predetermined distance from a computing device implementing the computing process318.

A new container may be created within the cloud computing environment (block514). For example, a new container314may be created within the cloud computing environment102implementing the distributed file system108. The new container314may be implemented using techniques similar to those discussed above in connection with block502of the method500. In certain instances, the new container314may be implemented on the same computing device as the computing process318. In additional or alternative implementations, the container314may be implemented on a computing device located near the computing device implementing the computing process318.

A new gateway may be executed within the new container for the distributed file system (block516). For example, a new gateway312may be executed within the new container314. The new gateway312may be configured to route and respond to requests to access portions of the distributed file system108.

A new export associated with the unassigned portion of the distributed file system may be assigned to the new gateway (block518). For example, a new export316may be assigned to the new gateway312. In particular, the new export316may be assigned to the new container314implementing the gateway312such that requests to access data associated with the export316are processed and responded to by the container314. In particular, the export316may be associated with the unassigned portion of the distributed file system108identified in the request received by the computing process318. Assigning the new export316to the new container314and the new gateway312may include updating the location map210. In particular, the location map210may be updated to include an association between an export identifier320associated with the new export316and a container identifier322associated with the new container314. As explained further above, in response to the initial request, the computing process318may receive an error message indicating that the requested portion of the distributed file system108has not been assigned to a particular subtree. In response, the computing process318may query the location map210for the assigned container. In response, the computing process318may receive the container identifier322, which may be used to directly request access to the export316from the container314. In additional or alternative implementations, in response to the initial request, the load balancer202and/or the location map210may provide the container identifier322.

In the above examples, the methods500,510are performed to add gateways and/or containers to a particular distributed file system. In practice, load balancers may also be configured to remove and/or consolidate containers and gateways implementing the distributed file system. In such instances, the containers and/or gateways may be removed or consolidated by performing one or more steps of the methods500,510in reverse. For example, removing a container from a particular gateway may include removing the exports assigned to the container, removing the container from the cloud computing environment102, and assigning the exports to another container or deleting the exports such that requests for the associated portions of the distributed file system are handled based on exports corresponding to parent directories.

In this way, the methods500,510may enable vertical and/or horizontal scaling of the gateways and containers that implement a distributed file system. Such scaling allows for the computing resources allocated to responding to requests for particular exports to be responsively adjusted based on actual request volumes received for the exports. Furthermore, by adding gateways and/or containers located near associated computing processes, the methods500,510may help improve response latency and reduce network congestion, as the number of requests over long distances across a network is reduced. In still further implementations, overall computing resource utilization may decrease, as computing resources assigned to containers implementing minimally-requested exports are reduced. Relatedly, response latency may improve, as greater computing resources are assigned to exports with high request loads.

FIG.6illustrates a system600according to an exemplary embodiment of the present disclosure. The system600includes at least one processor601and at least one memory603configured to implement a cloud computing environment602and a plurality of containers604,606executing within the cloud computing environment602. The system600may also include a plurality of gateways608,610for a distributed file system612executing within the plurality of containers604,606. At least a subset of the plurality of containers604,606may be assigned to exports614,616of the distributed file system612, the exports614,616corresponding to an exclusive subset of the distributed file system612. Requests to access particular portions618,620of the distributed file system612are responded to using the containers604,606executing gateways608,610assigned to corresponding exports614,616of the distributed file system612.

All of the disclosed methods and procedures described in this disclosure can be implemented using one or more computer programs or components. These components may be provided as a series of computer instructions on any conventional computer readable medium or machine readable medium, including volatile and non-volatile memory, such as RAM, ROM, flash memory, magnetic or optical disks, optical memory, or other storage media. The instructions may be provided as software or firmware, and may be implemented in whole or in part in hardware components such as ASICs, FPGAs, DSPs, or any other similar devices. The instructions may be configured to be executed by one or more processors, which when executing the series of computer instructions, performs or facilitates the performance of all or part of the disclosed methods and procedures.

It should be understood that various changes and modifications to the examples described here will be apparent to those skilled in the art. Such changes and modifications can be made without departing from the spirit and scope of the present subject matter and without diminishing its intended advantages. It is therefore intended that such changes and modifications be covered by the appended claims.