A Programming Language for Distributed Systems
Total Page:16
File Type:pdf, Size:1020Kb
A Programming Language for Distributed Systems Pascal Weisenburger A Programming Language for Distributed Systems vom Fachbereich Informatik der Technischen Universität Darmstadt zur Erlangung des akademischen Grades eines Doktor-Ingenieurs (Dr.-Ing.) genehmigte Dissertation von Pascal Weisenburger Referent Prof. Dr. Guido Salvaneschi Korreferent Prof. Dr. Philipp Haller Darmstadt, 2020 Pascal Weisenburger: A Programming Language for Distributed Systems Technische Universität Darmstadt Jahr der Veröffentlichung der Dissertation auf TUprints: 2020 URN: urn:nbn:de:tuda-tuprints-135006 Tag der Prüfung: 21.08.2020 Darmstadt – D 17 Veröffentlicht unter CC BY-SA 4.0 International https://creativecommons.org/licenses/by-sa/4.0/ Acknowledgements My thanks especially go to my advisor, Guido Salvaneschi, for providing me with the opportunity to work on the language presented in this thesis, giving me the freedom to explore its design and helping in shaping its ideas. I thank Mira Mezini for her support and for inspiring my interest in programming languages. I also thank Philipp Haller for being the second examiner of my thesis and his time and effort of carefully reviewing it. Furthermore, I would like to thank the remaining members of my PhD committee: Sebastian Faust, Matthias Hollick and Kirstin Peters. My special thanks go to Gudrun Harris for managing the group so smoothly, for keeping us from having to be concerned about our contracts and for saving us from most of the paperwork. I also thank my long-time office colleagues Matthias Eichholz, Mirko Köhler and Ragnar Mogk for the fruitful collaboration and the nice office atmosphere and the members Nafise Eskandani, Aditya Oak, Simon Schönwälder and Daniel Sokolowski of the RP group and the members of the STG group. I gratefully thank my family for their encouragement and continued support in every imaginable way. To everyone who accompanied me in the last years on this academic journey: Thank you! That was fun. i Abstract Today’s software, including many everyday services, such as online streaming, search engines and social networks, is widely distributed, running on top of a network of interconnected computers. Such distributed applications are tradition- ally developed as separate modules for each component in the distributed system. These modules react to events, like user input or messages from the network, and in turn produce new events for the other modules. Separation into different mod- ules is problematic because combining modules is notoriously hard and requires extensive and time-consuming integration and manual implementation of com- munication forces programmers to program complex event-based communication schemes among hosts – an activity which is often low-level and error-prone. The combination of the two results in obscure distributed data flows scattered among multiple modules, hindering reasoning about the system as a whole. For these reasons, despite most software today is distributed, the design and development of distributed systems remains surprisingly challenging. We present the ScalaLoci distributed programming language, our approach for taming the complexity of developing distributed applications via specialized pro- gramming language support. ScalaLoci addresses the issues above with a coherent model based on placement types that enables reasoning about distributed data flows otherwise scattered across multiple modules, supporting multiple software architectures via dedicated language features and abstracting over low-level com- munication details and data conversions. ScalaLoci does not force developers to modularize software along network bound- aries as is traditionally the case when developing distributed systems. Instead, we propose a module system that supports encapsulating each (cross-host) func- tionality and defining it over abstract peer types. As a result, we disentangle modularization and distribution and we enable the definition of a distributed system as a composition of ScalaLoci modules, each representing a subsystem. Our case studies on distributed algorithms, distributed data structures, as well as on real-world distributed streaming engines show that ScalaLoci simplifies devel- oping distributed systems, reduces error-prone communication code and favors early detection of bugs. As we demonstrate, the ScalaLoci module system allows the definition of reusable patterns of interaction in distributed software and en- ables separating the modularization and distribution concerns, properly separating functionalities in distributed systems. iii Zusammenfassung Heutige Software, einschließlich vieler alltäglicher Dienste wie Online-Streaming, Suchmaschinen und soziale Netzwerke, wird auf einem Netzwerk miteinander verbundener Computer verteilt ausgeführt. Solche verteilten Anwendungen wer- den traditionell mit separaten Modulen für jede Komponente im verteilten System entwickelt. Module reagieren auf Ereignisse wie Benutzereingaben oder Netzwerk- nachrichten und produzieren wiederum neue Ereignisse für die anderen Module. Die Trennung in verschiedene Module ist problematisch, weil das Kombinieren von Modulen notorisch schwierig ist und umfangreiche und zeitraubende Integration erfordert und die manuelle Implementierung der Kommunikation die Programmie- rer dazu zwingt, komplexe ereignisbasierte Kommunikationsschemata zwischen Hostrechnern zu implementieren – was oft auf niedriger Abstraktionsebene stattfin- det und fehleranfällig ist. Die Kombination von beidem führt zu unübersichtlichen verteilten Datenströmen, die über mehrere Module hinweg aufgesplittet sind und das Verständnis über das System als Ganzes erschweren. Aus diesen Gründen bleibt der Entwurf und die Entwicklung verteilter Systeme trotz der Tatsache, dass die meiste Software heutzutage verteilt ist, überraschend schwierig. Diese Dissertation präsentiert die Programmiersprache ScalaLoci für die Entwick- lung verteilter Anwendungen. Der vorgestellte Ansatz basiert auf spezialisierter Programmiersprachenunterstützung, um die Komplexität bei der Entwicklung verteilter Anwendungen zu bewältigen. ScalaLoci geht die oben genannten Pro- bleme mit einem kohärenten Modell basierend auf Platzierungstypen an, das die Betrachtung verteilter Datenflüsse ermöglicht, die ansonsten über mehrere Modu- le aufgesplittet sind. ScalaLoci unterstützt dabei mehrere Softwarearchitekturen durch dedizierte Sprachmerkmale und abstrahiert über Kommunikationsdetails und Datenkonvertierungen. ScalaLoci zwingt Entwickler nicht dazu, Software entlang von Netzwerkgrenzen zu modularisieren, wie es traditionell bei der Entwicklung verteilter Systeme der Fall ist. Stattdessen stellt ScalaLoci ein Modulsystem bereit, das die Kapselung jeder (Host-übergreifenden) Funktionalität und deren Definition über abstrakte Peer- Typen unterstützt. Als Ergebnis werden Modularisierung- und Verteilungsbelange entflochten und die Definition eines verteilten Systems als eine Zusammensetzung von ScalaLoci-Modulen, die jeweils ein Subsystem repräsentieren, ermöglicht. Fallstudien zu verteilten Algorithmen, verteilten Datenstrukturen sowie zu ver- teilten Streaming-Engines aus der Praxis zeigen, dass ScalaLoci die Entwicklung v verteilter Systeme vereinfacht, fehleranfälligen Kommunikations-Code reduziert und das frühzeitige Erkennen von Fehlern unterstützt. Die Evaluation zeigt weiter- hin, dass das ScalaLoci-Modulsystem die Definition wiederverwendbarer Interakti- onsmuster in verteilter Software erlaubt und die Trennung von Modularisierung und Verteilung ermöglicht, indem Funktionalitäten in verteilten Systemen sauber voneinander getrennt werden. vi Contents 1 Introduction 1 1.1 Problem...................................2 1.2 ScalaLoci in Essence............................4 1.3 ScalaLoci at Work..............................5 1.3.1 Design Overview..........................6 1.4 Contributions................................8 1.5 Publications................................. 10 1.6 Overview................................... 12 2 A Survey of Multitier Programming 13 2.1 Background................................. 13 2.2 Multitier Programming........................... 14 2.3 Benefits.................................... 15 2.4 Overview................................... 17 2.5 A Glimpse of Multitier Languages.................... 20 2.5.1 Hop.................................. 20 2.5.2 Links................................. 22 2.5.3 Ur/Web............................... 23 2.5.4 Eliom................................. 25 2.5.5 Google Web Toolkit (GWT).................... 26 2.5.6 ScalaLoci............................... 28 2.6 Analysis................................... 29 2.6.1 Degrees of Multitier Programming................ 29 2.6.2 Placement Strategy......................... 32 2.6.3 Placement Specification and Granularity............ 35 2.6.4 Communication Abstractions................... 38 2.6.5 Formalization of Multitier Languages.............. 41 2.6.6 Distribution Topologies...................... 44 2.7 Related Approaches............................. 45 3 A Multitier Language Design: ScalaLoci 53 3.1 Design Considerations........................... 53 3.2 Programming Abstractions of ScalaLoci ................. 55 3.2.1 In-Language Architecture Definition............... 55 3.2.2 Placement Types.......................... 56 vii 3.2.3 Remote Access........................... 57 3.2.4 Multitier Reactives......................... 58 3.2.5 Peer Instances............................ 59 3.2.6 Aggregation............................. 60 3.2.7 Subjective