SlideShare a Scribd company logo
Опыт разработки,
отладки и
внедрения
системы горячего
резервирования
торговой системы
Сергей Костанбаев
Q1 2010 Q2 2010 Q3 2010 Q4 2010 Q1 2011 Q2 2011 Q3 2011 Q4 2011 Q1 2012 Q2 2012
Зачем понадобилась система
горячего резервирования
97,8 тыс. → 13,6 млн. заявок/день
~140x за 2,5 года
Аппаратная платформа
Mission Critical HP Superdom 9000
● Неконкурентоспособны
● HP PA-RISC «мертва»
Что выбрать?
● Intel Itanium
● IBM Z mainframes
● IBM Power
● X86_64 (Xeon Nehalem)
Переход на x86_64
HP UX → RedHat MRG Linux
PA-RISC → x86_64
● big endian → little endian
● Другая memory model
Mission Critical High-End Server → Commodity
● Горячая замена CPU → ?
● Горячая замена контроллеров → ?
● Резервирование RAM → ?
● Дублирование логики → ?
● MTBF, 0 downtime, ... → ?
Архитектура ядра торговой
системы
Торговое ядро (TE)
●
Обрабатывает все
транзакции
Серверы доступа
(GATEWAY)
●
Транзакции →
ядро
●
Информационные
→ локально
TE
GATEWAY ШЛЮЗ
GATEWAY
Клиентский
уровень
Горячее резервирование 1.0
Выход из строя сервера
Проблемы с сетью
Зависание
Горячее резервирование 1.0
Автоматическое переключение за секунды
Нет потерь уже обработанных транзакций
Прозрачно для инфраструктуры
Для клиента нет разрыва соединения
Сопоставимая задержка
Горячее резервирование 1.0
Двойные отказы
Ошибки в софте
Неправильная работа железа
Схема горячего резервирования
MAIN главный сервер
BACKUP резервный
сервер
GOVERNOR
координирует
назначение роли
MAIN
MAIN BACKUPGOVERNOR
GATEWAY ШЛЮЗ
GATEWAY
Клиентский
уровень
Путь транзакции
MAIN BACKUP
Отправка
на Backup
Выполнение
Подтверждение
о приеме
Ожидание
подтверждения
Выполнение
Сверка
состояния N-1
Ожидание
Переключение
MAIN BACKUPGOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
Переключение
MAIN завис
MAIN BACKUPGOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
Переключение
MAIN завис
BACKUP ↔ GOVERNOR
MAIN BACKUPGOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
Переключение
MAIN завис
BACKUP ↔ GOVERNOR
BACKUP → MAIN
GATEWAY → new MAIN
MAIN MAINGOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
Переключение
MAIN завис
BACKUP ↔ GOVERNOR
BACKUP → MAIN
GATEWAY → new MAIN
…
old MAIN ↔ GOVERNOR
MAIN MAINGOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
Переключение
MAIN завис
BACKUP ↔ GOVERNOR
BACKUP → MAIN
GATEWAY → new MAIN
…
old MAIN ↔ GOVERNOR
GOVERNOR → kill old MAIN
MAINGOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
Опыт разработки, отладки и внедрения системы горячего резервирования торговой системы / Сергей Костанбаев (Московская Биржа)
Случилось непредвиденное...
MAIN
Транзакция неуспешна
BACKUP
Транзакция успешна
Случилось непредвиденное...
MAIN
Транзакция неуспешна
exp(2) = -3.1 ???
BACKUP
Транзакция успешна
exp(2)=7.389
Случилось непредвиденное...
MAIN
Транзакция неуспешна
exp(2) = -3.1 ???
SSE2 mxcsr
[ PE IM DM ZM OM UM PM RZ ]
BACKUP
Транзакция успешна
exp(2)=7.389
SSE2 mxcsr
[ PE IM DM ZM OM UM PM ]
Как это произошло?
Баг округления в libc → patch
Откуда взялся бит SSE2?
Как это произошло?
Баг округления в libc → patch
Откуда взялся бит SSE2?
Округление задается
int fesetround(int round);  
Надо лишь найти ошибку в коде
Поиск ошибки
●
Логический анализ кода
●
Попытка воспроизвести баг
●
Intel C++/GCC/Clang
●
Разные опции оптимизации
●
Статический анализ
●
Valgrind
●
Insure++
●
...
А была ли ошибка?
А была ли ошибка?
А была ли ошибка?
Доработка системы
WARM – «теплые резервы»
●
Асинхронны
●
Можно запустить в
любой момент
MAIN
GOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
WARM
BACKUP
WARMWARM
Доработка системы
WARM – «теплые резервы»
●
Асинхронны
●
Можно запустить в
любой момент
●
GOVERNOR не может
назначить WARMу роль
MAIN
●
Но может перевести в
BACKUP
MAIN
GOVERNOR
GATEWAY
ШЛЮЗGATEWAY
Клиентский
уровень
BACKUPWARMWARM
Опять ошибка
Средняя частота повторения
0,5 лет/сервер
Опять ошибка
Средняя частота повторения
0,5 лет/сервер
Может проблема ОС Linux?
Нашли
Тест с многими потоками и постоянным fesetround
Воспроизводится только на комбинации Linux-ядра и боевых
серверов
Стабильно за ~5 минут бит залипает
Не воспроизводится у поддержки
Замена на новое ядро помогает
Очень напоминает https://habrahabr.ru/post/332552/
«Как я нашёл баг в процессорах Intel Skylake»
Проблема решена, но осадок
остался...
Горячее резервирование 2.0
Никому верить нельзя
Мажоритарное резервирование
Обеспечение консенсуса
Двойные отказы возможны
Горячее резервирование 2.0
Живучесть
Незначительное увеличение задержки
Минимальное взаимодействие по сети
Выбор нового Main за секунды
А есть ли что-то готовое?
Совсем готовое?
●
Enterprise шины данных
Алгоритмы обеспечения консенсуса?
●
Paxos, 2001 (ACM SIGACT News 32, 4 (Dec. 2001), 18–25.)
На момент разработки еще не было
●
RAFT, 2014 https://raft.github.io/raft.pdf
Разработанная схема
взаимодействия
UP – поток репликации
входящих данных
DOWN — поток публикации
результатов и обеспечения
консенсуса
Разработанная схема
взаимодействия
UP – поток репликации
входящих данных
DOWN — поток публикации
результатов и обеспечения
консенсуса
Нет перезаписи истории
Поток репликации данных
Сессии назначается UUID (уникальный на каждом узле)
«Провязка» контролем CRC32
●
Tr0 = { DATA0, CRC32(DATA0, 0)       }
●
Tr1 = { DATA1, CRC32(DATA1, Tr0.CRC) }
●
Tr2 = { DATA2, CRC32(DATA2, Tr1.CRC) }
CRC32C реализовано в CPU
●
u64 _mm_crc32_u64(u64 crc, u64 data);
●
Накладные расходы незаметны
Гарантируем «правильное» переключение и получение
Несоответствие CRC → abort()
Поток публикации результатов
Ответ исполнения
●
Результат транзакции ~300 байт → CRC32( … )
●
Число изменение состояний
●
Число обработанных транзакций
Ожидание всех синхронных
●
Сравнение со всеми синхронными
●
В меньшинстве → abort()
●
Поровну и вне группы с MAIN → abort()
MAIN
BU1
BU2
GOV
MAIN
BU1
BU2
GOV
MAIN
BU1
BU2
GOV
P
MAIN
BU1
BU2
GOV
P
MAIN
BU1
BU2
GOV
BU
MAIN
WP
MAIN
BU1
BU2
GOV
C
BU
MAIN
WP
MAIN
BU1
BU2
GOV
C
BU
MAIN
WP
MAIN
BU1
BU2
GOV
?C
BU
MAIN
WP
MAIN
BU1
BU2
GOV
GOV{1:0}
BU{1:0}
M{1:0}
A
C
BU{0:1}
M{0:1}
W{0:1}P{0:1}
MAIN{0:0}
BU1{0:0}
BU2{0:0}
GOV{0:0}
GOV{1:0}
BU{1:0}
M{1:0}
X
C
BU{0:1}
M{0:1}
W{0:1}P{0:1}
MAIN{0:0}
BU1{0:0}
BU2{0:0}
GOV{0:0}
Таблица состояний
Все строят «свою» картину
мира
Node 1
Node 1 MAIN
Таблица состояний
Все строят «свою» картину
мира
Периодически вещается
Node 1 Node 2
Node 1 MAIN GOV
Node 2 MAIN GOV
Таблица состояний
Все строят «свою» картину
мира
Периодически вещается
Отсылаем совместно с
запросами
Node 1 Node 2 Node 3 Node 4
Node 1 MAIN GOV SYNC ASYNC
Node 2 MAIN GOV SYNC ASYNC
Node 3 MAIN GOV SYNC ASYNC
Node 4 MAIN GOV SYNC ASYNC
Таблица состояний
Все строят «свою» картину
мира
Периодически вещается
Отсылаем совместно с
запросами
Stateless GOVERNOR
Node 1 Node 2 Node 3 Node 4
Node 1 MAIN GOV SYNC ASYNC
Node 2 MAIN GOV SYNC ASYNC
Node 3 MAIN GOV SYNC ASYNC
Node 4 MAIN GOV SYNC ASYNC
Отказ GOVERNOR
Обработка транзакций идет
Timeout → все ожидают GOVERNOR
Резерв GOVERNOR?
Если сеть «поделится», кто будет выбирать? → 2 MAIN?
GOVERNOR только один
Ручной перезапуск
Система мониторинга в помощь
Обработка timeout
CLOCK_REALTIME
●
Используется по умолчанию
●
Изменение системного времени → все пропало
CLOCK_MONOTONIC
●
Монотонный таймер, не влияет системное время, но влияет NTP
●
pthread_*attr_setclock()
Обработка timeout
CLOCK_REALTIME
●
Используется по умолчанию
●
Изменение системного времени → все пропало
CLOCK_MONOTONIC
●
Монотонный таймер, не влияет системное время, но влияет NTP
●
pthread_*attr_setclock()
CLOCK_MONOTONIC_RAW
●
Аппаратный таймер, NTP не влияет
●
Нет wait() функций, только busy wait
Особенности тестирования
Верифицировать ли алгоритм?
Unit-тесты
●
Хитрые выборы
●
Переходы состояний
Вся система
●
Проверка различных timeout (SIGSTOP / SIGCONT)
●
Сетевые проблемы (iptables, выдергивание шнуров)
●
Fault injection (GDB-скрипты)
●
Как это повторить?
Система тестирования
Подготовка окружения, запуск кластера
Высокоуровенные сценарии на Python
●
Заморозить, убить
●
Отключить сеть, потери в сети, «моргание»
Сбор статистики
Визуализация тестов
●
Ход выполнения каждого теста
●
Общая тепловая карта
Опыт разработки, отладки и внедрения системы горячего резервирования торговой системы / Сергей Костанбаев (Московская Биржа)
Интересные применения
Поиск ошибок
Уход с проблемного железа
Миграция между ВЦ
Обновление системы во время работы
Выводы и рекомендации
Неправильная работа железа / OC / системных
библиотек далеко не редкость
Горячее резервирование не 100% гарантия
Backup план когда горячей резерв не сработает
sergey.kostanbaev@moex.com
Вопросы
Контакты
sergey.kostanbaev@moex.com

More Related Content

PDF
11 встреча — Введение в GPGPU (А. Свириденков)
Smolensk Computer Science Club
 
PDF
Nedospasov defcon russia 23
DefconRussia
 
PPTX
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
Nadzeya Pus
 
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
PDF
Модель памяти C++ - Андрей Янковский, Яндекс
Yandex
 
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
PPTX
разработка серверов и серверных приложений лекция №2
Eugeniy Tyumentcev
 
11 встреча — Введение в GPGPU (А. Свириденков)
Smolensk Computer Science Club
 
Nedospasov defcon russia 23
DefconRussia
 
SETCON'18 - Aliaksander Stsepaniuk - Effective CPU
Nadzeya Pus
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Iosif Itkin
 
Модель памяти C++ - Андрей Янковский, Яндекс
Yandex
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Ontico
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ontico
 
разработка серверов и серверных приложений лекция №2
Eugeniy Tyumentcev
 

What's hot (20)

ODP
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
SECON
 
PPT
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Iosif Itkin
 
PDF
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Mikhail Kurnosov
 
PDF
static - defcon russia 20
DefconRussia
 
PPTX
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Yandex
 
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
PDF
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Ontico
 
PDF
Hunting for a C++ package manager
corehard_by
 
PDF
Blockchain introduction
Dmitry Meshkov
 
PPTX
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
PDF
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Platonov Sergey
 
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Ontico
 
PPTX
Apache Storm: от простого приложения до подробностей реализации
CEE-SEC(R)
 
PPT
введение в Gpu
Anatoliy Sviridenkov
 
PDF
Лекция 9. Программирование GPU
Mikhail Kurnosov
 
PDF
iOS-07_2 Multithreading
Noveo
 
PDF
"Building data streams" Константин Евтеев (Avito)
AvitoTech
 
PPT
Conflux: GPGPU .NET
Andrei Varanovich
 
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Ontico
 
PDF
Atomics, CAS and Nonblocking algorithms
Alexey Fyodorov
 
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
SECON
 
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Iosif Itkin
 
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Mikhail Kurnosov
 
static - defcon russia 20
DefconRussia
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Yandex
 
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Ontico
 
Реклама со скоростью света (DMP-платформа), Сергей Жемжицкий (Clever Data)
Ontico
 
Hunting for a C++ package manager
corehard_by
 
Blockchain introduction
Dmitry Meshkov
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Platonov Sergey
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Ontico
 
Apache Storm: от простого приложения до подробностей реализации
CEE-SEC(R)
 
введение в Gpu
Anatoliy Sviridenkov
 
Лекция 9. Программирование GPU
Mikhail Kurnosov
 
iOS-07_2 Multithreading
Noveo
 
"Building data streams" Константин Евтеев (Avito)
AvitoTech
 
Conflux: GPGPU .NET
Andrei Varanovich
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Ontico
 
Atomics, CAS and Nonblocking algorithms
Alexey Fyodorov
 
Ad

Similar to Опыт разработки, отладки и внедрения системы горячего резервирования торговой системы / Сергей Костанбаев (Московская Биржа) (9)

PDF
Курс высокие нагрузки: сеть (отрывок)
Andrey Smirnov
 
PDF
Lab5
ssuser568529
 
PDF
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
PDF
Операционные системы
yaevents
 
PDF
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
Alexey Paznikov
 
PPTX
Алексей Рагозин "Java и linux борьба за микросекунды"
IT Event
 
PDF
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Ontico
 
PPT
Чекрыгин Сергей (Check Point) Cовременная сетевая безопасность
Expolink
 
PDF
Владимир Иванов - Безопасность Unix-подобных ОС
Yandex
 
Курс высокие нагрузки: сеть (отрывок)
Andrey Smirnov
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Ontico
 
Операционные системы
yaevents
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
Alexey Paznikov
 
Алексей Рагозин "Java и linux борьба за микросекунды"
IT Event
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Ontico
 
Чекрыгин Сергей (Check Point) Cовременная сетевая безопасность
Expolink
 
Владимир Иванов - Безопасность Unix-подобных ОС
Yandex
 
Ad

More from Ontico (20)

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

Опыт разработки, отладки и внедрения системы горячего резервирования торговой системы / Сергей Костанбаев (Московская Биржа)