This dissertation shows that it is both desirable and feasible to distribute object-oriented programs automatically, and that static analysis of a program's source code is an indispensable means to that end. To demonstrate this, we have built a system named Pangaea, which analyzes the source code of Java programs, and distributes them automatically using arbitrary middleware platforms as a back-end. At run-time, Pangaea uses a generic migration subsystem that can monitor the interactions between selected objects and may migrate them automatically to reduce network communication, thus complementing the static placement decisions.
This thesis makes three main research contributions. The first is a set of static analysis algorithms that allow our system to estimate a program's run- time structure and dynamic behavior. Based on this information, abstract distribution strategies for the program can be selected and specified, which is done partly by the programmer, and partly by automatic tools that assist him. The second contribution is that we show how the abstract distribution strategy can be implemented automatically on a given middleware platform. Pangaea achieves this by re-generating the source code of the centralized program, changing or adding whatever is necessary to express the distribution strategy that was specified during analysis. We can thus consider Pangaea a distributing compiler: the input language of this compiler is Java, and the target language is the particular Java dialect or configuration language required by the middleware platform to be used. The third contribution is that we show how a generic run-time system can monitor interactions between objects, and re-adjust their placement automatically. Our implementation and case studies allow us to evaluate the cost of such a migration system, suggesting to which extent it is useful and necessary to complement static analysis.
Diese Dissertation zeigt, daß es sowohl wünschenswert als auch möglich ist, objekt-orientierte Programme automatisch zu verteilen, und daß statische Analyse des Programmcodes dazu ein unabdingbares Mittel ist. Um dies zu zeigen haben wir ein System namens Pangaea gebaut, das den Quelltext von Java Programmen analysiert, und sie unter Verwendung beliebiger Middleware- Plattformen automatisch verteilt. Zur Laufzeit verwendet Pangaea ein generisches Migrationssystem, das die Interaktionen zwischen ausgewählten Objekten überwachen kann, und diese bei Bedarf automatisch migriert, um die Netzwerk-Kommunikation zu minimieren. Die während der Analyse getroffenen statischen Platzierungsentscheidungen werden so dynamisch ergänzt.
Diese Dissertation enthält drei hauptsächliche Forschungsbeiträge. Der erste ist eine Gruppe statischer Analysealgorithmen, die unserem System erlauben, die Laufzeitstruktur eines Programms und sein dynamisches Verhalten abzuschätzen. Auf der Grundlage dieser Information können abstrakte Verteilungsstrategien für das Programm ausgewählt und spezifiziert werden; zum Teil macht dies der Programmieren von Hand, zum Teil wird er dabei von automatischen Werkzeugen unterstützt. Der zweite Beitrag besteht darin, daß wir zeigen, wie die abstrakte Verteilungsstrategie auf einer gegebenen Middleware-Plattform automatisch implementiert werden kann. Pangaea erreicht dies, indem es den Quelltext des zentralisierten Programms neu generiert, und ihn dabei so abändert und ergänzt, daß die gewünschte Verteilungsstrategie ausgedrückt wird. Wir können Pangaea daher als einen verteilenden Übersetzer betrachten: Die Quellsprache dieses Übersetzers ist Java, die Zielsprache ist der spezielle Java-Dialekt oder die Konfigurationssprache der zu verwendenden Middleware-Plattform. Der dritte Beitrag ist, daß wir zeigen, wie ein generisches Laufzeitsystem Interaktionen zwischen Objekten überwachen und ihre Platzierung automatisch anpassen kann. Unsere Implementierung und Fallstudien erlauben uns, die Kosten eines solchen Migrationssystems zu bestimmen, um abzuschätzen in welchem Umfang solche Systeme sinnvoll und notwendig sind, um die statische Analyse zu ergänzen.