Softwarekonferenz für parallele
und hochperformante Programmierung
Heidelberg, Print Media Academy, 19.–22. Februar 2019

// How to Get More Bang for the Buck: Parallelisierung im Adserving-Kontext

Die wachsende Reichweite von Programmatic Advertising durch Realtime-Bidding stellt immer höhere Anforderungen an die Leistungsfähigkeit moderner Adserving-Plattformen. Parallelisierung ermöglicht, vorhandene Rechenkapazität optimal auszunutzen und schnelle Antwortzeiten zu garantieren.

Dieser Vortrag fasst unsere Erfahrungen mit der Parallelisierung des Adservers zusammen:

1. Analyse des Systems, um das Skalierungspotenzial zu erkennen,
2. Einführung eines zentralen Thread-Managements und Profilings,
3. Auswahl geeigneter Synchronisation für geteilte Datenstrukturen und
4. A/B Testing.

Wir konnten erreichen, die Anzahl der Service-Knoten um den Faktor 10 zu reduzieren.

Vorkenntnisse
* Modernes C++
* Programmierung mit Threads
* Keine Grundlagen Online-Marketing benötigt.

Lernziele
* Erkennen von Bottlenecks durch zentrales Thread-Management und hardwarebasiertes Profiling (IPC)
* Einführung effizienter Thread-Pools und Erkennen von Backpressure
* Synchronisation mit C++17 (std::thread, std::atomic, std::shard_ptr) und Facebooks libfolly (folly::Synchronized, folly::SharedMutex, folly::MPMCQueue).
* Zusammenhang zwischen Deadlock, Starvation und non-blocking (lock-free) Synchronisation
* Verbindung von Lock und Datenstruktur, um nicht synchronisierte Zugriffe zur Compile-Zeit zu erkennen
* Vermeidung von Deadlocks durch Ordnung der Locks in der Ausführungspipeline
* Fairness zur Prävention von Starvation konkurrierender Lese- und Schreibzugriffe
* Haltezeit von Locks reduzieren durch Swap-Operationen
* Deterministische Ausführung als Voraussetzung für A/B-Tests mittels Request-Duplikation im Loadbalancer


// Jons-Tobias Wamhoff Jons-Tobias Wamhoff

ist Backend-Entwickler bei ADITION Technologies AG und beschäftigt sich mit der vertikalen und horizontalen Skalierung der Adserver-Komponenten. Dr. Wamhoff promovierte auf dem Gebiet paralleler Systeme und publizierte auf internationalen Konferenzen Beiträge über die Programmierung von Many-Core-Prozessoren, z.B. mit Software Transactional Memory oder fehlertoleranten Systemen.


// Jonas Sternisko

ist Backend-Entwickler bei ADITION Technologies AG. Seine Entwicklungsschwerpunkte liegen auf Algorithmen zur Zielgruppenanalyse, wahrscheinlichkeitsbasierten Modellen zur Vorhersage von Website-Traffic und dem Testen verteilter Systeme. Zuvor entwickelte er effiziente Algorithmen zur Routenplanung an der Universität Freiburg.