chronicle map — key-value хранилище для трейдинга на java /...

Post on 16-Apr-2017

863 Views

Category:

Engineering

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Chronicle MapРоман Левентов

Chronicle SoftwareПО для высокопроизводительных систем на Java• Финтех, трейдинг• Ставки• Туризм

Chronicle MapKey‐value store в памяти github.com/OpenHFT/Chronicle-MapLGPL v3

Зачем?

Нужды трейдинга (1)Задержки = деньгиОбычные реляционные БДOut-of-process кеши (redis)Chronicle Map: медианная задержка (latency)< 1 микросекунды

Нужды трейдинга (2)Много источников событийиз разных процессов

Пример: агрегация данных из нескольких бирж

Зачем еще нужен доступиз нескольких процессов?

Тренды в железеСотни ГБ памятиНесколько сокетов⇒ NUMA

NUMA

NUMAДоступ к памяти «чужого» сокета на ~30% медленнее

NUMA: архитектура 1

NUMA node 1

core core core

NUMA node 2

core core core

Процесс

NUMA: архитектура 2

NUMA node 1

core core core

NUMA node 2

core core core

Процесс 1 Процесс 2

Выигрыш до 30% / 2 = 15%

Зачем несколько JVM?Сборка мусора• Меньше heap — меньше

паузы• Garbage-free подсистемы

– Без пауз– Цена барьеров

Compressed Oops

Зачем несколько JVM?

Heap = 40 GB64-битные ссылки

Heap = 15 GB32-битные ссылки

Heap = 15 GB32-битные ссылки

Профит

Зачем несколько JVM?Конфигурация на уровне ОС • Affinity• Приоритеты• cgroups

Нужды трейдинга (2)Много источников событийиз разных процессовHazelcastБольшинство IMDGMapDB

Много источниковChronicle Map:Доступ из нескольких процессовМасштабирование записи ограничено кол-вом ядер в системе

Нужды трейдинга (3)Очень большая частота событий ⇒ обновлений базыРепликация:200k RPS× 3 KB state updates= 5 Gbit

Нужды трейдинга (3)Сеть не тянет ⇒ очереди репликации переполняютсяНужна «фильтрация»Chronicle Map: репликация без очередей, гарантия прогресса

Не серебряная пуляMulti‐key запросы изолированы,но не атомарныНе durable, только persistentТолько асинхронная репликация

Как?

Как сделать доступиз нескольких процессов?

Loopback, sockets

JVM 1 DB process

JVM 2Kernel

DB memory

Loopback, socketsПоход в ядро: 100s of ns× 42…∞ лишних копирований данныхНепредсказуемые задержки: 1..10 микросекунд

Loopback, sockets• Redis, Memcached

Разделяемая памятьБД на C + JNIБД на Java• sun.misc.Unsafe

БД на C + JNI

Java code DB code

JNIJVM 1

Kernel

DB shared memory

JVM 2

БД на Java (Unsafe)

Java code DB codeUnsafe

JVM

Kernel

DB shared memory

JVM 2

Конечно, Unsafe!Минусы JNI• 50 ns• 2 лишних копирования• putIfAbsent(лямбда)Минус Unsafe:геморрой с блокировками

Блокировкине нужны

БлокировкиLockSupport.parkNanos(1000)8000Context switches — зло

Spin loops, жжем CPU

Бенчмарк:Chronicle Map*,one-nio*,ConcurrentHashMap

Спасибо Андрею Барюдинуи Андрею Пангину

Ответы на заявкиЗапрос:orderId, instrument, price, ± amount

+ покупка, − продажаKey-value хранилище:instrument, price → orderId, ± leftover

4, 8 → 8, 8 байтов28 байтов всего

Пример#1, AAPL, $600, +10  

AAPL, $600 → #1, +10

#2, AAPL, $600, −7AAPL, $600 → #1, +3

#3, AAPL, $600, −5AAPL, $600 → #3, −2

Реалистичные данные5000 инструментов Расп. Ципфа

Цены:биномиальное

Бенчмарк10 млн заявок, 8 потоков~ 160 тыс. различных пар(instrument, price)

Xeon E5-2650 v2 @ 2.60GHz8 Cores / 16 HW Threads,2 NUMA nodes, L3: 20MB

Скорость

Chronicle Map one-nio ConcurrentHashMap

174

296

367

В среднем наносекунд на запрос, меньше — лучше

Память

Chronicle Map one-nio ConcurrentHashMap

7.5

10.1

14.4

Общее потребление памяти, MB, меньше — лучше

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

Память

ChronicleMap

one-nio CHM redis 32-bit,approx.

redis 64-bit,approx.

7.510.1

14.4 15

20

Общее потребление памяти, MB, меньше — лучше

Payload — 4,5 MB

Репликация

Репликация: больСеть не тянет частые обновления⇒ Очередь переполняется⇒ Надо делать сжатие• Сложно• Задержки

Репликация без логовЗаписи помечаются на репликацию в bit mapsПотребление памятине меняетсяНо: только асинхронная, eventually consistent репликация

КраткоПо процессу на сокетАffinity, приоритетыsyscalls, JNIContext switchesIPC через shared memoryМеньше памяти

Ссылкиhttp://chronicle.software/

key-value-stories.blogspot.com@leventovleventov@ya.ru

top related