Язык программирования Go в жизни системного администратора Даниил Подольский, руководитель технической службы Git in Sky
Язык программирования Goв жизни
системного администратораДаниил Подольский,
руководитель технической службыGit in Sky
Немного о себе и о нас Компания Git in Sky● управление чужой инфраструктурой● иногда - большой инфраструктурой● работа со сложными клиентами и задачами -
например, 50 настроенных вручную Gentoo, не обновлявшихся пару лет
Наши задачи:● быстро взять под контроль 10-50 машин● оформить пожелания заказчика в виде инструкций
для конфигурационных роботов● Решить для заказчика нестандартные проблемы -
например, собрать преконфигуренный дистрибутив с инсталлятором
Средства, которыми мы пользуемся:
● Ansible● Docker● KVM на linux● KVM на SmartOS● ну и всякое самописное
Языки, которыми мы пользовались:
C * Lua * ObjectiveCC++ * Java * JavaScriptPerl * Groovy * Asm 8086 *Python ScalaPHP Bash *
Как мы выбирали GoМы попробовали несколько новых языков:● erlang● Котлин● Nim● До Rust дело не дошлоМы пробовали их параллельно, силами нескольких инженеров
Как мы выбрали GoМы просто получили на Go работающий проект быстрее, чем на других языках.Уже потом выяснилось что:● достаточно полный toolset● работающая cross-компиляция● хороший runtime● прекрасная стандартная библиотека
Оновная часть:особенности Go
и как мы их используемПримеров кода не будет!● Они плохо смотрятся на экране● Не весь упомянутый код опубликован● Доклад не про код, а про возможности
особенности Go:быстрая компиляция
● Как сделать что-нибудь заковыристое на удаленной машине?
● А если это Windows?● Или SmartOS?● Благодяря быстрой компиляции Go можно
использовать как скриптовый язык. Ну - почти можно.
особенности Go:Cross-компиляция
Как собрать с удаленной машины неизвестной конфигурации информацию?● Скомпилил● отправил● получил отчет● почитал● ...● профит
особенности Go:хороший шедулер для IO
удобная стандартная библиотека● простой потоковый преобразователь данных - svg
proxy, 68 строк● сервис сбора статистики с aerospike по telnet и
отправка ее в statsd, 334 строки● TCP proxy for Windows, 215 строк● StatsDaemon для OpenTSDB, 81 строка патча● nginx2statsd, UDP syslog collector, 180 строк
особенности Go:хорошие СУБД драйвера
● DjarvurFS как прокси к NoSQL кластеру● aerospike proxy для perl
особенности Go:компиляция в нативный коднизкие накладные расходы
● Stress-test пяти almost-the-same-functionality shared-nothing-cluster no sql субд
● Нагрузочное тестирование всего по сложным алгоритмам - замена yandex tank
особенности Go:реальная кросплатформенность● Система управления виртуальными
машинами - linux и solaris● агент сбора статистики● Pingpongo - ping-тестер с отправкой
статистики в statsd
особенности Go:просто удобный язык :)
● VNC-go-Web, websoсkify proxy с авторизацией на куках.
● RTBgit - замена RTBkit без переусложнения
полгода использования Go:что нам нравится
● Кроскомпиляция и кросплатформенность
● self-contained исполняемые файлы● приемлемая - мягко говоря - скорость
полгода использования Go:что еще нам нравится
● Полезные и производительные проекты в количестве
● плавная кривая вхождения,жесткий синтаксисA Tour of GoThe Go Playground
● квалифицированное сообщество
полгода использования Go:что нам НЕ нравится
● Exceptions - их нет● Polymorphism - его нет, но это не
очевидно● жесткий синтаксис
полгода использования Go:что мы будем делать на нем
● мелкие утилиты для админской работы● TCP, UDP, HTTP сервера и клиенты● Сайты● высоконагруженные сетевые проекты
полгода использования Go:что мы НЕ будем делать на нем
● Вычислительные задачи - шедулер по IO
● Embeded приложения - исполнимый файл великоват