Návrh a vývoj obchodovacích systémů 29. dubna 2015
Agenda Základní principy obchodování na burzách cenných papírů Využití znalostí z MFF Zásady vývoje real-time obchodovacích systémů Demo platformy DET Hub Prostor pro vaše otázky
Market Depth Vol Bid Offer Vol 256 10.5 10.8 5 15 10.2 10.9 154 1000 9.9 10.10 12 10.12 20 10.15 900
Simple Trading Screen
Trading Floor
Napojení na burzu Každá burza nabízí rozhraní pro Příjem orderů a kotací Market data Protokoly Komunikace založená na výměně zpráv Binární ETS, OUCH Member Exchange Textové FIX XML Arena Trading Platform Market Data Matching Engine
Vlastnosti obchodovacích systémů Low-latency: Důraz kladen na rychlost odezvy systémů (mikrosekundy) Low-jitter: stabilita zpracování událostí High-throughput: Zpracování tisíců událostí za vteřinu Robustnost High Availability Fast Recovery
Příklad Calc Server1 Pricing Exchange 1 Trader1 Business Server Calc Server2 Gateway Trader2 Calc ServerN Quoting Exchange 2 TraderN Exchange N
Užitečné kurzy na MFF Teoretické přednášky Algoritmy Datové struktury Složitost Praktické přešdnášky Operační systémy I, II Middleware Programování v UNIXu
Zásady vývoje real-time obchodovacích systémů Multi-threading Paměť Asynchronní programování Actor model Garbage collection Cache
Asynchronní vs synchronní přístup Synchronní volání Asynchronní volání
Zámky 2 vlákna (zámek) 1 vlákno
Zámky II
Mutable vs Immutable objects Mutable Immutable
Actor Model The actor model in computer science is a mathematical model of concurrent computation that treats "actors" as the universal primitives of concurrent computation: in response to a message that it receives, an actor can make local decisions, create more actors, send more messages, and determine how to respond...
Paměť Rychlost paměti je řádově nížší než rychlost CPU Optimalzace datových struktur = zvýšení výkonu Vyšší programovací jazyky ulehčují práci s pamětí Garbage Collection
Memory Cache Přístup do hlavní paměti je řádově pomalejší než do registrů a L1, L2, L3 cache CPU nahrává data z hlavní paměti do cache v tzv. cache lines (typicky 64 bytů)
Memory cache příklad Přidej 10 milionů integerů do listu 10 milion krát odeber první prvek a dej ho nakonec
LinkedList vs RingBuffer LinkedList RingBuffer
Flyweight Pattern Optimalizace cache miss problému
Flyweight Pattern použití
Garbage Collector Výkon komplexních systémů je výrazně ovlivněn délkou Garbage collection Ztráta výkonu 2% na 1 procesoru = ztráta výkonu 40% na 32 procesorech
Garbage Collector II Standardní implementace JVM a CLR používají stop-the-world garbage collection Všechny thready zastaveny na potenciálně velmi dlouhý časový interval
Prevence Stop-The-World Použití komerční JVM, která nepodléha STW a zajišťuje continuous garbage collection Azul Zing Použití programovacích technik, které zajišťují, že během vykonávání programu se nevytváří žádné nebo naprosté minimum objektů Object Pools Offheap Structures předvytvořená množina objektů, které se používají stále dokola Alokace objektů v paměti mimo heap, která nespadá pod GC management klient požádá pool o objekt, provede s ním operace, které potřebuje a vrátí ho zpět do poolu Vlastní management paměti (alokace/dealokace) jako v C V JVM využití sun.misc.unsafe
False Sharing Vzniká v případech kdy dvě či více vláken modifikují vzájemně nezávislé proměnné, které sdílí stejnou cache line Na první pohled obtížné odhalit Je potřeba znát Memory Layout Řešení: padding Související data v souvisejících blocích pamětí
False Sharing příklad Spusť N vláken a v každém vlákně 500 milion krát změň nezávislou proměnnou
False Sharing výsledky
Warm-Up Standardní implementace JVM a CLR používají JIT a run-time optimalizace kódu Systémy po startu vykazují sníženou výkonost
Výběr vhodného HW dostatek jader dodržovat pravidlo core per application thread + jádra pro obhospodaření OS ideálně 2-socket řešení... celý OS běží na jednom socketu a aplikace samotná na socketu druhém viz OS Tunning CPU s co nejvyšší nominální + turboboost frekvencí CPU s co největší cache Dostatek operační paměti Oddělené SSD disky pro OS a aplikaci samotnou Použití High-performance síťových karet - např SolarFlare umožňují preskočení OS Kernelu při zpracování síťového přenosu Zajištění, aby sběrnice, ve které je síťová karta byla na stejném NUMA node jako Socket, který bude přiřazen dané aplikaci
OS Tunning Pro docílení nejvyššího a především stabilního výkonu je nezbytné se při nasazování systému zaměřit také na samotný operační systém Často se jedná o několikadenní proces, který je závislý na použitém HW a OS, tudíž neexistuje jednoznačný a všudefungující postup Izolování jader pro danou aplikaci... taskset, isolcpu, numactl Zakázání IRQ přerušení na jádrech, na kterých beží aplikace... irqbalance Zajištění, že všechny systemové procesy a služby běží na jádrech, na kterých neběží aplikace samotná Priřazení jednotlivých aplikačních vláken daným jádrum... zachování pravidla thread per core taskset nebo Java-Thread-Affinity knihovna Správné nastavení kernel parametrů - vm.min_free_kbytes, vm.swappiness, transparent huge pages a další Diagnostika jitteru: jhiccup (Azul), sysjitter (SolarFlare)
OS Tunning příklad CPU affinity Posílání multicast zpráv přes dummy interface zajistí, že samotná síť nebude ovlivňovat výsledky Sender:
OS Tunning příklad CPU affinity Receiver:
OS Tunning příklad výsledky Spuštění bez použití CPU affinity: java MultiCastReceiver 230.0.0.1 dummy java MultiCastSender 230.0.0.1 dummy 20000000 Spuštění s použitím CPU affinity: taskset -c 2 java MultiCastReceiver 230.0.0.1 dummy taskset -c 4 java MultiCastSender 230.0.0.1 dummy 20000000
DET Hub Univerzální obchodovací systém Umožňuje propojit libovolný počet systémů, které komunikují různými protokoly Jádro systému nezávislé na protokolu Uživatel nastavuje pravidla pro zpracování zpráv Proprietary Trading Co. Mutual Funds Hedge Funds Banks Market Data TIBCO RV FIX ZERO MQ FIX TIBCO RV FAST PROPRIETARY FIX Broker Dealers Exchanges & ECNs MTFs
DET Hub - Výkon Žádné zámky Jádro systému nealokuje žádnou paměť na heapu Nedochází k GC Stabilní latence Speciální reprezentace zpráv v souvislých blocích paměti Unikátní persistenční vrstva
Situace na trhu práce Česká Republika poměrně málo rozšířený obor málo firem, kde je možné získat potřebné zkušenosti před odchodem do zahraničí Zahraničí velmi vysoká poptávka, předevsím ve světových finančních centrech jako jsou Londýn, New York, Singapore, Tokyo a další nadprůměrné finanční ohodnocení např v Londýně se standardní plat contractora (75% trhu) pohybuje mezi 450 až 800 liber na den MFF poskytuje ideální soubor základních znalostí potřebných pro prosazení se v daném oboru
Odkazy mechanical-sympathy.blogspot.com/ lmax-exchange.github.io/disruptor/ www.akka.io www.azulsystems.com www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
Kontakt info@det-tech.com