Client-side load balancing for remote application servers
Systems arid methods for implementing client-side load balancing for remote application servers. An example method comprises receiving, by a publishing server, an application server status information reflecting computing resource utilization by each application server of a plurality of application servers; receiving a request initiated by a client computing device to access a published application executable by at least a subset of the plurality of application servers; and responsive to determining that a load metric reflecting performance of the publishing server exceeds a threshold value, transmitting an instruction to the client computing device to perform client-side load balancing using a snapshot of the application server status information to select an application server of the subset of the plurality of application servers.
1 . A method comprising:
periodically receiving at a publishing server status information from each remote desktop service (RDS) server of a plurality of RDS servers connected to the publishing server via one or more networks where the status information for each RDS server of the plurality of RDS servers comprises a list of published applications, a list of existing client sessions and at least one of an availability and a utilization of each resource of one or more resources of the RDS server of the plurality of RDS servers;
establishing upon the publishing server a state snapshot comprising the status information for the plurality of RDS servers and at least one of a timestamp relating to the time of generation of the state snapshot and a version identifier of the state snapshot;
transmitting the state snapshot to each client computing device of a plurality of client computing devices; and
triggering a client computing device of the plurality of client computing devices to perform client-side load balancing process in dependence upon the state snapshot with respect a request generated by the client computing device to access a published application, wherein upon the client computing device of the plurality of client computing devices being triggered to perform the client-side load balancing process, the client computing device of the plurality of client computing devices:
validates the version of state snapshot currently stored by the client computing device of the plurality of client computing devices; and
responsive to failing to successfully validate the state snapshot triggers a request for a new version of the state snapshot from the publishing server.
2 . The method according to claim 1 , wherein
the client computing device of the plurality of client computing devices is triggered to perform client-side load balancing in dependence upon receipt of an instruction to perform the client-side load balancing from the publishing server generated by the publishing server in response to a request transmitted to the publishing server by the client computing device of the plurality of client computing devices to access the published application;
the instruction is generated by the publishing server in dependence upon the publishing server determining that a load metric reflecting performance of the publishing server exceeds a threshold value; and
the client-side load balancing comprising selecting an RDS server of the subset of the plurality of RDS servers for the client computing device of the plurality of client computing devices to access the published application.
3 . The method according to claim 2 , wherein
upon the publishing server determining that the load metric reflecting performance of the publishing server does not exceed the threshold value performing a server-side load balancing to select another RDS server of the subset of the plurality of RDS servers for the client computing device to access the published application.
4 . The method according to claim 1 , wherein
upon the client computing device of the plurality of client computing devices being triggered to perform the client-side load balancing process the client computing device of the plurality of client computing devices initially performs a process comprising:
comparing a valid version code of the state snapshot to a version code of a version of the state snapshot stored upon the client computing device of the plurality of client computing devices; and
upon determining the valid version code of the state snapshot does not match the version code of the stored version of the state snapshot the client computing device transmits a request to the publishing server for the current state snapshot.
5 . The method according to claim 1 , wherein
the client-side load balancing comprises:
determining whether an existing session has already been established for the published application by the client computing device with an RDS server of the plurality of RDS servers;
upon a positive determination that the existing session has already been established for the published application by the client computing device with an RDS server of the plurality of RDS servers using the client session information within the state snapshot to connect to the RDS server of the plurality of RDS servers having the existing session; and
upon a negative determination that the existing session has already been established for the published application by the client computing device with an RDS server of the plurality of RDS servers the client computing device:
identifies based upon the client session information within the state snapshot one or more further servers running the published application; and
performs a load balancing procedure to select a further server of the one or more further servers to establish a new client session for the published application using the client session information within the state snapshot.
6 . The method according to claim 1 , further comprising
the client-side load balancing comprises:
determining whether a server side load balancing was previously executed by the publishing server to select an RDS server of the plurality of RDS servers; and
upon a positive determination that the server side load balancing was executed by the publishing server to select an RDS server of the plurality of RDS servers establishing a new session with the RDS server of the plurality of RDS servers using session identifying information returned by the publishing server in response to a request from the client computing device to the publishing server.
7 . The method according to claim 1 , further comprising
the client-side load balancing comprises:
determining whether a server side load balancing was previously executed by the publishing server to select an RDS server of the plurality of RDS servers; and
upon a positive determination that a server side load balancing was executed by the publishing server to select an RDS server of the plurality of RDS servers establish a new session with the RDS server of the plurality of RDS servers using session identifying information returned by the publishing server in response to a request from the client computing device to the publishing server; and
upon a negative determination that a server side load balancing was executed by the publishing server to select an RDS server of the plurality of RDS servers the client-side device performs the additional steps of:
determining whether an existing session was previously established for the published application by the client computing device with an RDS server of the plurality of RDS servers; and
upon a positive determination that the existing session has already been established for the published application by the client computing device with an RDS server of the plurality of RDS servers using the client session information within the state snapshot to connect to the RDS server of the plurality of RDS servers having the existing session.