Жердев Алексей Александрович – кандидат технических наук, доцент кафедры Электротехники и информационно-измерительных систем Национального исследовательского технологического университета «МИСиС».
Аннотация: Развивающееся программное обеспечение требует регулярного обновления. Используемые подходы должны быть надёжными, не продолжительными во времени и не приводить к сбоям в работе приложения. Архитектурно обновлять Desktop-приложения гораздо сложнее, чем, например, web-приложения или даже мобильные. В настоящей статье представлен способ обновления, который может быть полезен разработчикам Desktop-приложений, которые планируется автоматически обновлять по сети интернет.
Ключевые слова: Desktop-приложение, автоматическое обновление, реляционная СУБД.
Персональные компьютеры (ПК) в своём современном виде появились в начале 90-ых годов XX века. Им удалось стать нашими незаменимыми помощниками в офисе и дома на целых два десятилетия. Прикладное программное обеспечение ПК представляло собой Desktop-приложения – программы с исполняемым файлом, которые запускаются под управлением операционной системы.
Постепенно Desktop-программы стали вытесняться другими видами приложений, а персональные компьютеры – другими типами устройств. На смену пришли веб-приложения, мобильные технологии и портативные платформы. Данные тенденции вовсе не обозначают, что мы в скором времени можем «похоронить» Desktop. На примере развития смартфонов мы видим, что они год от года становятся всё больше и больше, а веб-приложения не могут решить весь спектр задач пользователей, поэтому у Desktop-приложений ещё долгое время сохранится своя ниша [1].
Неоспоримым преимуществом веб-приложения является более удобное обновление, т.к. для этого в большинстве случаев достаточно внести изменения только в серверную часть программы, и она «автоматически» обновится у всех пользователей. Desktop-приложения не должны существенно уступать по этому критерию, поэтому простые и надёжные способы обновления крайне важны.
Несмотря на то, что уже давно существует общий подход для обновления Desktop приложений (рис. 1) [2].
Рисунок 1. Базовый алгоритм обновления Desktop-приложения.
Каждое программное обеспечение обладает своими особенностями, а также может иметь в своём составе базу данных, что существенно усложняет задачу [3]. Далее будет предложена схема обновления, которая может быть полезна разработчикам Desktop-приложение с реляционными базами данных.
Для этих целей предлагается использовать модуль обновления – это, по сути, отдельное приложение помимо основного ПО, которое и производит скачивание и обновление. Также у него должна быть серверная часть, которая собирает пакеты обновлений.
В зависимости от архитектуры приложения можно выделить два подхода к обновлению:
Для Desktop-приложений более предпочтительным является вариант «обновлять модули». В первую очередь это обусловлено размером исполняемых файлов, библиотек и ресурсов, входящих в состав программы. Они могут достигать десятки, а иногда и сотни гигабайт.
Обновление осуществляется на основании специального скрипта update.script, который состоит из набора строк типа (рис. 2):
name:Имя объекта |type:Тип объекта |action:Действие над объектом ~
Например:
name:temp|type:dir|action:delete~name:mt6.exe|type:file|action:update~
Type может принимать значения:
Action может принимать значения:
Рисунок 2. Примеры операций обновления.
Обновления в зависимости от характера изменений разделили на мажорные и минорные. Мажорные – более серьёзные изменения, в рамках которых у версии изменяется первая цифра. Минорные, соответственно, менее серьёзные и приводят к изменению остальных цифр.
Мажорные пакеты обновлений содержат все файлы и папки. Минорные (последние 2 цифры версии) – только необходимые файлы. Таким образом, если у пользователя версия 1.2.5, и её нужно обновить до 2.3.0, то для обновления алгоритм выберет пакет мажорной версии 2.х.х и последовательно «накатит» на него имеющиеся минорные обновления.
Если задача будет в обновлении от 1.2.5 до 1.5.3, то для этого будут использоваться только скрипты минорных обновлений.
Алгоритм обновления работает следующим образом: перед склейкой билдов создается временная папка. В нее копируются без перезаписи все необходимые билды, начиная с актуального. Файлы update.script компонуются в один, начиная с самого раннего. При дублировании команд логика следующая:
Итоговая папка архивируется и отдается на скачивание. Название файла содержит в себе номера версий: с какого билда по какой идет обновление. Таким образом, при следующем аналогичном запросе будет отдаваться кешированный архив. Если целевая версия архива не соответствует актуальной, его можно удалить, освободив пространство. Билды с неактуальной мажорной версией можно также удалять/архивировать, т.к. обращаться к ним апдейтер уже никогда не будет.
В состав обновлений входят также специальные скрипты с SQL-запросами, которые содержат набор операций над структурой БД, позволяющие привести её к необходимой структуре. Таким образом, предложенная схема обновления состоит из:
Разработанная схема успешно опробована для обновления программного продукта Maintest-5a, представляющего собой автономный модуль для психологического тестирования, интегрированный с системой Maintest. В будущем система может быть усовершенствована путём адаптации к более высоким нагрузкам за счёт внедрения дополнительного кэширования контента.
Список литературы