Применение языка go в инфраструктурных проектах

29
DevOps-40 Применение языка Go в инфраструктурных проектах 10.11.2013, DevOps meetup, СПб

Upload: alex-chistyakov

Post on 16-Jun-2015

1.922 views

Category:

Technology


1 download

DESCRIPTION

Доклад на первом ноябрьском DevOps-40 митапе

TRANSCRIPT

Page 1: Применение языка Go в инфраструктурных проектах

DevOps-40

Применение языкаGo в инфраструктурных

проектах10.11.2013, DevOps meetup, СПб

Page 2: Применение языка Go в инфраструктурных проектах

DevOps-40

Я:● Никогда не писал на Go● Никогда не писал на Ruby● Писал на PHP● Немного писал на VBA● Сегодня побуду Капитаном

Page 3: Применение языка Go в инфраструктурных проектах

DevOps-40

Вы:● Когда-нибудь писали на Go?● А на Ruby?● А на PHP?● А на VBA?

Page 4: Применение языка Go в инфраструктурных проектах

DevOps-40

Что мы знаем про Go?● Императивный● Компилируемый (быстро)● Статически типизированный● Сильно типизированный● Есть вывод типов● Нет tail call optimization

Page 5: Применение языка Go в инфраструктурных проектах

DevOps-40

Что мы знаем про Go?● Создан в Google● Появился в 2009, Версия 1 - 2012● mascot – сурок WTF? суслик● Google слишком занят Plus, поэтому не пушит Go ;)

Page 6: Применение языка Go в инфраструктурных проектах

DevOps-40

Пример кодаpackage main

import ( "fmt" "strconv")

func main() { fmt.Println(strconv.Itoa(1) + "test")}

Page 7: Применение языка Go в инфраструктурных проектах

DevOps-40

Чего мы не знаем про Go?● Зачем он нужен?● Похоже, Google тоже не знал ответ на этот вопрос

● Правильный подход – задизайнить язык и подождать

Page 8: Применение языка Go в инфраструктурных проектах

DevOps-40

Что еще знаем про Go?● Конкурентность à la Erlang :)● Shared memory :(● Non per-thread GC :(● Статическая линковка :)● “Смешная” обработка ошибок● На Hacker News любят Go

Page 9: Применение языка Go в инфраструктурных проектах

DevOps-40

Проекты на Go● Docker● Packer, Serf● Juju● Vegeta● Camlistore● Groupcache

● InfluxDB● btcd● etcd● gor● Heka● Zeus

Page 10: Применение языка Go в инфраструктурных проектах

DevOps-40

Docker● Управление контейнерами LXC● Система упаковки и распространения приложений

● Очень успешен и заметен – создатели переименовали компанию из dotCloud в Docker

Page 11: Применение языка Go в инфраструктурных проектах

DevOps-40

Packer● Система создания образов виртуальных машин под разные гипервизоры

● Выглядит гораздо круче, чем звучит

Page 12: Применение языка Go в инфраструктурных проектах

DevOps-40

Цикл деплоймента● Прогнали автоматические тесты● Запустили Capistrano:● Разложили код● Скомпилировали эссеты● Прогнали миграции БД● Если все умерло – откат назад

Page 13: Применение языка Go в инфраструктурных проектах

DevOps-40

Новый цикл деплоймента● Packer собрал образ VM с приложением

● Прогнали автоматические тесты● Образ на продакшн● Прогнали миграции БД● Если все умерло – старый образ

Page 14: Применение языка Go в инфраструктурных проектах

DevOps-40

Serf● Образ, созданный Packer, ничего не знает о конфигурации системы

● Конфигурация системы определяется после запуска динамически при помощи Serf

Page 15: Применение языка Go в инфраструктурных проектах

DevOps-40

Serf● Распределенная имплементация gossip-протокола

● Выбор AP из C,A,P● При изменении состояния узла на всех узлах срабатывает хук в агенте

Page 16: Применение языка Go в инфраструктурных проектах

DevOps-40

Juju● Это такой Packer/Serf от Canonical● Хотя, нет, это такой TurnKey Linux от Canonical

● Но деплоймент через образы VM интереснее, чем просто эпплаенсы

● Был переписан с Python на Go

Page 17: Применение языка Go в инфраструктурных проектах

DevOps-40

Vegeta● Это такой Tsung на Go● Load testing tool● В отличие от Tsung● Не позволяет записать сценарий● Не умеет работать с basic auth, cookies и POST

Page 18: Применение языка Go в инфраструктурных проектах

DevOps-40

Camlistore● Это такой Dropbox на Go?● Или это такой Crashplan на Go?● Или это такой Swift на Go?● Персональная распределенная система хранения контента

● http://camlistore.org/docs/overview

Page 19: Применение языка Go в инфраструктурных проектах

DevOps-40

Groupcache● Это такой memcached на Go● В отличие от memcached● Умный процесс загрузки значений из кэша – если был miss, следующие спросившие ждут на кэше, а не лезут в базу

Page 20: Применение языка Go в инфраструктурных проектах

DevOps-40

InfluxDB● Это такой OpenTSDB на Go● В отличие от OpenTSDB● Не тащит за собой H-stack и Java● Time-series database – все то, что мы обычно храним в Graphite, RRDs, Zabbix

Page 21: Применение языка Go в инфраструктурных проектах

DevOps-40

btcd● Это такой Bitcoin daemon● У кого-нибудь есть биткойны?● Нет? А если найду?

Page 22: Применение языка Go в инфраструктурных проектах

DevOps-40

etcd● Это такой Zookeeper на Go● Выбор CP из C,A,P● Key-value storage с RESTful интерфейсом (хранение конфигов)

● Команда watch – подписка● CAS (TestAndSet)

Page 23: Применение языка Go в инфраструктурных проектах

DevOps-40

gor● Это такой emproxy на Go● Проигрывает продакшн запросы на тестовых машинах

● В отличие от emproxy● Не proxy, слушает raw socket – продакшн окружение не меняется

Page 24: Применение языка Go в инфраструктурных проектах

DevOps-40

Heka● Это такой logstash на Go● А еще это такой StatsD на Go● Коллектор, агрегатор и роутер данных, полученных из разных источников

● Поддерживает счетчики

Page 25: Применение языка Go в инфраструктурных проектах

DevOps-40

Архитектура Heka

Page 26: Применение языка Go в инфраструктурных проектах

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 в инфраструктурных проектах

DevOps-40

А какие были варианты?● PHP? Ешьте сами!● C? #define true false● C++? Александреску сделал D!● VBA? OMG!● Ruby? Ага, и Twitter Bootstrap!● Server-side JS? It is web scale!

Page 28: Применение языка Go в инфраструктурных проектах

DevOps-40

Выводы● Счастье есть!● Но в какой-то другой Галактике● Пишите инфраструктурные проекты на Go!

● А на VBA не пишите!

Page 29: Применение языка Go в инфраструктурных проектах

DevOps-40

Спасибо за внимание!● Вопросы?● DevOps-40: Drink responsibly!