Disruptor — Новая Парадигма Многопоточного Программирования

На прошлой неделе компания LMAX где я работаю, получил премию Java Премия "Выбор герцога" 2011 г.

для платформы Disruptor. Ранее об этой технологии написал Мартин Фаулер , известный многим читателям своими публикациями по объектному программированию.

В этой статье я хотел бы кратко рассказать об этой технологии, а также о конкретной проблеме, которую эта технология решает в LMAX. LMAX предоставляет торговую платформу CFD и Forex с очень низкой задержкой и высокой пропускной способностью.

Для достижения скорости выполнения более 10 тысяч операций в секунду компания LMAX разработала паттерн Disruptor. Это совершенно новый и весьма нетрадиционный подход к решению задач параллельного программирования.

Disruptor — это многопоточная платформа параллельной обработки транзакций с высокой пропускной способностью и очень низкой задержкой.

Disruptor LMAX заменяет java.util.concurrent.ArrayBlockingQueue и превосходит его по производительности до 80 раз.



Проблема многопоточного программирования

Тестирование производительности показало, что использование очередей для передачи данных между частями системы приводит к задержкам.

Блокировку потоков и семафоры сложно понять и протестировать, и зачастую на их отладку уходит больше времени, чем на решение реальной проблемы.

Также тестирование многопоточного программирования показало, что использование нескольких потоков зачастую не только не приводит к высокой производительности, но и снижает ее.

Таблица иллюстрирует стоимость увеличения 64-битного счетчика в 500 миллионов раз с использованием различных методов на процессоре Nehalem 2,4 ГГц (адаптировано из блог коллеги ).

Метод Время (мс)
Одна нить 300
Один поток с барьером памяти 4,700
Один поток с CAS 5,700
Два потока с CAS 30,000
Одна нить с замком 10,000
Две темы с блокировкой 224,000


LMAX-подход

Давайте воспользуемся простым примером для иллюстрации.

Представьте, что вы заказываете упаковку шоколадных конфет и платите за них кредитной картой.

Простая розничная система возьмет информацию о вашем заказе, воспользуется службой проверки кредитной карты для проверки номера вашей карты, а затем подтвердит ваш заказ, и все это за одну транзакцию.

Поток, обрабатывающий ваш заказ, будет заблокирован в ожидании проверки кредитной карты, но эта блокировка не будет очень долгой для пользователя, и сервер всегда сможет запустить другой поток на процессоре.

В архитектуре LMAX эта операция будет разделена на две части.

Первая операция — сбор информации о заказе, которая завершится выходом события (запросом на проверку кредитной карты) для компании-эмитента кредитной карты.

Затем процессор бизнес-логики продолжит обработку событий для других клиентов до тех пор, пока не получит событие проверки кредитной карты во входной поток событий.

После обработки этого события заказ будет подтвержден.

Disruptor — это очень высокоскоростной способ обмена сообщениями между потоками с низкой задержкой.

Это похоже на очередь за стероидами (много стероидов!) и является одним из главных нововведений биржи LMAX. Disruptor включает в себя производителя, потребителя и циклический буфер.

Каждый производитель и потребитель знает порядковый номер — ячейку в буфере, которую он в данный момент обрабатывает. Каждый производитель и потребитель записывает свой номер в счетчик и может считывать показания других счетчиков.

Таким образом, потребитель может прочитать счетчик производителя, чтобы убедиться, что ячейка, в которую он хочет записать, доступна.

Потребитель также может проверить, что он обрабатывает сообщение, только после того, как другой потребитель завершит обработку.



Disruptor — новая парадигма многопоточного программирования

Преимущество Disruptor в том, что потребители могут быстро наверстать упущенное, если они отстают. Если распознаватель сообщений (демаршаллер) столкнулся с проблемой в ячейке 15 и осознал это, когда получатель находился в ячейке 31, он мог прочитать данные из ячеек 16–30 за один раз и быстро наверстать упущенное.

Возможность чтения больших блоков помогает отстающим потребителям быстро наверстать упущенное, тем самым сокращая задержку.

Процессор бизнес-логики управляет всей бизнес-логикой с помощью однопоточной программы Java, которая реагирует на вызовы методов и создает выходные события.

Он работает полностью в оперативной памяти, без базы данных или другого постоянного хранилища.

Хотя бизнес-логика выполняется в одном потоке, перед вызовом бизнес-объекта необходимо выполнить ряд задач.

Входящее сообщение из сети необходимо демаршаллировать в удобный для бизнес-логики формат, сохранить на надежном носителе, чтобы иметь возможность восстановить данные в случае аварии.

Эти проблемы решаются с помощью прерывателей входа и выхода.

В отличие от процессора бизнес-логики, это параллельные компоненты, поскольку они включают операции ввода-вывода, которые медленны и независимы.



Disruptor — новая парадигма многопоточного программирования

Поскольку поток входных событий хранится в надежном хранилище (это одна из задач прерывателя ввода), всегда можно восстановить текущее состояние процессора бизнес-логики путем повторного воспроизведения входных событий — так же, как и в системе контроля версий.

системе, проведя последовательность изменений, можно получить окончательную версию документа.



Выводы и ресурсы

Disruptor не является универсальным решением для каждой разработки, но при правильном использовании может показать заметный прирост скорости работы программных систем.

Зачастую финансовые компании не рассказывают о своих технологиях.

LMAX не только открыто рассказывает о своих разработках (см.

блоги ), но также выпустил код Нарушитель в открытом исходном коде .

Смотрите также - Официальный сайт LMAX И Партнерский сайт LMAX на русском языке .

P.S. Добавлю, что этот фреймворк лежит в основе торговой платформы LMAX, запущенной год назад и успешно обрабатывающей тысячи транзакций в секунду.

Теги: #Параллельное программирование #шаблоны #java #награды #скорость #Высокая производительность #высокопроизводительные вычисления #Высокая производительность

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.