К Интернету вещей (IoT) подключается все больше устройств, а значит объемы сетевого трафика растут. При развертывании устройств на периферии необходимо рассчитать, как часто и в каком объеме данные будут передаваться между устройством и облаком, где они анализируются. Если устройств будут тысячи, затраты на передачу данных будут ощутимыми. Кроме того, возрастающий объем передаваемых данных может снизить эффективность решения IoT, приводя к задержкам. Последствия проблем с пропускной способностью и задержками зависят от сценария использования, а также объема и частоты передачи. Поскольку решения для IoT очень разнообразны, время передачи данных может не иметь значения, а передаваемый объем может быть таким несущественным, что задержкой можно пренебречь. Даже в таких случаях организации должны подобрать для своих потребностей оптимальный механизм передачи данных, который будет одновременно продуктивным и экономически эффективным.  Данные не только имеют большую ценность для бизнеса, но и помогают поддерживать актуальность, безопасность и эффективность удаленных систем. Учитывая все эти факторы, программное обеспечение, передающее только разностные обновления, а не все приложение целиком, выглядит гораздо более привлекательным вариантом. Для этой цели можно использовать snap — универсальный формат упаковки приложений Linux. Snap-пакеты доступны более чем в 40 дистрибутивах Linux, при этом Linux — популярная операционная система для встроенных устройств, поэтому этот формат соответствует требованиям к развертыванию различного типа программного обеспечения в средах IoT.  В этой статье мы поговорим о том, как использовать разностные snap-пакеты, чтобы эффективно и автоматически передавать обновления по беспроводной связи (OTA) на IoT-устройства, расходуя меньше трафика.  Snap-пакеты на Ubuntu Core, Ubuntu Classic или других системах на базе Linux, предоставляют несколько преимуществ для подключенных и IoT-устройств. Главное из них — snap-пакеты можно обновлять безопасно, с помощью транзакций. Это упрощает автоматические обновления, потому что система snap прозрачно обрабатывает большинство сценариев сбоя, освобождая издателей от выполнения технических задач по обновлению и позволяя им сфокусироваться на выпуске актуальных версий программного обеспечения. С помощью snap-пакетов издатели могут выпускать новые версии программ и развертывать их на всех установленных устройствах всего за несколько часов без участия пользователей.  Здесь мы рассмотрим стандартные циклы обновления для нескольких распространенных и популярных snap-пакетов. На каждом графике вертикальная ось показывает процент устройств с конкретной версией соответствующего snap-пакета. На горизонтальной оси показаны даты за последние 3 месяца. Каждая версия отмечена своим цветом. Как видно на графиках, после выпуска snap-пакета устройства обновляются почти моментально. Через неделю не менее 90% устройств на периферии получают обновление.  На рисунке 1 показана частота выпусков и распространение обновлений для snap-пакета Core. Это особый пакет, который предоставляет минимальный набор библиотек, используемых большинством приложений, и установлен на всех устройствах на основе snap. Новые выпуски этого snap-пакета выходят раз в месяц, хотя в экстренном случае это происходит чаще. Здесь мы видим, что после выпуска новой версии около 90% устройств получили обновления в течение недели.  На рис. 2 показаны данные для популярного программного обеспечения Nextcloud для собственных облачных сервисов. Обновления выходят раз в месяц и их распространение почти аналогично графику выше — 90% устройств получают их в течение недели. На рисунке 3 показаны данные для программы Canonical LXD, которая позволяет создавать контейнеры Linux и управлять ими. LXD распространяется как snap-пакет. Стабильные версии выходят каждые 2-4 недели, и здесь также 90% клиентов обновляются в первую неделю после выпуска Для операторов и производителей оборудования это означает, что обновления системы безопасности или новые функции устанавливаются на весь парк устройств и для всех пользователей. Если объем обновлений составляет сотни мегабайт или больше, потребуется больше времени и нагрузки на сеть. Объем трафика особенно важен, если парк устройств Интернета вещей состоит из тысяч устройств или развертывается в средах с ограниченной пропускной способностью, например, данные передаются по сети сотовой связи. Чтобы сократить объем передаваемых данных при обновлении, система snap предоставляет разностные snap-пакеты. Что такое разностные snap-пакеты? Разностные snap-пакеты позволяют передавать только изменения между snap-пакетом, установленным на устройстве в данный момент (исходная версия) и snap-пакетом, который необходимо установить на устройстве (целевая версия)  Разностные snap-пакеты используются только в том случае, если на устройстве обновляется уже установленный пакет. К счастью, обычно изначальные snap-пакеты устанавливаются на подключенных устройствах на заводе, а затем просто обновляются.  Snap-пакеты загружаются из Snap Store, репозитория, который позволяет публиковать и обнаруживать программное обеспечение, упакованное в snap-формат. Когда издатель snap-пакета (в случае с устройствами, это обычно их производитель) выпускает новую версию (целевую) для snap-пакета, серверы Snap Store определяют, какая версия вероятнее всего установлена на устройствах, и автоматически создают разностные snap-пакеты между этими версиями. В результате на устройствах с соответствующей исходной версией применяется разностное обновление, и установленный на них snap-пакет в точности соответствует желаемой целевой версии, как если бы он был загружен целиком.  Такой подход можно использовать как для апгрейда, так и для отката. При этом рабочий процесс разработки не меняется — издатели snap-пакета не создают разностный пакет, это автоматически делает Snap Store. Кроме того, разностные snap-пакеты доступны независимо от того, как разработчики собирают и публикуют snap-пакеты — локально с помощью Snapcraft (инструмент командной строки для упаковки программного обеспечения в snap-пакеты и их публикации в Snap Store), с помощью сервиса build.snapcraft.io или других механизмов и инструментов, вроде electron-builder, или сервиса CI, например Travis. В любом случае клиенты получают подходящие разностные snap-пакеты. Алгоритм, который применяет разностные обновления на устройстве, приводит к небольшой задержке при обработке, но обычно все окупается благодаря экономии времени и трафика. Задержка при обработке почти не играет роли в типичных сценариях автоматических обновлений, когда даже на маломощных устройствах задержка при применении разностных файлов составляет несколько секунд. В таблице приводятся стандартные snap-пакеты разных размеров, соотношение размера разностного файла и полного, а также время, которое потребовалось для разностного обновления на IoT-устройствах и типичных ПК-системах  Имя snap-пакета Размер полного файла Размер разностного файла Соотношение размеров (полный файл = 100%) Время на применение разностного обновления, хранилище   Broadcom BCM2837 Quad Core ARM Cortex-A53 USB Время на применение разностного обновления, хранилище   Intel Core i7-4500U ЦП при 1,80 ГГц SSD alsa-utils 6.5MiB 62.8KiB 0.94% .45s 0.045s nextcloud 197MiB 112MiB 56.85% 24.0s 1.16s core 87.9MiB 27.55MiB 31.34% 10.75s 0.42s pc-kernel 154.77MiB 54.20MiB 35.01% 18.9s .788s Выигрыш от разностных обновлений зависит от множества факторов. Как правило, размер разностного файла составляет около 30% от полного. На графике показаны средние размеры полных и разностных пакетов, рассчитанные за однодневный период на протяжении 4,5 месяцев. Это иллюстрирует соотношение между полным и соответствующим разностным файлом.  Больше всего преимуществ технология разностных snap-пакетов дает при загрузке с клиентов, но ее можно использовать и для экономии времени и трафика при публикации пакета разработчиком. При упаковке нового программного обеспечения разработчики часто отправляют новые версии snap-пакетов в Snap Store. В этом сценарии инструмент упаковки Snapcraft создает разностный файл, содержащий только изменения по сравнению с текущей версией, и выгружает их в Snap Store. Затем Store применяет разностные изменения и проверяет содержимое с помощью цифровой подписи, в результате чего snap-пакет в точности соответствует полному файлу. Как и при загрузке на устройства, это происходит прозрачно, без изменений в рабочем процессе разработки. Технология IoT от Dell направлена на интеллектуальные шлюзы, которые надежно работают при очень высоких и низких температурах и обеспечивают стабильное соединение даже в самых сложных промышленных условиях.  Шлюзы Dell Edge Gateway 5000 и 3000 объединяют, защищают и передают данные с различных датчиков. Как правило, на шлюзе Dell Edge Gateway установлены настраиваемые пакеты gadget snap и kernel snap, а также несколько snap-пакетов, которые предоставляют дополнительный функционал, например расширенные сетевые соединения, поддержку Bluetooth и возможность подключения к сотовой сети.  Если устройство подключено к интернету и обновления загружаются по стандартному графику, расход трафика одного шлюза для обновления пакетов выглядит следующим образом (на одно устройство и на 10 000 устройств, пакеты доставляются на шлюзы серии 3000): Имя   snap-пакета Средн.   число обновл. в мес. Средн.   размер полного пакета (МБ) Средн.   размер разн. пакета (МБ) Трафик   на 10 000 устр./мес, без разностных, ГБ Трафик   на 10 000 устр./мес, с разностными, ГБ alsa-utils   * 0.05 6.47 0.24 3.31 0.12 bluez 0.21 3.56 1.28 7.29 2.61 caracalla 0.37 1.02 0.02 3.64 0.08 caracalla-kernel 1.26 129.23 57.23 1,585.79 702.30 core 1.78 82.01 29.31 1,425.65 509.45 locationd 0.16 20.52 6.09 31.47 9.35 modemmanager 0.42 7.91 1.28 32.36 5.23 networkmanager 0.26 7.80 2.05 19.94 5.25 tpm2 0.10 2.08 1.04 2.13 1.06 udisks2 0.16 3.19 1.27 4.89 1.95 uefi-fw-tools 0.21 19.14 3.95 например расширенные сетевые соединения, поддержку   Bluetooth и возможность подключения к сотовой сети.   39.14 8.07 wifi-ap 0.26 28.91 10.67 73.91 27.27 wpa-supplicant 0.16 3.14 2.97 4.82 4.55       Итого 3,234.36 1,277.30       Экономия в % 60.51%   Использование разностных snap-пакетов позволяет сократить расход трафика на 60,51% для устройств серии 3000, как указано выше. Fingbox — это устройство мониторинга сети, которое позволяет управлять сетью через приложение на мобильном телефоне. Fingbox работает на Ubuntu Core и использует snap-пакеты для предустановки ПО. Пользователь или производитель могут расширить возможности устройства, устанавливая дополнительное ПО с помощью обновлений OTA  Поскольку устройство Fingbox обычно находится в домашней или корпоративной сети, важно поддерживать его актуальность для обеспечения безопасности, при этом не перегружая сеть  На устройстве Fingbox установлены snap-пакеты, приведенные в следующей таблице. Цифры приводятся в мегабайтах для одного устройства Fingbox. Имя   snap-пакета Средн.   число обновл. в мес. Средн.   размер полного пакета (МБ) Средн.   размер разн. пакета (МБ) Трафик   в мес, без разностных, ГБ Трафик   в мес, с разностными, ГБ carl 0.18 1.12 0.00 0.198 0.0004 core 1.83 69.34 20.55 126.630 37.526 dnsfwd 1.71 0.12 0.01 0.201 0.024 domotz-kevin 1.40 10.23 0.70 14.352 0.988 domotzplatform 0.75 47.89 7.42 35.979 5.576 domotzplatform-kernel 0.05 54.64 54.64 0.000 0.000 fingbox-agent 3.48 4.87 2.05 16.921 7.127       Итого 194.281 51.241       Экономия в % 73.63%   Примечания. Domotz-platform-kernel выпускается только в одной версии, поэтому обновления не загружаются и трафик не расходуется. При использовании разностных snap-пакетов расход трафика для обновления устройства Fingbox в стандартной домашней сети можно сократить на 73,63%. На устройствах Fingbox текущего поколения не включены разностные обновления, но Fingbox следующего поколения будут оснащены этой функцией, и существующие устройства можно включить прозрачно с помощью обновлений OTA. «Периферийные вычисления как услуга» (EaaS) в рамках Rigado Cascade включают оборудование (шлюз Cascade 500 IoT Gateway) и платформу (Edge Connect, Edge Direct и Edge Protect), которые вместе предоставляют безопасные периферийные вычисления, платформу для контейнеризированных приложений и различные варианты подключения к беспроводной сети — по простой месячной подписке. С помощью Cascade разработчики IoT могут быстрее приступить к работе над уникальными приложениями, не тратя время на создание и поддержку своей периферийной инфраструктуры. Используя инструменты платформы Edge, разработчики IoT могут публиковать программное обеспечение (в snap-пакетах) на устройствах, оснащенных технологией IoT от Rigado. Разработчики просто выгружают snap-пакет на платформу Edge, откуда он автоматически распространяется на все нужные устройства. На стандартном устройстве Rigado Cascade установлено несколько snap-пакетов с базовой ОС и функционалом, а также программным обеспечением для подключения к платформе Edge для обновлений, отчетности и безопасности. На устройстве Cascade можно установить дополнительные snap-пакеты от производителя. В следующей таблице приводится ежемесячный расход трафика для устройств Cascade с учетом стандартного цикла обновлений для базовых snap-пакетов Rigado и гипотетических специальных snap-пакетов с указанными характеристиками. Поскольку платформу Rigado можно использовать для устройств различных категорий, организация может развернуть большой парк устройств на базе Cascade. На следующей странице приводится экономия трафика для парка из 10 000 устройств: Имя   snap-пакета Средн.   число обновл. в мес. Средн.   размер полного пакета (МБ) Средн.   размер разн. пакета (МБ) Трафик   на 10 000 устр./мес, без разностных, ГБ Трафик   на 10 000 устр./мес, с разностными, ГБ bluez 0.21 3.36 1.40 6.87 2.85 cascade 1.60 0.52 0.22 8.14 3.36 Cascade-configuration 0.89 0.08 0.03 0.68 0.63 cascade-kernel 1.74 35.55 17.34 605.49 295.28 core 1.83 69.33 20.55 1,240.68 367.74 modem-manager 0.42 5.77 1.23 23.61 5.05 network-manager 0.26 5.90 1.89 15.07 4.83 pivot-agent 0.43 2.45 2.45 10.32 10.32 rigado-deviceops 4.33 3.25 2.10 137.58 88.78 rigado-edgeconnect 1.48 3.58 2.13 51.88 30.80 rigado-fwloader 0.11 0.004 0.00 0.000 0.000 rigado-network-config 1.14 8.45 4.23 94.09 47.13 wifi-ap 0.26 25.86 9.48 66.12 24.25 fictional-snap 1.12 175.48 51.56 1,921.05 564.46       Итого 4,181.58 1,445.47       Экономия в % 65.43%   При использовании разностных snap-пакетов расход трафика сокращается на 65,43%.  Примечания. Гипотетический snap-пакет основан на размере и производительности разностных файлов Nextcloud — популярного решения для облачного хранения личных файлов; частота обновлений соответствуют среднему значению других snap-пакетов на устройстве Cascade. Rigado-fw-loader выпускается только в одной версии, поэтому обновления не загружаются и трафик не расходуется. Pivot-agent — это пример snap-пакетов, разностные версии которых не обеспечивают экономию по сравнению с полными файлами (и даже наоборот). В этом случае Snap Store устанавливает полный пакет, поэтому в столбце расхода трафика с разностными файлами и без указано одинаковое значение. Разностные snap-пакеты предоставляют экономию трафика не только для IoT-устройств. Их можно использовать с этой целью в любой системе Linux. Например, в Ubuntu 18.10 предустановлено несколько snap-пакетов, и пользователь может выбирать из большого числа классических приложений, которые можно легко устанавливать и автоматически обновлять.  Вскоре после запуска Ubuntu 18.10 система попытается обновить свои предустановленные snap-пакеты. Размер полной версии обновлений составляет 293 МБ. С разностными пакетами нужно загрузить всего 69,5 МБ, чтобы получить последнюю версию.  Умножьте этот объем на огромное количество настольных ПК на Ubuntu в организации, чтобы понять какой ощутимой будет экономия. Иногда пропускная способность подключения ограничена, поэтому разностные snap-пакеты значительно упростят работу с Ubuntu. Более того, в системах Ubuntu Desktop большие приложения часто устанавливаются в виде snaps-пакетов. В следующей таблице приводится список некоторых snap-пакетов и пакетов, поставляемых с системой. Имя   snap-пакета Средн.   число обновл. в мес. Средн.   размер полного пакета (МБ) Средн.   размер разн. пакета (МБ) Трафик   в мес, без разностных, ГБ         Трафик   в мес, с разностными, ГБ             0ad 0.58 897.46 185.32 0.510 0.105 brave 2.11 179.81 93.01 0.370 0.191 bw   (bitwarden) 1.01 14.75 4.73 0.015 0.005 core * 1.81 82.08 31.28 0.145 0.055 darktable 0.37 92.96 32.38 0.034 0.012 firefox 2.89 182.48 85.09 0.516 0.240 gimp 1.21 155.18 32.32 0.183 0.038 gitkraken 2.91 161.75 35.08 0.460 0.100 gnome-3-26-1604* 1.32 133.33 25.19 0.172 0.033 gnome-calculator* 1.57 2.61 1.06 0.004 0.002 gnome-characters* 1.72 15.92 0.94 0.027 0.002 gnome-logs* 1.50 18.18 4.95 0.027 0.007 Ggnome-system- monitor* 1.66 5.52 0.92 0.009 0.001 gtk-common-themes* 1.60 36.24 7.18 0.057 0.011 jgalaxian 0.57 87.93 21.19 0.049 0.012 notepad-plus-plus 2.95 34.70 1.98 0.100 0.006 ruby 4.29 32.24 14.56 0.135 0.061 sftpclient 8.85 207.05 64.90 1.789 0.561 skype 5.81 139.70 42.26 0.793 0.240 slack 0.54 129.42 56.22 0.068 0.030 taskbook 0.68 23.81 12.36 0.016 0.008 tmnationsforever 0.97 125.68 8.31 0.119 0.008 vscode 0.57 200.06 6.18 0.111 0.003 vlc 1.92 110.50 27.95 0.207 0.052 wifi-ap 0.26 25.86 9.48 66.12 24.25 fictional-snap 1.12 175.48 51.56 1,921.05 564.46       Итого 5.394 1.682       Экономия в % 68.82%   Дополнительные snap-пакеты взяты из списка Snap Store, актуального на момент написания статьи. Snap-пакеты, предустановленные на Ubuntu 18.10, помечены звездочкой. В таблице указаны данные для одной системы. Система, на которой установлены все эти snap-пакеты с указанной частотой обновления, будет потреблять на 68,82% меньше трафика с разностными обновлениями. Мы обсудили использование разностных snap-пакетов в IoT и на ПК. В облачных развертываниях операционные системы с поддержкой snap-пакетов, например Ubuntu, обычно имеют гораздо большую пропускную способность, поэтому попытки сэкономить в этой сфере не так актуальны. Публичные облака, например Amazon Web Services, предоставляют облачный локальный кэш snap-пакетов, поэтому обновления передаются прямо в облачную среду, а в частном облаке можно установить Canonical Enterprise Proxy, чтобы использовать те же преимущества локального кэширования. Однако технология разностных snap-пакетов прозрачна, и даже в средах, где она не так важна, она может работать автоматически. Как показывают реальные примеры от Dell, Fing и Rigado, использование разностных snap-пакетов позволяет значительно сэкономить трафик при развертывании на тысячах IoT-устройств. Если таких устройств миллионы, экономия становится еще более заметной. Выбрав операционную систему, совместимую со snap-пакетами, например Ubuntu Core, производители устройств смогут предложить значительные преимущества в плане обслуживания, обновлений и затрат, связанных с парком устройств. Независимо от инфраструктуры в других областях, сокращение объема данных, передаваемых на периферийные устройства для развертывания программного обеспечения, дает долгосрочные преимущества в плане скорости и общей стоимости владения. Присоединяйтесь к Telegram каналу UBUNTU Community, чтобы быть в курсе последних новостей!