Using Design Patterns to Develop Reusable Object-Oriented Communication Software

Total Page:16

File Type:pdf, Size:1020Kb

Using Design Patterns to Develop Reusable Object-Oriented Communication Software experiences Douglas C. Schmidt Using Design Object Technology Patterns to Develop Reusable Object-Oriented Communication Software Despite dramatic increases in network and host per- Design patterns [7] are a promising technique for formance, it remains difficult to design, implement, achieving widespread reuse of software architectures. and reuse communication software for complex dis- Design patterns capture the static and dynamic struc- tributed systems. Examples of these systems include tures and collaborations of components in successful global personal communication systems, network man- solutions to problems that arise when building soft- agement platforms, enterprise medical imaging sys- ware in domains like business data processing, tems, and real-time market data monitoring and telecommunications, graphical user interfaces, data- analysis systems. In addition, it is often hard to directly bases, and distributed communication software. Pat- reuse existing algorithms, detailed designs, interfaces, terns aid the development of reusable components or implementations in these systems due to the growing and frameworks by expressing the structure and col- heterogeneity of hardware/software architectures and laboration of participants in a software architecture the increasing diversity of operating system platforms. at a level higher than source code or object-oriented COMMUNICATIONS OF THE ACM October 1995/Vol. 38, No. 10 65 design models that focus on individual objects and user interface events generated by Motif. These events classes. Thus, patterns facilitate reuse of software arrive on multiple I/O handles that identify resources architecture, even when other forms of reuse are (such as network connections) managed by an oper- infeasible (e.g., due to fundamental differences in ating system. Input events from peers may arrive operating system features [16]). simultaneously on multiple handles. Therefore, sin- This article describes how design patterns are gle-threaded software must not block indefinitely being applied on a number of large-scale commercial reading from any individual I/O handle. Blocking can distributed systems. Patterns have been used on these significantly delay the response time for handling projects to enable widespread reuse of communica- events from peers associated with other handles. tion software architectures, developer expertise, and object-oriented framework components. These sys- ne way to develop this type of tems include the Motorola Iridium global personal event-driven software is to use communications system [13], a family of network multi-threading. In this monitoring applications for Ericsson telecommunica- approach, a separate thread is tion switches [16], and a system for transporting mul- spawned for every connected timegabyte medical images over high-speed ATM peer. Each thread blocks on a networks [1] being developed at Washington Univer- read system call. A thread sity School of Medicine in conjunction with Kodak. unblocks when it receives an This article also presents ways to avoid common traps event from its associated peer. At this point, the event and pitfalls of applying design patterns in large-scale is processed within the thread. The thread then O read software development processes. reblocks, awaiting subsequent input from . There are several drawbacks to using multi-thread- Example Design Pattern: The Reactor ing for handling events in communication software: The Reactor pattern was identified while developing reusable event-driven communication software at • Threading may require complex concurrency con- Ericsson, Motorola, and Kodak. Portions of the mate- trol schemes. rial appearing in this article were culled from docu- • Threading may lead to poor performance due to mentation used on these projects. context switching, synchronization, and data Design patterns have been described using several movement. formats [3, 5, 7]. The format used in this article is • Threading may not be available on all operating based on the work of Gamma et al. [7]; it contains the system (OS) platforms. following parts: Often, a more convenient and portable way to devel- • The intent of the pattern op event-driven servers is to use the Reactor pattern. The • The design forces that motivate the pattern Reactor pattern manages a single-threaded event loop • The solution to these forces that performs event demultiplexing and event handler • The structure and roles of classes in the solution dispatching in response to events from multiple • The responsibilities and collaborations among sources. The Reactor pattern combines the simplicity classes and efficiency of single-threaded event loops with the • Implementation guidance extensibility offered by object-oriented programming. • Example source code1 • References to related patterns Applicability Use the Reactor pattern when: Intent The Reactor pattern dispatches handlers automatically • One or more events may arrive concurrently from when events occur from multiple sources. This pattern multiple sources, and blocking or continuously simplifies event-driven applications by decoupling event polling for events on any individual source of demultiplexing and event handler dispatching from events is inefficient; application services performed in response to events. • Each individual event handler possesses the follow- ing characteristics: Motivation — it exchanges fixed-sized or bounded-sized mes- Communication software must respond to events gen- sages with its peers without requiring blocking I/O; erated from multiple sources. For example, network — it processes each message it receives within a management applications for monitoring and con- relatively short period of time; trolling space vehicles in global personal communica- • Using multi-threading to implement event demul- tion systems may receive traps sent by HP OpenView tiplexing is either: agents, telemetry data sent via CORBA requests, and — infeasible due to lack of multi-threading support on an OS platform; 1 Due to space limitations, the sample code has been omitted from this arti- — undesirable due to poor performance on uni- cle. See [14] for a complete example of the Reactor pattern. processors or due to the need for overly complex 66 October 1995/Vol. 38, No. 10 COMMUNICATIONS OF THE ACM experiences concurrency control schemes; systems, and transaction managers) communicate — redundant due to the use of multi-threading at with the Reactor via Handles. higher levels of an application’s architecture. • Developers subclass Event Handlers to imple- ment application-specific event processing. When Structure an Event Handlers subclass object is registered The structure of the Reactor pattern is illustrated in the with the Reactor, the application indicates the Booch [2] class diagram shown in Figure 1. In Booch type of event(s) (e.g., input event, output event, notation dashed clouds indicate classes, an inscribed signal event) this Event Handlers wants the Reactor “A’’ indicates an abstract class, directed edges indicate to notify it about. Object Technology inheritance relationships between classes, and an undi- • To bind the Reactor with Handles, a subclass rected edge with a small bullet at one end indicates a of Event Handlers must override the composition relation between two classes. get_handle method. Hence, when an Event Handlers subclass object is registered with the Participants Reactor, the object’s Handle is obtained by The participants in the Reactor pattern include the invoking the Event Handler::get_handle following: method. The Reactor then combines this Han- dle with other registered Event Handlers and • Handles, which identify resources (such as net- waits for events to occur on the Handles. work connections, open files, and synchronization • The Reactor triggers Event Handlers meth- objects) that are managed by an operating system. ods in response to events on the Handlers it • Reactor, which defines an interface for registering, monitors. When events occur, the Reactor uses removing, and dispatching Event Handler the Handles activated by the events as keys to objects. An implementation of the Reactor locate and dispatch the appropriate Event Han- interface provides a set of application-independent dlers methods. This collaboration is structured event demultiplexing and dispatching mecha- using the method callbacks depicted in the object- nisms. These mechanisms dispatch application-spe- interaction diagram shown in Figure 2. cific Event Handlers in response to events • The handle_event method is called by the Reac- occurring on one or more Handles. tor to perform application-specific functionality in • Event Handler, which specifies an interface used response to an event. The type of the event that by the Reactor to dispatch callback methods occurred is passed as a parameter to the method. defined by objects that are pre-registered to han- dle certain types of events (such as input events, Consequences output events, and signals). The Reactor pattern has the following benefits: • Concrete Event Handler, which implements the customized callback method(s) that process events • It improves the modularity, reusability, and config- in an application-specific manner. urability of event-driven application software by decoupling application-independent mechanisms Collaborations Among Participants from application-specific processing policies. • Sources of events (such as network adaptors, file • It improves application portability by allowing its select (handles)
Recommended publications
  • Leader/Followers
    Leader/Followers Douglas C. Schmidt, Carlos O’Ryan, Michael Kircher, Irfan Pyarali, and Frank Buschmann {schmidt, coryan}@uci.edu, {Michael.Kircher, Frank.Buschmann}@mchp.siemens.de, [email protected] University of California at Irvine, Siemens AG, and Washington University in Saint Louis The Leader/Followers architectural pattern provides an efficient concurrency model where multiple threads take turns sharing a set of event sources in order to detect, de- multiplex, dispatch, and process service requests that occur on these event sources. Example Consider the design of a multi-tier, high-volume, on-line transaction processing (OLTP) system. In this design, front-end communication servers route transaction requests from remote clients, such as travel agents, claims processing centers, or point-of-sales terminals, to back-end database servers that process the requests transactionally. After a transaction commits, the database server returns its results to the associated communication server, which then forwards the results back to the originating remote client. This multi-tier architecture is used to improve overall system throughput and reliability via load balancing and redundancy, respectively.It LAN WAN Front-End Back-End Clients Communication Servers Database Servers also relieves back-end servers from the burden of managing different communication protocols with clients. © Douglas C. Schmidt 1998 - 2000, all rights reserved, © Siemens AG 1998 - 2000, all rights reserved 19.06.2000 lf.doc 2 Front-end communication servers are actually ``hybrid'' client/server applications that perform two primary tasks: 1 They receive requests arriving simultaneously from hundreds or thousands of remote clients over wide area communication links, such as X.25 or TCP/IP.
    [Show full text]
  • A Survey of Architectural Styles.V4
    Survey of Architectural Styles Alexander Bird, Bianca Esguerra, Jack Li Liu, Vergil Marana, Jack Kha Nguyen, Neil Oluwagbeminiyi Okikiolu, Navid Pourmantaz Department of Software Engineering University of Calgary Calgary, Canada Abstract— In software engineering, an architectural style is a and implementation; the capabilities and experience of highest-level description of an accepted solution to a common developers; and the infrastructure and organizational software problem. This paper describes and compares a selection constraints [30]. These styles are not presented as out-of-the- of nine accepted architectural styles selected by the authors and box solutions, but rather a framework within which a specific applicable in various domains. Each pattern is presented in a software design may be made. If one were to say “that cannot general sense and with a domain example, and then evaluated in be called a layered architecture because the such and such a terms of benefits and drawbacks. Then, the styles are compared layer must communicate with an object other than the layer in a condensed table of advantages and disadvantages which is above and below it” then one would have missed the point of useful both as a summary of the architectural styles as well as a architectural styles and design patterns. They are not intended tool for selecting a style to apply to a particular project. The to be definitive and final, but rather suggestive and a starting paper is written to accomplish the following purposes: (1) to give readers a general sense of several architectural styles and when point, not to be used as a rule book but rather a source of and when not to apply them, (2) to facilitate software system inspiration.
    [Show full text]
  • The Need for Hardware/Software Codesign Patterns - a Toolbox for the New Digital Designer
    The need for Hardware/Software CoDesign Patterns - a toolbox for the new Digital Designer By Senior Consultant Carsten Siggaard, Danish Technological Institute May 30. 2008 Abstract Between hardware and software the level of abstraction has always differed a lot, this is not a surprise, hardware is an abstraction for software and the topics which is considered important by either a hardware developer or a software developer are quite different, making the communication between software and hardware developers (or even departments) difficult. In this report the software concept of design patterns is expanded into hardware, and the need for a new kind of design pattern, The Digital Design Pattern, is announced. Copyright © 2008 Danish Technological Institute Page 1 of 20 Contents Contents ............................................................................................................................................... 2 Background .......................................................................................................................................... 4 What is a design pattern ....................................................................................................................... 4 Three Disciplines when using Design Patterns ................................................................................ 5 Pattern Hatching ........................................................................................................................... 6 Pattern Mining.............................................................................................................................
    [Show full text]
  • Active Object
    Active Object an Object Behavioral Pattern for Concurrent Programming R. Greg Lavender Douglas C. Schmidt [email protected] [email protected] ISODE Consortium Inc. Department of Computer Science Austin, TX Washington University, St. Louis An earlier version of this paper appeared in a chapter in the book ªPattern Languages of Program Design 2º ISBN 0-201-89527-7, edited by John Vlissides, Jim Coplien, and Norm Kerth published by Addison-Wesley, 1996. : Output : Input Handler Handler : Routing Table : Message Abstract Queue This paper describes the Active Object pattern, which decou- 3: enqueue(msg) ples method execution from method invocation in order to : Output 2: find_route(msg) simplify synchronized access to a shared resource by meth- Handler ods invoked in different threads of control. The Active Object : Message : Input pattern allows one or more independent threads of execution Queue Handler 1: recv(msg) to interleave their access to data modeled as a single ob- ject. A broad class of producer/consumer and reader/writer OUTGOING OUTGOING MESSAGES GATEWAY problems are well-suited to this model of concurrency. This MESSAGES pattern is commonly used in distributed systems requiring INCOMING INCOMING multi-threaded servers. In addition,client applications (such MESSAGES MESSAGES as windowing systems and network browsers), are increas- DST DST ingly employing active objects to simplify concurrent, asyn- SRC SRC chronous network operations. 1 Intent Figure 1: Connection-Oriented Gateway The Active Object pattern decouples method execution from method invocation in order to simplify synchronized access to a shared resource by methods invoked in different threads [2]. Sources and destinationscommunicate with the Gateway of control.
    [Show full text]
  • Performance Analysis of the Reactor Pattern in Network Services
    Performance Analysis of the Reactor Pattern in Network Services Swapna Gokhale1, Aniruddha Gokhale2, Jeff Gray3, Paul Vandal1, Upsorn Praphamontripong1 1University of Connecticut 2Vanderbilt University Dept. of Computer Science Dept. of Electrical Engineering and Engineering and Computer Science Storrs, CT 06269 USA Nashville, TN 37235 USA [email protected] [email protected] 3University of Alabama at Birmingham Dept of Computer and Information Science Birmingham, AL USA [email protected] Abstract 1. Introduction Service oriented computing (SoC), which is made feasi- ble by middleware-based distributed systems, is an emerg- ing technology to provide the next-generation services to meet societal needs ranging from basic necessities, such as The growing reliance on services provided by software education, energy, communications and healthcare to emer- applications places a high premium on the reliable and ef- gency and disaster management. For SOC to be successful ficient operation of these applications. A number of these in meeting the demands of society, assurance on the perfor- applications follow the event-driven software architecture mance of these services is necessary. Since these services style since this style fosters evolvability by separating event are primarily built using communication middleware, the handling from event demultiplexing and dispatching func- problem reduces to the issue of performance assurance of tionality. The event demultiplexing capability, which ap- the middleware platforms. pears repeatedly across a class of event-driven applica- Middleware typically comprises a number of building tions, can be codified into a reusable pattern, such as the blocks, which are essentially patterns-based reusable soft- Reactor pattern. In order to enable performance analysis of ware frameworks.
    [Show full text]
  • The Design and Use of the ACE Reactor an Object-Oriented Framework for Event Demultiplexing
    The Design and Use of the ACE Reactor An Object-Oriented Framework for Event Demultiplexing Douglas C. Schmidt and Irfan Pyarali g fschmidt,irfan @cs.wustl.edu Department of Computer Science Washington University, St. Louis 631301 1 Introduction create concrete event handlers by inheriting from the ACE Event Handler base class. This class specifies vir- This article describes the design and implementation of the tual methods that handle various types of events, such as Reactor pattern [1] contained in the ACE framework [2]. The I/O events, timer events, signals, and synchronization events. Reactor pattern handles service requests that are delivered Applications that use the Reactor framework create concrete concurrently to an application by one or more clients. Each event handlers and register them with the ACE Reactor. service of the application is implemented by a separate event Figure 1 shows the key components in the ACE Reactor. handler that contains one or more methods responsible for This figure depicts concrete event handlers that implement processing service-specific requests. In the implementation of the Reactor pattern described in this paper, event handler dispatching is performed REGISTERED 2: accept() by an ACE Reactor.TheACE Reactor combines OBJECTS 5: recv(request) 3: make_handler() the demultiplexing of input and output (I/O) events with 6: process(request) other types of events, such as timers and signals. At Logging Logging Logging Logging Handler Acceptor LEVEL thecoreoftheACE Reactor implementation is a syn- LEVEL Handler Handler chronous event demultiplexer, such as select [3] or APPLICATION APPLICATION Event Event WaitForMultipleObjects [4]. When the demulti- Event Event Handler Handler Handler plexer indicates the occurrence of designated events, the Handler ACE Reactor automatically dispatches the method(s) of 4: handle_input() 1: handle_input() pre-registered event handlers, which perform application- specified services in response to the events.
    [Show full text]
  • Principles of Software Design Concurrency and Parallelism
    Concurrency and Parallelism Principles of Software Design Concurrency and Parallelism Robert Luko´ka [email protected] www.dcs.fmph.uniba.sk/~lukotka M-255 Robert Luko´ka Concurrency and Parallelism Concurrency and Parallelism Concurrency and Parallelism Concurrency - is the ability of dierent parts or units of a program, algorithm, or problem to be executed out-of-order or in partial order, without aecting the nal outcome. Parallelism - calculations or the execution of processes are carried out simultaneously. Concurrency allows for parallel execution. Robert Luko´ka Concurrency and Parallelism Concurrency and Parallelism Concurrency and Parallelism Concurrency is useful even without parallel computing (it makes sense to use more threads even if we have only one processor): Ecient allocation of resources - while a thread waits for something, another thread may be executed. You do not need threads to get concurrent behavior, see e.g. select system call. You do not know the order on which your code is executed. But it should not matter. Robert Luko´ka Concurrency and Parallelism Concurrency and Parallelism What could possibly go wrong? int etx_rcvd = FALSE; void WaitForInterrupt() { etx_rcvd = FALSE; while (!ext_rcvd) { counter++; } } Robert Luko´ka Concurrency and Parallelism Concurrency and Parallelism What could possibly go wrong? Compiler does obvious optimization. int etx_rcvd = FALSE; void WaitForInterrupt() { while (1) { counter++; } } Robert Luko´ka Concurrency and Parallelism Concurrency and Parallelism Race conditions OK, that was a bit silly, this is a more standard examples (Python, C++): //Example 1 if x == 5: x = x * 2 //Example2 x = x + 1 //Example3 x += 1 //Example4 (C++) x++; Robert Luko´ka Concurrency and Parallelism Concurrency and Parallelism Race conditions Each of the examples can lead to surprising behavior provided that another process can modify x concurrently.
    [Show full text]
  • Stage Scheduling for CPU-Intensive Servers
    UCAM-CL-TR-781 Technical Report ISSN 1476-2986 Number 781 Computer Laboratory Stage scheduling for CPU-intensive servers Minor E. Gordon June 2010 15 JJ Thomson Avenue Cambridge CB3 0FD United Kingdom phone +44 1223 763500 http://www.cl.cam.ac.uk/ c 2010 Minor E. Gordon This technical report is based on a dissertation submitted December 2009 by the author for the degree of Doctor of Philosophy to the University of Cambridge, Jesus College. Technical reports published by the University of Cambridge Computer Laboratory are freely available via the Internet: http://www.cl.cam.ac.uk/techreports/ ISSN 1476-2986 Stage scheduling for CPU-intensive servers Minor E. Gordon Summary The increasing prevalence of multicore, multiprocessor commodity hardware calls for server software architectures that are cycle-efficient on individual cores and can maximize concurrency across an entire machine. In order to achieve both ends this dissertation ad- vocates stage architectures that put software concurrency foremost and aggressive CPU scheduling that exploits the common structure and runtime behavior of CPU-intensive servers. For these servers user-level scheduling policies that multiplex one kernel thread per physical core can outperform those that utilize pools of worker threads per stage on CPU-intensive workloads. Boosting the hardware efficiency of servers in userspace means a single machine can handle more users without tuning, operating system modifications, or better hardware. Contents 1 Introduction 9 1.1 Servers . 9 1.2 Stages . 10 1.3 An image processing server . 10 1.4 Optimizing CPU scheduling for throughput . 11 1.5 Outline . 13 1.5.1 Results .
    [Show full text]
  • Reactive Programming
    Reactive programming Lessons learned Tomasz Nurkiewicz You must be this tall to practice reactive programming [...] a very particular set of skills, skills [...] acquired over a very long career. Skills that make me a nightmare for people like you Liam Neeson on reactive programming Who am I? I built complex reactive systems * not really proud about the “complex” part 1000+ Akka cluster nodes Tens of thousands of RPS on a single node Beat C10k problem ...and C100k I wrote a book with the word “reactive” in the title May you live in interesting times Chinese curse May you support interesting codebase me 1. Fetch user by name from a web service 2. If not yet in database, store it 3. Load shopping cart for user 4. Count total price of items 5. Make single payment 6. Send e-mail for each individual item, together with payment ID User user = ws.findUserByName(name); if (!db.contains(user.getSsn())) { db.save(user); } List<Item> cart = loadCart(user); double total = cart.stream() .mapToDouble(Item::getPrice) .sum(); UUID id = pay(total); cart.forEach(item -> sendEmail(item, id)); User user = ws.findUserByName(name) Mono<User> user = ws.findUserByName(name) boolean contains = db.contains(user.getSsn()) Mono<Boolean> contains = db.contains(user.getSsn()) if (!db.contains(user.getSsn())) { db.save(user); } user -> db .contains(user.getSsn()) //Mono<Bool>, true/false .filter(contains -> contains) //Mono<Bool>, true/empty .switchIfEmpty(db.save(user)) //if empty, //replace with db.save() User user = ws.findUserByName(name); if (!db.contains(user.getSsn())) { db.save(user); } List<Item> cart = loadCart(user); double total = cart.stream() .mapToDouble(Item::getPrice) .sum(); UUID id = pay(total); cart.forEach(item -> sendEmail(item, id)); Now, take a deep breath..
    [Show full text]
  • Conceptual Architecture Patterns
    HASSO - PLATTNER - INSTITUT für Softwaresystemtechnik an der Universität Potsdam Conceptual Architecture Patterns Technische Berichte des Hasso-Plattner-Instituts für Softwaresystemtechnik an der Universität Potsdam Technische Berichte des Hasso-Plattner-Instituts für Softwaresystemtechnik an der Universität Potsdam 2 Conceptual Architecture Patterns: FMC-based Representations Bernhard Gröne and Frank Keller (eds.) April 2004 Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Die Reihe Technische Berichte des Hasso-Plattner-Instituts für Softwaresystemtechnik an der Universität Potsdam erscheint aperiodisch. Herausgeber: Professoren des Hasso-Plattner-Instituts für Softwaresystemtechnik an der Universität Potsdam Redaktion Bernhard Gröne und Frank Keller EMail {bernhard.groene, frank.keller}@hpi.uni-potsdam.de Vertrieb: Universitätsverlag Potsdam Postfach 60 15 53 14415 Potsdam Fon +49 (0) 331 977 4517 Fax +49 (0) 331 977 4625 e-mail: [email protected] http://info.ub.uni-potsdam.de/verlag.htm Druck allprintmedia gmbH Blomberger Weg 6a 13437 Berlin email: [email protected] © Hasso-Plattner-Institut für Softwaresystemtechnik an der Universität Potsdam, 2004 Dieses Manuskript ist urheberrechtlich geschützt. Es darf ohne vorherige Genehmigung der Herausgeber nicht vervielfältigt werden. Heft 2 (2004) ISBN 3-935024-98-3 ISSN 1613-5652 Conceptual Architecture Patterns: FMC–based Representations Bernhard Gröne and Frank Keller (editors) Research assistants of the chair “Modeling of Software–intensive Systems” Hasso–Plattner–Institute for Software Systems Engineering P.O. Box 900460, 14440 Potsdam, Germany E-mail: {bernhard.groene, frank.keller}@hpi.uni-potsdam.de Abstract This document presents the results of the seminar “Conceptual Architecture Patterns” of the winter term 2002 in the Hasso–Plattner–Institute.
    [Show full text]
  • Leader/Followers a Design Pattern for Efficient Multi-Threaded I/O
    Leader/Followers A Design Pattern for Efficient Multi-threaded I/O Demultiplexing and Dispatching Douglas C. Schmidt and Carlos O’Ryan g fschmidt,coryan @uci.edu Electrical and Computer Engineering Dept. University of California, Irvine, CA 92697, USA Michael Kircher Irfan Pyarali [email protected] [email protected] Siemens Corporate Technology Department of Computer Science, Washington University Munich, Germany St. Louis, MO 63130, USA 1 Intent The front-end communication servers are actually “hybrid” client/server applications that perform two primary tasks. The Leader/Followers design pattern provides a concurrency First, they receive requests arriving simultaneously from hun- model where multiple threads can efficiently demultiplex dreds or thousands of remote clients over wide area commu- events and dispatch event handlers that process I/O handles nication links, such as X.25 or the TCP/IP. Second, they vali- shared by the threads. date the remote client requests and forward valid requests over TCP/IP connections to back-end database servers. In contrast, the back-end database servers are “pure” servers that perform 2 Example the designated transactions. After a transaction commits, the database server returns its results to the associated commu- Consider the design of a multi-tier, high-volume, on-line trans- nication server, which then forwards the results back to the action processing (OLTP) system shown in the following fig- originating remote client. ure. In this design, front-end communication servers route FRONT--END BACK--END The servers in this OLTP system spend most of their time COMM.. SERVERS DATABASE SERVERS processing various types of I/O operations in response to re- quests.
    [Show full text]
  • Splay: a Toolkit for the Design and Evaluation of Large Scale Distributed Systems
    UNIVERSITÉ DE NEUCHÂTEL Splay: A toolkit for the design and evaluation of Large Scale Distributed Systems Thèse présentée le 27 juin 2014 à la Faculté des Sciences de l’Université de Neuchâtel pour l’obtention du grade de docteur ès sciences par Lorenzo Leonini acceptée sur proposition du jury: Prof. Pascal Felber Université de Neuchâtel directeur de thèse Prof. Peter Kropf Université de Neuchâtel rapporteur Dr Etienne Rivière Université de Neuchâtel rapporteur Prof. Vivien Quéma INP, Grenoble rapporteur Prof. Spyros Voulgaris VU University, Amsterdam rapporteur Faculté des sciences Secrétariat-décanat de Faculté Rue Emile-Argand 11 2000 Neuchâtel - Suisse Tél: + 41 (0)32 718 2100 E-mail: [email protected] IMPRIMATUR POUR THESE DE DOCTORAT La Faculté des sciences de l'Université de Neuchâtel autorise l'impression de la présente thèse soutenue par Monsieur Lorenzo LEONINI Titre: “Splay: A toolkit for the design and evaluation of Large Scale Distributed Systems” sur le rapport des membres du jury composé comme suit: • Prof. Pascal Felber, Université de Neuchâtel, directeur de thèse • Prof. Peter Kropf, Université de Neuchâtel • Dr Etienne Rivière, Université de Neuchâtel • Prof. Vivien Quéma, INP, Grenoble, France • Prof. Spyros Voulgaris, VU University, Amsterdam, Pays-Bas Neuchâtel, le 30 avril 2014 Le Doyen, Prof. P. Kropf Imprimatur pour thèse de doctorat www.unine.ch/sciences To my family. Acknowledgements First, I would like to thank my adviser, Prof. Pascal Felber, for all his guiding, advice, understanding and for our many shared sporting activities during my PhD studies. I would also like to thank Dr. Etienne Rivière for our collaboration and all the nice moments spent together.
    [Show full text]