16.11.2013 Aufrufe

2.8 Schwache Konsistenz (3) 2.8 Schwache Konsistenz (4)

2.8 Schwache Konsistenz (3) 2.8 Schwache Konsistenz (4)

2.8 Schwache Konsistenz (3) 2.8 Schwache Konsistenz (4)

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>2.8</strong> <strong>Schwache</strong> <strong>Konsistenz</strong> (3)<br />

■<br />

Beispiel<br />

P1<br />

W 1 (x)a<br />

W 1 (x)b Sync 1<br />

P2<br />

P3<br />

Sync 2<br />

W 2 (x)c<br />

R 3 (x)b<br />

R 3 (x)a<br />

t<br />

P4<br />

Sync 4<br />

49<br />

R 4 (x)b<br />

R 4 (x)b<br />

◆ Annahme:<br />

• Sequenz der Synchronisation ist: Sync 1 , Sync 4 , Sync 2<br />

◆ System ist schwach konsistent<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

<strong>2.8</strong> <strong>Schwache</strong> <strong>Konsistenz</strong> (4)<br />

■<br />

Vertrag (Weak Consistency)<br />

◆ Aufrufe von synchronisiere() sind sequentiell konsistent.<br />

◆ Vor dem Aufruf von synchronisiere() werden alle vorherigen<br />

Schreiboperationen abgeschlossen.<br />

◆ Mit dem Aufruf von synchronisiere() werden alle späteren Lese- und<br />

Schreiboperationen verzögert bis alle synchronisiere()-Aufrufe<br />

abgeschlossen sind.<br />

■<br />

Erläuterung<br />

◆ „vorherige“ und „spätere“ bezieht sich auf die Sequenz der sequentiellen<br />

<strong>Konsistenz</strong><br />

◆ gesamter Datenspeicher wird synchronisiert<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

50


<strong>2.8</strong> <strong>Schwache</strong> <strong>Konsistenz</strong> (5)<br />

■<br />

■<br />

Einfache Implementierung<br />

◆ zentraler Server regelt Reihenfolge der Synchronisationen<br />

◆ bei Synchronisation:<br />

• lokaler Datenspeicher verschickt pro Variablenobjekt seinen letzten<br />

Schreibwert (falls vorhanden) an zentralen Server<br />

• lokaler Datenspeicher enthält Schreibwerte anderer Prozesse für<br />

verschiedene lokale Variablenobjekte vom zentralen Server<br />

Komplexere Implementierung<br />

◆ Aktualisierung kann laufend erfolgen<br />

◆ bei Synchronisation:<br />

• Sicherstellung, dass alle Aktualisierungen von lokalen Schreibzugriffen<br />

erfolgt sind<br />

• Sicherstellung, dass alle Aktualisierungen von entfernten<br />

Schreibzugriffen vorheriger Synchronisationen empfangen wurden<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

51<br />

<strong>2.8</strong> <strong>Schwache</strong> <strong>Konsistenz</strong> (6)<br />

▲<br />

★<br />

Nachteil<br />

◆ Datenspeicher kann nicht unterscheiden zwischen<br />

• Beginn eines Blocks von Lesezugriffen<br />

(Synchronisation für aktuelle Werte)<br />

• Ende eines Blocks von Schreibzugriffen<br />

(Verteilen der geschriebenen Werte)<br />

Aufgeteilte Synchronisierungsanweisungen<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

52


2.9 Release-Consistency<br />

■<br />

Zwei Operationen zum Synchronisieren<br />

◆ acquire(): Eintritt in einen Lese-, Schreibblock (kritischer Abschnitt)<br />

• Blockierung bis alle lokalen Datenkopien aktualisiert<br />

◆ release(): Austritt aus einem Lese-, Schreibblock<br />

• Verteilen der geschriebenen Werte<br />

■ Vertrag (Gharachorloo et al., 1990)<br />

◆ Aufrufe von acquire() und release() sind FIFO-konsistent.<br />

◆ Vor dem Lesen und Schreiben werden alle vorherigen acquire()-Aufrufe<br />

abgeschlossen.<br />

◆ Vor einem release()-Aufruf werden alle Lese- und Schreiboperationen<br />

des Prozesses abgeschlossen.<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

53<br />

2.9 Release-Consistency (2)<br />

★<br />

■<br />

■<br />

Vorteil<br />

◆ Lese- und Schreiboperationen können laxer gehandhabt werden<br />

◆ Verteilung geschriebener Werte nur am Ende eines Zugriffsblocks<br />

Implementierung<br />

◆ Beispiel mit zentralem Koordinator:<br />

◆ acquire() entspricht einer Sperrung des kritischen Abschnitts<br />

• zentraler Koordinator weiß über Sperrungen<br />

◆ release() verteilt geschriebene Werte an alle<br />

• anschließend Freigabe der Sperre<br />

Verknüpfung der <strong>Konsistenz</strong> mit Nebenläufigkeitskontrolle<br />

◆ Beispiel: Aktualisierung der Adressdaten eines Personenobjekts unter<br />

gegenseitigem Ausschluss<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

54


2.10 Entry-Consistency<br />

■<br />

★<br />

■<br />

Wie Release-Consistency<br />

◆ aber: Verteilen geschriebener Werte erst kurz vor Zugriff (acquire())<br />

◆ Synchronisierungsvariablen gebunden an eine Menge von Daten<br />

• getrennte Synchronisierung erforderlich<br />

Vorteil<br />

◆ mehrfaches Durchlaufen des kritischen Abschnitts in einem Prozess<br />

erfordert kein Verteilen der Werte<br />

Implementierung<br />

◆ Eignerschaft an Synchronisierungsvariablen<br />

◆ Eigner kann acquire() durchführen und Werte schreiben<br />

◆ mit Übertragung der Eignerschaft werden assoziierte Datenwerte<br />

übertragen<br />

◆ Nur-Lese-Zugriffe möglich (Invalidierungen notwendig)<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

55<br />

2.10 Entry-Consistency (2)<br />

■ Vertrag (Bershad et al., 1993)<br />

◆ Vor dem Aufruf von acquire() müssen alle Aktualisierungen der<br />

geschützten Daten abgeschlossen sein.<br />

◆ Mit dem Aufruf von acquire() muss der aktuelle Prozess exklusiver<br />

Eigner der Synchronisationsvariable sein.<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

56


3 Client-zentrierte <strong>Konsistenz</strong>modelle<br />

■<br />

■<br />

★<br />

Bisher<br />

◆ <strong>Konsistenz</strong> globaler Daten<br />

Häufiger Fall<br />

◆ seltene und zentrale Aktualisierung der Daten<br />

◆ z.B. Namensdienst<br />

◆ z.B. Webseiten<br />

Suche nach vereinfachten <strong>Konsistenz</strong>modellen<br />

◆ betrachtet aus der Sicht eines Client<br />

Prozesse<br />

Replikate<br />

Datenspeicher<br />

Kommunikationsnetz<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

57<br />

3.1 Eventual-Consistency<br />

■<br />

■<br />

Idee<br />

◆ Daten werden letztendlich irgendwann konsistent<br />

Aktualisierung setzt sich nach gewisser Zeit durch<br />

◆ Beispiel: geänderte Webseite wird nach gewisser Zeit veraltete Version in<br />

lokalen Browsercaches ersetzen<br />

◆ Beispiel: Secondary-DNS-Server erhält nach gewisser Zeit neue<br />

Namensbindungen<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

58


3.1 Eventual-Consistency (2)<br />

■<br />

Implementierung<br />

◆ Durchsetzung der aktualisierten Werte<br />

• Epidemische Protokolle<br />

◆ Push-Modell<br />

• nach Time-Out/periodisch werden Daten an alle Replikate gesandt<br />

• z.B. Zonenaktualisierung in DNS<br />

◆ Pull-Modell<br />

• nach Time-Out/periodisch holen Replikate neueste Daten<br />

• z.B. Web-Cache<br />

◆ Push-Pull-Modell<br />

• gegenseitige Aktualisierung zwischen Replikaten<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

59<br />

3.1 Eventual-Consistency (3)<br />

▲<br />

Nachteil<br />

◆ Problem, falls verschiedene Replikate angefragt werden<br />

◆ Beispiel: erst Primary-DNS-Server, dann Secondary (mit veralteten Daten),<br />

dann wieder Primary<br />

• bisherige Daten: name=1.2.3.4<br />

• Aktualisierung im Primary aber noch nicht im Secondary: name=4.3.2.1<br />

• Client sieht zwischendurch veraltete Adresse<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

60


3.2 Monotonic-Reads<br />

■<br />

■<br />

■<br />

Vertrag<br />

◆ Falls ein Prozess einen Wert a aus Datum x gelesen hat, dann wird er<br />

künftig weiterhin a oder einen neueren Wert lesen.<br />

Ähnlich FIFO-<strong>Konsistenz</strong> jedoch hier bezogen auf Leseoperationen<br />

Beispiel<br />

◆ Mailbox: Werte sind Menge von eingegangenen Nachrichten<br />

◆ bei Monotonic-Reads:<br />

• bei Betrachtung des Mailbox-Replikats A ist Nachricht x eingegangen<br />

• bei späterer Betrachtung des Mailbox-Replikats B ist Nachricht x<br />

ebenfalls eingegangen (und evtl. zusätzliche weitere Nachrichten)<br />

• Nachricht x kann nicht nicht vorhanden sein, wenn schonmal gesehen<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

61<br />

3.2 Monotonic-Reads (2)<br />

■<br />

Beispiel (fortges.)<br />

P1<br />

Add 1 (x)a<br />

Add 1 (x)b<br />

Aktualisierungsnachrichten<br />

Stores<br />

S1<br />

S2<br />

a<br />

b<br />

a:b<br />

a:b<br />

t<br />

Client<br />

P2<br />

R 2 (x)a<br />

R 4 (x)a:b<br />

◆ Zugriff des Client zunächst auf S1<br />

• sieht Nachricht a in Mailbox<br />

◆ zweiter Lesezugriff auf S2 würde Nachricht a nicht zeigen<br />

• Monotonic-Reads-<strong>Konsistenz</strong> verhindert das<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

62


3.2 Monotonic-Reads (3)<br />

■<br />

Mögliche Implementierung<br />

◆ Schreibzugriffe mit global eindeutigem Identifikator versehen<br />

◆ pro Client Verwaltung einer Identifikatormenge<br />

• Read-Set: Identifikatoren der gelesenen Schreibzugriffe<br />

◆ Lesezugriff<br />

• Store vergleicht Read-Set mit eigenen Aktualisierungen<br />

• nur wenn alle vorhanden, darf gelesen werden<br />

• Store übergibt neue Identifikatoren zur Vergrößerung des Read-Sets<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

63<br />

3.3 Monotonic-Writes<br />

■<br />

■<br />

■<br />

Vertrag<br />

◆ Schreiboperation setzt sich durch bevor nächste Schreiboperation<br />

ausgeführt wird.<br />

Impliziert FIFO-<strong>Konsistenz</strong><br />

◆ Prozesse sehen Schreibzugriffe in der Reihenfolge des schreibenden<br />

Prozesses<br />

Mögliche Implementierung<br />

◆ Verwaltung einer Identifikatormenge für Schreibzugriffe des Client<br />

• Write-Set<br />

◆ Schreibzugriff<br />

• Store vergleicht Write-Set mit eigenen Aktualisierungen<br />

• nur wenn alle vorhanden, darf geschrieben werden<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

64


3.3 Monotonic-Writes (2)<br />

■<br />

Zweite mögliche Implementierung<br />

◆ Sequenznummern für Aktualisierungen<br />

◆ Replikat merkt sich letzte Sequenznummer bei Aktualisierung<br />

• Aktualisierungen mit zu hoher Nummer wird verzögert<br />

◆ Client-Zugriff<br />

• Client merkt sich eigene Sequenznummer<br />

• Vergleich eigene Sequenznummer mit Sequenznummer des Replikats<br />

• falls Sequenznummer des Replikats kleiner, besteht Gefahr von<br />

Non-monotonic Reads<br />

– Warten bis Replikat andere Sequenznummer hat<br />

– anderes Replikat benutzen<br />

• falls Sequenznummer des Replikats größer:<br />

– als eigene Sequenznummer übernehmen<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

65<br />

3.3 Monotonic-Writes (3)<br />

■ Beispiel mit Sequenznummern<br />

P1 Add 1 (x)a Add 1 (x)b Aktualisierungsnachrichten<br />

35 36<br />

Stores<br />

S1<br />

a<br />

a:b<br />

S2<br />

34 35 36<br />

a a:b<br />

34 35 36<br />

t<br />

Client<br />

P2<br />

34<br />

R 2 (x)a<br />

35<br />

R 4 (x)a:b<br />

36<br />

◆ verhindert falsche Aktualisierungsreihenfolge in den Stores<br />

• Monotonic-Writes-<strong>Konsistenz</strong><br />

◆ verhindert Lesen veralteter Daten<br />

• Monotonic-Reads-<strong>Konsistenz</strong><br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

66


3.4 Read-Your-Writes-Consistency<br />

■<br />

■<br />

■<br />

Vertrag<br />

◆ Ein geschriebener Wert a in Datum x wird vom gleichen Prozess sofort<br />

gelesen, egal welchen Store er benutzt.<br />

Gegenbeispiel<br />

◆ veränderte Webseite nicht sofort im Browser sichtbar<br />

◆ keine Read-Your-Writes-Consistency<br />

Mögliche Implementierung<br />

◆ schreibender Prozess muss Rückmeldung über Aktualisierung abwarten<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

67<br />

3.5 Writes-follow-Reads-Consistency<br />

■<br />

■<br />

Vertrag<br />

◆ Schreibzugriffe eines Prozesses erfolgen auf einer Kopie nur dann, wenn<br />

die Kopie den Wert des letzten Lesezugriffs des Prozesses erreicht hat.<br />

Beispiel<br />

◆ News-System (Schwarzes Brett für Nachrichten)<br />

◆ Schreiben eines Antwortartikels als Reaktion eines Originalartikels<br />

◆ Antwortartikel wird nur dann lokal geschrieben, wenn Originalartikel<br />

ebenfalls lokal vorhanden<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

68


4 Platzierung von Replikaten<br />

■<br />

Installation von Replikaten<br />

◆ dynamische und statische Installation<br />

◆ verschiedene Strategien<br />

permanente Replikate<br />

serverinitiierte Replikate<br />

clientinitiierte Replikate<br />

nach Tanenbaum, van Steen<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

69<br />

4.1 Permanente Replikate<br />

■<br />

Statische Installation der Replikate<br />

◆ durch Administratoren<br />

• z.B. DNS-Server: Primary- und Secondary-Server<br />

• z.B. Website- und FTP-Site-Mirroring (gespiegelte Server)<br />

4.2 Serverinitiierte Replikate<br />

■<br />

Dynamische Installation durch Aktionen des Server<br />

◆ dynamische Verbesserung der Performanz und Skalierbarkeit<br />

• z.B. dynamische Platzierung neuer Web-Caches in Provider-<br />

Netzwerken<br />

◆ Ergänzung zu permanenten Replikaten<br />

• evtl. schwächere <strong>Konsistenz</strong>modelle für serverinitiierte Replikate als für<br />

permanente Replikate<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

70


4.3 Clientinitiierte Replikate<br />

■<br />

Dynamische Installation durch Aktionen des Client<br />

◆ clientseitige Caches<br />

• z.B. DNS-Caching-Server<br />

• z.B. Cache im Web-Browser<br />

◆ Ergänzung zu serverinitiierten Replikaten<br />

• evtl. schwächere <strong>Konsistenz</strong>modelle für clientinitiierte Replikate als für<br />

serverinitiierte Replikate<br />

◆ sinnvoll nur bei gutem Lese-/Schreibverhältnis<br />

◆ gemeinsame Nutzung von clientinitiierten Replikaten nur bei gutmütigem<br />

Zugriffsmuster sinnvoll<br />

• gemeinsam genutzte Daten sind Voraussetzung<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

71<br />

5 Aktualisierungsmethoden<br />

■<br />

■<br />

■<br />

Implementierungsalternativen für <strong>Konsistenz</strong>modelle<br />

Art der Aktualisierung<br />

◆ Verteilung von Aktualisierungshinweisen<br />

◆ Verteilung der aktualisierten Werte<br />

◆ Verteilung der aktualisierenden Operation<br />

Implementierungsstruktur<br />

◆ Primärkopie-Verfahren<br />

◆ replizierte Aktualisierungsverfahren<br />

Verteilte Betriebssysteme<br />

© 2003-2004, Franz J. Hauck, Vert. Sys., Univ. Ulm [2003w-VBS-F-Repl.fm, 2003-12-17 09.04]<br />

Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.<br />

F<br />

72

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!