The described embodiments relate generally to software updates. More particularly, the present embodiments relate to a controlled technique for rolling out application updates to client devices.
Software developers can utilize digital distribution platforms that enable client devices to install digital copies of applications developed by the software developers. An example of a digital distribution platform includes Apple's® App Store® for devices running the iOS operating system. In turn, for a given client device that installs a particular application produced by a software developer, the software developer can provide updates for the application via the digital distribution platform. In some cases, the client device can be configured to download and install the updates automatically without user interaction. Alternatively, the client device can be configured to indicate when updates are available and prompt a user to manually install the update.
Notably, conventional digital distribution platforms do not provide software developers with fine-granularity control with respect to how their software applications are rolled out to client devices—which, in some cases, can be numbered in the millions. Typically, a conventional digital distribution platform implements a service that enables a given software developer to upload an update to a particular application to servers associated with the digital distribution platform. In turn, the digital distribution platform enables all client devices that previously-installed the application to install the update at their discretion. Importantly, although software developers may implement a form of quality control that involves testing the updated application during its development, the updated application nonetheless tends to include bugs that surface during operation. Consequently, the software developer is faced with pressure to, in a very short time, release an update that addresses the bugs. This rushed environment typically leads to unaddressed and/or additional bugs, thus exacerbating the problem.
In view of the foregoing, what is desired is an improved technique for performing a rollout of software updates within a digital distribution platform. In this regard, the embodiments described herein set forth techniques for providing a gradual rollout option that can be selected when a software developer causes an update to be made available to client devices via the digital distribution platform.
In some embodiments, at least one server implements a process that includes steps for receiving a request to identify whether an update for an application is available via a digital distribution platform, and determining whether a client device is authorized to install the update. The process can include sorting the client device into a first subset of client devices or a second subset of client devices based on (i) a user identifier corresponding to a user account associated with the client device, and (ii) a version identifier corresponding to the update. In particular, client devices sorted into the first subset of client devices are authorized to install the update, and client devices sorted into the second subset of client devices are not authorized to install the update. In some embodiments, the sorting can be performed in accordance with a hash value that is generated using a hash function that is applied against the user identifier and the version identifier provided by the client device and/or retrieved from a server device. In turn, the hash value can be compared to a threshold value to effectively sort the client device into the first subset of devices or the second subset of devices. In various embodiments, the threshold value can be adjusted dynamically during the rollout based on a function. In particular, the function can be dependent on one or more variables such as an elapsed amount of time between a release date for the update and a current date. In various embodiments, the process can include transmitting a response to the client device when the client device is authorized to install the update.
In various embodiments, the digital distribution platform can include at least one server computing device configured to implement one or more services. Exemplary services implemented by the at least one server computing device can include, but are not limited to, a content submission service, an indexing service, a distributed search service, and an update discovery service. The digital distribution platform can also include a digital store that enables purchasing applications that can be installed on client devices. In some embodiments, the digital distribution platform can include one or more content distribution networks, where each content distribution network includes a gateway server and one or more storage servers for storing packages of resources for different versions of one or more applications.
Other aspects and advantages of the application will become apparent from the following detailed description taken in conjunction with the accompanying drawings which illustrate, by way of example, the principles of the described embodiments.
The disclosure will be readily understood by the following detailed description in conjunction with the accompanying drawings, wherein like reference numerals designate like structural elements.
Representative applications of methods and apparatus according to the present application are described in this section. These examples are being provided solely to add context and aid in the understanding of the described embodiments. It will thus be apparent to one skilled in the art that the described embodiments may be practiced without some or all of these specific details. In other instances, well known process steps have not been described in detail in order to avoid unnecessarily obscuring the described embodiments. Other applications are possible, such that the following examples should not be taken as limiting.
In the following detailed description, references are made to the accompanying drawings, which form a part of the description and in which are shown, by way of illustration, specific embodiments in accordance with the described embodiments. Although these embodiments are described in sufficient detail to enable one skilled in the art to practice the described embodiments, it is understood that these examples are not limiting; such that other embodiments may be used, and changes may be made without departing from the spirit and scope of the described embodiments.
Digital distribution platforms enable software developers to rollout software to a large number of network-connected client devices in an automated manner. Various applications installed on client devices can also be updated automatically. Improvements to the digital distribution platforms that enable rollouts of updates to applications installed on client devices are discussed in detail herein. In one aspect of the various embodiments, a technique for implementing a gradual rollout option is disclosed, and can involve slowly increasing, over a period of time, the number of client devices that are authorized to install an update. According to some embodiments, the client devices can be sorted using a hash function and a threshold value that divides the client devices into two subsets based on a comparison of the hash value assigned to a particular client device and the threshold value. Additionally, the threshold value can be controlled (e.g., increased) during the rollout (automatically, or manually) to effectively adjust the number of client devices that are authorized to install the update during the rollout.
Effectively determining whether a client device is authorized to install an update during the rollout is an important aspect of the various embodiments. For example, a particular user can utilize a number of different client devices associated with a common user account. Notably, it can be important for a software developer to maintain a consistent user experience across different instances of an application installed on multiple client devices. In this regard, care should be taken to always authorize or not authorize all client devices associated with the common user account to install a particular update for a particular application. Similarly, care should also be taken to ensure that a particular client device is not consistently authorized to install an update to any application at a similar point during the rollout. Additionally, whether a client device is subject to become an early adopter of an update during a rollout should be varied across different updates and applications so that a given user is not consistently used as a beta tester early in the rollouts of multiple updates. Utilizing a user identifier, an application identifier, and a version identifier in a determination of whether a client device is authorized to install an update for an application can ensure consistency across multiple associated client devices for a given version of an application.
These and other embodiments are discussed below with reference to
Client devices 190 can be connected to the network 150. The client devices 190 can include a network interface, such as an Ethernet interface (IEEE 802.3) or a Wi-Fi interface (IEEE 802.11), that enables the client device 190 to communicate with other devices connected to the network 150. In some embodiments, a client device 190 includes a client application configured to communicate with a gateway server 115 of a CDN 110 in order to access a binary executable for an application to install on the client device 190. In particular, the client application can enable the client device to locate a uniform resource locator (URL) for the binary executable and to download the binary executable using the URL. In various embodiments, the client application can be a web-based application that is viewed in a browser of the client device 190.
Client devices 190 can include, but are not limited to, wearables, hand-held consumer devices, mobile phones, tablet computers, laptop computers, desktop computers, gaming consoles, or any other electronic device capable of connecting to the network 150 and installing a binary executable for an application stored on the CDN 110. Each client device 190 can include a processor and memory storing instructions and data that can be accessed by the processor. In some embodiments, a client device 190 can include an operating system that, when executed by the processor, enables the client device 190 to run one or more applications installed on the client device 190.
In some embodiments, the gateway server 115 and the storage server(s) 125 can be implemented on a single node connected to the network 150. For example, a single workstation connected to the network 150 can include storage resources 130 implemented as a RAID drive array. The workstation can also include a network interface connected to the network 150. In addition, the workstation can include a processor executing instructions to implement a service that provides various functionalities of the CDN 110 to the client devices 190. For example, the service can enable a client device 190 to query the CDN 110 for available file resources stored on the storage resources 130, enable software developers to upload binary executables for applications to the CDN 110, and so forth. In various embodiments, the gateway server 115 and storage server(s) 125 can be implemented as virtual machines (VMs) on the same node connected to the network 150.
In some embodiments, the gateway server 115 and storage server(s) 125 can be implemented across multiple nodes within a data center. Under such a configuration, the gateway server 115 can be configured to provide an interface between a local network within the data center and the external network 150. Moreover, each node in the data center can be assigned a unique address within the local network, and the gateway server 115 can be configured to route traffic (e.g., data packets) between the external network 150 and the nodes within the data center. Additionally, each storage server 125 can be implemented on a different node that is assigned a unique address in the local network.
In some embodiments, each storage server 125 manages one or more storage resources 130 connected to the storage server 125. A storage resource 130 can refer to a physical storage resource such as a hard disk drive (HDD), a solid-state drive (SSD), a redundant array of inexpensive disks (RAID), an optical disc drive, a magnetic tape drive, or any other type of storage medium. Alternatively, a storage resource 130 can refer to a virtual storage resource such as a virtual block device that is a software abstraction of a physical storage resource. Virtual storage resources can be distributed over a plurality of physical storage resources. In various embodiments, each storage resource 130 can be included within the same node as a storage server 125, such as HDDs attached to an interface component of the storage server 125, or included within a different node of the data center. Alternatively, a storage resource 130 can refer to a cloud-based storage service implemented by at least one server and accessible to the storage server 125 via the network 150.
In some embodiments, a client device 190 can be configured to request an application to be installed on the client device 190. In turn, a binary executable associated with the application that is stored on one or more of the CDNs 110 is retrieved from a particular CDN 110 and loaded onto a memory of the client device 190. Additionally, various configuration parameters for the installed application can be stored in the memory of the client device 190. A processor of the client device 190 can then load the instructions included in the binary executable from the memory and execute the instructions to run the application.
As previously noted herein, a software developer that creates an application can discover bugs included in a current version of the application. The software developer can attempt to fix the discovered bugs by changing the source code for the application and compiling a new version of the application, thereby creating a new binary executable corresponding to the new version of the application. The software developer can then upload the new binary executable to the CDN 110. In turn, client devices 190 that request the application to be installed will install the new binary executable instead of the previous version of the application. Furthermore, client devices 190 that have installed the previous version of the application can delete the binary executable installed on the client device 190 and install the new binary executable to update the application to the new version of the application. In some embodiments, an application can refer to a package of resources that include a number of different binary executables plus zero or more data resources, such as configuration files, graphics files, and the like. In such embodiments, an update to the application can include only a subset of resources that will replace corresponding resources in the package of resources stored on the client device 190 for the current version of the application. Thus, the package of resources included in the update is reduced in size compared to a package of resources for a clean installation of the application in the first instance.
Accordingly,
As shown in
At time 202 within the application development timeline 200, the software developer creates a package of resources for the beta version of the application (e.g., ver. 0.1) and submits the package of resources for the beta version to a digital distribution platform, such as the digital distribution platform 100 of
At time 204, the software developer is satisfied with all of the modifications made to the source code and/or data resources, and releases a full version of the application (e.g., ver. 1.0). In some embodiments, the package of resources of the full version of the application includes a complete set of binary executables and data resources for the application.
Over the course of the development timeline 200, additional versions of the application can be developed and released by the software developer. For example, as shown in
At some point during the development timeline 200, the software developer can decide to release a new full version of the application for a major update. The package of resources of the full version of the application typically includes a complete set of binary executables and data resources for the application, as modified from a previous version. At time 212, the software developer can release a new full version of the application (e.g., ver. 2.0), which includes a package of resources for a modified version of the application. When updating the application as installed on the client device to a new full version of the application, the client device can delete all binary executables and data resources associated with a previous version of the application and then install the complete set of binary executables and data resources for the new full version of the application.
Updates for the new full version of the application can be released as the development timeline 200 advances. For example, at time 214, a software developer can decide to release an update version 2.1 as well as additional updates at subsequent times in the development timeline 200.
As shown in
In some embodiments, the content submission service 310 aggregates multiple resources within a package of resources submitted to the digital distribution platform 300 into a single aggregate data structure for storage in a CDN 110. According to some embodiments, the aggregate data structure can be represented by a single file. In various embodiments, the aggregate data structure can be compressed by the content submission service 310 to reduce a size of the package of resources as stored on the CDNs 110. Compressing the package of resources within the aggregate data structure reduces network bandwidth required to transmit the package of resources from the digital distribution platform 300 to client devices. The package of resources is then decompressed by the client device prior to installation on the client device.
In some embodiments, a software developer can utilize a client application 312 executing on a computing device that is in communication with the server computing device executing the content submission service 310. The client application 312, in conjunction with the content submission service 310, enables the software developer to submit a package of resources for a particular version of an application to be managed by the one or more CDNs 110. The client application 312 can be a web-based application accessed through a browser running in an operating environment of the computing device. Alternatively, the client application 312 can be a stand-alone application developed for a target platform of the computing device and executed within an operating system environment of the computing device. As previously noted herein, the package of resources can include one or more binary executables that, when installed on a client device and executed by a processor of the client device, cause the client device to run the application within an operating environment of the client device.
In some embodiments, the client application 312 enables the software developer to specify various parameters related to a rollout of an update to an application to client devices that (1) are connected to the digital distribution platform 300, and (2) currently have the application installed thereon—referred to herein as “target client devices.” As used herein, the term “rollout” can refer to a period of time during which the package of resources for an update to a previous version of the application is made available to the target client devices. For example, the client application 312 can enable a software developer to specify a release date to begin the rollout of the update to target client devices. It is noted that the term “release date” can refer to a particular day on a calendar, a time identified by seconds, minutes, hours, and/or days from a reference time, and so on. Additionally, the client application 312 can enable a software developer to specify whether the rollout should be immediate, or gradual over a period of time. In particular, an immediate rollout refers to authorizing all client devices connected to the digital distribution platform 300 to install the update after the release date. In contrast, a gradual rollout refers to authorizing only a subset of client devices connected to the digital distribution platform 300 to immediately install the update after the release date, followed by additional subsets of the client devices as the period of time progresses.
In some embodiments, the number of authorized client devices in the subset of client devices can be dynamically adjusted during the period of time according to a pre-defined function. In particular, the pre-defined function can define what is referred to herein as an authorization curve. According to some embodiments, the authorization curve defines a threshold value that is dependent on one or more variables (e.g., elapsed time), and utilized to determine whether a client device is authorized to install an update to the application. In some embodiments, the number of authorized client devices in the subset of client devices can be dynamically adjusted during the period of time according to a custom function submitted by a software developer utilizing the client application 312. Thus, the software developer can define the overall behavior of the gradual rollout in accordance with the authorization curve defined by the custom function. Alternatively, the number of authorized client devices in the subset of client devices can be dynamically adjusted based on a selected function from a set of pre-defined functions. For example, the set of pre-defined functions can enable the software developer to choose between more aggressive or less aggressive authorization curves defined by the pre-defined functions. It is noted that while the set of pre-defined functions are not customizable by the software developer, they beneficially enable the software developer to coarsely adjust the aggressiveness of the gradual rollout.
In some embodiments, the content submission service 310 manages the utilization of storage resources 130 within a plurality of CDNs 110 included in the digital distribution platform 300. In various embodiments, the content submission service 310 performs load balancing operations that determine where to store a package of resources for a particular version of an application submitted to the digital distribution platform 300.
Turning now to
In some embodiments, each record generated by the indexing service 330 can include a list of resources included in the package of resources. If the record is associated with an update for a previous version of an application installed on client devices, then the record can also include information that specifies the previous version of the application associated with the update (e.g., the record can include a version identifier for the previous version of the application).
In some embodiments, the indexing service 330 stores the records in a database 332. The database 332 enables queries to be used to find specific resources stored on the CDNs 110 of the digital distribution platform 300. In various embodiments, the database 332 can be a distributed database stored on multiple server computing devices at various geographic locations communicating via a network.
As shown in
As shown in
In some embodiments, the client application 372 (executing on the client device) can maintain a list of applications that are installed on the client device, where each different application is represented by a unique application identifier. In some embodiments, the application identifier is assigned to an application by the indexing service 330 when a software developer uploads a package of resources for an initial version of the application to the digital distribution platform 300. The indexing service 330 creates a unique version identifier for each new version of the application uploaded to the digital distribution platform 300, including both major versions of the application and updates to previous versions of the application. It is noted that all records associated with any version of the application can include the same application identifier, whereas each record for a different version of the application can include a unique version identifier.
In additional embodiments, the update discovery service 370 can utilize a user account service to identify a list of applications installed on a particular client device associated with a user account. In turn, the client application 372 is not required to provide a list of application identifiers to the update discovery service 370 in the request. Instead, the request merely provides information in the request to identify the client device, and the update discovery service 370 passes the information to the user account service to return a list of applications that are installed on the client device. The update discovery service 370 can then identify whether any updates are available for applications installed on the client device.
In additional embodiments, the client application 372 does not transmit a request to the update discovery service 370. Instead, the update discovery service 370 is periodically called by the user account service to determine if any updates are available for applications installed on the client device. In this regard, the update discovery service 370 can be configured to push a notification to the client application 372 when an update is available for any applications installed on the client device.
It will be appreciated that the services described above in conjunction with
As previously noted herein, a rollout of an update to an application can be controlled through the digital distribution platform 300. The content submission service 310 can enable selection of a gradual rollout option when the update to the application is submitted to the digital distribution platform 300. The gradual rollout option causes the update discovery service 370 to limit the number of client devices that are authorized to install an update to the application during the rollout. When the gradual rollout option is selected, the update discovery service 370 is configured to determine whether a given client device (on which the application is installed) is authorized to install the update to the application. The record created by the indexing service 330 for an update can indicate that a gradual rollout option was selected to control the rollout of the update to the application. It will be appreciated that there is no additional overhead required to control the rollout of an update gradually rather than immediately. In other words, the update discovery service 370 includes all of the logic and data to implement a gradual rollout rather than an immediate rollout of an update for an application.
In some embodiments, determining whether the client device is authorized to install the update is performed by sorting the client device into a first subset of client devices or a second subset of client devices. In particular, the first subset of client devices are authorized to install the update to the application, and the second subset of client devices are not authorized to install the update to the application. The goal of the gradual rollout option is to delay the adoption of the update by client devices such that a software developer can react to the discovery of bugs in the update without the bugs degrading the user experience for a large portion of the application's user base. For example, a particular software application could be installed on one million devices, but the gradual rollout option can limit the update to being installed on ten thousand devices for a fixed time period at the beginning of the rollout, thereby limiting the effect of any bugs in the update to those ten thousand devices rather than exposing all one million devices to those bugs. This delay can enable the software developer to pause/cancel the rollout and create a new version of the application that fixes the discovered bugs so that the entire user base is not exposed to those bugs.
In some embodiments, the content submission service 310 enables a rollout of an update to an application to be paused. The gradual rollout option dynamically increases the number of client devices authorized to install the update over a period of time. The content submission service 310 enables a software developer to pause the rollout during the period of time such that the number of client devices authorized to install the update is fixed while the rollout is paused. Alternatively, no client devices are authorized to install the update while the rollout is paused; however, the number of client devices authorized to install the update resumes dynamically increasing from the number of client devices that were authorized to install the update immediately prior to the rollout being paused. In some embodiments, the content submission service 310 enables a rollout of an update to an application to be canceled. Cancelling the rollout results in no client devices being authorized to install the update. In various embodiments, a canceled rollout can be resumed, and the rollout will proceed as if the update is being rolled out to client devices for the first time. In some embodiments, the content submission service 310 enables a rollout of an update to an application to be advanced. For example, during a rollout of an update to an application where a software developer selected the gradual rollout option during submission of the update, the update can be made available to all client devices (e.g., all client devices are authorized to install the update) regardless of the previous rollout schedule.
It will be appreciated that a software developer may begin a rollout for an update using the gradual rollout option. However, at some point during the rollout, the software developer may determine that the update is stable and advance the rollout to all client devices. Some updates to an application may be urgent security updates to fix a discovered vulnerability. In such cases, these updates can be rolled out to client devices without selecting the gradual rollout option so that all client devices have access to the urgent security update immediately. In other words, different updates associated with the same application can be rolled out to client devices in different manners depending on the desire of the software developer when submitting the updates using the content submission service 310.
As shown in
In some embodiments, the threshold value returned by the function can be utilized in a sorting algorithm that divides a set of client devices into at least two subsets of client devices. In particular, a first subset of client devices represents the client devices that are authorized to install the update to the application, while a second subset of client devices represents the client devices that are not authorized to install the update to the application. The sorting algorithm can assign each client device in the plurality of client devices a value within the range that bounds all possible threshold values. In various embodiments, the distribution of client devices assigned particular values may be approximately uniform (e.g., the number of client devices assigned each number should be relatively equal within a particular error bound). The sorting algorithm can then divide the client devices into the first subset or the second subset by comparing the value assigned to the client device with the threshold value according to any criteria. For example, the first subset can include all client devices assigned a value less than the threshold value. It is noted that other criteria can be utilized by the sorting algorithm in lieu of the criteria provided in the foregoing example. For instance, the criteria can involve identifying values that are less than or equal to the threshold value, greater than the threshold value, greater than or equal to the threshold value, and so on.
In some embodiments, each client device is assigned a value to compare against the threshold value using a hash function. An output of the hash function is referred to as a hash value and can be restricted to a range that overlaps the range of threshold values. For example, the hash values returned by the hash function can be limited to the range [0, k), where k=n. It will be appreciated that the range of hash values and the range of threshold values can be selected based on the chosen criteria being utilized for the comparison. For example, if a “greater than” comparison is being used, then the range of threshold values can be selected as [0, n), and the range of hash values can be selected as (0, k].
An example hash function is provided below as Equation 1:
h(x)=x mod(k), (Eq. 1)
where x is the input value and the result of the hash function h(x) is the hash value. As an example, when k is equal to 100, the hash function h(x) applies a modulo operation to the input value x, wherein the modulus is 100. In other words, the hash value resulting from the hash function h(x) in Equation 1 is the remainder of the Euclidean division of the input value by the modulus of k. In various embodiments, the hash function can be chosen to uniformly distribute the hash values in the range of hash values, given a known set of input values.
In some embodiments, an input to the hash function is based on: (1) a user identifier corresponding to a user account associated with the client device; and (2) a version identifier corresponding to the update. The input to the hash function can be generated by calculating a sum of the user identifier and the version identifier. Alternatively, the input to the hash function can be generated by applying some other operation to the user identifier and/or the version identifier. In some embodiments, the user identifier and the version identifier are stored as integer values. For example, each of the user identifier and the version identifier can be stored as a 32-bit unsigned integer having a range of 0 to 4,294,967,295. Alternatively, the user identifier and version identifier can be stored using other formats such as 16-bit signed or unsigned integers, 64-bit signed or unsigned integers, floating-point values, character strings, and the like. In various embodiments, the user identifier and/or version identifier can be converted from one format to another format prior to calculating the sum. For example, a version identifier could be stored as a character string that may be parsed and converted into a useful format for an addition operation such as an integer format.
It will be appreciated that the determination of whether a client device is authorized to install an update depends on the hash value, which changes based on the user identifier and the version identifier used to calculate the input to the hash function. A particular user identifier can be associated with multiple client devices corresponding to a unique user account. For example, a particular user account may be associated with a laptop computer, a tablet computer, one or more mobile phones, a wearable device, and the like. The hash function enables all client devices associated with a particular user account to maintain a similar user experience by authorizing or not authorizing all client devices associated with a particular user account to install an update to a particular version of an application. If the hash function was based on a client device identifier instead of the user identifier, then the result could be that a first client device associated with a user account is authorized to install the update, while a second client device associated with the same user account is not authorized to install the update. This can lead to a user experience divergence for the application between the first and second client devices associated with the same user account.
It will also be appreciated that the sum of the version identifier and the user identifier prevents a particular client device from always being associated with the same hash value. In other words, for a given user identifier, the hash value generated by the hash function will change based on the version identifiers for different updates for an application. Therefore, even if the client device is authorized to install a first update for an application early in a rollout of the first update, the client device may not be authorized to install a second update for the application until later in the rollout for the second update because the hash value changes based on the version identifiers corresponding to the first update and the second update. Consequently, including the version identifier when calculating the sum for the input value of the hash function can prevent client devices associated with a given user account from always being authorized to install updates early in a rollout based on a fixed user identifier.
In various embodiments, the hash function is based on the user identifier corresponding to a user account associated with the client device, an application identifier corresponding to the application, and a version identifier corresponding to the update to the application. The application identifier can be added to cause a variety of hash values to be produced between different applications sharing the same version identifier installed on client devices associated with a particular user account. For example, even though a version identifier for a first application and a second application are the same (e.g., 23), the application identifier for the first application and the application identifier for the second application cause different hash values to be generated by the same hash function. Consequently, including the application identifier when calculating the sum for the input value of the hash function can prevent client devices associated with a given user account from always being authorized to install updates for different applications early in a rollout based on a common version identifier.
At step 502, a request from a client device is received, at a server, to identify whether an update for an application is available via a digital distribution platform. The request can be received from a client application, executing on the client device, which is configured to manage applications installed on the client device and update the applications when new versions of the applications are available via a digital distribution platform.
At step 504, the server determines whether the client device is authorized to install the update. In some embodiments, the server is configured to sort the client device into a first subset of client devices or a second subset of client devices. The sorting is performed based on, at least in part, a user identifier and a version identifier. The user identifier corresponds to a user account associated with the client device, and the version identifier corresponds to the update for the application.
At step 506, the server transmits a response to the client device. In some embodiments, the response includes the version identifier corresponding to the update when the client device is authorized to install the update. Alternatively, if the client device is not authorized to install the update, the response includes a second version identifier corresponding to a previous version of the application. In various embodiments, the response can omit the version identifier and include a URL associated with a particular version of the application that can be installed on the client device, or the response includes a package of resources for a particular version of the application that can be installed on the client device. In some embodiments, the response is transmitted to the client device only when the client device is authorized to install the update; otherwise, the server refrains from transmitting a response to the client device. The client device can implement a timeout period that, once expired without receiving a response from the server, indicates that the client device is not authorized to install the update.
At step 602, a server determines an input value for a hash function. In some embodiments, the input value is calculated by summing a user identifier and a version identifier. The user identifier and the version identifier can be converted, if necessary, to a common format compatible with an addition operation performed within the server. In various embodiments, the input value is calculated by summing a user identifier, an application identifier, and a version identifier.
At step 604, the server generates a hash value based on the input value. In some embodiments, the hash function applies a modulo operation to the input value to generate the hash value. For example, the hash function can use a modulus of 100 to return hash values, based on applying a modulo operation using modulus 100 to any unsigned integer input value, between 0 and 99. In various embodiments, the hash value can be restricted to a range of [0, n) or (0, n]. For example, the hash function can return integers in the range of [0, 100), the range of [0, 1000), or any other range of values that can be compared to a threshold value.
At step 606, the server compares the hash value to a threshold value to sort the client device into either the first subset of devices authorized to install the update or the second subset of device not authorized to install the update. The threshold value is selected by a function based on one or more variables. In some embodiments, the threshold value is selected by a function based on an elapsed time calculated by subtracting a release date associated with the update from a current date.
As shown in
In some embodiments, the processor 702 can be embodied in a variety of forms. For example, the processor 702 can be embodied as various processing hardware-based means such as a microprocessor, a coprocessor, a controller or various other computing or processing devices including integrated circuits such as, for example, an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), some combination thereof, or the like. Although illustrated as a single processor, it will be appreciated that the processor 702 can include two or more processors. The processors can be in operative communication with each other and can be collectively configured to perform one or more functionalities of the computing device 700 as described herein. In some embodiments, the processor 702 can be configured to execute instructions that can be stored in the RAM 720 or that can be otherwise accessible to the processor 702.
The computing device 700 also include a storage device 740, which can comprise a single disk or a plurality of disks (e.g., hard drives), and includes a storage management module that manages one or more partitions within the storage device 740. In some embodiments, storage device 740 can include flash memory, semiconductor (solid state) memory or the like. The computing device 700 can also include a Random-Access Memory (RAM) 720 and a Read-Only Memory (ROM) 722. The ROM 722 can store programs, utilities or processes to be executed in a non-volatile manner. The RAM 720 can provide volatile data storage, and stores instructions related to the operation of the computing device 700.
The various aspects, embodiments, implementations or features of the described embodiments can be used separately or in any combination. Various aspects of the described embodiments can be implemented by software, hardware or a combination of hardware and software. The described embodiments can also be embodied as computer readable code on a non-transitory computer readable medium. The non-transitory computer readable medium is any data storage device that can store data which can thereafter be read by a computer system. Examples of the non-transitory computer readable medium include read-only memory, random-access memory, CD-ROMs, HDDs, DVDs, magnetic tape, and optical data storage devices. The non-transitory computer readable medium can also be distributed over network-coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.
The foregoing description, for purposes of explanation, used specific nomenclature to provide a thorough understanding of the described embodiments. However, it will be apparent to one skilled in the art that the specific details are not required in order to practice the described embodiments. Thus, the foregoing descriptions of specific embodiments are presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the described embodiments to the precise forms disclosed. It will be apparent to one of ordinary skill in the art that many modifications and variations are possible in view of the above teachings.
The present application claims the benefit of U.S. Provisional Application No. 62/609,250, entitled “CONTROLLED ROLLOUT OF UPDATES FOR APPLICATIONS INSTALLED ON CLIENT DEVICES,” filed Dec. 21, 2017, the content of which is incorporated herein by reference in its entirety for all purposes.
Number | Date | Country | |
---|---|---|---|
62609250 | Dec 2017 | US |