Large scale deployments of desktop applications like Adobe Acrobat Reader and Google Chrome has always been a major challenge to tackle, especially when we need a controlled environment to provide selective upgrades and downgrades. At Capillary we deploy two major desktop applications on client Point Of Sale (POS) machines,  called InStore and StoreCenter. These applications form the front end of Capillary’s customer engagement products. The POS machines run on various operating systems like Windows XP, Windows 7, Windows 8, Linux and Mac.

Capillary has close to 10,000 store deployments of it’s desktop applications at present and it’s increasing on daily basis. With a lot of customers in the on-boarding pipeline, major/minor upgrades needs to be rolled out selectively to each of them. Therefore, there was a need for a deployment mechanism which could cater to the following requirements – Upgrade, Downgrade, Selective version management, cross platform support and most importantly hassle free on-boarding.

We analyzed some of the deployment mechanisms available in the industry to check if they fulfill our requirements. Commonly used ones are –

1) Microsoft’s ClickOnce deployment

  • Advantage – Hassle free download, one click upgrades, non-admin installation.
  • Disadvantages – No downgrade support, Cannot control versions for different installations, System’s proxy settings need to be present, No cross platform support, only per-user installation.

2) Installshield

  • Advantage – Workflow can be designed
  • Disadvantage – Difficult to patch, no cross platform support.

Other installers that we looked into were – Wix, Omaha, install4j, InstallAnywhere.

After study of various deployment mechanisms we concluded that none could cater to our specific needs, for instance Microsoft ClickOnce does not support application level proxy settings and also does not support downgrades. Installshield and Wix could not be used as it does not have cross platform support. So we had to develop our own Capillary Deployment Manager (CDM).

CDM provides a cross platform executable skin which can be used to install multiple applications on the POS in admin or non-admin mode. It provides a workflow with inbuilt localization support and also Offline, Online and Hybrid (download setup’s which are not present locally) modes of installation. An updater service bundled with application at the time of installation takes care of upgrades and downgrades. CDM can also work with proxy internet connection. Hassle free downloads and selective version management are key highlights of CDM.

Let’s dive deep into how CDM works. CDM can be used to deploy multiple applications on POS. It has two major components –

  • Client Installer : Used to install application on the POS.
  • Deployment Server : Provides HTTP API’s for file version management and downloads.

During installation, CDM also installs an updater service which polls the deployment server to check for updates of the applications registered with it. The polling frequency is configurable. The deployment server in turn checks if an update is available for the requesting POS. If a new version is available, then a list of files changed is compiled and sent to the updater service in order to minimize the download. The service then downloads the files (performing retrials if required) and informs the application once the download of all files is complete. The application can then perform an upgrade locally in offline mode. The upgrade is performed atomically after taking backup of previous version and performing rollback in case of an error. This ensures the application can be used even if the upgrade fails as there can be no downtime at the desktop applications which are the primary source of data collection.

Architecture Diagram

Capillary Deployment Manager Architecture

 

Now that we have discussed the architectural overview, let’s get into the details of each component.

The Client Installer has two components –

1)      Installer Skin

This is one time skin required at the time of first installation. It is a wizard that guides the user during installation and prompts according to the local availability of software components.

Salient features of the Installer Skin are –

  • Cross platform and Multi-Language support.
  • Authentication for first time installation.
  • Modes change automatically based on local availability of required software (ease of use).
  • Ease of application configuration via XML.
  • Advanced logging and diagnostics support.

2)      Updater Service

This Java based service is the heart of the deployment manager. All applications that require updates need to register themselves with this service and provide their update URL’s. The service periodically checks for updates at the registered URL for each application. If upgrade/ downgrade is available, it downloads the changed files and notifies the application post completion. A retrial logic ensure that if any file is not downloaded properly, then only that file is downloaded in the next attempt; thereby reducing the download size. The service also performs self-upgrades.

Salient features –

  • Multiple applications can be registered for updates.
  • Proxy settings can be configured at service level.
  • Patch support.
  • Automatic retrial on download failure.
  • Checksum validation post download.

The Deployment Server comprises of two components –

1)      API Server

The API Server provides REST API’s for serving the installation files and manages a scheduled service that computes the difference between the application versions based on file checksums. The files requested for download could be either be prerequisites (required during first time installation), complete installers (for first time installation or a full re-install) or modified files (for upgrades). The API’s also provide a way to upload logs in case of failures.

2)      InTouch Cloud Application

This is the UI interface to manage the version of applications running at various POS. The deployment team at Capillary can easily select and map a set of POS terminals to the new (upgrade or a downgrade) version of the application. The application is automatically upgraded or downgraded to the new version when the updater service polls the API Server and a version change is found.

The development of CDM has completed recently and we are conducting load tests to asses the performance of the whole system. We will be pushing CDM to our production environment very soon. Stay tuned for further updates!