Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go в бою

Go в бою

Использование Go (golang) в production:
- cgo: вызов функций C из Go и Go из C;
- mruby: как встроить интерпретатор;
- тестирование: модульное, системное и нагрузочное;
- управление внешними пакетами: с версиями или без них;
- деплоймент: перезапуск без даунтайма;
- мониторинг: все наши метрики.

Доклад с конференции Стачка! 2013 (http://nastachku.ru/)
Запись: http://live.digicast.ru/ru/view/1760 (c 17:20)

Alexey Palazhchenko

April 12, 2013
Tweet

More Decks by Alexey Palazhchenko

Other Decks in Programming

Transcript

  1. storage.io • Распределённое отказоустойчивое хранилище • S3-совместимое API • Близко

    к российскому пользователю • Elliptics, nginx • Chef, Zabbix, Fabric • Go
  2. О чём речь? • cgo: вызов C из Go и

    Go из C • mruby: вызов Ruby из Go и Go из Ruby • Тестирование • Управление зависимостями: go get or not go get • Деплоймент • Мониторинг и метрики
  3. cgo • Вызов C из Go и Go из C

    • Простые типы, указатели • struct, enum, union • errno: n, err := C.sqrt(-1) // EDOM • Динамическая и статическая (с 1.1) линковка
  4. cgo github.com/AlekSi/cgo-by-example ! cs := C.CString("Go string") ! csRet :=

    C.f(cs) ! fmt.Printf("fmt: %s\n", ! !!C.GoString(csRet)) ! C.free(unsafe.Pointer(cs)) ! C.free(unsafe.Pointer(csRet))
  5. Проблемы cgo • runtime: cgo callback on thread not created

    by Go – очередь с pthread_mutex_t / pthread_cond_t, или Go 1.1 • C.f2(C.f1) – must call C.f1
  6. mruby • mini Ruby (как Lua, но лучше) • Анализ

    и изменение поведения программы на лету
  7. Проблемы mruby • Нет релиза mruby • Только статическая библиотека

    mruby, только динамическая линковка в cgo в Go 1.0 • ld: Assertion failed: (reExportDylibCount != 0)
  8. Модульные тесты func TestSqrt(t *testing.T) { ! const in, out

    = 4, 2 ! if x := Sqrt(in); x != out { ! ! t.Errorf("Sqrt(%v) = %v, want %v", in, x, out) ! } } • Benchmarks, example • launchpad.net/gocheck
  9. Следствия • Простые системные тесты можно использовать для нагрузочного тестирования

    • Запросы и ответы могут быть использованы для документирования API
  10. Реакция сообщества • It has been shown so many times

    why the versioning idea is broken. • Mate, I'm not going to quote urban dictionary to you, but you have to find another name for a versioned package. Nut is not acceptable. (сообщение в группу golang-nuts)
  11. Реакция сообщества • It's annoying to me how few people

    seem to think that dependency management isn't a huge missing piece in the Go tooling. • Would you prefer gonads.io?
  12. Zabbix • Комплексное решение • Странный API • порядок полей

    в json важен для zabbix- server • формат чисел важен (%.6f) • не всегда соответствует документации
  13. Zabbix • Хост создаётся до нас • Создаём приложение при

    запуске • Создаём items динамически • Графики, экраны и триггеры создаются руками и копируются на другие хосты