Einführung
Ein verteiltes System ist als ein Verbund von Rechenknoten definiert, der zur Erreichung eines übergeordneten Ziels dienen soll. Die Instanzen innerhalb des Verbunds sind jeweils für einzelne Teilfunktionen verantwortlich und kommunizieren zwecks Informationsaustausch über ein Netzwerk. Die Gründe, warum verteilte Systeme errichtet werden, sind vielfältig. Zum einen ist die Flexibilität zu nennen. Ein verteiltes System kann dynamisch um neue Rechenknoten erweitert bzw. reduziert werden, ohne dass die bestehenden Instanzen hiervon betroffen sind. Weiterhin erlauben verteilte Systeme die Trennung von Rechenknoten über Orts- und Organisationsgrenzen hinweg. Es kann somit dynamisch auf die Informationen von entfernten Hard- und Softwarekomponenten zugegriffen werden, ohne diese auf dem eigenen System redundant zu implementieren bzw. tiefere Kenntnisse von ihnen zu haben. Auch die Performanz spielt für diese Architekturform eine zentrale Rolle. Ein Rechenknoten kann beispielsweise mehrfach instanziiert werden, um Aufgaben zu parallelisieren und somit für eine bessere Lastverteilung zu sorgen. Schließlich reduziert sich auch das Risiko für einen Dienstausfall bzw. Systemfehler, wenn Rechenknoten redundant und dezentralisiert vorliegen. (vgl. Schill und Springer 2012, S. 3-6)
Im Gegensatz zu einer monolithischen Architektur ist ein verteiltes System auf eine interne Kommunikation angewiesen. Da Rechenknoten sowie deren Speicher physikalisch voneinander getrennt sind, müssen Informationen innerhalb von Nachrichten übermittelt werden. Um nicht zu einem Flaschenhals für das Gesamtsystem zu werden, ist der Datenaustausch möglichst performant, sicher und flexibel zu gestalten. Innerhalb dieses Kapitels werden verschiedene Methoden und Ansätze vorgestellt, welche eine Lösung bezüglich dieser Problematik bieten. Konkret wird dabei auf die Technik RPC (Remote Procedure Call), das Netzwerkprotokoll WebSocket, den Architekturstil REST (Representational State Transfer) und die Abfragesprache GraphQL eingegangen.