02.08.2013 Aufrufe

MySQL Cluster - Computer Architecture Group

MySQL Cluster - Computer Architecture Group

MySQL Cluster - Computer Architecture Group

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>MySQL</strong> <strong>Cluster</strong><br />

Vortrag im Rahmen des Seminars<br />

„Ausgewählte Themen in Hardwareentwurf und Optik“<br />

15.12.2008 Philipp Bachmann 1


1) Einführung<br />

2) System-Architektur<br />

3) Hohe Verfügbarkeit<br />

4) Performance<br />

5) Fazit<br />

Inhalt<br />

15.12.2008 Philipp Bachmann 2


Motivation<br />

DB oft zentraler Bestandteil eines Software-Systems<br />

Verfügbarkeit der Daten wichtig<br />

z.B. bedeutet Ausfall bei Onlineshop:<br />

Imageschaden/Verärgerte Kunden<br />

Umsatzeinbußen<br />

Beispiel Neckermann: Session-Daten des Online-Shops<br />

500.000 Anfragen pro Tag<br />

<strong>MySQL</strong> <strong>Cluster</strong> erfüllt Anforderungen:<br />

Hohe Performance und Ausfallsicherheit bei<br />

geringen Kosten<br />

15.12.2008 Philipp Bachmann 3


Von <strong>MySQL</strong> ...<br />

Relationale Datenbank<br />

Daten in Tabellen gespeichert<br />

Spalten/Attribute - ArtikelNr, ArtikelBez,<br />

Zeilen/Datensätze – ein Artikel<br />

Abfragesprache: Structured Query Language (SQL)<br />

SELECT * FROM tblArtikel WHERE ArtikelNr = 5<br />

Verknüpfung von Tabellen über gemeinsame Attribute<br />

SELECT * FROM Bestellung AS b INNER JOIN tblArtikel AS<br />

a WHERE a.ArtikelNr = b.ArtikelNr AND b.BestellNr = 42<br />

Primary Key: Eindeutige Identifizierung eines Datensatzes<br />

Client/Server Architektur<br />

ArtikelNr ArtikelBez<br />

…<br />

1 Auto …<br />

2 Wein ...<br />

5 DVD ...<br />

6 Buch ...<br />

15.12.2008 Philipp Bachmann 4


… und Transaktionen ...<br />

Transaktion: Gruppe von SQL Anweisungen die als atomar<br />

angesehen werden<br />

Beispiel: Bestellung eines Artikels<br />

START TRANSACTION<br />

SELECT Anzahl FROM tblLager WHERE ArtikelNr = 5<br />

UPDATE tblLager SET Anzahl = Anzahl – 1 WHERE AritkelNr = 5<br />

COMMIT<br />

ACID-Transaktionen<br />

Atomicity – ganz oder gar nicht<br />

Consistency – der Daten vor und nach Transaktion<br />

Isolation – keine gegenseitige Beeinflussung<br />

Durability – erfolgreiche Transaktion ist dauerhaft<br />

15.12.2008 Philipp Bachmann 5


Client<br />

PHP Skript<br />

Java Client<br />

<strong>MySQL</strong> Console<br />

… über Storage Engines ...<br />

SQL Query<br />

<strong>MySQL</strong> Server<br />

Tabellen in Storage Engines gespeichert<br />

MyISAM: disk based, schnell, keine Transaktionen<br />

Memory: memory based, sehr schnell<br />

InnoDB: disk based, ACID Unterstützung, mehr<br />

Overhead<br />

Abstraktionsschicht<br />

Parse Optimize<br />

MyISAM<br />

InnoDB<br />

15.12.2008 Philipp Bachmann 6<br />

Memory<br />

Retrieve/<br />

Store<br />

NDB<br />

<strong>MySQL</strong> Database<br />

Management Level<br />

Storage Engine<br />

Level


… zu <strong>MySQL</strong> <strong>Cluster</strong><br />

NDB (Network Database)<br />

Storage Engine von <strong>MySQL</strong> <strong>Cluster</strong><br />

Einfache Migration<br />

Gleiche Client-Anwendungen nutzbar<br />

SQL: ALTER TABLE tblArtikel ENGINE=NDB<br />

Achtung bei Performance + besonderen Features<br />

MyISAM<br />

<strong>MySQL</strong> Server<br />

InnoDB<br />

Memory<br />

NDB<br />

<strong>MySQL</strong> <strong>Cluster</strong><br />

???<br />

15.12.2008 Philipp Bachmann 7


<strong>MySQL</strong> <strong>Cluster</strong> - Features<br />

99,999% Verfügbarkeit<br />

Kein Single Point of Failure durch eine verteilte,<br />

fehlertolerante Architektur<br />

Automatischer, schneller Failover<br />

Kosteneffizient<br />

OpenSource, commodity off-the-shelf<br />

Hohe Performance<br />

In-memory Datenbank, Parallelisierung<br />

Skalierbar je nach benötigten Ressourcen<br />

15.12.2008 Philipp Bachmann 8


1) Einführung<br />

2) System-Architektur<br />

3) Hohe Verfügbarkeit<br />

4) Performance<br />

5) Fazit<br />

Inhalt<br />

15.12.2008 Philipp Bachmann 9


Allgemeines zur Architektur<br />

3 Knotentypen<br />

Data Node: Speichert<br />

und repliziert Daten<br />

Application Node:<br />

Verarbeitet Daten<br />

Management Node<br />

Shared Nothing Architektur<br />

Transporter: TCP/IP, SCI,<br />

Shared Memory<br />

<strong>MySQL</strong> <strong>Cluster</strong><br />

NDB API<br />

NDB Storage Engine<br />

15.12.2008 Philipp Bachmann 10


Management Node<br />

Nodes beziehen <strong>Cluster</strong>-Konfiguration vom MGM Node<br />

Nur beim Starten/Rekonfigurieren von Nodes benötigt<br />

Kein schneller Rechner nötig<br />

Arbiterfunktion im Fehlerfall<br />

Backup-MGM Nodes möglich<br />

Administration des <strong>Cluster</strong>s über MGM-Konsole<br />

show status<br />

shutdown<br />

Config<br />

Config<br />

15.12.2008 Philipp Bachmann 11


Data Node<br />

Speichert Datensätze in<br />

a) RAM<br />

b) RAM + HDD (mit Page Cache)<br />

Partitioning: Zeilen einer Tabelle auf Data Nodes verteilen<br />

per Hash-Funktion: MD5(Primary Key)<br />

Transaction Coordinator (TC)<br />

Tabellen<br />

Bearbeitet eine Transaktion eines SQL Nodes<br />

Wickelt COMMIT und ROLLBACK ab<br />

Data Req.<br />

Data<br />

Local Query Handler: Bearbeitet Anfragen von TCs<br />

Checkpoints zum Speichern der Daten auf HDD<br />

Verarbeitung<br />

der Daten<br />

15.12.2008 Philipp Bachmann 12


Transaction Coordinator<br />

Erste Anfrage einer Transaktion bestimmt Position des TC<br />

Bei Zugriff über Primary Key<br />

Application Node berechnet MD5(Primary Key)<br />

Abbildungsfunktion liefert Data Node mit Daten<br />

TC auf diesem platziert<br />

Ansonsten: Round Robin Verfahren<br />

START TRANSACTION<br />

SELECT * FROM tblArtikel WHERE AritkelNr=23<br />

…<br />

COMMIT<br />

MD5(23) → Data Node 2<br />

Transaction<br />

Coordinator<br />

ArtikelNr …<br />

6 ...<br />

17 ...<br />

ArtikelNr<br />

…<br />

23 ...<br />

29 ...<br />

15.12.2008 Philipp Bachmann 13


Application Node<br />

Normaler <strong>MySQL</strong> Server<br />

Standard SQL Interface<br />

Interner Zugriff auf NDB<br />

Storage Engine über NDB API<br />

Alternative: Zugriff über NDB API<br />

NDB Storage Engine<br />

Für C++ (NDB API) und Java (NDB/J) vorhanden<br />

Mehr als 3 mal so schnell, jedoch kein SQL<br />

Kombination sinnvoll<br />

Java<br />

Applikation<br />

SQL<br />

<strong>MySQL</strong><br />

Server<br />

NDB API<br />

<strong>MySQL</strong> Server: Auswertungen und Wartung<br />

NDB API: Performance-kritische Anfragen<br />

NDB API<br />

Load Balancing (extern) bei mehreren Application Nodes<br />

Java<br />

Applikation<br />

NDB API<br />

15.12.2008 Philipp Bachmann 14


PHP<br />

Skript<br />

1<br />

Transaction<br />

Coordinator<br />

Auto, Buch, DVD, Wein<br />

SELECT ArtikelBez<br />

FROM tblArtikel<br />

ORDER BY ArtikelBez<br />

Beispielanfrage<br />

Auswahl nach<br />

Round Robin<br />

5<br />

3<br />

6<br />

2<br />

Auto, Wein,<br />

DVD, Buch<br />

DVD, Buch<br />

tblArtikel: tblArtikel:<br />

<strong>MySQL</strong> <strong>Cluster</strong><br />

ArtikelNr ArtikelBez …<br />

ArtikelNr ArtikelBez …<br />

1 Auto …<br />

5 DVD ...<br />

2 Wein ...<br />

6 Buch ...<br />

15.12.2008 Philipp Bachmann 15<br />

4<br />

Local<br />

Query<br />

Handler


1) Einführung<br />

2) System-Architektur<br />

3) Hohe Verfügbarkeit<br />

4) Performance<br />

5) Fazit<br />

Inhalt<br />

15.12.2008 Philipp Bachmann 16


Ziel: 99.999% Verfügbarkeit<br />

Hohe Verfügbarkeit<br />

Problem: Ausfall von Knoten oder Netzwerkverbindungen<br />

Strategie<br />

Fehlerfall erkennen<br />

Betrieb aufrecht erhalten<br />

Bedingung: Kopie der Daten vorhanden<br />

a) Innerhalb des <strong>Cluster</strong>s<br />

b) In anderem Ersatz-<strong>Cluster</strong><br />

Normalbetrieb wiederherstellen<br />

15.12.2008 Philipp Bachmann 17


Synchronous Replication<br />

Replik auf andere Data Nodes des <strong>Cluster</strong><br />

Synchronous: Warte bis Daten auf anderen Data Node<br />

kopiert wurden<br />

Sehr kurze Failover Time: < 1s<br />

Erhöhte Response Zeit bei Anfragen<br />

Two Phase Commit Protocol (Update und Commit)<br />

0 bis 4 Repliken wählbar<br />

Node <strong>Group</strong>: Satz von Data Nodes, die alle die gleichen<br />

Daten speichern<br />

15.12.2008 Philipp Bachmann 18


tblArtikel<br />

Auto<br />

Buch<br />

PC<br />

Mixer<br />

Synchronous Replication<br />

NumOfReplicas = 2<br />

Node <strong>Group</strong> 1<br />

tblArtikel<br />

Auto<br />

Buch<br />

PC<br />

Mixer<br />

Primäre Replik Sekundäre Replik<br />

tblArtikel<br />

DVD<br />

Wein<br />

Node <strong>Group</strong> 2<br />

tblArtikel<br />

DVD<br />

Wein<br />

15.12.2008 Philipp Bachmann 19


tblArtikel<br />

Auto<br />

Buch<br />

PC<br />

Mixer<br />

Transaction<br />

Coordinator<br />

Update :<br />

Commit:<br />

Synchronous Replication<br />

NumOfReplicas = 2<br />

Node <strong>Group</strong> 1<br />

tblArtikel<br />

Auto<br />

Buch<br />

PC<br />

Mixer<br />

2<br />

Primäre Replik Sekundäre Replik<br />

5<br />

tblArtikel<br />

DVD<br />

Wein<br />

CD<br />

Node <strong>Group</strong> 2<br />

tblArtikel<br />

DVD<br />

Wein<br />

CD<br />

6<br />

Local Query<br />

....<br />

1<br />

Handlers<br />

INSERT INTO tblArtikel (ArtikelNr, AritkelBez, ...) VALUES (7, 'CD', …)<br />

COMMIT<br />

15.12.2008 Philipp Bachmann 20<br />

3<br />

4


tblArtikel<br />

Auto<br />

Buch<br />

PC<br />

Mixer<br />

Transaction<br />

Coordinator<br />

Update :<br />

Commit:<br />

Synchronous Replication<br />

NumOfReplicas = 2<br />

Node <strong>Group</strong> 1<br />

tblArtikel<br />

Auto<br />

Buch<br />

PC<br />

Mixer<br />

4<br />

2a<br />

Primäre Replik Sekundäre Replik<br />

3a<br />

tblArtikel<br />

DVD<br />

Wein<br />

CD<br />

Node <strong>Group</strong> 2<br />

tblArtikel<br />

DVD<br />

Wein<br />

CD<br />

....<br />

1<br />

INSERT INTO tblArtikel (ArtikelNr, AritkelBez, ...) VALUES (7, 'CD', …)<br />

COMMIT<br />

15.12.2008 Philipp Bachmann 21<br />

2b<br />

3b


Row-based Replication<br />

Repliziere Daten von einem <strong>MySQL</strong> Server/<strong>Cluster</strong> zu<br />

einem anderem <strong>MySQL</strong> Server/<strong>Cluster</strong><br />

Anwendungen<br />

Hohe Verfügbarkeit<br />

<strong>MySQL</strong> <strong>Cluster</strong> → <strong>MySQL</strong> <strong>Cluster</strong><br />

Für Wartungs- und Auswertungsarbeiten<br />

Testumgebung<br />

Geographische Replikation<br />

Entferntes Rechenzentrum<br />

Read/Write Scalability<br />

15.12.2008 Philipp Bachmann 22


Row-based Replication<br />

Row-based: Änderungen in einzelnen Zeilen werden<br />

repliziert<br />

Master/Slave Architektur<br />

Hierarchien möglich<br />

Asychronous: Keine Garantie, dass Slave schon<br />

Änderungen des Masters übernommen hat (z.B. Lag)<br />

Mehrere Replication Channel<br />

NDB binlog injector thread<br />

Läuft auf dem Replication Master (<strong>MySQL</strong> Server)<br />

Empfängt alle Änderungen von der NDB Storage-<br />

Engine und erzeugt binlog<br />

15.12.2008 Philipp Bachmann 23


Quelle: [1]<br />

Row-based Replication<br />

15.12.2008 Philipp Bachmann 24


Verbindungsprobleme<br />

Fehlerdetektion<br />

Bemerkt von anderen Knoten<br />

Heartbeat Protocol: Hohe Auslastung, Speicherprobleme<br />

Anordnung der Data Nodes als Ring<br />

3 fehlende Heartbeats<br />

=> Node ausgefallen<br />

Andere Knoten werden über<br />

Ausfall informiert<br />

15.12.2008 Philipp Bachmann 25


Network Partition Protocol<br />

Prüft ob Netzwerk in 2 Teile aufgespaltet wurde<br />

Ziel: Dateninkonsistenz vermeiden bei Split-Brain Szenario<br />

Teilnetz wird als <strong>Cluster</strong> angesehen falls:<br />

Mehr als Hälfte der Data Nodes im Teilnetz<br />

Bei genau der Hälfte entscheidet Arbiter<br />

NumOfReplicas = 3<br />

Node <strong>Group</strong> 1<br />

Node <strong>Group</strong> 2<br />

15.12.2008 Philipp Bachmann 26


Fehlerszenarien<br />

MGM Node: Bei Bedarf neu starten<br />

Application Node<br />

Data Node<br />

Applikation nutzt anderen Application Node<br />

Fehlerhafter Knoten verbindet sich neu zum <strong>Cluster</strong><br />

Anfragen gehen an anderen Data Node der Node<br />

<strong>Group</strong> (Replika vorhanden)<br />

Laufende Transaktionen des Data Nodes werden<br />

abgebrochen und Applikation startet sie erneut<br />

Ausgefallener Knoten bezieht seine Partition von<br />

anderem Knoten der Node<strong>Group</strong><br />

15.12.2008 Philipp Bachmann 27


1) Einführung<br />

2) System-Architektur<br />

3) Hohe Verfügbarkeit<br />

4) Performance<br />

5) Fazit<br />

Inhalt<br />

15.12.2008 Philipp Bachmann 28


Performance<br />

Operationen auf einzelnen Datensätzen sehr schnell<br />

z.B: INSERT INTO tblArtikel (51, 'CD', ...)<br />

Batching<br />

Parallele Ausführung<br />

Skaliert mit Anzahl Data und Application Nodes<br />

Latenz durch Replikation und Architektur<br />

Langsamer als andere Storage Engines<br />

SELECT * FROM tblArtikel WHERE ArtikelNr IN<br />

(1,2,3,4,5,6,7,8,9,10)<br />

Spart Latenz und Query Parsing/Optimization<br />

2-3 mal so schnell<br />

15.12.2008 Philipp Bachmann 29


PHP<br />

Skript<br />

1<br />

Transaction<br />

Coordinator<br />

tblArtikel:<br />

Condition Pushdown<br />

CD, DVD<br />

SELECT ArtikelBez<br />

FROM tblArtikel<br />

WHERE TypNr = '42'<br />

Auswahl nach<br />

Round-Robin<br />

5<br />

3<br />

6<br />

2<br />

CD, DVD<br />

DVD<br />

Parallele<br />

Suche<br />

<strong>MySQL</strong> <strong>Cluster</strong><br />

15.12.2008 Philipp Bachmann 30<br />

4<br />

Übernimmt<br />

Verarbeitung<br />

tblArtikel:<br />

ArtikelNr ArtikelBez TypNr …<br />

ArtikelNr ArtikelBez TypNr …<br />

1 Auto 87 …<br />

5 Mixer 2 …<br />

2 CD 42 ...<br />

34 DVD 42 ...


Join<br />

SELECT * FROM tblBestellung AS b INNER JOIN tblArtikel AS a<br />

WHERE a.ArtikelNr = b.ArtikelNr AND b.BestellNr = 42<br />

Join wird im <strong>MySQL</strong> Server berechnet<br />

Komplette Tabelle Artikel benötigt<br />

Erfordert hohe Bandbreite<br />

Extrem langsam<br />

➔ Joins wenn möglich vermeiden<br />

Verknüpfung<br />

der Tabellen<br />

Data Request<br />

tblBestellung<br />

mit Nr = 42 tblArtikel<br />

NDB<br />

STORAGE<br />

ENGINE<br />

tblArtikel<br />

15.12.2008 Philipp Bachmann 31


3 Schichten der Skalierbarkeit<br />

Applikation Applikation Applikation<br />

NDB <strong>Cluster</strong><br />

Applikationsschicht<br />

<strong>MySQL</strong> Schicht<br />

Data Node Schicht<br />

15.12.2008 Philipp Bachmann 32


DBT2 Benchmark<br />

Freie Implementierung des TPC-C Tests<br />

Spezielle Version für <strong>MySQL</strong> <strong>Cluster</strong><br />

Simuliert typische e-Commerce Anwendung<br />

Großhandel mit mehreren Warenlagern und<br />

Verkaufsgebieten<br />

Zufällige Auswahl von 5 Transaktionstypen<br />

New Order, Delivery, Order Status, Payment,<br />

Stock Level<br />

Je 10-20 SQL Anweisungen<br />

Ergebnis: New Order Transactions Per Minute (NOTPM)<br />

15.12.2008 Philipp Bachmann 33


NOTPM<br />

20000<br />

18000<br />

16000<br />

14000<br />

12000<br />

10000<br />

8000<br />

6000<br />

4000<br />

2000<br />

0<br />

Benchmark Results<br />

NoOfReplicas 2 NoOfReplicas 4<br />

+90%<br />

+72%<br />

0 1 2 3 4 5 6<br />

<strong>MySQL</strong> Servers<br />

Avg. Resp. Time: 42 ms<br />

+64%<br />

Avg. Resp. Time: 50ms<br />

4 Data Nodes, 1 MGM Node, 1 Warenlager pro <strong>MySQL</strong> Server, 10 Terminals pro Warenlager<br />

Gigabit Ethernet, AMD Opteron Prozessor 2.2 Ghz, 4 GB RAM<br />

15.12.2008 Philipp Bachmann 34


NOTPM<br />

30000<br />

25000<br />

20000<br />

15000<br />

10000<br />

5000<br />

Benchmark Results<br />

4 <strong>MySQL</strong> Server #<strong>MySQL</strong>=#Data Nodes<br />

+9%<br />

+83%<br />

0<br />

0 1 2 3 4 5 6<br />

Data Nodes<br />

NoOfReplicas 1, 1 MGM Node, 2 Warenlager pro <strong>MySQL</strong> Server, 10 Terminals pro Warenlager<br />

Gigabit Ethernet, AMD Opteron Prozessor 2.2 Ghz, 4 GB RAM<br />

15.12.2008 Philipp Bachmann 35


Fazit<br />

Nicht geeignet für viele typische DB Anwendungen<br />

Komplexe Joins, Latenz<br />

Anpassung an <strong>Cluster</strong>-Architektur nötig<br />

Sehr hohe Verfügbarkeit<br />

Nach Anpassung:<br />

Gute Skalierbarkeit<br />

Gute Performance<br />

Eingesetzt von Neckermann, Nokia, Alcatel-Lucent, Italtel, Toto-Lotto Niedersachsen<br />

15.12.2008 Philipp Bachmann 36


Quellen (1/2)<br />

[1] <strong>MySQL</strong> <strong>Cluster</strong> New Features - Updated for 6.2 and 6.3<br />

http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster63.php<br />

[2] <strong>MySQL</strong> <strong>Cluster</strong>ing<br />

Alex Davies, Harrison Fisk<br />

<strong>MySQL</strong> Press - 2006<br />

[3] High Performance <strong>MySQL</strong>: Optimization, Backups, Replication, and More<br />

Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, and Jeremy Zawodny<br />

O'Reilly Media, Inc. - 2008<br />

[4] <strong>MySQL</strong> 5.1 <strong>Cluster</strong> DBA Certification Study Guide<br />

Jon Stephens, Mike Kruckenberg, Roland Bouman, Stewart Smith, Solomon Chang<br />

Lulu Enterprises - 2007<br />

[5] <strong>MySQL</strong> 5.1 Reference Manual<br />

http://dev.mysql.com/doc/refman/5.1/en/index.html<br />

15.12.2008 Philipp Bachmann 37


Quellen (2/2)<br />

[6] <strong>MySQL</strong> <strong>Cluster</strong> <strong>Architecture</strong> Overview - High Availability Features of <strong>MySQL</strong> <strong>Cluster</strong><br />

http://www.mysql.com/why-mysql/white-papers/cluster-technical.php<br />

[7] <strong>MySQL</strong> <strong>Cluster</strong> Evaluation Guide - Getting the most out of a <strong>MySQL</strong> <strong>Cluster</strong> evaluation<br />

http://www.mysql.com/why-mysql/white-papers/mysql_cluster_eval_guide.php<br />

[8] A Guide to High Availability <strong>Cluster</strong>ing - How <strong>MySQL</strong> Supports 99.999% Availability<br />

http://www.mysql.com/why-mysql/white-papers/cluster.php<br />

[9] Benchmarking Highly Scalable <strong>MySQL</strong> <strong>Cluster</strong>s - Measuring the performance of highly scalable<br />

<strong>MySQL</strong> <strong>Cluster</strong>s on Multi Core Intel Xeon servers with Dolphin Express interconnect<br />

http://www.mysql.com/why-mysql/white-papers/mysql_cge_benchmarks_wp_april2007.php<br />

[10] neckermann.de achieves cost-effective - database scalability with <strong>MySQL</strong> <strong>Cluster</strong><br />

http://www.mysql.com/why-mysql/case-studies/mysql_cs_neckermann.pdf<br />

Alle Onlinequellen zuletzt besucht am 23.11.2008.<br />

15.12.2008 Philipp Bachmann 38


Distribution Awareness<br />

Ziel: Latenz vermeiden<br />

Strategie: Datenlokalität ausnutzen<br />

Beispiel: Bestellungen eines Kunden auf selben Data Node<br />

PRIMARY KEY(BestellNr, KundenNr);<br />

PARTITION BY KEY (KundenNr);<br />

TC wird auf Data Node mit Daten platziert<br />

Keine Kommunikation mit anderen Data Nodes nötig<br />

Bei 4 Data Nodes um 30%, bei ≥ 8 100%-200% schneller<br />

15.12.2008 Philipp Bachmann 39

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!