Применение языка go в инфраструктурных проектах
DESCRIPTION
Доклад на первом ноябрьском DevOps-40 митапеTRANSCRIPT
DevOps-40
Применение языкаGo в инфраструктурных
проектах10.11.2013, DevOps meetup, СПб
DevOps-40
Я:● Никогда не писал на Go● Никогда не писал на Ruby● Писал на PHP● Немного писал на VBA● Сегодня побуду Капитаном
DevOps-40
Вы:● Когда-нибудь писали на Go?● А на Ruby?● А на PHP?● А на VBA?
DevOps-40
Что мы знаем про Go?● Императивный● Компилируемый (быстро)● Статически типизированный● Сильно типизированный● Есть вывод типов● Нет tail call optimization
DevOps-40
Что мы знаем про Go?● Создан в Google● Появился в 2009, Версия 1 - 2012● mascot – сурок WTF? суслик● Google слишком занят Plus, поэтому не пушит Go ;)
DevOps-40
Пример кодаpackage main
import ( "fmt" "strconv")
func main() { fmt.Println(strconv.Itoa(1) + "test")}
DevOps-40
Чего мы не знаем про Go?● Зачем он нужен?● Похоже, Google тоже не знал ответ на этот вопрос
● Правильный подход – задизайнить язык и подождать
DevOps-40
Что еще знаем про Go?● Конкурентность à la Erlang :)● Shared memory :(● Non per-thread GC :(● Статическая линковка :)● “Смешная” обработка ошибок● На Hacker News любят Go
DevOps-40
Проекты на Go● Docker● Packer, Serf● Juju● Vegeta● Camlistore● Groupcache
● InfluxDB● btcd● etcd● gor● Heka● Zeus
DevOps-40
Docker● Управление контейнерами LXC● Система упаковки и распространения приложений
● Очень успешен и заметен – создатели переименовали компанию из dotCloud в Docker
DevOps-40
Packer● Система создания образов виртуальных машин под разные гипервизоры
● Выглядит гораздо круче, чем звучит
DevOps-40
Цикл деплоймента● Прогнали автоматические тесты● Запустили Capistrano:● Разложили код● Скомпилировали эссеты● Прогнали миграции БД● Если все умерло – откат назад
DevOps-40
Новый цикл деплоймента● Packer собрал образ VM с приложением
● Прогнали автоматические тесты● Образ на продакшн● Прогнали миграции БД● Если все умерло – старый образ
DevOps-40
Serf● Образ, созданный Packer, ничего не знает о конфигурации системы
● Конфигурация системы определяется после запуска динамически при помощи Serf
DevOps-40
Serf● Распределенная имплементация gossip-протокола
● Выбор AP из C,A,P● При изменении состояния узла на всех узлах срабатывает хук в агенте
DevOps-40
Juju● Это такой Packer/Serf от Canonical● Хотя, нет, это такой TurnKey Linux от Canonical
● Но деплоймент через образы VM интереснее, чем просто эпплаенсы
● Был переписан с Python на Go
DevOps-40
Vegeta● Это такой Tsung на Go● Load testing tool● В отличие от Tsung● Не позволяет записать сценарий● Не умеет работать с basic auth, cookies и POST
DevOps-40
Camlistore● Это такой Dropbox на Go?● Или это такой Crashplan на Go?● Или это такой Swift на Go?● Персональная распределенная система хранения контента
● http://camlistore.org/docs/overview
DevOps-40
Groupcache● Это такой memcached на Go● В отличие от memcached● Умный процесс загрузки значений из кэша – если был miss, следующие спросившие ждут на кэше, а не лезут в базу
DevOps-40
InfluxDB● Это такой OpenTSDB на Go● В отличие от OpenTSDB● Не тащит за собой H-stack и Java● Time-series database – все то, что мы обычно храним в Graphite, RRDs, Zabbix
DevOps-40
btcd● Это такой Bitcoin daemon● У кого-нибудь есть биткойны?● Нет? А если найду?
DevOps-40
etcd● Это такой Zookeeper на Go● Выбор CP из C,A,P● Key-value storage с RESTful интерфейсом (хранение конфигов)
● Команда watch – подписка● CAS (TestAndSet)
DevOps-40
gor● Это такой emproxy на Go● Проигрывает продакшн запросы на тестовых машинах
● В отличие от emproxy● Не proxy, слушает raw socket – продакшн окружение не меняется
DevOps-40
Heka● Это такой logstash на Go● А еще это такой StatsD на Go● Коллектор, агрегатор и роутер данных, полученных из разных источников
● Поддерживает счетчики
DevOps-40
Архитектура Heka
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
DevOps-40
А какие были варианты?● PHP? Ешьте сами!● C? #define true false● C++? Александреску сделал D!● VBA? OMG!● Ruby? Ага, и Twitter Bootstrap!● Server-side JS? It is web scale!
DevOps-40
Выводы● Счастье есть!● Но в какой-то другой Галактике● Пишите инфраструктурные проекты на Go!
● А на VBA не пишите!
DevOps-40
Спасибо за внимание!● Вопросы?● DevOps-40: Drink responsibly!