Arch Survey
Arch Survey
Draft 1.1
A software architecture determines how system components are identified and allo-
cated, how the components interact to form a system, the amount and granularity of
communication needed for interaction, and the interface protocols used for communica-
tion. For a network-based application, system performance is dominated by network
communication. Therefore, selection of the appropriate architectural style(s) for use in
designing the software architecture can make the difference between success and failure
in the deployment of a network-based application.
Software architectural styles have been characterized by their control-flow and data-
flow patterns, allocation of functionality across components, and component types.
Unfortunately, none of these characterizations are useful for understanding how a style
influences the set of architectural properties, or qualities, of a system. These properties
include, among others, user-perceived performance, network efficiency, simplicity,
modifiability, scalability, and portability. We use these style-induced architectural prop-
erties to classify styles for network-based applications with the goal of understanding
why certain styles are better than others for some applications, thus providing additional
guidance for software engineers faced with the task of architectural design.
Keywords
software architecture, software architectural style, network-based application, software
design, software design patterns, pattern languages
1
1 Introduction
Excuse me ... did you say ‘knives’?
— City Gent #1 (Michael Palin), The Architects Sketch [Python, 1970]
As predicted by Perry and Wolf [1992], software architecture has been a focal point for
software engineering research in the 1990s. The complexity of modern software
systems have necessitated a greater emphasis on componentized systems within which
the details of an implementation can be hidden.
Architecture is found at multiple levels within software systems. This paper examines
the highest level of software architecture, where the interactions among components are
capable of being realized in network communication. We limit our discussion to styles
for network-based application architectures in order to reduce the dimensions of vari-
ance within the classification. In addition, focusing on a particular type of software
allows us to identify the advantages of one style over another.
This survey is intended to explore a gap on the frontier between two research disciplines
in computer science. Software research has long been concerned with the categorization
of software designs and the development of design methodologies, but has rarely been
able to objectively evaluate the impact of various design choices on system behavior.
Networking research, in contrast, is focused on the details of generic communication
behavior between systems and improving the performance of particular communication
techniques, often ignoring the fact that changing the interaction style of an application
can have more impact on performance than the communication protocols used for that
interaction.
Some architectural styles are often portrayed as “silver bullet” solutions for all forms of
software. However, a good designer should select a style that matches the needs of the
particular problem being solved [Shaw, 1995]. Choosing the right architectural style for
a network-based application requires an understanding of the problem domain [Jackson,
1994] and thereby the communication needs of the application, an awareness of the
variety of architectural styles and the particular concerns they address, and the ability to
anticipate the sensitivity of each interaction style to the characteristics of network-based
communication [Waldo et al., 1994].
Section 2 examines the various definitions of architecture and architectural styles and
defines those terms which will be used throughout the remainder of this paper. Section 3
describes what is intended by network-based application architectures, and thereby
defines the scope of this survey. Section 4 describes the survey methodology and defines
the style-induced architectural properties used for style comparison. A classification of
software architectural styles for network-based applications is presented in Section 5,
followed in Section 6 by a discussion of related work within the larger research areas of
software architecture and distributed systems. Finally, I conclude with some observa-
tions on the relevance of this work to software engineering research and practice.
4 Classification Methodology
The purpose of building software is not to create a specific topology of interactions or
use a particular component type — it is to create a system that meets or exceeds the
application needs. The style must conform to those needs, not the other way around.
Therefore, in order to provide useful design guidance, a classification of architectural
styles should be based on the architectural properties induced by those styles.
4.1 Visualization
I use a table of style versus architectural properties as the primary visualization for this
classification. The table values indicate the relative influence that the style for a given
row has on a column’s property. Minus (− −) symbols accumulate for negative influences
and plus (++) symbols for positive, with plus-minus (± ±) indicating that it depends on
some aspect of the problem domain. Although this is a gross simplification of the details
presented in each section, it does indicate the degree to which a style has addressed (or
ignored) an architectural property.
An alternative visualization would be a property-based derivation graph for classifying
architectural styles. The styles would be classified according to how they are derived
from other styles, with the arcs between styles illustrated by architectural properties
gained or lost. The starting point of the graph would be the null style (no constraints). It
is possible to derive such a graph directly from the descriptions in Section 5.
4.3.1 Performance
One of the main reasons to focus on styles for network-based applications is because
component interactions can be the dominant factor in determining user-perceived
performance and network efficiency. Since the architectural style influences the nature
of those interactions, selection of an appropriate architectural style can make the differ-
ence between success and failure in the deployment of a network-based application.
The performance of a network-based application is bound first by the application
requirements, then by the chosen interaction style, followed by the realized architecture,
and finally by the implementation of each component. In other words, software cannot
avoid the basic cost of achieving the application needs; e.g., if the application requires
that data be located on system A and processed on system B, then the software cannot
avoid moving that data from A to B. Likewise, an architecture cannot be any more effi-
cient than its interaction style allows; e.g., the cost of multiple interactions to move the
data from A to B cannot be any less than that of a single interaction from A to B.
Finally, regardless of the quality of an architecture, no interaction can take place faster
than a component implementation can produce data and its recipient can consume data.
4.3.2 Scalability
Scalability refers to the ability of the architecture to support large numbers of compo-
nents, or interactions among components, within an active configuration. Scalability can
be improved by simplifying components, by distributing services across many compo-
nents (decentralizing the interactions), and by controlling interactions and configura-
tions as a result of monitoring. Styles influence these factors by determining the location
of application state, the extent of distribution, and the coupling between components.
Scalability is also impacted by the frequency of interactions, whether the load on a
component will be distributed evenly over time or occur in peaks, whether an interaction
requires guaranteed delivery or a best-effort, whether a request involves synchronous or
asynchronous handling, and whether the environment is controlled or anarchic (i.e., can
you trust the other components?).
4.3.3 Simplicity
The primary means by which architectural styles induce simplicity is by applying the
principle of separation of concerns to the allocation of functionality within components.
If functionality can be allocated such that the individual components are substantially
less complex, then they will be easier to understand and implement. Likewise, such
separation eases the task of reasoning about the overall architecture. I have chosen to
lump the qualities of complexity, understandability, and verifiability under the general
property of simplicity, since they go hand-in-hand for a network-based system.
Applying the principle of generality to architectural elements also improves simplicity,
since it decreases the variability within an architecture. Generality of connectors leads
to middleware (Section 6.3).
4.3.4 Modifiability
Modifiability is about the ease with which a change can be made to an application archi-
tecture. Modifiability can be further broken down into evolvability, extensibility,
customizability, configurability, and reusability, as described below. A particular
concern of network-based systems is dynamic modifiability [Oreizy et al., 1998], where
the modification is made to a deployed application without stopping and restarting the
entire system. Even if it were possible to build a software system that perfectly matches
the requirements of its users, those requirements will change over time just as society
changes over time. Because the components participating in a network-based applica-
tion may be distributed across multiple organizational boundaries, the system must be
prepared for gradual and fragmented change, where old and new implementations
coexist, without preventing the new implementations from making use of their extended
capabilities.
4.3.5 Visibility
Styles can also influence the visibility of interactions within a network-based applica-
tion by restricting interfaces via generality or providing access to monitoring. Visibility
in this case refers to the ability of a component to monitor or mediate the interaction
between two other components. Visibility can enable improved performance via shared
caching of interactions, scalability through layered services, reliability through reflec-
tive monitoring, and security by allowing the interactions to be inspected by mediators
(e.g., network firewalls). Mobile code is an example where the lack of visibility may
lead to security concerns.
This usage of visibility differs from that in Ghezzi et al. [1991], where they are referring
to visibility into the development process rather than the product.
4.3.6 Portability
Software is portable if it can run in different environments [Ghezzi et al., 1991]. Styles
that induce portability include those that move code along with the data to be processed,
such as the virtual machine and mobile agent styles, and those that constrain the data
elements to a set of standardized formats.
UP Perform.
Extensibility
Evolvability
Reusability
Scalability
Customiz.
Portability
Efficiency
Reliability
Simplicity
Configur.
Visibility
Style Derivation
PF ± + + + + +
UPF PF − ± ++ + + ++ ++ +
Abowd et al. [1995] provide an extensive formal description of the pipe and filter style
using the Z language. The Khoros software development environment for image
processing [Rasure and Young, 1992] provides a good example of using the pipe and
filter style to build applications.
Garlan and Shaw [1993] describe the advantageous properties of the pipe and filter style
as follows. First, PF allows the designer to understand the overall input/output of the
system as a simple composition of the behaviors of the individual filters (simplicity).
Second, PF supports reuse: any two filters can be hooked together, provided they agree
on the data that is being transmitted between them (reusability). Third, PF systems can
be easily maintained and enhanced: new filters can be added to existing systems (exten-
sibility) and old filters can be replaced by improved ones (evolvability). Fourth, they
permit certain kinds of specialized analysis (verifiability), such as throughput and dead-
lock analysis. Finally, they naturally support concurrent execution (user-perceived
performance).
Disadvantages of the PF style include: propagation delay is added through long pipe-
lines, batch sequential processing occurs if a filter cannot incrementally process its
inputs, and no interactivity is allowed. A filter cannot interact with its environment
because it cannot know that any particular output stream shares a controller with any
particular input stream. These properties decrease user-perceived performance if the
problem being addressed does not fit the pattern of a data flow stream.
One aspect of PF styles that is rarely mentioned is that there is an implied “invisible
hand” that arranges the configuration of filters in order to establish the overall applica-
UP Perform.
Extensibility
Evolvability
Reusability
Scalability
Customiz.
Portability
Efficiency
Reliability
Simplicity
Configur.
Visibility
Style Derivation
CS + + +
LS − + + + +
LCS CS+LS − ++ + ++ + +
CSS CS − ++ + + + +
C$SS CSS+$ − + + ++ + + + +
LC$SS LCS+C$SS − ± + +++
+++ ++ ++ + + + +
RS CS + − + + −
RDA CS + − − + −
UP Perform.
Extensibility
Evolvability
Reusability
Scalability
Customiz.
Portability
Efficiency
Reliability
Simplicity
Configur.
Visibility
Style Derivation
VM ± + − +
REV CS+VM + − ± + + − + −
COD CS+VM + + + ± + + −
LCODC$SS LC$SS+COD − ++ ++ +4+ +±+
+±+ ++ + + + ± + +
MA REV+COD + ++ ± ++ + + − +
5.4 Replication
Net Perform.
UP Perform.
Extensibility
Evolvability
Reusability
Scalability
Customiz.
Portability
Efficiency
Reliability
Simplicity
Configur.
Visibility
Style Derivation
RR ++ + +
$ RR + + + +
UP Perform.
Extensibility
Evolvability
Reusability
Scalability
Customiz.
Portability
Reliability
Efficiency
Simplicity
Configur.
Visibility
Style Derivation
EBI + + −− ± + + + + − −
C2 EBI+LCS + + + ++ + + ++ ± + ±
DO CS+CS − + + + + − −
BDO DO+LCS − − ++ + + ++ − +
5.6.1 C2
The C2 architectural style [Taylor et al., 1996] is directed at supporting large grain reuse
and flexible composition of system components by enforcing substrate independence. It
does so by combining event-based integration with layered-client-server. Asynchronous
notification messages going down, and asynchronous request messages going up, are
the sole means of intercomponent communication. This enforces loose coupling of
dependency on higher layers (service requests may be ignored) and zero coupling with
lower levels (no knowledge of notification usage), improving control over the system
without losing most of the advantages of EBI.
Notifications are announcements of a state change within a component. C2 does not say
what should be included with a notification: a flag, a delta of state change, or a complete
state representation are all possibilities. A connector’s primary responsibility is the
routing and broadcasting of messages; its secondary responsibility is message filtering.
The introduction of layered filtering of messages solves the EBI problems with scal-
ability, while improving evolvability and reusability as well. Heavyweight connectors
that include monitoring capabilities can be used to improve visibility and reduce the
reliability problems of partial failure.
6 Related Work
I include here only those areas of research that describe, define, or embody software
architectural styles. Other areas for software architectural research include architectural
analysis techniques, architecture recovery and reengineering, tools and environments for
architectural design, architecture refinement from specification to implementation, and
case studies of deployed software architectures [Garlan and Perry, 1995].
6.3 Middleware
Bernstein [1996] defines middleware as a distributed system service that includes stan-
dard programming interfaces and protocols. These services are called middleware
because they act as a layer above the OS and networking software and below industry-
specific applications. Umar [1997] presents an extensive treatment of the subject.
Architecture research regarding middleware focuses on the problems and effects of inte-
grating components with off-the-shelf middleware. Di Nitto and Rosenblum [1999]
describe how the usage of middleware and predefined components can influence the
architecture of a system being developed and, conversely, how specific architectural
choices can constrain the selection of middleware. Dashofy et al. [1999] discuss the use
of middleware with the C2 style.
Garlan et al. [1995] point out some of the architectural assumptions within off-the-shelf
components, examining the authors’ problems with reusing subsystems in creating the
Aesop tool for architectural design [Garlan et al., 1994]. They classify the problems into
four main categories of assumptions that can contribute to architectural mismatch:
nature of components, nature of connectors, global architectural structure, and construc-
tion process.
8 Acknowledgments
I’d like to thank Nenad Medvidovic for providing me with a copy of some hard-to-
obtain papers and pointing me in the direction of others. Peyman Oreizy’s survey
[Oreizy, 1998] provided a useful outline for structuring this survey. This version has
benefited from the comments on earlier drafts by Richard N. Taylor.
UP Perform.
Extensibility
Evolvability
Reusability
Scalability
Customiz.
Portability
Efficiency
Reliability
Simplicity
Configur.
Visibility
Style Derivation
PF ± + + + + +
UPF PF − ± ++ + + ++ ++ +
CS + + +
LS − + + + +
LCS CS+LS − ++ + ++ + +
CSS CS − ++ + + + +
C$SS CSS+$ − + + ++ + + + +
LC$SS LCS+C$SS − ± + +++
+++ ++ ++ + + + +
RS CS + − + + −
RDA CS + − − + −
VM ± + − +
REV CS+VM + − ± + + − + −
COD CS+VM + + + ± + + −
LCODC$SS LC$SS+COD − ++ ++ +4+ +±+
+±+ ++ + + + ± + +
MA REV+COD + ++ ± ++ + + − +
RR ++ + +
$ RR + + + +
EBI + + −− ± + + + + − −
C2 EBI+LCS + + + ++ + + ++ ± + ±
DO CS+CS − + + + + − −
BDO DO+LCS − − ++ + + ++ − +