Skip to content
Our cloud system
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
common Introduce actual thunder daemon that manages all cloud logic and Sep 15, 2016
conf Fix config field names, remove badoo-specific host names Sep 16, 2016
db Introduce actual thunder daemon that manages all cloud logic and Sep 15, 2016
go-proxyd Add go-proxyd which is compatible implementation of phproxyd for thunder Sep 15, 2016
jobgen Dir -> path Sep 15, 2016
logs-collector Introduce actual thunder daemon that manages all cloud logic and Sep 15, 2016
proto
vendor Introduce actual thunder daemon that manages all cloud logic and Sep 15, 2016
.gitignore Initial implementation Sep 1, 2015
LICENSE Initial commit Sep 1, 2015
README.md
structure.sql Add sql dump for structure Sep 15, 2016
thunder.go Introduce actual thunder daemon that manages all cloud logic and Sep 15, 2016
version.go
web.go

README.md

Thunder, Badoo cloud system

Описание

Thunder представляет из себя реализацию управляющей логики для запуска заданий по расписанию, или добавляемых через API. Упрощенно можно рассматривать эту систему, как реализацию «облачного cron». Вы задаете расписание для запуска путем добавления записей в таблицу в MySQL и дальше система начинает запускать указанные задания и следить за их исполнением.

Основные компоненты

Для работы thunder нужны следующие компоненты:

  1. Демон thunder
  2. MySQL
  3. Агент для запуска заданий (например go-proxyd)
  4. LSD, опционально (github.com/badoo/lsd)
  5. Код для уведомления об успешном запуске и завершении заданий*
  6. Heartbeat*

Компоненты со звездочкой должны быть написаны самостоятельно

Сборка и конфигурация thunder

Чтобы установить thunder, выполните команду go get github.com/badoo/thunder с помощью go версии 1.6+.

Пример конфигурации находится в файле conf/thunder.conf. Секция daemon_config задает порты для общения с демоном, по умолчанию он слушает JSON-запросы на порту 6558. Дебаг-интерфейс доступен порту 6561 по адресу http://host:6561/debug/thunder.

Основные конфигурационные опции

  • mysql.dsn — параметры для доступа к MySQL
  • launcher.host_suffix — суффикс (с указанием порта), который будет добавляться к полю hostname в базе для соединения с агентом
  • launcher.base_path — путь до «скрипта» в поле script при запросах типа run к агенту
  • launcher.developer_path — путь до «скрипта» в поле script, если указано поле developer (%s заменяется на значение поля developer)
  • launcher.rqh_log_file — путь до лог-файла, в который будут записаны данные о неуспешных запусках
  • is_devel — если выставлено в false, то значение launcher.developer_path перестанет учитываться

Назначение таблиц в MySQL в файле structure.sql

  • Script — список «скриптов» (типов заданий, которые можно запускать)
  • ScriptSettings — настройки для скриптов, вынесены отдельно, поскольку используются в RunQueue и ScriptTimetable
  • ScriptFlags — флаги, используемые для того, чтобы «убивать», останавливать и запускать скрипты
  • Server — список серверов с разбиением на группы, также содержит загрузку CPU, потребление памяти и др.
  • ScriptTimetable — очередь для запуска заданий и их статус
  • RunQueue — после того, как для записи в ScriptTimetable был выбран hostname, она попадает в RunQueue для непосредственного запуска
  • ScriptJobInfo — информация о поколениях заданий (о них рассказано ниже)

Написание Heartbeat-скрипта

Для того, чтобы thunder «узнал» о существовании хостов, нужно запускать Heartbeat-скрипт, например из cron. Heartbeat-скрипт должен собирать информацию о текущей загрузке процессора (в процентах) и по потреблению памяти (в байтах). Помимо этого, Heartbeat-скрипт должен определять имя кластера (группы), в который входит данный хост. Информация должна вставляться в таблицу Server раз в 10 секунд.

Описание полей:

  • hostname — имя сервера, возвращаемое системным вызовом gethostname()
  • group — имя группы (кластера), в который входит этот сервер
  • cpu_user — user% загрузки процессора (значение от 0 до 100)
  • cpu_sys — system%
  • cpu_nice — nice%
  • cpu_iowait — iowait%
  • cpu_steal — steal%
  • cpu_idle — какой процент процессора свободен (значение от 0 до 100)
  • cpu_parasite — сколько процентов CPU потребляют программы, которые не запущены с помощью thunder («паразиты»)
  • cpu_parrots_per_core — индекс производительности хоста в расчете на одно ядро («попугаи»)
  • cpu_cores — количество ядер
  • mem_total — общее количество памяти на хосте в байтах
  • mem_free — количество свободной оперативной памяти в байтах (free)
  • mem_cached — количество памяти, занятое кешом файловой системы (cached)
  • mem_buffers — количество памяти, отведенное под дисковые и другие буферы (buffers)
  • mem_parasite — количество памяти, потребляемое «паразитами» (программы, запущенные не с помощью thunder)
  • swap_total — общий объем swap-раздела
  • swap_used — используемый объем swap-раздела
  • min_memory_ratio — опциональное поле, определяет минимальное соотношение свободной памяти к общему объему, при котором хост всё ещё считается «живым» (полезно выставлять в -1 для маленьких виртуальных машин)
  • updated — TIMESTAMP последнего времени обновления информации о сервере (выставляется автоматически в MySQL при выполнении UPDATE)
  • phproxyd_heartbeat_ts — TIMESTAMP последнего «хартбита», посчитанный через запуск задания через go-proxyd (об этом ниже)
  • disabled_ts — опциональное поле, которое временно отключает хост из балансировки, если выставлено в не-NULL значение
  • min_memory — опциональное поле, минимальное количество свободной памяти, при которой хост считается «живым» (полезно выставлять в -1045057536 для маленьких виртуальных машин)
  • min_parrots — опциональное поле, минимальное количество «попугаев», при которых хост всё ещё считается «живым»
You can’t perform that action at this time.