Алексей Рагозин "java и linux борьба за микросекунды"

34

Upload: it-event

Post on 14-Apr-2017

36 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Алексей Рагозин "Java и linux борьба за микросекунды"
Page 2: Алексей Рагозин "Java и linux борьба за микросекунды"

Deutsche Bank Technology CentreDeutsche Bank

Java и LinuxБорьба за микросекундыАлексей Рагозин

Page 3: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Типовая архитектура торговой системы

ClientConnectivity

OrderManagement

System

ExchangeConnectivity

Settelment RiskManagment

TradeLife Cycle

OtherDownstreams

Page 4: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Ultra Low Latency

Время отклика системы – десятки/сотни микросекунд

Колокация – обработка в рамках одного ЦОД

Специализированное сетевое оборудование

Прямая работа с сетевым стеком из прикладного кода

Page 5: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Realtime

Гарантированное время отклика

Требуется поддержка на уровне ОС

Время отклика не обязательно малое

Как правило, hard real time системы не отличаются высокой производительностью

Page 6: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Архитектура

Page 7: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Архитектура в стиле JEE

BusinessLogic

RDBMS

Message Broker Message Broker

Page 8: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Архитектура в стиле JEE

BusinessLogic

RDBMS

Message Broker Message Broker

2 Phase CommitSend message

Commit SQL transaction

Acknowledge message

Page 9: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Двухфазный коммит (2PC)

ДостоинстваСтандартизация X/Open, XAГарантия однократной обработкиШирокая поддержка

НедостаткиРаспределённый коммит увеличивает время

откликаСинхронный коммит между разными ресурсами

Page 10: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Альтернатива 2PC

Сквозная нумерация сообщений

Брокер хранит диапазон сообщений

Потребитель может “проиграть” сообщения с произвольного номера

Потребитель сам хранит номер последнего сообщения

Распределённая транзакция не требуется

Page 11: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Секвенсирование сообщений

Journal Channel

OutboundInbound

BusinessLogic

Sequ

encin

g Channel

Channel

Publishing

DB

Async consumers

ChangeLog

?

Page 12: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Восстановление после сбоя

Каждый канал хранит номер последней транзакции

При восстановленииНаходим минимальный номер транзакции по всем каналамПроигрываем журнал с этого номераКаждый канал игнорирует уже отправленные сообщения

Требуется строго детерменированная бизнес логика!

Обработка входного сообщения должна быть повторяемойВременные метки считаются в момент секвенсированияСостояние бизнес объектов хранится в памяти

Page 13: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Секвенсирования сообщений

ДостоинстваНет распределённой транзакцииВыходные каналы не тормозят друг другаЗапись в журнал параллельно с бизнес логикойВозможность “тёплого” резервирования

НедостаткиТребование к детерменированной бизнес логикеПолное состояние бизнес объектов в памяти

Page 14: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Прикладной код

Page 15: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Конвейерная обработка

NetworkReceive

Unmarshal Businesslogic

Jouranling

NetworkSend

Marshal

Page 16: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Конвейерная обработка

ДостоинстваОднопоточная детерминированная бизнес логикаОднопоточные структуры данныхВозможность привязки потоков к ядрамСпекулятивное выполнение

НедостаткиПараллельная обработка только на уровне стадийНельзя применять “блокирующие” операции в бизнес логике

Page 17: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Оптимизации времени отклика

Чистка кодаЛогированиеtoString() дорогая операцииНеобходимо проверять включён ли логер перед форматированием сообщенияИсключенияОбработка исключений медленнаяИсключения должны использоваться в неисключительной логикеReflectionМинимизация использования рефлекшенаПри использовании надо кэшировать метаданные

Page 18: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Мусор

Сборка мусора в JVM неизбежнаНаша цель – 99ый перцентильНастройка сборщика мусора

Concurrent Mark Sweep алгоритмПаузы можно укоротить используя больше CPUИнтервал между паузами можно увеличить

Оптимизации кодаУменьшение выделения памяти там, где это оправдано

GC не единственный неконтролируемый источник задержек

Page 19: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Garbage free coding

Garbage freeПроблемы с

многопоточностьюСложная логика

переиспользования объектов

Immutable objectsСлишком много мусораНеоптимальные

структуры данных

Immutable objects Garbage free

Holistic Low Latency

Page 20: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Синхронизация

Стоимость межпоточной синхронизации

Свободный ресурс – быстрый путьМедленная операция с памятью (compare and set)

Загруженный ресурс – медленный путьВход в ядро (context switch)Ожидание

Page 21: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Context Switch Cost

Синхронизация требует вызов ядра ОС,что требует переключения контекста CPU (context switch)

Стоимость переключение контекстаПереключение контекста – единицы микросекундСброс кэшей CPU – десятки микросекундОжидание в очереди на CPU – сотни микросекунд

Page 22: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Context Switch Cost

http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html

Page 23: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Цена многопоточности

Атомарные операции с памятью < 1 мксLock free структуры данныхБлокирующая синхронизация быстрый путь

Быстрое переключение контекста ~ X * 10 мксВыполнение на выделенном ядре

Медленное переключение контекста ~ X * 100 мксПерескакивание по ядрам

Page 24: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

LINUX

Page 25: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

“Зелёный” Linux

По-умолчанию, в большинстве дистрибутивов Linux включён режим энергосбережения

Уменьшение частоты ядра, при малой загрузкеИспользуются специальные режимы ожидания ядер

Это негативно влияет на время отклика

Page 26: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Своп

Linux может вытеснять страницы памяти приложения для дискового кэша.

В случае Java приложений это может серьёзно увеличить время отклика.

/proc/sys/vm/swappiness <- 0 swap off - радикальная мера

Page 27: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Привязка потоков

Цель – обеспечить выполнение потоков конвейера на выделенных ядрах.

Поток Java – обычный поток OStaskset позволяет привязать поток к ядруID потока можно получить через jstackПривязанный поток будет выполняться на выделенном ядре

Page 28: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Изоляция ядер

Даже если поток привязан к ядру, другие потоки имеют возможность его вытеснить

isolcpus – параметр ядра Linux, который позволяет исключить ядра из пула планировщика taskset позволяет потокам выполнятся на isolcpus ядрах

Page 29: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

NUMA

Non-Uniform Memory Architecture (NUMA)Различные ядра имеют разное время доступа

к разным банкам памяти. Обычно память процесса распределена по всем банкамnumactl позволяет ограничить банки памяти используемые

для определённого процесса

Page 30: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Стратегия настройки Linux

CPU 0 CPU 1 CPU 2 CPU 3 CPU 4 CPU 5 CPU 6 CPU 7 CPU 32 CPU 33 CPU 34 CPU 35 CPU 36 CPU 37 CPU 38 CPU 39

NUMA Node 0

Critical threads Default task set

GC Threads

isolcpus

NUMA Node 1

NUMA Node 2

NUMA Node 3

Page 31: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Стратегия настройки Linux

Одна NUMA нода целиком выделяется под приложение.NUMA нода целиком исключается из планировщика (isolcpus)Приложение запускается под numactl и tasksetКритические потоки привязываются к выделенным ядрамОстальные потоки привязываются к пулу свободных ядер на

нодеGC потоки привязываются ко всем ядра NUMA ноды

Page 32: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Результаты оптимизации

Высокая нагрузка Низкая нагрузкаМедиана (Перцентиль 99) Микросекунды

Исходная версия 1215 (8472) 2878 (23067)

“Чистка кода” 774 (1273) 1197 (3738)Оптимизировано логированиеУбран рефлекшенВключены “спинлоки”

Настройка Linux 611 (765) 684 (873)Зафиксированы частоты ядерnumactl + taskset + isocpus

Page 33: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017

Спасибо

Алексей Рагозинhttp://[email protected]

Page 34: Алексей Рагозин "Java и linux борьба за микросекунды"

12.5

cm

(4.9

2 in

)

0.5

cm (0

.20

in)

0.5

cm (0

.20

in)

12.5

cm

(4.9

2 in

)

13.2

5 cm

– id

entif

ier (

5.51

in)

Deutsche Bank Technology CenterDeutsche Bank Алексей Рагозин

United Dev Conf 2017 34

Данный материал не является предложением или предоставлением какой-либо услуги. Данный материал предназначен исключительно для информационных и иллюстративных целей и не предназначен для распространения в рекламных целях. Любой анализ третьих сторон не предполагает какого-либо одобрения или рекомендации. Мнения, выраженные в данном материале, являются актуальными на текущий момент, появляются только в этом материале и могут быть изменены без предварительного уведомления. Эта информация предоставляется с пониманием того, что в отношении материала, предоставленного здесь, вы будете принимать самостоятельное решение в отношении любых действий в связи с настоящим материалом, и это решение является основанным на вашем собственном суждении, и что вы способны понять и оценить последствия этих действий. ООО “Технологический Центр Дойче Банка" не несет никакой ответственности за любые убытки любого рода, относящихся к этому материалу.