SlideShare a Scribd company logo
1 of 54
Download to read offline
Как сделать вычислительную
инфраструктуру для большого кластера
          Евгений Кирпичёв
           Станислав Лагун
• Введение и Архитектура
• Доставка задач/результатов
• Отладка и анализ
• Обобщение опыта:
  корректность, надежность, производительность
Что мы строим
• Очень тяжелые вычисления (но очень параллельные)
• Много одновременных заданий (Job) разной важности
• Простой API – задание = поток задач: CreateJob, SubmitTask, OnResult
• Непредсказуемые вычисления:
  От секунд (нужна интерактивность)
  до дней (но не мешать чужой интерактивности)
• Задействовать кластер целиком
• Отказоустойчивость
Обычно (на суперкомпьютерах) используют:
       Platform LSF
      MS HPC Server            MPI
     Oracle Grid Engine
          Condor
                          +   OpenMP
                                …
             …


     Это называется «batch scheduler»
Нам не подходит
Они предполагают:
•   Планировщик ничего не знает про задачу
    (Просто выделяет ядра)
•   Задачи монолитны
      •   «Мне надо 100 ядер»
      •   Как появится 100 ядер – запустит
      •   На 99 не запустит
•   Есть куча сложных правил и квот
•   Акцент на фичи, а не на эффективность
Без этих предположений можно сделать эффективнее.
Пакетный планировщик                             Наш планировщик

Приложение:                                   Приложение:
    «Дай-ка мне 300 – 400 ядер и запусти на       Я хочу использовать кластер для
    них вот эту команду»                          вычисления задач

Планировщик:                                  Планировщик:
    Вот ядра, команду запустил.                   Хорошо, кидай задачи сюда, жди
    Разбирайся сам.                               результатов отсюда. Я позабочусь об
                                                  эффективной и справедливой делёжке
                                                  ресурсов.
       Становятся возможными некоторые трюки для повышения утилизации.
                          But this margin is too small…
Пример неудачной архитектуры
 Клиент 1    Клиент 2    Клиент 3


                    брокер




            Очевидно, single bottleneck – не масштабируется
       +балансировка нагрузки очень математически нестабильна
Более удачная архитектура
• Планировщик
                                                        +клиенты
   – Слушает команды о запуске-останове заданий
                                                                 +статистика
   – Приказывает демонам обслуживать задачи

• Трубы (как очереди, только шире)               +логгирование
   – Доставляют задачи и ответы

• Вычислительные демоны на узлах                             +мониторинг

   – Слушаются планировщика
   – Тянут из труб задач, считают, публикуют ответы
Пример
•   Клиент – Планировщику:
    Создай задачу A, важность 30%
•   Планировщик (выбирает несколько демонов) – демонам:
    Ты, ты и ты – бросайте всё и подключайтесь к трубе А.
    (возможно вытеснение работающей задачи)

•   Клиент шлет задачи в трубу А
•   Демоны считают, шлют ответы
•   Клиент собирает ответы, шлет новые задачи и т.п.
• Введение и Архитектура
• Доставка задач/результатов
• Отладка и анализ
• Обобщение опыта:
  корректность, надежность, производительность
Трубы
• На основе RabbitMQ
   – Лучший продукт в своем классе (надежная доставка)
   – Но «из коробки» сам по себе не масштабируется
Надежная доставка
Цикл жизни демона:
• Получить задачу
• Посчитать
                                 Порядок очень важен
• Отослать ответ
• Подтвердить получение задачи
Демон A                      вычисления                 вычисле

           Задача X             «Подтверждаю:
                                                   Задача Y       Разрыв связи
                               задачу X получил»

Демон B

                                                                       Задача Y

RabbitMQ              Ждет подтверждения X              Ждет Y          Ждет Y
Масштабирование
Из коробки RabbitMQ совсем не подходит
• Одна очередь плохо тянет 10000 клиентов
• Встроенная кластеризация делает не то
  От нее вообще лучше отказаться (одни проблемы)
• Очевидное решение: несколько очередей + load balancing
Масштабирование
      задачи                   ответы
     Голова задачи            Голова задачи




                                                 Демон выбирает случайного кролика
(подбираются демонами)   (отсылаются демонами)      и всю жизнь работает с ним
Трудности работы с очередями
•   RabbitMQ под Windows тянет мало соединений
     –   Решено: каждая машина подключается к кому-нибудь одному
•   При крахах демонов данные теряются
     –   Решено: подтверждения тасков
•   При крахах RabbitMQ данные теряются
     –   RabbitMQ не гарантирует безопасность данных вне транзакции!
•   Соединение может спонтанно рваться
•   RabbitMQ дохнет под нагрузкой
     –   Надо избегать перегрузки
•   Нужно мгновенное переключение между заданиями
     –   Самая сложная часть
•   В очереди на конкретном RabbitMQ могут кончиться задачи
     –   Надо переключаться, не нарушая остальных свойств
Сохранность данных при крахах RabbitMQ
                           Publish confirmations
    Client


                           0..3         4..5          6..7

  RabbitMQ
                              fsync       fsync       fsync
     Disk

Клиент помнит сообщения, про которые еще не известно, на диске ли они.
                 При разрыве связи перепосылает их.
Не перегружать RabbitMQ
• Если слишком интенсивно слать сообщения,
  RabbitMQ захлебнется (не успевая писать на диск)
• Тормоза, крахи, разрывы соединений
Не перегружать RabbitMQ

                Белое – «ждем задачи»
                  доставка тормозит,
                  или реконнектимся
Не перегружать RabbitMQ
Оказывается, отличная метрика загрузки –
число/размер неподтвержденных сообщений

                        4 задания, 4 разноцветных кролика
                        Один кролик не поспевает.
Не перегружать RabbitMQ
Ограничить число сообщений «в полете»
   – Ждать при roundrobin, пока текущему кролику полегчает?
   – Нет, тогда один медленный будет всех тормозить.
   – А как тогда?
   – Давать очередное сообщение случайному неперегруженному.
Поддерживать асинхронные прерывания
Иногда надо всё бросить и заняться другим заданием
   – Прервать запущенную задачу и кинуть обратно в трубу
   – Или прервать ожидание задачи
   – Порвать соединения с трубами предыдущего задания
       •   Убедиться, что все ответы точно сохранены на диск


Об этом мы узнаем из другого потока
   – Многопоточность – это всегда ад
   – К счастью, это почти единственное использование многопоточности
   – Но все равно ад
Переключаться между кроликами
• Если кончились задачи в нашем – постучаться в другого

• Если делать наивно, будет куча проблем
   – Бури реконнектов
   – Голодание
   – Дисбаланс
   – Кончатся соединения
   – ...
   – NO PROFIT!!!11
Как это закодировать
Можно сделать лапшу, делающую все сразу
   – Реконнекты,
     подтверждения
     доставки,
     переключение,
     балансировка,
     асинхронные
     прерывания…
Как не сойти с ума
Разумеется, слои.
Слои
Отсыльщик:
    – Отослать
    – Получить/сбросить список неподтвержденных
    – Завершиться (возможно, асинхронно)

Слушатель:
    – Достать сейчас (blocking + timeout)
    – Достать потом (callback)
    – Завершиться (возможно, асинхронно)
Слои
      «Игнорировать                             «Балансировать отправку
      неподтвержденные                            между несколькими»
      при закрытии»
                   «При ошибке переоткрыться»

«Слушать сразу несколько»              «Преобразовать тип
                                          сообщения»
             «При ошибке сделать                          «При ошибке
             то-то и то-то»                           попробовать еще раз»
Например
         задачи                                        ответы

       Десериализовать                              Сериализовать
При ошибке повторять до успеха              При ошибке повторять до успеха
  При ошибке залоггировать                    При ошибке залоггировать
   При ошибке переоткрыть                      При ошибке переоткрыть
                                            (неподтвержденное переслать)
   Слушать сразу несколько
                                                    Балансировать
 Неограниченная предвыборка      По числу
                                 кроликов          Слать в RabbitMQ
     Слушать из RabbitMQ
•   Введение и Архитектура
•   Доставка задач/результатов
•   Отладка и анализ
•   Обобщение опыта:
    корректность, надежность, производительность
Отладка и анализ
• Дебаггер – не вариант (только для локальных тестов)
• Проблемы тоже распределенные
   – Особенно проблемы производительности
• Post mortem отладка по логам
• Логов, по нашим меркам, дох очень много
  (тысячи важных сообщений в сек.)
Пара фокусов в рукаве
• Мощный логгер
   – Глобальная ось времени (точнее, чем NTP)
   – Тянет сотни тысяч сообщений в секунду от тысяч клиентов
   – http://code.google.com/p/greg – опенсорс-версия
   – Ставим 1шт. на кластер, получаем точную глобальную картину
     (без мучений со специальным сбором-слиянием логов)

• GNU textutils + awk
timeplotters

две специальных рисовалки

A picture is worth a thousand words



http://jkff.info/software/timeplotters/
http://jkff.info/software/timeplotters/
Что для этого нужно?

 Очень подробные логи.
  Еще об этом – позже.
• Введение и Архитектура
• Доставка задач/результатов
• Отладка и анализ
• Обобщение опыта:
  корректность, надежность, производительность
Корректность: Главный принцип

Как писать правильный код?
Корректность: Главный принцип

     Код точно неправильный.
            Как быть?
Как быть?
• Писать максимально подробные логи
• Писать меньше кода
  (только то, без чего программа не будет работать)
• Минимизировать «ядро корректности»
• Избегать многопоточности и других опасных приемов
  (никакого геройства)
• Использовать eventual consistency
  (не настаивать на strong consistency)
• Использовать «барьеры»
Барьеры
Переводят любое состояние в предсказуемое.
Уничтожение процесса (выполнение действия в отдельном процессе)
•   Защищает от утечек ресурсов внутри процесса

Периодический перезапуск системы
•   Защищает от неограниченно долгих зависаний

Закрытие соединения с очередью
•   В худшем случае (неподтвержденная)задача будет сдублирована
• Введение и Архитектура
• Доставка задач/результатов
• Отладка и анализ
• Обобщение опыта:
  корректность, надежность, производительность
Надежность
• Всё перезапускаемо и готово к перезапуску остальных
• Только асинхронная коммуникация
• Все компоненты готовы к дублям и потерям сообщений
• Явно формулировать переход ответственности за целостность данных
• Eventual consistency
  (система не обязана быть согласованной постоянно)
Перезапускаемость
Если она есть:
•   Можно перезапустить оборзевший процесс
•   Можно навсегда забыть о редких крахах
•   Можно перезапускать процесс периодически и забыть навсегда об утечках и
    зависаниях

Если ее нет:
•   Надо вылизывать код, пока не исчезнут самые маловероятные крахи и утечки
•   Если крах не по вашей вине (ОС, библиотека, железо, уборщица) –
    это все равно ваши проблемы.
Асинхронные коммуникации
• С синхронными труднее обрабатывать ошибки,
  есть больше классов ошибок.

• Можно использовать софт, хорошо разбирающийся
  в асинхронных коммуникациях.

• Лучше использовать connectionless протоколы (UDP):
  исчезает как класс проблема «разрыв связи».
  (если задача позволяет)
Eventual consistency
 Стремление к согласованности.

Строгая глобальная согласованность
              трудна
      далеко не всегда нужна
   и далеко не всегда возможна
Eventual consistency
                     Publish confirmations
 Client


                     0..3         4..5       6..7

RabbitMQ
                        fsync       fsync    fsync
  Disk

 Клиент и кролик постепенно согласуют знание о том,
          какие данные надежно сохранены
Eventual consistency
Scheduler
            «Займись B»      «Займись B»

            «Занимаюсь A»                  «Занимаюсь B»
Daemon


   Планировщик и демон постепенно согласуют представление
             о том, чем демону надо заниматься
• Введение и Архитектура
• Доставка задач/результатов
• Отладка и анализ
• Обобщение опыта:
  корректность, надежность, производительность
Производительность
Несколько аспектов:
• Стабильность под нагрузкой
• Пропускная способность
• Задержка
Главное

Ресурсы конечны
Что кончалось у нас
Соединения с RabbitMQ                                  Одновременные RPC-вызовы
Erlang-процессы в RabbitMQ                             Место на диске
Cинхронные AMQP-операции / сек. (e.g. queue.declare)   CPU и диск машины, куда погрузили два сервиса сразу
Установленные соединения / сек. с RabbitMQ             Успешные UDP-пакеты по нагруженному каналу
Установленные соединения / сек. с логгером             Транзакции RabbitMQ в секунду / в минуту
Внутренние буферы сообщений в логгере                  Терпение при анализе больших логов
Место в пуле потоков (медленно разгребался)            Память у инструментов рисования логов
Мораль
• Планируйте потребление ресурсов
• Особенно таких, потребление которых растет с масштабом
• Особенно централизованных (в т.ч. сеть)
• Учитывайте характер нагрузки!
   – Его бывает трудно предсказать
   – Наивные бенчмарки нерепрезентативны
Пропускная способность
   Избегайте зависимости от обратной связи

Иначе задержка начинает уменьшать пропускную способность
                (печальный пример – TCP)
         Задержку оптимизировать гораздо труднее
Задержка
• Измеряйте
• Избегайте централизованных компонентов на пути запроса
• Не делите ресурсы между batch и real-time компонентами
• Рано или поздно придется управлять приоритетами
  запросов/действий вручную
   – Понадобятся не просто очереди, а приоритетные очереди
That’s all folks
                             *




 * Это не наше, но похоже.

More Related Content

What's hot

Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Ontico
 
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Ontico
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Ontico
 
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)Ontico
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераodnoklassniki.ru
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Ontico
 

What's hot (20)

Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
 
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
Функциональное тестирование высоконагруженных проектов / Илья Пастушков (2ГИС)
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
 
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
Как поддерживать и развивать пачку "похожих" проектов. Кластер или конгломера...
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
Uawebchallenge.yandex.tank
Uawebchallenge.yandex.tankUawebchallenge.yandex.tank
Uawebchallenge.yandex.tank
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 

Viewers also liked

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Ontico
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Lenvendo
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...IT-Portfolio
 
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Fuenteovejuna
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRuslan Safin
 
Отказоустойчивость и производительность
Отказоустойчивость и производительностьОтказоустойчивость и производительность
Отказоустойчивость и производительностьOpenStackRU
 
PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!Ivan Tsyganov
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
 

Viewers also liked (15)

Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работает
 
Отказоустойчивость и производительность
Отказоустойчивость и производительностьОтказоустойчивость и производительность
Отказоустойчивость и производительность
 
Рецепты RabbitMQ
Рецепты RabbitMQ Рецепты RabbitMQ
Рецепты RabbitMQ
 
PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
 
Wargaming web
Wargaming webWargaming web
Wargaming web
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 

Similar to Как разработать вычислительную инфраструктуру для большого кластера (Евгений Кирпичев, Станислав Лагун)

Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Ontico
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодAndrew Aksyonoff
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Ontico
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийFuenteovejuna
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Выявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхВыявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхPavel Grushetzky
 
Spb RubyConf 2017 — надёжные вебсокеты
Spb RubyConf 2017 — надёжные вебсокетыSpb RubyConf 2017 — надёжные вебсокеты
Spb RubyConf 2017 — надёжные вебсокетыАндрей Новиков
 
Модификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинМодификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинOntico
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPILeonid Yuriev
 
Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...
Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...
Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...Ontico
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Ontico
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...pgdayrussia
 
Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)Ontico
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Ontico
 

Similar to Как разработать вычислительную инфраструктуру для большого кластера (Евгений Кирпичев, Станислав Лагун) (20)

Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)Крадущийся сервер, затаившийся диод (Андрей Аксенов)
Крадущийся сервер, затаившийся диод (Андрей Аксенов)
 
Крадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диодКрадущийся сервер, затаившийся диод
Крадущийся сервер, затаившийся диод
 
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация, Андрей Аксенов (Sphinx)
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья Космодемьянский
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Выявление неполадок в Java приложениях
Выявление неполадок в Java приложенияхВыявление неполадок в Java приложениях
Выявление неполадок в Java приложениях
 
Spb RubyConf 2017 — надёжные вебсокеты
Spb RubyConf 2017 — надёжные вебсокетыSpb RubyConf 2017 — надёжные вебсокеты
Spb RubyConf 2017 — надёжные вебсокеты
 
Модификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинМодификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей Шетухин
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPI
 
Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...
Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...
Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном прое...
 
Going to extreme
Going to extremeGoing to extreme
Going to extreme
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)Как мы готовим MySQL / Николай Королёв (Badoo)
Как мы готовим MySQL / Николай Королёв (Badoo)
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 1...
 
Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)Вы решили написать собственное хранилище (Илья Космодемьянский)
Вы решили написать собственное хранилище (Илья Космодемьянский)
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
 

More from Ontico

Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Ontico
 

More from Ontico (20)

Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 

Как разработать вычислительную инфраструктуру для большого кластера (Евгений Кирпичев, Станислав Лагун)

  • 1. Как сделать вычислительную инфраструктуру для большого кластера Евгений Кирпичёв Станислав Лагун
  • 2. • Введение и Архитектура • Доставка задач/результатов • Отладка и анализ • Обобщение опыта: корректность, надежность, производительность
  • 3. Что мы строим • Очень тяжелые вычисления (но очень параллельные) • Много одновременных заданий (Job) разной важности • Простой API – задание = поток задач: CreateJob, SubmitTask, OnResult • Непредсказуемые вычисления: От секунд (нужна интерактивность) до дней (но не мешать чужой интерактивности) • Задействовать кластер целиком • Отказоустойчивость
  • 4. Обычно (на суперкомпьютерах) используют: Platform LSF MS HPC Server MPI Oracle Grid Engine Condor + OpenMP … … Это называется «batch scheduler»
  • 5. Нам не подходит Они предполагают: • Планировщик ничего не знает про задачу (Просто выделяет ядра) • Задачи монолитны • «Мне надо 100 ядер» • Как появится 100 ядер – запустит • На 99 не запустит • Есть куча сложных правил и квот • Акцент на фичи, а не на эффективность Без этих предположений можно сделать эффективнее.
  • 6. Пакетный планировщик Наш планировщик Приложение: Приложение: «Дай-ка мне 300 – 400 ядер и запусти на Я хочу использовать кластер для них вот эту команду» вычисления задач Планировщик: Планировщик: Вот ядра, команду запустил. Хорошо, кидай задачи сюда, жди Разбирайся сам. результатов отсюда. Я позабочусь об эффективной и справедливой делёжке ресурсов. Становятся возможными некоторые трюки для повышения утилизации. But this margin is too small…
  • 7. Пример неудачной архитектуры Клиент 1 Клиент 2 Клиент 3 брокер Очевидно, single bottleneck – не масштабируется +балансировка нагрузки очень математически нестабильна
  • 8. Более удачная архитектура • Планировщик +клиенты – Слушает команды о запуске-останове заданий +статистика – Приказывает демонам обслуживать задачи • Трубы (как очереди, только шире) +логгирование – Доставляют задачи и ответы • Вычислительные демоны на узлах +мониторинг – Слушаются планировщика – Тянут из труб задач, считают, публикуют ответы
  • 9. Пример • Клиент – Планировщику: Создай задачу A, важность 30% • Планировщик (выбирает несколько демонов) – демонам: Ты, ты и ты – бросайте всё и подключайтесь к трубе А. (возможно вытеснение работающей задачи) • Клиент шлет задачи в трубу А • Демоны считают, шлют ответы • Клиент собирает ответы, шлет новые задачи и т.п.
  • 10. • Введение и Архитектура • Доставка задач/результатов • Отладка и анализ • Обобщение опыта: корректность, надежность, производительность
  • 11. Трубы • На основе RabbitMQ – Лучший продукт в своем классе (надежная доставка) – Но «из коробки» сам по себе не масштабируется
  • 12. Надежная доставка Цикл жизни демона: • Получить задачу • Посчитать Порядок очень важен • Отослать ответ • Подтвердить получение задачи
  • 13. Демон A вычисления вычисле Задача X «Подтверждаю: Задача Y Разрыв связи задачу X получил» Демон B Задача Y RabbitMQ Ждет подтверждения X Ждет Y Ждет Y
  • 14. Масштабирование Из коробки RabbitMQ совсем не подходит • Одна очередь плохо тянет 10000 клиентов • Встроенная кластеризация делает не то От нее вообще лучше отказаться (одни проблемы) • Очевидное решение: несколько очередей + load balancing
  • 15. Масштабирование задачи ответы Голова задачи Голова задачи Демон выбирает случайного кролика (подбираются демонами) (отсылаются демонами) и всю жизнь работает с ним
  • 16. Трудности работы с очередями • RabbitMQ под Windows тянет мало соединений – Решено: каждая машина подключается к кому-нибудь одному • При крахах демонов данные теряются – Решено: подтверждения тасков • При крахах RabbitMQ данные теряются – RabbitMQ не гарантирует безопасность данных вне транзакции! • Соединение может спонтанно рваться • RabbitMQ дохнет под нагрузкой – Надо избегать перегрузки • Нужно мгновенное переключение между заданиями – Самая сложная часть • В очереди на конкретном RabbitMQ могут кончиться задачи – Надо переключаться, не нарушая остальных свойств
  • 17. Сохранность данных при крахах RabbitMQ Publish confirmations Client 0..3 4..5 6..7 RabbitMQ fsync fsync fsync Disk Клиент помнит сообщения, про которые еще не известно, на диске ли они. При разрыве связи перепосылает их.
  • 18. Не перегружать RabbitMQ • Если слишком интенсивно слать сообщения, RabbitMQ захлебнется (не успевая писать на диск) • Тормоза, крахи, разрывы соединений
  • 19. Не перегружать RabbitMQ Белое – «ждем задачи» доставка тормозит, или реконнектимся
  • 20. Не перегружать RabbitMQ Оказывается, отличная метрика загрузки – число/размер неподтвержденных сообщений 4 задания, 4 разноцветных кролика Один кролик не поспевает.
  • 21. Не перегружать RabbitMQ Ограничить число сообщений «в полете» – Ждать при roundrobin, пока текущему кролику полегчает? – Нет, тогда один медленный будет всех тормозить. – А как тогда? – Давать очередное сообщение случайному неперегруженному.
  • 22. Поддерживать асинхронные прерывания Иногда надо всё бросить и заняться другим заданием – Прервать запущенную задачу и кинуть обратно в трубу – Или прервать ожидание задачи – Порвать соединения с трубами предыдущего задания • Убедиться, что все ответы точно сохранены на диск Об этом мы узнаем из другого потока – Многопоточность – это всегда ад – К счастью, это почти единственное использование многопоточности – Но все равно ад
  • 23. Переключаться между кроликами • Если кончились задачи в нашем – постучаться в другого • Если делать наивно, будет куча проблем – Бури реконнектов – Голодание – Дисбаланс – Кончатся соединения – ... – NO PROFIT!!!11
  • 24. Как это закодировать Можно сделать лапшу, делающую все сразу – Реконнекты, подтверждения доставки, переключение, балансировка, асинхронные прерывания…
  • 25. Как не сойти с ума Разумеется, слои.
  • 26. Слои Отсыльщик: – Отослать – Получить/сбросить список неподтвержденных – Завершиться (возможно, асинхронно) Слушатель: – Достать сейчас (blocking + timeout) – Достать потом (callback) – Завершиться (возможно, асинхронно)
  • 27. Слои «Игнорировать «Балансировать отправку неподтвержденные между несколькими» при закрытии» «При ошибке переоткрыться» «Слушать сразу несколько» «Преобразовать тип сообщения» «При ошибке сделать «При ошибке то-то и то-то» попробовать еще раз»
  • 28. Например задачи ответы Десериализовать Сериализовать При ошибке повторять до успеха При ошибке повторять до успеха При ошибке залоггировать При ошибке залоггировать При ошибке переоткрыть При ошибке переоткрыть (неподтвержденное переслать) Слушать сразу несколько Балансировать Неограниченная предвыборка По числу кроликов Слать в RabbitMQ Слушать из RabbitMQ
  • 29. Введение и Архитектура • Доставка задач/результатов • Отладка и анализ • Обобщение опыта: корректность, надежность, производительность
  • 30. Отладка и анализ • Дебаггер – не вариант (только для локальных тестов) • Проблемы тоже распределенные – Особенно проблемы производительности • Post mortem отладка по логам • Логов, по нашим меркам, дох очень много (тысячи важных сообщений в сек.)
  • 31. Пара фокусов в рукаве • Мощный логгер – Глобальная ось времени (точнее, чем NTP) – Тянет сотни тысяч сообщений в секунду от тысяч клиентов – http://code.google.com/p/greg – опенсорс-версия – Ставим 1шт. на кластер, получаем точную глобальную картину (без мучений со специальным сбором-слиянием логов) • GNU textutils + awk
  • 32. timeplotters две специальных рисовалки A picture is worth a thousand words http://jkff.info/software/timeplotters/
  • 34. Что для этого нужно? Очень подробные логи. Еще об этом – позже.
  • 35. • Введение и Архитектура • Доставка задач/результатов • Отладка и анализ • Обобщение опыта: корректность, надежность, производительность
  • 36. Корректность: Главный принцип Как писать правильный код?
  • 37. Корректность: Главный принцип Код точно неправильный. Как быть?
  • 38. Как быть? • Писать максимально подробные логи • Писать меньше кода (только то, без чего программа не будет работать) • Минимизировать «ядро корректности» • Избегать многопоточности и других опасных приемов (никакого геройства) • Использовать eventual consistency (не настаивать на strong consistency) • Использовать «барьеры»
  • 39. Барьеры Переводят любое состояние в предсказуемое. Уничтожение процесса (выполнение действия в отдельном процессе) • Защищает от утечек ресурсов внутри процесса Периодический перезапуск системы • Защищает от неограниченно долгих зависаний Закрытие соединения с очередью • В худшем случае (неподтвержденная)задача будет сдублирована
  • 40. • Введение и Архитектура • Доставка задач/результатов • Отладка и анализ • Обобщение опыта: корректность, надежность, производительность
  • 41. Надежность • Всё перезапускаемо и готово к перезапуску остальных • Только асинхронная коммуникация • Все компоненты готовы к дублям и потерям сообщений • Явно формулировать переход ответственности за целостность данных • Eventual consistency (система не обязана быть согласованной постоянно)
  • 42. Перезапускаемость Если она есть: • Можно перезапустить оборзевший процесс • Можно навсегда забыть о редких крахах • Можно перезапускать процесс периодически и забыть навсегда об утечках и зависаниях Если ее нет: • Надо вылизывать код, пока не исчезнут самые маловероятные крахи и утечки • Если крах не по вашей вине (ОС, библиотека, железо, уборщица) – это все равно ваши проблемы.
  • 43. Асинхронные коммуникации • С синхронными труднее обрабатывать ошибки, есть больше классов ошибок. • Можно использовать софт, хорошо разбирающийся в асинхронных коммуникациях. • Лучше использовать connectionless протоколы (UDP): исчезает как класс проблема «разрыв связи». (если задача позволяет)
  • 44. Eventual consistency Стремление к согласованности. Строгая глобальная согласованность трудна далеко не всегда нужна и далеко не всегда возможна
  • 45. Eventual consistency Publish confirmations Client 0..3 4..5 6..7 RabbitMQ fsync fsync fsync Disk Клиент и кролик постепенно согласуют знание о том, какие данные надежно сохранены
  • 46. Eventual consistency Scheduler «Займись B» «Займись B» «Занимаюсь A» «Занимаюсь B» Daemon Планировщик и демон постепенно согласуют представление о том, чем демону надо заниматься
  • 47. • Введение и Архитектура • Доставка задач/результатов • Отладка и анализ • Обобщение опыта: корректность, надежность, производительность
  • 48. Производительность Несколько аспектов: • Стабильность под нагрузкой • Пропускная способность • Задержка
  • 50. Что кончалось у нас Соединения с RabbitMQ Одновременные RPC-вызовы Erlang-процессы в RabbitMQ Место на диске Cинхронные AMQP-операции / сек. (e.g. queue.declare) CPU и диск машины, куда погрузили два сервиса сразу Установленные соединения / сек. с RabbitMQ Успешные UDP-пакеты по нагруженному каналу Установленные соединения / сек. с логгером Транзакции RabbitMQ в секунду / в минуту Внутренние буферы сообщений в логгере Терпение при анализе больших логов Место в пуле потоков (медленно разгребался) Память у инструментов рисования логов
  • 51. Мораль • Планируйте потребление ресурсов • Особенно таких, потребление которых растет с масштабом • Особенно централизованных (в т.ч. сеть) • Учитывайте характер нагрузки! – Его бывает трудно предсказать – Наивные бенчмарки нерепрезентативны
  • 52. Пропускная способность Избегайте зависимости от обратной связи Иначе задержка начинает уменьшать пропускную способность (печальный пример – TCP) Задержку оптимизировать гораздо труднее
  • 53. Задержка • Измеряйте • Избегайте централизованных компонентов на пути запроса • Не делите ресурсы между batch и real-time компонентами • Рано или поздно придется управлять приоритетами запросов/действий вручную – Понадобятся не просто очереди, а приоритетные очереди
  • 54. That’s all folks * * Это не наше, но похоже.