A Design Framework for Highly Concurrent Systems

Matt Welsh, Steven D. Gribble, Eric A. Brewer and David Culler

EECS Department
University of California, Berkeley
Technical Report No. UCB/CSD-00-1108
2000

http://www2.eecs.berkeley.edu/Pubs/TechRpts/2000/CSD-00-1108.pdf

Building highly concurrent systems, such as large-scale Internet services, requires managing many information flows at once and maintaining peak throughput when demand exceeds resource availability. In addition, any platform supporting Internet services must provide high availability and be able to cope with burstiness of load. Many approaches to building concurrent systems have been proposed, which generally fall into the two categories of threaded and event-driven programming. We propose that threads and events are actually on the ends of a design spectrum, and that the best implementation strategy for these applications is somewhere in between.

We present a general-purpose design framework for building highly concurrent systems, based on three design components -- tasks, queues, and thread pools -- which encapsulate the concurrency, performance, fault isolation, and software engineering benefits of both threads and events. We present a set of design patterns that can be applied to map an application onto an implementation using these components. In addition, we provide an analysis of several systems (including an Internet services platform and a highly available, distributed, persistent data store) constructed using our framework, demonstrating its benefit for building and reasoning about concurrent applications.


BibTeX citation:

@techreport{Welsh:CSD-00-1108,
    Author = {Welsh, Matt and Gribble, Steven D. and Brewer, Eric A. and Culler, David},
    Title = {A Design Framework for Highly Concurrent Systems},
    Institution = {EECS Department, University of California, Berkeley},
    Year = {2000},
    URL = {http://www2.eecs.berkeley.edu/Pubs/TechRpts/2000/5235.html},
    Number = {UCB/CSD-00-1108},
    Abstract = {Building highly concurrent systems, such as large-scale Internet services, requires managing many information flows at once and maintaining peak throughput when demand exceeds resource availability. In addition, any platform supporting Internet services must provide high availability and be able to cope with burstiness of load. Many approaches to building concurrent systems have been proposed, which generally fall into the two categories of threaded and event-driven programming. We propose that threads and events are actually on the ends of a design spectrum, and that the best implementation strategy for these applications is somewhere in between. <p>We present a general-purpose design framework for building highly concurrent systems, based on three design components -- tasks, queues, and thread pools -- which encapsulate the concurrency, performance, fault isolation, and software engineering benefits of both threads and events. We present a set of design patterns that can be applied to map an application onto an implementation using these components. In addition, we provide an analysis of several systems (including an Internet services platform and a highly available, distributed, persistent data store) constructed using our framework, demonstrating its benefit for building and reasoning about concurrent applications.}
}

EndNote citation:

%0 Report
%A Welsh, Matt
%A Gribble, Steven D.
%A Brewer, Eric A.
%A Culler, David
%T A Design Framework for Highly Concurrent Systems
%I EECS Department, University of California, Berkeley
%D 2000
%@ UCB/CSD-00-1108
%U http://www2.eecs.berkeley.edu/Pubs/TechRpts/2000/5235.html
%F Welsh:CSD-00-1108