0

I work in a company that has a slow large WAN covering many different locations on all continents.

Releases of a particular internal application consist of DLLs and data files that can cumulatively top 100 MB, and there is talk of the application growing. Each desktop machine has a launcher program which checks if there is a new version, downloads the new files, and runs the up-to-date application.

Ideally it would be nice to copy a new version of the application to the one “master” server. It would then efficiently and reliably propagate to local servers globally. The desktop launcher would then fetch the application from the suitable local server. Ideally this would be nicely robust to parts of the WAN coming down, to local servers being out of commission, or the server to server or server to client transfers being interrupted half way through.

Presently the launcher downloads the application from one server and does not differentiate where the client is located. This is slow and can crush the WAN with frequent releases.

I have seen exactly the same (bad) solution at a previous employer. There must be a better solution!

Are the existing simple reliable solutions to this, ideally something that works for desktop clients running either Windows XP and Windows 7?

Microsoft looks like it has some neat technology in their BranchCache (http://www.microsoft.com/en-us/server-cloud/windows-server/branchcache.aspx), especially in the Distributed Cache. But most of our clients are (unfortunately) Windows XP.

  • Well, you don't specify which protocol the app uses to check/download the updates, but if it were HTTP a well setup caching proxy could serve the purpose. – Fox Jan 25 '12 at 09:59
  • Presently it is raw sockets with our own custom stream through that. But would be easy to change to HTTP. – Robert J Schroeder Jan 26 '12 at 00:41
  • I should say that I have control over the application and I can probably install my own server. I will not be able to (in this lifetime) get approval to install infrastructure servers such as general purpose web proxy servers which might impact other users on the network – Robert J Schroeder Jan 26 '12 at 01:10

1 Answers1

0

If all your clients are members of a domain, you should employ a sufficiently sophisticated software distribution solution like the System Center Configuration Manager which allows for a caching infrastructure and differential updates.

As a poor man's solution, you should be able to use Dfs in conjunction with replication to get the installer copies to nearby locations. Site awareness is built into Dfs, so clients would try to access the server within their own site first and failover to either a random server or a server which you can specify if the local server is not available.

You also could try to approach this problem from a developer perspective. Techniques for efficiently deploying self-updating applications do exist, see ClickOnce/the updater application block - ideally, you would need to find something that fits into your current installer code. Introducing a site-local HTTP proxy into this equation should give you the desired effect.

Another interesting option without big changes to the infrastructure would be using peer-to-peer protocols for software deployment. In this case, all your clients which are currently online are acting as site-local caches. A commercial product called DistriApps does this, there is also Murder which is open source, but has dependencies on Python and has rather been written for Linux servers - you might get it to work in your scenario though.

the-wabbit
  • 40,737
  • 13
  • 111
  • 174
  • I doubt the DFS or SCCM options will work for me. I can install a new special purpose server but not change the general infrastructure. ClickOnce and Updater both seem to require .NET applications, which is not this. – Robert J Schroeder Jan 26 '12 at 05:28
  • @RobertJSchroeder I cannot see how you want the app to "propagate to local servers" if you do not have any administrative control over the infrastructure. I've added some thoughts to my original answers though, you could be running without dependencies on local servers altogether. – the-wabbit Jan 26 '12 at 10:03
  • Thanks for the update. Mine is just a small app on the side, and I do not have the ability to change how desktops are configured or administred, nor do i have any control over the normal shared stuff of the firm. I guess the way to phrase it is that I can **add** servers, but not change other people's – Robert J Schroeder Jan 27 '12 at 00:35