Go в автобусе
-
Upload
artem-kovardin -
Category
Internet
-
view
1.475 -
download
0
Transcript of Go в автобусе
Почему Go?● Небольшой размер исполняемого файла (“Hello world” ~ 1.5 мб)● Простота кросс-компиляции (в т.ч. под ARM)● Статически скомпилированные зависимости● Малый размер потребляемой памяти● Наличие необходимых библиотек для работы с внешним
оборудованием: https://github.com/tarm/serial ● GC, встроенные примитивы для “многопоточного” программирорования,
самодостаточная стандартная библиотека
Размер исполняемого файла● Почему это важно?
○ Ограниченный объём носителя и ОЗУ○ Обновление на медленных соединениях○ Ограничения по трафику, либо очень дорого, либо очень медленно.
● Сжатие исполняемого файла с помощьюupx --best -o program-compressed program
Было 9.4Мб стало 3.4Мб, коэффициент сжатия примерно один и тот же для исполняемых файлов go любого размера.
http://upx.sourceforge.net/
Обновление ПО бортовых терминалов● Привычные сценарии не работают
○ Лишь часть автобусов в онлайне○ Могут отсутствовать выделенные IP адреса○ Проблемы со связью из-за которых приходится повторять процедуру обновления
● Выход - самообновление○ Простое скачивание сжатого исполняемого файла○ Обновление через bsdiff-патчи https://github.com/inconshreveable/go-update○ Откуда ваша программа узнает собственную версию?
■ go build -ldflags "-X main.my_version 1.0.5" program.go■ go run -ldflags "-X main.my_version 1.0.5" program.go
○ Работа с версиями: https://github.com/hashicorp/go-version
Обновление через bsdiff-патчи● Определяем собственную версию● Получив от сервера информацию об актуальной версии запрашиваем
соотв. патч: https://someserv.er/armv5/1.0.5/1.0.8.bsdiff (если необходимо)● Генерировать патчи можно как при сборке новой версии так и скриптом
на сервере, потому что в “полях” может быть огромный зоопарк версий и генерировать патчи для всех возможных пар версий может быть утомительно
● Размер патча между двумя исполняемыми файлами написанными на Go ~45-200Кб при относительно небольших изменениях (до нескольких десятков строк исходного кода). Время генерации патча ~10c (в моём случае)