Umsetzungeiner einerverteilten verteiltenAnwendung Anwendungmit mitder der Umsetzung dokumentenorientiertenDatenbank DatenbankCouchDB CouchDB dokumentenorientierten EinGliederungseditor Gliederungseditorals alsreplizierbares replizierbaresVerteiltes VerteiltesSystem System Ein Lena Herrmann, Dipl.-Inform. (FH) Lena Herrmann, Dipl.-Inform. (FH) Prof. Stefan Edlich Prof. Dr.Dr. Stefan Edlich Ein EinGliederungseditor Gliederungseditor Ein EinVerteiltes VerteiltesSystem System Ei nEiGliederungseditor oder Outliner istist eine n Gliederungseditor oder Outliner eine Mischung aus einer Freiform-Datenbank und Mischung aus einer Freiform-Datenbank und einem Texteditor. MitMit ihm können z. B. Gedanken einem Texteditor. ihm können z. B. Gedanken oder Konzepte hierarchisch geordnet aufgeoder Konzepte hierarchisch geordnet aufgeschrieben werden. DerDer Inhalt eines Dokuments schrieben werden. Inhalt eines Dokuments wird alsals Baumstruktur dargestellt. DieDie Zeilen wird Baumstruktur dargestellt. Zeilen können bearbeitet, einund ausgeklappt, gelöscht können bearbeitet, einund ausgeklappt, gelöscht und verschoben werden. und verschoben werden. Allgemein bezeichnet einein Verteiltes System eine Allgemein bezeichnet Verteiltes System eine Ansammlung unabhängiger Computer, diedie den Ansammlung unabhängiger Computer, den BenutzerInnen wiewie einein einzelnes System erscheinen. BenutzerInnen einzelnes System erscheinen. FürFür diese Arbeit wurde diedie Open-Source-Datenbank diese Arbeit wurde Open-Source-Datenbank CouchDB verwendet. CouchDB wird aufauf jedem RechCouchDB verwendet. CouchDB wird jedem Rechnerner installiert, aufauf dem diedie Anwendung laufen soll. installiert, dem Anwendung laufen soll. DieDie Anwendung istist dadurch offloffl ineine benutzbar. Anwendung dadurch benutzbar. CouchDBs eingebaute Master-Master-Replikation CouchDBs eingebaute Master-Master-Replikation ermöglicht verteiltes Arbeiten über Netzwerke ermöglicht verteiltes Arbeiten über Netzwerke hinweg, selbst wenn diedie Benutzer zwischenzeitlich vom Internet getrennt sind. hinweg, selbst wenn Benutzer zwischenzeitlich vom Internet getrennt sind. Zwei Instanzen derder Datenbank können sich untereinander selbstständig in in synZwei Instanzen Datenbank können sich untereinander selbstständig synchronem Zustand halten, sofern hinhin und wieder eine Internetverbindung besteht. chronem Zustand halten, sofern und wieder eine Internetverbindung besteht. DerDer in in dieser Arbeit umgesetzte Gliederungseditor dieser Arbeit umgesetzte Gliederungseditor istist mehrbenutzerfähig - d.h. mehrere Benutzermehrbenutzerfähig - d.h. mehrere BenutzerInnen können dasselbe Outline gemeinschaftlich Innen können dasselbe Outline gemeinschaftlich bearbeiten. bearbeiten. Bestehende BestehendeAnsätze Ansätzemit mittraditioneller traditionellerArchitektur Architektur Es Es istist mühsam, einein Dokument zurzur mühsam, Dokument Bearbeitung perper Email hinund Bearbeitung Email hinund herzuschicken. Es Es gibt bereits herzuschicken. gibt bereits einige Lösungen, mitmit denen einige Lösungen, denen BenutzerInnen meist in in Echtzeit BenutzerInnen meist Echtzeit gemeinsam anan einem Dokument gemeinsam einem Dokument arbeiten können. AllAll diese arbeiten können. diese Anwendungen laufen aufauf WebAnwendungen laufen Webservern, aufauf diedie von den Endservern, von den Endgeräten zugegriff enen wird. geräten zugegriff wird. Das Backend einer normalen Webanwendung Das Backend einer normalen Webanwendung wird aufauf einem Webserver betrieben. DieDie Datenwird einem Webserver betrieben. Datenbank dient hier nurnur zum Speichern derder Daten. bank dient hier zum Speichern Daten. Clientseitig ausgeführtes Javascript dient meist Clientseitig ausgeführtes Javascript dient meist nurnur zurzur Verbesserung derder User Experience. Verbesserung User Experience. FürFür diedie Anwendungslogik istist derder Einsatz einer Anwendungslogik Einsatz einer Middleware nötig, diedie zBzB in in Ruby oder PHP Middleware nötig, Ruby oder PHP geschrieben ist.ist. DaDa diedie Dokumente aufauf dem geschrieben Dokumente dem zentralen Server liegen, sind siesie nurnur beibei zentralen Server liegen, sind bestehender Internetverbindung erreichbar. bestehender Internetverbindung erreichbar. Application Javascript Application Javascript Javascript Framework Frontend Javascript Framework Frontend (jQuery) (jQuery) Backend Backend Application Application (Ruby, PHP, etc)etc) (Ruby, PHP, Database (SQL) Database (SQL) Umsetzung Umsetzungmit mitCouchDB CouchDB Synchronisierung Synchronisierungdurch durchReplikation Replikation Architektur Architekturohne ohneMiddleware Middleware DerDer Gliederungseditor läuft aufauf derder lokalen CouchDB-Instanz imim Browser und istist Gliederungseditor läuft lokalen CouchDB-Instanz Browser und dadurch offloffl ineine benutzbar. Instanzen können über einein Intraoder das Internet dadurch benutzbar. Instanzen können über Intraoder das Internet miteinander bekannt gemacht werden. Wenn eine Verbindung zwischen zwei miteinander bekannt gemacht werden. Wenn eine Verbindung zwischen zwei Instanzen besteht, werden ihre Dokumente automatisch wechselseitig repliziert, Instanzen besteht, werden ihre Dokumente automatisch wechselseitig repliziert, soso dass siesie nach dem Replikationsvorgang aufauf dem gleichen Stand sind. Sobald dass nach dem Replikationsvorgang dem gleichen Stand sind. Sobald einein Dokument bearbeitet wurde, wird seine neue Version anan diedie Instanzen weiterDokument bearbeitet wurde, wird seine neue Version Instanzen weiterverbreitet, die gerade online sind. Ist die Internetverbindung getrennt, verzögert verbreitet, die gerade online sind. Ist die Internetverbindung getrennt, verzögert sich dies entsprechend. Die Anwensich dies entsprechend. Die Anwendung benachrichtigt die Benutzerin, dung benachrichtigt die Benutzerin, wenn neue Änderungen vorliegen. wenn neue Änderungen vorliegen. DieDie Anwendungslogik istist in in Javascript geschrieben. Application Javascript Anwendungslogik Javascript geschrieben. Application Javascript SieSie wird zusammen mitmit ihren Daten, also den Do-Dowird zusammen ihren Daten, also den JS Router/Controller kumenten des Gliederungseditors, in in einer lokalen JS Router/Controller kumenten des Gliederungseditors, einer lokalen (Sammy.js) CouchDB-Datenbank gespeichert. CouchDB hat (Sammy.js) CouchDB-Datenbank gespeichert. CouchDB hat Frontend einen HTTP-Server eingebaut und kann darüber Framework Frontend DOMDOM einen HTTP-Server eingebaut und kann darüber Framework HTML, CSS und Javascript ausliefern, das dann im (jQuery) HTML, CSS und Javascript ausliefern, das dann im (jQuery) Browser ausgeführt wird. Die Implementierung und Browser ausgeführt wird. Die Implementierung und Database Backend Wartung einer zusätzlichen Middleware kann Database Backend (REST, CouchDB) Wartung einer zusätzlichen Middleware kann (REST, CouchDB) dadurch eingespart werden. Die BenutzerInnen dadurch eingespart werden. Die BenutzerInnen haben jederzeit volle Kontrolle über ihre Daten. haben jederzeit volle Kontrolle über ihre Daten. Konfl iktbearbeitung in der Anwendung Konfliktbearbeitung in der Anwendung Eine große Herausforderung ist der Umgang mit den Konflikten, die durch SynchroEine große Herausforderung ist der Umgang mit den Konflikten, die durch Synchronisierung nach Offline-Benutzung entstehen können. Bearbeiten beispielsweise nisierung nach Offline-Benutzung entstehen können. Bearbeiten beispielsweise zwei BenutzerInnen das gleiche Dokument, während sie offline sind, werden nach zwei BenutzerInnen das gleiche Dokument, während sie offline sind, werden nach einem Replikationsvorgang veränderte oder neu dazugekommene Zeilen von der einem Replikationsvorgang veränderte oder neu dazugekommene Zeilen von der Anwendung selbstständig eingefügt oder aktualisiert. Anwendung selbstständig eingefügt oder aktualisiert. Wurde die gleiche Zeile von beiden BenutzerInnen verändert, speichert CouchDB Wurde die gleiche Zeile von beiden BenutzerInnen verändert, speichert CouchDB die beiden Versionen der Zeile. Die Zeile wird als konflikthaft markiert und die Bedie beiden Versionen der Zeile. Die Zeile wird als konflikthaft markiert und die BenutzerInnen werden über das Problem benachrichtigt. Nebenstehender ScreensnutzerInnen werden über das Problem benachrichtigt. Nebenstehender Screenshot ermöglicht es einer Benutzerin, sich für eine Version der Zeile zu entscheiden. hot ermöglicht es einer Benutzerin, sich für eine Version der Zeile zu entscheiden. Das Ergebnis wird wiederum sofort zu der anderen Instanz der Anwendung Das Ergebnis wird wiederum sofort zu der anderen Instanz der Anwendung repliziert. repliziert. Upstream Agile GmbH Upstream Agile GmbH http://upstre.am/ http://upstre.am/