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

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

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

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

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

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

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

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

1

Рисунок 1. Базовый алгоритм обновления Desktop-приложения.

Каждое программное обеспечение обладает своими особенностями, а также может иметь в своём составе базу данных, что существенно усложняет задачу [3]. Далее будет предложена схема обновления, которая может быть полезна разработчикам Desktop-приложение с реляционными базами данных.

 Для этих целей предлагается использовать модуль обновления – это, по сути, отдельное приложение помимо основного ПО, которое и производит скачивание и обновление. Также у него должна быть серверная часть, которая собирает пакеты обновлений.

В зависимости от архитектуры приложения можно выделить два подхода к обновлению:

  • Обновлять все.Так обновляются мобильные приложения. Есть папка build с приложением, и есть папка с пользовательскими данными. Делается бэкап, а далее, без особых размышлений, удаляется весь билд и «накатывается» новый. Это оправдано, когда размер билда не такой большой.
  • Обновлять модули.Иногда архитектура приложения (по большей степени файловая) позволяет выделить некие модули. Логика такого обновления будет более сложной, однако, каждый апдейт будет занимать гораздо меньше места.

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

Обновление осуществляется на основании специального скрипта update.script, который состоит из набора строк типа (рис. 2):

 name:Имя объекта |type:Тип объекта |action:Действие над объектом ~

Например:

name:temp|type:dir|action:delete~name:mt6.exe|type:file|action:update~

Type может принимать значения:

  • dir – директория;
  • file – файл.

Action может принимать значения:

  • delete – удалить;
  • create – создать;
  • update – обновить.

2

Рисунок 2. Примеры операций обновления.

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

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

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

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

  • update – остается только последняя команда;
  • create – остается только первая команда;
  • delete – остается только последняя команда.

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

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

  • Агента обновлений – приложения, которое входит в состав дистрибутива Desktop приложения и берёт на себя управление, когда нужно выполнить обновление. Обычно это определяется или по расписанию или необходимость обновления проверяется при запуске программы.
  • Сервера обновлений – удалённый веб-сервер, содержащий пакеты обновлений и отвечающий на запросы Desktop-приложения. Если версия клиента меньше, чем та, которая появилась на сервере, то Desktop-приложение скачивает и устанавливает обновление.
  • Пакеты обновлений – структурированный набор данных, содержащий скрипт обновления, 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.:ил.

Интересная статья? Поделись ей с другими: