Skalierbarkeit und Parallelisierung in Java

Ähnliche Dokumente
Java Performance Tuning

Welche GC-Strategie ist die richtige?

Metriken und optimale Einsatzszenarien für Garbage Collectoren der Java HotSpot Virtual Machine

Algorithmen und Datenstrukturen

Caching. Hintergründe, Patterns &" Best Practices" für Business Anwendungen

Warum Anwendungen nicht skalieren Wie man Performance- und Skalierbarkeitsprobleme findet und eliminiert

Game Engine Architecture and Development. Platform Unabhängiger Code Multi Threading in Game Engines Profiling

Performant mit CAPE und der Performance Signatur MMS APM Kay Koedel

Application Performance Management

Java Real-Time Specification

Rapid I/O Toolkit. Alexander Bernauer

Im Kapitel Resourc Manager werden die verschiedenen Möglichkeiten der Überwachung von Messwerten eines Server oder Benutzers erläutert.

IO Performance in virtualisierten Umgebungen

II.1.1. Erste Schritte - 1 -

Dynamische Skalierbarkeit

Smartphone Entwicklung mit Android und Java

Dynamic Ressource Management

Performanceoptimierung mit Exadata Verarbeitung extremer Datenmengen mit PL/SQL basierter Datenbewirtschaftung (Erfahrungsbericht)

Ferienakademie Programmierkonzepte für Multi-Core Rechner. Tools: Profiler

Verteilte Systeme CS5001

Zabbix Performance Tuning

Effiziente Java Programmierung

ObjectBridge Java Edition

Java-Optimierung Grundlagen, Konfiguration, Methoden und Werkzeuge zur Optimierung von Oracle-Java

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Architekturübersicht. April IBM Rational Portfolio Manager. Architekturübersicht

SPARC LDom Performance optimieren

Performance Tuning & Scale-Out mit MySQL

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

The Unbreakable Database System

Java für C++ Programmierer

Verteilte Systeme SS Universität Siegen Tel.: 0271/ , Büro: H-B Stand: 7.

EINSATZ VON MICROSOFT TERMINAL-SERVICES ODER CITRIX METAFRAME

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

4. Objektorientierte Programmierung mit C++

MySQL Performance Tuning für Entwickler

8a. Exkurs.NET. 8a.1.NET Architektur

Systemvoraussetzungen für ConSol*CM Version Architektur Überblick

SEP 325. Notwendigkeit. häufige Situation: Programm funktioniert im Prinzip fehlerfrei, aber nicht mit gewünschter Performanz

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Auslieferungsmethoden im Performancevergleich Zieleinlauf mit Java

Programmieren I. Die Programmiersprache Java. Institut für Angewandte Informatik

Synchronisation in Java. Invisible Web

Universität Karlsruhe (TH)

Was machen wir heute? Betriebssysteme Tutorium 2. Organisatorisches. Frage 2.1.a. Theorieblätter Abgabe. Antwort. Probleme mit OS/161?

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Low-Level Client-Server Architektur

Einführung in den NetBeans Profiler

Nutzung paralleler Prozesse bei der Umweltsimulation

Oracle Enterprise Scheduler (ESS) Unleashed Carsten Wiesbaum esentri AG Ettlingen Schlüsselworte Einleitung Oracle Enterprise Scheduler (ESS)

Tuning des Weblogic /Oracle Fusion Middleware 11g. Jan-Peter Timmermann Principal Consultant PITSS

Datenbankstatistiken im Griff mit DBMS_STATS. DOAG 2012 Konferenz + Ausstellung Nürnberg 21. November 2012

Grundlagen verteilter Systeme

TELEMETRIE EINER ANWENDUNG

Spring Dynamic Modules for OSGi Service Platforms

C# im Vergleich zu Java

Build-Pipeline mit Jenkins

Operating System Kernels

Heute. Morgen. Sicher. Dreamlab Technologies AG Was ist sicherer, Open Source oder Closed Source Software?

Oracle EngineeredSystems

Digicomp Microsoft Evolution Day Exchange und Lync in VDI Umgebungen Markus Hengstler Partner:

5. Threads, Serverprozesse und Benachrichtigungen

Komponentenbasierter Taschenrechner mit CORBA

Implementierung der Jikes Research Virtual Machine

Uberlegungen Einsatzgebiete Virtualisierungslosungen Fazit Hardwarevirtualisierung. Virtualisierung. Christian Voshage. 11.

MySQL Performance: Getting Started InnoDB

ALL NEW GROUNDWORK 7.0.2

Performance Tuning

EHCache und Terracotta. Jochen Wiedmann, Software AG

Grundlagen verteilter Systeme

DOAG Demo Kino: Advisors, Monitoring Werkzeuge in der Datenbank Ulrike Schwinn Business Unit Database Oracle Deutschland B.V.

Cloud-Computing. 1. Definition 2. Was bietet Cloud-Computing. 3. Technische Lösungen. 4. Kritik an der Cloud. 2.1 Industrie 2.

Java Generics & Collections

XEN-basiertes Cluster mit iscsi-san

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

ZFS Filesystem und KVM-Virtualisierung

RAC auf Sun Cluster 3.0

Themen. Web Service - Clients. Kommunikation zw. Web Services

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Bilder. 2D Spiele programmieren in Java. Alpha channel. Formate. Optimierung. Empfehlung

Innovative Architekturansätze

Java-Programmierung. Remote Method Invocation - RMI

Begleitendes Praktikum zur Vorlesung Künstliche Intelligenz

Vorbereitungen Download. AVO-Übung 6. Beispiel. Slice. Varianten u.a. für Linux, Windows, OS X ICE-Dokumentation ICE-Binaries (inkl.

Begleitendes Praktikum zur Vorlesung Mustererkennung

Microsoft Server 2012 Hyper-V Replica für Oracle Database

OpenCL Implementierung von OpenCV Funktionen

9 Multithreading. 1 Idee des Multithreading

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

SSDs als Cache für HDDs

Innova&ve Architekturansätze. Peter Sturm AG Systemso9ware

Digicomp Microsoft Evolution Day Exchange und Skype for Business Stolpersteine beim Design Markus Hengstler

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

1 Polymorphie (Vielgestaltigkeit)

7. Performance und Speicherauslastung

LINUX Schulung. FrauenComputerZentrum Berlin. Jutta Horstmann, Mai 2006

Betriebssysteme Kap A: Grundlagen

ODK 1500S Standard Applikationen

Merkblatt: HSM. Version Systemvoraussetzungen, Setup und Trouble Shooting.

SOLISYON GMBH CHRISTIAN WOLF, BENJAMIN WEISSMAN. Optimierung von Abfragen in MS SQL Server DWH-Umgebungen

Transkript:

Skalierbarkeit und Parallelisierung in Java Herausforderungen und Tücken einer Banken- Handelssoftware Full-Service-Dienstleistungen für die internationale Finanzwirtschaft Full-Service-Dienstleistungen für die internationale Finanzwirtschaft

Banken-IT stetiger Wandel durch Wettbewerb und Regulatorik hohe Anforderungen bzgl. Latenz und Verfügbarkeit Verarbeitung großer Produktpaletten und einfache Bedienbarkeit gekennzeichnet durch verteilte Systeme Kommunikation durch Nachrichten, Dateiaustausch, Datenbank-Updates Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 2

Was tut eine Handelssoftware verwaltet Finanzinstrumente Aktien, Bonds, Währungen, Deposits, Fonds, Derivate Händler betreut jeweils einen Pool von Instrumenten handelt Instrumente an elektronischen Märkten (B2B, B2C) stellt Preise (Quotes, Kauf und/oder Verkauf) sperrt/entsperrt Handel verarbeitet Geschäftsabschlüsse (Verbuchung, Gegengeschäfte) berechnet Preise von Derivaten beobachtet und reagiert auf Finanzmärkte zahlreiche Stellschrauben für Händler überwacht Preisqualität vergleicht mit Wettbewerbern, sperrt Instrumente mit unplausiblen Preisen Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 3

Anforderungen an eine Handelssoftware Automatisierung große Instrumentmengen je Händler leichte Verwaltung und Steuerung aller wichtigen Parameter Ausfallsicherheit Hot-Standby oder kurze Startzeiten Schutz vor unbeabsichtigtem Handel Sperren aller Quotes beim Abmelden oder Systemausfall kurze Reaktionszeiten schnelle Preisanpassungen bei Marktbewegungen schnelle Sperrung von Quotes als Reaktion auf ungewollte Ereignisse Reporting Ausgabe wichtiger Informationen an weitere Systeme Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 4

Historie historischer Vergleich Automatisierung 2007: etwa 10.000 Instrumente, 70.000 Quotes auf 6 Märkten 2017: etwa 200.000 Instrumente, > 1 Mio Quotes Ausfallsicherheit 2007: Startzeit 5min 2017: Startzeit trotz vielfacher Datenmenge kürzer als zu Beginn (< 4min) kurze Reaktionszeiten Latenzen verkürzt durch konsequentes Multithreading Hardware 2007: 4 Sockel, 16 Kerne, 16 GB RAM 2017: 4 Sockel, 60 Kerne, 128 GB RAM Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 5

Architektur Server verwaltet alle Daten exklusiver DB-Zugriff nimmt Marktdaten entgegen Marktanbindungen abstrahiert Handelslogik (Geschäftsarten, etc) standardisierte Protokolle zum Server marktabhängige Protokolle zum jeweiligen Markt berechnet Preise sendet Quotes Clients Markt Markt Markt Markt Händler-Frontend wenig eigene Intelligenz DB Server Report s Client Client Client Client Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 6

Architektur Server eine physische Maschine (4 oder 2 Sockel, viele Kerne) Clients 20+ auf mehrere Citrix-Hosts verteilt Marktanbindungen können sich physische Maschinen teilen Markt DB Markt Server Markt Markt Report s Client Client Client Client Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 7

Herausforderungen: Multithreading Ziele optimale Auslastung, keine unnütze Arbeit Sicherheit: Schutz der Datenstrukturen (Locks, synchronize, copy-on-write, immutable) Kompromiss: Aufwand, Performance, Heap, GC Wie viele CPUs? Arbeit wie unterteilen? Was sind die Tasks/Jobs? Eingabe Verarbeitung Ausgabe Nachrichten empfangen (Schnell annehmen, Puffer für folgende Nachrichten frei halten) Verarbeitung später in Jobs Nachrichten senden (Antworten und Updates, mindestens so schnell senden können, wie Gegenseite abnimmt; Gegenseite sollte schneller abnehmen können, als gesendet wird) Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 8

Job-Arten Dauerlast Preise neu berechnen, Quotes senden Interaktiv Felder lesen/setzen, persistieren Instrumente erzeugen Instrumente zuweisen Statusänderungen (KO, Verfall, Sperrungen) Plausibilität freigeben zeitkritisch vs Batchbetrieb alle Jobs so schnell wie möglich abarbeiten (Feedback am Frontend) Operationen, die sich am Markt auswirken DB-Operationen weniger zeitkritisch (nur dann zu spät, wenn Server vorher abstürzt sich mit einer Fehlermeldung beendet) Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 9

Tücken: Frühe Fallen Synchronisation GC da kann eigentlich nichts passieren eigene Hardware (2 Threads) vs Zielhardware (16 Threads) Loops über Collections Sichtbarkeit Default-GC auf Servern: Parallel GC - viel zu lange Pausen Umstieg auf CMS: Full GCs: noch längere Pausen, extensives Tuning des Heap-Verbrauchs Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 10

Tücken: GC Heap-Regionen: Generationen neue/junge Objekte, oft kurzlebig alte Objekte, bleiben oft die gesamte Laufzeit erhalten GC versucht, junge Objekte möglichst schnell und effizient zu bereinigen GC-Arten in Oracle Java 8 Seriell: Stoppt alles, kompaktiert durch Kopieren der Objekte, nur ein Thread, nur für kleine Heaps Parallel Scavenge: parallele Implementation, Default in Java 8 Concurrent Mark Sweep: Anwendung nur noch für Young Collection gestoppt, OldGen größtenteils nebenläufig, neigt zu Fragmentierung Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 11

Tücken: GC GC-Arten in Oracle Java 8 G1: seit 1.7, Heap in Kacheln aufgeteilt, keine starren Generationen mehr, größerer Overhead als CMS (RAM und CPU), bislang keine Verbesserungen der GC-Pausen (in Java 9 wird alles besser) Shenandoah: Open Source, RedHat-Entwicklung, benötigt OS-Unterstützung von Linux, verbesserte Pausenzeiten Pauseless Garbage Collection (C4 Collector): Azul Zing, benötigt OS-Unterstützung von Linux, GC in < 30 ms bei 200 GB Heaps Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 12

Tücken: GC Allokationen vermeiden, Objekte wiederverwenden Strings durch StringBuilder ersetzen häufige Allokationen finden Heap-Verbrauch im Auge behalten String.intern() für langlebige Strings Heap-Verbrauch durch fremden Code: JDK-Klassen, andere Bibliotheken Profiler für CPU und RAM Optimierung des Heap-Verbrauchs Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 13

Optimierung Verfrühte Optimierung ist die Ursache allen Übels nur im historischen Kontext richtig Performance-Metrik Durchsatz oder Latenz? Beides! Werkzeuge Visual VM: CPU Sampling zeigt Verbrauch der Methoden, erste Hinweise für Optimierungsziele YourKit: CPU Sampling mit Aufrufstack, bessere Verfolgung der Aufrufe, viele andere Daten, komfortabel Oracle Studio: Zugriff auf Hardware Counter, Cache Misses, IPC Werte Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 14

Beispiele: Profiler CPU Time % Inc CPU Time % C/I Instr % Cyc % L3 Miss % Name 100.00 100.00 1.372 100.00 100.00 100.00 <Total> 15.36 15.49 15.854 1.38 15.98 2.49 GenericTaskQueueSet<Padded<GenericTaskQueue<oopDesc*, (MemoryType)5, (unsigned int)131072>, (unsigned long)64>, (MemoryType)5>::steal_best_of_2(unsigned int, int*, oopdesc*&) 13.22 13.23 10.054 1.86 13.63 10.39 6.45 9.39 0.385 23.71 6.65 0.02 <static>@0x13f50 (<librendite.so>) de.icubic.mm.server.instruments.data.volatilities.getadjustedvola(double, java.util.concurrent.atomic.atomicreference) 3.87 3.87 0.727 6.98 3.70 0.03 sun.misc.unsafe.park(boolean, long) 3.23 6.64 0.708 3.53 1.82 0.02 3.07 3.07 0.706 5.63 2.90 0.03 java.lang.object.wait(long) 1.89 1.89 1.369 1.97 1.96 0.01 ieee754_exp_avx 1.54 19.91 8.679 0.29 1.83 0.95 ParEvacuateFollowersClosure::do_void() 1.13 1.13 0.747 1.76 0.96 0.01 java.lang.thread.sleep(long) de.icubic.mmkf.mmkf4java.implvolabn(int, double, double, int, int, double, double, int, long, int, int, int, double, int) 1.03 2.36 0.581 2.31 0.98 0.61 InstanceKlass::oop_oop_iterate_nv_m(oopDesc*, FilteringClosure*, MemRegion) Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 15

Beispiele: Profiler CPU Time % Inc CPU Time % C/I Instr % Cyc % L3 Miss % Name 100.00 100.00 1.372 100.00 100.00 100.00 <Total> 0.00 65.15 0. 0. 0. 0. java.lang.thread.run() 0.01 58.94 3.194 0.00 0.01 0.01 java.util.concurrent.threadpoolexecutor.runworker(java.util.concurrent.threadpoolexecutor$worker) 0. 58.94 0. 0. 0. 0. java.util.concurrent.threadpoolexecutor$worker.run() 0.00 24.46 1.250 0.00 0.00 0. GangWorker::loop() 0.00 24.40 0. 0. 0.00 0.00 ParNewGenTask::work(unsigned int) 1.54 19.91 8.679 0.29 1.83 0.95 ParEvacuateFollowersClosure::do_void() 0.00 17.55 2.500 0.00 0.00 0.00 de.icubic.mm.server.pricing.optionpricesource.calculateprice(de.icubic.mm.server.pricing.iwarrant, boolean) 0.02 17.48 3.397 0.01 0.02 0.16 de.icubic.mm.server.pricing.certificatepricesource.docalculate() 0.00 17.40 1.090 0.00 0.00 0.08 de.icubic.mm.server.pricing.certificatepricesource.calculateparts(de.icubic.mm.server.instruments.warrant, java.lang.iterable) Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 16

Beispiele: Profiler CPU Time % Inc CPU Time % C/I Instr % Cyc % L3 Miss % Name 100.00 100.00 1.372 100.00 100.00 100.00 <Total> 13.22 13.23 10.054 1.86 13.63 10.39 de.icubic.mm.server.instruments.data.volatilities.getadjustedvola(double, java.util.concurrent.atomic.atomicreference) 0.97 0.97 1.389 0.99 1.00 4.61 java.util.concurrent.locks.abstractqueuedsynchronizer.compareandsetstate(int, int) 0.45 2.41 5.387 0.11 0.45 2.78 de.icubic.mm.server.pricing.pricingentity.invalidate(boolean, java.lang.object) 15.36 15.49 15.854 1.38 15.98 2.49 GenericTaskQueueSet<Padded<GenericTaskQueue<oopDesc*, (MemoryType)5, (unsigned int)131072>, (unsigned long)64>, (MemoryType)5>::steal_best_of_2(unsigned int, int*, oopdesc*&) 0.74 0.74 6.734 0.16 0.77 2.36 java.util.concurrent.locks.abstractqueuedsynchronizer.getstate() 0.80 1.01 3.086 0.36 0.82 2.02 java.util.hashmap.getnode(int, java.lang.object) 0.50 0.50 4.947 0.14 0.50 1.97 java.util.concurrent.atomic.atomicreference.get() 0.26 0.53 10.665 0.04 0.28 1.80 de.icubic.mm.server.utils.visitor.visit(de.icubic.mm.server.utils.cowarraylist, de.icubic.mm.server.utils.visitor) 0.19 0.19 2.237 0.12 0.20 1.79 java.util.concurrent.atomic.atomicreference.compareandset(java.lang.object, java.lang.object) 0.29 0.66 7.231 0.06 0.30 1.72 org.hibernate.collection.internal.persistentset.iterator() Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 17

Beispiele: Profiler for ( int j = 0; j < cols; j++) { try { adjustparam = pricemovesarray[ j]; } catch ( ArrayIndexOutOfBoundseption e) { adjustparam = 0; } catch ( NullPointereption npe) { adjustparam = 0; } final double offset = delta * adjustparam; for ( int i = 0; i < rows; i++) { result[i][j] = volaarray[i][j] + offset; } } double[] offsets = new double[ pricemovesarray.length]; for ( int j = 0; j < cols; j++) { try { adjustparam = pricemovesarray[ j]; } catch ( ArrayIndexOutOfBoundseption e) { adjustparam = 0; } catch ( NullPointereption npe) { adjustparam = 0; } final double offset = delta * adjustparam; offsets[ j] = offset; } for ( int i = 0; i < rows; i++) { for ( int j = 0; j < cols; j++) { result[ i][ j] = volaarray[ i][ j] + offsets[ j]; } } Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 18

Beispiele: Profiler CPU Time % Inc CPU Time % C/I Instr % Cyc % L3 Miss % Name 100.00 100.00 1.372 100.00 100.00 100.00 <Total> 0.97 0.97 1.389 0.99 1.00 4.61 de.icubic.mm.server.instruments.data.volatilities.getadjustedvola(double, java.util.concurrent.atomic.atomicreference) CPU Time % Inc CPU Time % C/I Instr % Cyc % L3 Miss % Name 100.00 100.00 1.372 100.00 100.00 100.00 <Total> 13.22 13.23 10.054 1.86 13.63 10.39 de.icubic.mm.server.instruments.data.volatilities.getadjustedvola(double, java.util.concurrent.atomic.atomicreference) Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 19

Kontakt Ralf Helbing icubic AG ralf.helbing@icubic.de icubic AG Headquarters Mittelstraße 10 39114 Magdeburg René Stäudte DZ BANK AG icubic AG Firmensitz München Bülowstr. 27 81679 München icubic AG Firmensitz Frankfurt am Main Rahmhofstr. 2-4 60313 Frankfurt am Main Full-Service-Dienstleistungen für die internationale Finanzwirtschaft 18.05.2017-20