Я работаю в компании, у которой есть медленная большая глобальная сеть, охватывающая множество разных мест на всех континентах.
Релизы конкретного внутреннего приложения состоят из DLL и файлов данных, которые в совокупности могут превышать 100 МБ, и говорят о росте приложения. На каждом настольном компьютере есть программа запуска, которая проверяет наличие новой версии, загружает новые файлы и запускает новейшее приложение.
В идеале было бы неплохо скопировать новую версию приложения на один «главный» сервер. Затем он будет эффективно и надежно распространяться на локальные серверы по всему миру. Затем программа запуска на рабочем столе загрузит приложение с подходящего локального сервера. В идеале это было бы хорошо устойчиво к выходу из строя частей глобальной сети, к выходу из строя локальных серверов или прерыванию передачи данных с сервера на сервер или с сервера на клиент на полпути.
В настоящее время лаунчер загружает приложение с одного сервера и не различает, где находится клиент. Это медленно и может нарушить работу глобальной сети частыми релизами.
Я видел точно такое же (плохое) решение у предыдущего работодателя. Должно быть лучшее решение!
Являются ли существующие простые надежные решения для этого, в идеале то, что работает для настольных клиентов, работающих под управлением Windows XP или Windows 7?
Похоже, что у Microsoft есть отличная технология в своем BranchCache (http://www.microsoft.com/en-us/server-cloud/windows-server/branchcache.aspx), особенно в распределенном кэше. Но большинство наших клиентов (к сожалению) Windows XP.
Если все ваши клиенты являются членами домена, вам следует использовать достаточно сложное решение для распространения программного обеспечения, такое как System Center Configuration Manager что позволяет использовать кэширующую инфраструктуру и дифференциальные обновления.
В качестве решения для бедняков вы должны иметь возможность использовать Dfs в сочетании с репликацией, чтобы получить копии установщика в близлежащие места. Осведомленность о сайте встроена в Dfs, поэтому клиенты сначала будут пытаться получить доступ к серверу на своем собственном сайте и переключаться на случайный сервер или сервер, который вы можете указать, если локальный сервер недоступен.
Вы также можете попытаться подойти к этой проблеме с точки зрения разработчика. Методы для эффективного развертывания самообновляющихся приложений действительно существуют, см. ClickOnce/блок приложения обновления - в идеале вам нужно будет найти что-то, что вписывается в ваш текущий код установщика. Введение в это уравнение локального HTTP-прокси должно дать вам желаемый эффект.
Еще один интересный вариант без серьезных изменений в инфраструктуре - использование одноранговых протоколов для развертывания программного обеспечения. В этом случае все ваши клиенты, которые в настоящее время находятся в сети, действуют как локальные кеши сайта. Коммерческий продукт под названием DistriApps делает это, есть также Убийство который является открытым исходным кодом, но зависит от Python и был написан скорее для серверов Linux - хотя вы можете заставить его работать в своем сценарии.