Автоматическое обновление desktop-приложений с реляционной СУБД

Жердев Алексей Александрович – кандидат технических наук, доцент кафедры Электротехники и информационно-измерительных систем Национального исследовательского технологического университета «МИСиС».

Аннотация: Развивающееся программное обеспечение требует регулярного обновления. Используемые подходы должны быть надёжными, не продолжительными во времени и не приводить к сбоям в работе приложения. Архитектурно обновлять Desktop-приложения гораздо сложнее, чем, например, web-приложения или даже мобильные. В настоящей статье представлен способ обновления, который может быть полезен разработчикам Desktop-приложений, которые планируется автоматически обновлять по сети интернет.

Ключевые слова: Desktop-приложение, автоматическое обновление, реляционная СУБД.

Персональные компьютеры (ПК) в своём современном виде появились в начале 90-ых годов XX века. Им удалось стать нашими незаменимыми помощниками в офисе и дома на целых два десятилетия. Прикладное программное обеспечение ПК представляло собой Desktop-приложения – программы с исполняемым файлом, которые запускаются под управлением операционной системы.

Постепенно Desktop-программы стали вытесняться другими видами приложений, а персональные компьютеры – другими типами устройств. На смену пришли веб-приложения, мобильные технологии и портативные платформы. Данные тенденции вовсе не обозначают, что мы в скором времени можем «похоронить» Desktop. На примере развития смартфонов мы видим, что они год от года становятся всё больше и больше, а веб-приложения не могут решить весь спектр задач пользователей, поэтому у Desktop-приложений ещё долгое время сохранится своя ниша [1].

Неоспоримым преимуществом веб-приложения является более удобное обновление, т.к. для этого в большинстве случаев достаточно внести изменения только в серверную часть программы, и она «автоматически» обновится у всех пользователей. Desktop-приложения не должны существенно уступать по этому критерию, поэтому простые и надёжные способы обновления крайне важны.

Несмотря на то, что уже давно существует общий подход для обновления Desktop приложений (рис. 1) [2].

1

Рисунок 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. Примеры операций обновления.

Обновления в зависимости от характера изменений разделили на мажорные и минорные. Мажорные – более серьёзные изменения, в рамках которых у версии изменяется первая цифра. Минорные, соответственно, менее серьёзные и приводят к изменению остальных цифр.

Мажорные пакеты обновлений содержат все файлы и папки. Минорные (последние 2 цифры версии) – только необходимые файлы. Таким образом, если у пользователя версия 1.2.5, и её нужно обновить до 2.3.0, то для обновления алгоритм выберет пакет мажорной версии 2.х.х и последовательно «накатит» на него имеющиеся минорные обновления.

Если задача будет в обновлении от 1.2.5 до 1.5.3, то для этого будут использоваться только скрипты минорных обновлений.

Алгоритм обновления работает следующим образом: перед склейкой билдов создается временная папка. В нее копируются без перезаписи все необходимые билды, начиная с актуального. Файлы update.script компонуются в один, начиная с самого раннего. При дублировании команд логика следующая:

Итоговая папка архивируется и отдается на скачивание. Название файла содержит в себе номера версий: с какого билда по какой идет обновление. Таким образом, при следующем аналогичном запросе будет отдаваться кешированный архив. Если целевая версия архива не соответствует актуальной, его можно удалить, освободив пространство. Билды с неактуальной мажорной версией можно также удалять/архивировать, т.к. обращаться к ним апдейтер уже никогда не будет.

В состав обновлений входят также специальные скрипты с SQL-запросами, которые содержат набор операций над структурой БД, позволяющие привести её к необходимой структуре. Таким образом, предложенная схема обновления состоит из:

Разработанная схема успешно опробована для обновления программного продукта Maintest-5a, представляющего собой автономный модуль для психологического тестирования, интегрированный с системой Maintest. В будущем система может быть усовершенствована путём адаптации к более высоким нагрузкам за счёт внедрения дополнительного кэширования контента.

Список литературы

  1. Грищенко В. Не рано ли мы похоронили desktop? / Портал vc.ru (Бизнес, Технологии) [Электронный ресурс]. – Режим доступа: https://vc.ru/flood/39911-ne-rano-li-my-pohoronili-desktop (Дата обращения 28.04.2020).
  2. Автоматическое обновление программ на C# / Портал Хабрхабр [Электронный ресурс]. – Режим доступа: https://habr.com/ru/post/217633 (Дата обращения 03.05.2020).
  3. Чистая архитектура. Искусство разработки программного обеспечения / Роберт Мартин – СПб.: Питер, 2018. – 315 c.:ил.