Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 — опциональное поле, минимальное количество «попугаев», при которых хост всё ещё считается «живым»

About

Our cloud system

Resources

License

Releases

No releases published

Packages

No packages published