![Page 1: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/1.jpg)
DevOps-40
Применение языкаGo в инфраструктурных
проектах10.11.2013, DevOps meetup, СПб
![Page 2: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/2.jpg)
DevOps-40
Я:● Никогда не писал на Go● Никогда не писал на Ruby● Писал на PHP● Немного писал на VBA● Сегодня побуду Капитаном
![Page 3: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/3.jpg)
DevOps-40
Вы:● Когда-нибудь писали на Go?● А на Ruby?● А на PHP?● А на VBA?
![Page 4: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/4.jpg)
DevOps-40
Что мы знаем про Go?● Императивный● Компилируемый (быстро)● Статически типизированный● Сильно типизированный● Есть вывод типов● Нет tail call optimization
![Page 5: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/5.jpg)
DevOps-40
Что мы знаем про Go?● Создан в Google● Появился в 2009, Версия 1 - 2012● mascot – сурок WTF? суслик● Google слишком занят Plus, поэтому не пушит Go ;)
![Page 6: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/6.jpg)
DevOps-40
Пример кодаpackage main
import ( "fmt" "strconv")
func main() { fmt.Println(strconv.Itoa(1) + "test")}
![Page 7: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/7.jpg)
DevOps-40
Чего мы не знаем про Go?● Зачем он нужен?● Похоже, Google тоже не знал ответ на этот вопрос
● Правильный подход – задизайнить язык и подождать
![Page 8: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/8.jpg)
DevOps-40
Что еще знаем про Go?● Конкурентность à la Erlang :)● Shared memory :(● Non per-thread GC :(● Статическая линковка :)● “Смешная” обработка ошибок● На Hacker News любят Go
![Page 9: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/9.jpg)
DevOps-40
Проекты на Go● Docker● Packer, Serf● Juju● Vegeta● Camlistore● Groupcache
● InfluxDB● btcd● etcd● gor● Heka● Zeus
![Page 10: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/10.jpg)
DevOps-40
Docker● Управление контейнерами LXC● Система упаковки и распространения приложений
● Очень успешен и заметен – создатели переименовали компанию из dotCloud в Docker
![Page 11: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/11.jpg)
DevOps-40
Packer● Система создания образов виртуальных машин под разные гипервизоры
● Выглядит гораздо круче, чем звучит
![Page 12: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/12.jpg)
DevOps-40
Цикл деплоймента● Прогнали автоматические тесты● Запустили Capistrano:● Разложили код● Скомпилировали эссеты● Прогнали миграции БД● Если все умерло – откат назад
![Page 13: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/13.jpg)
DevOps-40
Новый цикл деплоймента● Packer собрал образ VM с приложением
● Прогнали автоматические тесты● Образ на продакшн● Прогнали миграции БД● Если все умерло – старый образ
![Page 14: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/14.jpg)
DevOps-40
Serf● Образ, созданный Packer, ничего не знает о конфигурации системы
● Конфигурация системы определяется после запуска динамически при помощи Serf
![Page 15: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/15.jpg)
DevOps-40
Serf● Распределенная имплементация gossip-протокола
● Выбор AP из C,A,P● При изменении состояния узла на всех узлах срабатывает хук в агенте
![Page 16: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/16.jpg)
DevOps-40
Juju● Это такой Packer/Serf от Canonical● Хотя, нет, это такой TurnKey Linux от Canonical
● Но деплоймент через образы VM интереснее, чем просто эпплаенсы
● Был переписан с Python на Go
![Page 17: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/17.jpg)
DevOps-40
Vegeta● Это такой Tsung на Go● Load testing tool● В отличие от Tsung● Не позволяет записать сценарий● Не умеет работать с basic auth, cookies и POST
![Page 18: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/18.jpg)
DevOps-40
Camlistore● Это такой Dropbox на Go?● Или это такой Crashplan на Go?● Или это такой Swift на Go?● Персональная распределенная система хранения контента
● http://camlistore.org/docs/overview
![Page 19: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/19.jpg)
DevOps-40
Groupcache● Это такой memcached на Go● В отличие от memcached● Умный процесс загрузки значений из кэша – если был miss, следующие спросившие ждут на кэше, а не лезут в базу
![Page 20: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/20.jpg)
DevOps-40
InfluxDB● Это такой OpenTSDB на Go● В отличие от OpenTSDB● Не тащит за собой H-stack и Java● Time-series database – все то, что мы обычно храним в Graphite, RRDs, Zabbix
![Page 21: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/21.jpg)
DevOps-40
btcd● Это такой Bitcoin daemon● У кого-нибудь есть биткойны?● Нет? А если найду?
![Page 22: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/22.jpg)
DevOps-40
etcd● Это такой Zookeeper на Go● Выбор CP из C,A,P● Key-value storage с RESTful интерфейсом (хранение конфигов)
● Команда watch – подписка● CAS (TestAndSet)
![Page 23: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/23.jpg)
DevOps-40
gor● Это такой emproxy на Go● Проигрывает продакшн запросы на тестовых машинах
● В отличие от emproxy● Не proxy, слушает raw socket – продакшн окружение не меняется
![Page 24: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/24.jpg)
DevOps-40
Heka● Это такой logstash на Go● А еще это такой StatsD на Go● Коллектор, агрегатор и роутер данных, полученных из разных источников
● Поддерживает счетчики
![Page 25: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/25.jpg)
DevOps-40
Архитектура Heka
![Page 26: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/26.jpg)
DevOps-40
Zeus● Это такой JRebel для рубистов● “Zeus preloads your Rails app so that your normal development tasks such as console, server, generate, and specs/tests take less than one second”
● ^ Doesn't make any sense to me
![Page 27: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/27.jpg)
DevOps-40
А какие были варианты?● PHP? Ешьте сами!● C? #define true false● C++? Александреску сделал D!● VBA? OMG!● Ruby? Ага, и Twitter Bootstrap!● Server-side JS? It is web scale!
![Page 28: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/28.jpg)
DevOps-40
Выводы● Счастье есть!● Но в какой-то другой Галактике● Пишите инфраструктурные проекты на Go!
● А на VBA не пишите!
![Page 29: Применение языка Go в инфраструктурных проектах](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557f5efcd8b42a822f8b5111/html5/thumbnails/29.jpg)
DevOps-40
Спасибо за внимание!● Вопросы?● DevOps-40: Drink responsibly!