Coder Social home page Coder Social logo

thunder's Introduction

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

thunder's People

Contributors

yuriynasretdinov avatar kshvakov avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.