# Late-Join

Late-Join (engl. „später Beitritt“) bzw. Spätbeitritt bezeichnet in der Informatik das späte Beitreten von Benutzern zu einer bereits laufenden Sitzung einer Computer-Anwendung zur Gruppenarbeit (Groupware).
Die Beschäftigung mit Problemen und Lösungen im Zusammenhang mit Late-Joins ist eine der Aufgaben des Computer Supported Cooperative Work. Wie in einer realen Sitzung stellt sich die Frage, wie die neu hinzugekommenen Mitglieder möglichst schnell und umfassend auf den aktuellen Stand der Arbeit gebracht werden können. In der Fachterminologie geht es um die effiziente Abwicklung einer Late-Join-Anfrage eines Late-Join-Clients, indem ihm von einem oder mehreren Late-Join-Servern Late-Join-Daten übermittelt werden. Es sollen dabei folgende Optimierungskriterien beachtet werden:
* Initialisierungsverzögerung. Die zeitliche Dauer, bis die neuen Benutzer aktiv an der Sitzung teilnehmen können, sollte möglichst kurz sein.
* Netzwerklast. Das Netzwerk sollte durch den Beitritt möglichst wenig belastet werden.
* Anwendungskomplexität. Die Algorithmen, die die Initialisierung bewerkstelligen, sollten möglichst einfach und schnell sein.
* Robustheit. Die Initialisierung sollte möglichst fehlerlos ablaufen.
* Konsistenz. Nach Abschluss der Initialisierung sollten die neuen Benutzer auf dem aktuellen Stand und im Besitz aller notwendigen Daten sein.
Probleme, die einer optimalen Erfüllung der Kriterien entgegenwirken, sind:
* Late-Join-Server erfahren durch die Initialisierung zusätzliche Arbeitslast. Die Auswahl eines passenden Late-Join-Servers kann zeitaufwendig sein und somit Initialisierungsverzögerung und Anwendungskomplexität negativ beeinflussen. Wird aus Versehen ein Server gewählt, der selbst nicht auf dem aktuellen Stand ist, ist die Konsistenz in Gefahr.
* Der Umfang der Late-Join-Daten kann bei großen Systemen sehr groß ausfallen, was sich negativ auf Initialisierungsverzögerung, Netzwerklast, Anwendungskomplexität und Robustheit auswirken kann.
* Der Zeitpunkt der Initialisierung sollte zur Minimierung der Initialisierungsverzögerung zwar möglichst früh sein, könnte aber evtl. in einer späteren Ruhephase erheblich effizienter abgewickelt werden. Es stellt sich auch die Frage, ob der Late-Join-Client sofort alle Late-Join-Daten erhält oder diese nach Auswahlkriterien geordnet erst nach und nach verschickt werden.
* Übertragungsfehler schwächen die Robustheit und erhöhen durch die notwendigen Korrekturen oder wiederholte Übertragungen die Netzwerklast.
Als Lösungsansätze für diese Probleme bieten sich die folgenden Möglichkeiten an:
* Komplette oder teilweise Initialisierung. Der Umfang der Late-Join-Daten bei einer kompletten Initialisierung (bei der der Late-Join-Client alle verfügbaren Daten erhält) kann reduziert oder zumindest gestaffelt werden, wenn er zunächst nur die gerade notwendigen Daten erhält und zusätzliche Daten erst, wenn sie benötigt werden. Die Auswahl der Daten wird über sogenannte Late-Join-Politiken bewerkstelligt.
* Die Art der Late-Join-Daten kann zwischen Historie, Zustand oder einer Kombination aus beiden variiert werden. Bei Initialisierung durch eine Historie werden dem Late-Join-Client alle bisher ausgeführten Operationen aller Teilnehmer übermittelt; da Aktionen oftmals rückgängig gemacht oder mehrmals überschrieben werden, fällt hier meist viel Redundanz an. Die Initialisierung über den aktuellen Zustand enthält diese Redundanz zwar nicht, benötigt aber meist die Übermittlung sehr vieler Daten. Bei der Kombination wird zunächst ein älterer Zustand und anschließend alle ab dort ausgeführten Operationen übermittelt.
* Die Initialisierung kann über Unicast oder Multicast ausgeführt werden. Per Unicast initialisiert genau ein Late-Join-Server genau einen Late-Join-Client, während per Multicast ein Late-Join-Server mehrere Late-Join-Clients gleichzeitig initialisieren kann – unter zusätzlicher Belastung einiger weiterer Gruppenmitglieder.