Application architectures
Diomidis Spinellis
Department of Management Science and Technology
Athens University of Economics and Business
Athens, Greece
dds@aueb.gr
Architectural Dimensions
-  Design properties 
-  System structure 
-  Control model 
-  Element packaging 
-  Architectural reuse 
Basic Design Principles
When designing a system's architecture we try to follow the
principles outlined below.
Abstraction
Abstraction is achieved in the following areas:
-  procedural abstraction 
-  data abstraction 
-  control abstraction 
Refinement
Stepwise refinement is a way to tame the details and
complexity of the final design.
Modularity
A modular design minimises the system's complexity and thereby
the development cost and the number of possible errors.
A good design method should provide:
-  modular decomposability 
-  modular composability 
-  individual modular understandability 
-  modular continuity
(in changes: minimize the modules affected by any change) 
-  modular protection:
a problem in one part should not create problems in others 
Cohesion
A design should bring closely together parts that exhibit a
high measure of cohesion.
We can distinguish the following ordered types of cohesion:
-  coincidental cohesion 
-  logical cohesion 
-  temporal cohesion 
-  procedural cohesion 
-  communicational cohesion 
-  sequential cohesion 
-  functional cohesion 
Coupling
On the other hand, a design should avoid coupling between
parts.
We can distinguish the following ordered types of coupling:
-  data coupling 
-  stamp coupling (copy of a part) 
-  control coupling 
-  common coupling 
-  external coupling 
-  content coupling 
A: System Structures
Important and noteworthy system structuring 
models include the following:
- Centralized repository
- Data-flow
- Object-oriented
- Layered
- Hierarchical
Centralized Repository
-  Central process acts as control hub 
-  Central data repository acts as information hub 
-  Termed client-server when based on standalone processes 
-  Integrability allows different clients and servers to interoperate 
-  Depending on persistency requirements:
	
	-  A blackboard can store temporary data acting as a communications hub 
-  A relational database can provide a persistent data store 
 
-  In a two-tier architecture the client accesses the database 
-  In a three-tier architecture a separate server offers task-oriented services 
-  A transaction monitor can be used to offer
	
	-  Resiliency 
-  Redundancy 
-  Load distribution 
-  Message sequencing 
 
-  Middleware allows different parts to communicate with each other
	
	-  CORBA (OMG) 
-  .NET (Microsoft) 
-  RMI (Java/Sun) 
 
Examples
-  Window manager 
-  File server 
-  Print server 
-  Collaboration
	
	-  WWW 
-  Modern ERP systems 
-  Instant messaging 
-  Revision control (CVS) 
 
Data-Flow
-  Also known as pipes-and-filters architecture 
-  Consists of a series of data transformations 
-  Examples:
	
	-  Unix text processing tools (wc, grep, sort, uniq, join) 
-  Netpbm graphics processing package 
 
Create Manual Page Index
 
Object-Oriented
-  Design is based on interacting objects 
-  Each object maintains its own state 
-  State is manipulated by methods 
-  Objects are typically grouped into classes 
-  Classes are often organised into generalisation relationships 
A generalization relationship in the Tomcat servlet container
 
Layered
-  Can organise multiple peer subsystems 
-  Each layer:
	
	-  Presents a standard interface to its upper layer 
-  Communicates using a different standard interface with its lower layer 
 
-  Essentially each layer implements a virtual machine 
-  Lower layers shall not use upper layers 
-  Examples:
	
	-  Network stacks 
-  Operating system structures 
 
The Windows NT implementation layers 
 
Hierarchies
Hierarchies 
-  provide structure 
-  facilitate navigation 
-  can be used orthogonally with other architectures 
-  examples 
	-  directories 
-  DNS 
-  call graphs  
-  identifier namespaces  
The NetBSD kernel source hierarchy
 
Control Models
- Call and return
- Structure prescribes control
	-  Flow of data 
-  Method invocation 
- Event-Driven Systems
- System Manager
- State Transition
Event-Driven Systems
-  Control decisions depend on external events 
-  Events can be broadcast to all listeners (e.g. power down) 
-  Events can be polled from a source (e.g. GetMessage) 
-  Handlers can be registered to respond 
-  Examples
	
	-  Hardware interrupts 
-  GUI systems 
-  Relational database triggers 
-  System and network management 
 
System Manager
-  Useful for orchestrating multiple (pseudo) concurrent processes 
-  One process acts as central manager 
-  Typical operations: 
	 
State Transition
-  Changes in data (the state) direct the flow of control 
-  Often modelled as a state machine 
	-  Set of states 
-  Initial state 
-  Final state 
-  Actions (processing and state transitions) 
TCP state transition diagram
 
B: Element Packaging Approaches
Elements can be packaged using the following approaches:
- Module
- Namespace
- Object
- Generic implementation
- Abstract data type
- Library
- Component
- Process
- Data repository
Module
-  Separately named and addressable component 
-  Provides services to other modules 
-  Typically interacts through procedure calls and data sharing 
-  Physical boundary is often a file 
-  Provides information hiding (only exposes what is needed) 
Namespace
-  Counters namespace pollution 
-  Unique prefix associated with a part of the implementation 
-  Supported by languages such as C++, C#, Java, Modula and Perl 
Object
-  Encapsulates data and code 
-  Fields contain data 
-  Methods contain code for acting on the data 
-  Every object has its own copy of the data 
-  Same objects are typically grouped into a class 
-  Classes can also contain data and code shared among all objects 
-  Classes can be organised in an inheritance hierarchy 
-  Each derived class inherits the fields and methods of its base class 
-  Polymorphism allows objects of any derived class to be used as objects of the base class 
Generic Implementation
-  Works with arbitrary data types
-  Based on concepts a particular element must satisfy (e.g. comparable) 
-  Typically available as standardised library supporting e.g. 
	-  Containers 
-  Iterators for traversing the containers 
-  Algorithms on containers 
-  Numeric algorithms 
Abstract Data Type
-  Encapsulates data 
-  Separates interface from implementation 
-  Implementation can change; interface remains 
-  Interface often specified in a formal manner 
Examples
-  Programming in the small:
	
-  Programming in the large:
	
	-  Relational database accessible via stored procedures 
-  Data accessible via the web service model 
 
Library
-  Organized collection of modules 
-  Sharing a common purpose 
-  Typically distributed in binary form 
-  Uses: 
	-  Facilitates code reuse 
-  Optimises the build process 
-  Load application features on demand (plugin)
Component
-  Self contained unit of program composition 
-  Documented and well defined interfaces 
-  Deployed without access to the original developers 
-  Often distributed and used by third parties 
-  In common with objects 
	-  Encapsulate state 
-  Provide access mechanisms through interfaces 
-  Support modular design 
-  In addition 
	-  Can be implemented in different languages (although .NET allows this for objects as well)
-  Robustly packaged in binary containers 
-  Can encapsulate multiple objects (e.g. DataGrid) 
-  Examples 
Process
-  Expensive startup and communication overhead 
-  Robust isolation (OS enforced)
	
	-  Faults (e.g. buffer overflow problems) 
-  Resources (e.g. open files) 
-  Privileges 
 
-  Simplifies build process and deployment 
Data Repository
-  Structure of the data reflects the structure of the system 
-  Examples 
	-  Relational database 
-  Directory structure 
-  Windows registry 
-  XML data 
C: Architectural Reuse
Reusing architectural designs is often more important than reusing code.
Some commonly-used approaches are:
- Frameworks
- Code wizards
- Design patterns
- Domain-specific and reference architectures
Framework
-  Collection of classes serving a common goal 
-  Allow the expression of sophisticated architectures 
-  Designed to provide a reuse base for implementing complete systems 
-  Examples 
	-  Adaptive Communication Environment 
-  Microsoft Foundation Classes 
-  Abstract Windowing Toolkit 
Code Wizard
-  Automatically generates (often cryptic) code
-  User-guided 
-  Code is supposed to be subsequently modified 
-  Problematic if initially stated requirements change 
Design Patterns
"Each pattern describes a problem which occurs over and over again in
our environment, and then describes the core of the solution to that
problem, in such a way that you can use this solution a million times over,
without ever doing it the same way twice."
- Christopher Alexander
-  Describe concepts, not code
-  Finer-grained than frameworks 
-  Typical description 
	-  a pattern name such as  Singleton or  Reactor used to identify the pattern,
-  an illustration of its structure using a UML diagram,
-  a classification of the pattern as e.g. creational, behavioural, or structural,
-  an illustration of the design problem that provides the motivation to use the pattern,
-  an outline of the situations where the pattern can be applied,
-  an outline of the pattern's participants,
-  a description of how the pattern supports its objectives, and
-  examples and prescriptive guidelines towards the pattern's implementation.
Domain-Specific and Reference Architectures
-  Some application classes are typically associated with a specific architecture 
-  Other architectures are abstract and refer to a given field 
-  Examples 
	-  Compilers 
-  Operating systems 
-  OSI reference architecture
-  Web services architecture
D: Web Services Architecture
Web Service
 
-  Instance of Service Oriented Architecture 
-  Software system designed to support interoperable networked machine-to-machine interaction 
-  Interface described in a machine-processable format (WSDL) 
-  Interaction through SOAP messages 
-  Conveyed using HTTP with an XML serialization 
Web Services Architecture 
-  Standard means of interoperating between different software applications
-  Applications can run on a variety of platforms and/or frameworks
-  Interoperability through the definition of compatible protocols 
Roles of Humans and Machines
 
Web Service Technologies
 
WSA Models
- Message Oriented Model (e.g. message structure)
- Service Oriented Model (e.g. services and related actions) 
- Resource Oriented Model (identification of resources) 
- Policy Model (constraints like security and QoS) 
- Management Model (relationship of deployed elements) 
 
Message Oriented Model
 
Important Definitions
-  Correlation is the association of a message with a context. Message correlation ensures that the agent requesting a service execution can match the reply with the request, especially when multiple replies may be possible. 
-  A message is the basic unit of data sent from one software agent to another in the context of Web services.
-  A message envelope is that meta-data associated with a message that permits the message to be delivered, intact.
-  A Message Exchanage Pattern (MEP) is a template, devoid of application semantics, that describes a generic pattern for the exchange of messages between agents.
Service Oriented Model
 
Important Definitions
-  
An action, for the purposes of this architecture, is any action that may be performed by an agent as a result of receiving a message, or results in sending a message or other observable state change.
-  
A choreography defines the sequence and conditions under which multiple cooperating independent Web services exchange information in order to achieve some useful function.
-  
A service is a set of actions that form a coherent whole from the point of view of service providers and service requesters.
-  
The semantics of a service is the contract between the service provider and the service requester that expresses the effect of invoking the service. A service semantics may be formally described in a machine readable form, identified but not formally defined or informally defined via an `out of band' agreement between the provider and the requester.
-  
A service task is a unit of activity associated with a service. It is denoted by a pair: a goal and an action; the goal denotes the intended effect of the task and the action denotes the process by which the goal is achieved.
Resource Oriented Model
 
Important Definitions
-  
Discovery is the act of locating a machine-processable description of a Web service that may have been previously unknown and that meets certain functional criteria.
A discovery service is a service that performs the above discovery; of particular interest are discovery services that permit the discovery of Web services.
Policy Model
 
Important Definitions
-  
An audit guard is a mechanism deployed on behalf of an owner that monitors actions and agents to verify the satisfaction of obligations.
-  
A permission guard is a mechanism deployed on behalf of an owner that enforces permission policies.
-  
A policy is a constraint on the behaviour of agents.
-  
A policy guard is a mechanism deployed on behalf of an owner that enforces a policy (or set of policies).
Management Model
 
Important Definitions
-  
A deployed resource is a resource that exists in the physical world. There are many kinds of deployed elements, including agents, services and descriptions.
-  
A management configuration is a collection of properties of a manageable elements which may be changed.
-  
Events are changes in the state of a manageable element that are relevant to the element's manager.
Bibliography
- L. Barroca, J. Hall, and
  P. Hall, editors.
Software Architectures: Advances and Applications.
Springer Verlag, 1999.
- Grady Booch, James
  Rumbaugh, and Ivar Jacobson.
The
  Unified Modeling Language User Guide.
Addison-Wesley, Reading, MA, 1999.
- David Booth, Hugo Haas,
  Francis McCabe, Eric Newcomer, Michael Champion, Chris Ferris, and David
  Orchard.
Web services architecture (http://www.w3.org/TR/ws-arch/).
Available online http://www.w3.org/TR/ws-arch/, Aug 2003.
W3C Working Draft.
- L. L.
  Constantine and E. Yourdon.
Structured Design.
Prentice Hall, 1979.
- James O. Coplien and
  Douglas C. Schmidt.
Pattern Languages of Program Design.
Addison-Wesley, Reading, MA, 1995.
- Alan M. Davis.
201
  Principles of Software Development, pages 73–99.
McGraw-Hill, 1995.
- Peter
  Duchessi and InduShobha Chengalur-Smith.
Client/server benefits, problems, best practices.
Communications of the ACM, 41(5):87–94, May 1998.
- M. Fayad, R. Johnson,
  and D. C. Schmidt, editors.
Domain-Specific Application Frameworks: Applications and
  Experiences.
John Wiley and Sons, New York, 1999.
- M. Fayad, R. Johnson,
  and D. C. Schmidt, editors.
Domain-Specific Application Frameworks: Problems and Perspectives.
John Wiley and Sons, New York, 1999.
- Institute of Electrical and
  Electronics Engineers, Inc., New York, NY, USA.
IEEE Recommended Practice for Software Design Descriptions, 1998.
IEEE Standard 1016-1998.
- Institute of Electrical and
  Electronics Engineers, Inc., New York, NY, USA.
IEEE Recommended Practice for Architectural Description of Software
  Incentive Systems, 2000.
IEEE Standard 1471-2000.
- Brian W. Kernighan
  and Rob Pike.
The
  UNIX Programming Environment.
Prentice-Hall, Englewood Cliffs, NJ, 1984.
- Scott M. Lewandowski.
Frameworks for component-based client/server computing.
ACM Computing Surveys, 30(1):3–27, March 1998.
- David G.
  Messerschmitt and Clemens Szyperski.
Software Ecosystem—Understanding An Indispensable Technology and
  Industry.
MIT Press, Cambridge, 2003.
- Object
  Management Group, Inc.
The common object request broker: Architecture and specification, July 1996.
Revision 2.0 (Updated).
- Roger S. Pressman.
Software Engineering: A Practitioner's Approach, pages 330–393.
McGraw-Hill, fifth edition, 2000.
European Adaptation. Adapted by Darrel Ince.
- Konstantinos Raptis,
  Diomidis Spinellis, and Sokratis Katsikas.
Multi-technology distributed objects and their integration (    http://www.spinellis.gr/pubs/jrnl/2001-CSI-Components/html/imtd.html).
Computer Standards & Interfaces, 23:157–168, July 2001.
- J. H. Saltzer, D. P.
  Reed, and D. D. Clark.
End-to-end arguments in system design.
ACM Transactions on Computer Systems, 2(4):277–288, November
  1984.
- Mary Shaw and David
  Garlan.
Formulations and Formalisms in Software Architecture.
Springer Verlag, 1995.
Lecture Notes in Computer Science 1000.
- J. Siegel.
A preview of CORBA 3.
Computer, 32(5):114–116, May 1999.
- Ian Sommerville.
Software Engineering, pages 215–259.
Addison-Wesley, sixth edition, 2001.
- Diomidis Spinellis.
The computer's new clothes (    http://www.spinellis.gr/pubs/jrnl/1998-IEEESoft-CliServ/html/CliServ.html).
IEEE Software, 15(6):14–17, November/December 1998.
- Diomidis Spinellis.
Code Reading: The Open
  Source Perspective, chapter 9, pages 267–338.
Effective Software Development Series. Addison-Wesley, Boston, MA, 2003.
- Sun
  Microsystems Inc.
Java remote
  method invocation specification.
Available online http://java.sun.com/docs/guide/rmi/spec/rmiTOC.html/ (February
  2002), December 1999.
Revision 1.7, Java 2 SDK, Standard Edition, v1.3.0.
- Clemens Szyperski.
Component Software: Behind Object-Oriented Programming.
Addison-Wesley, Reading, MA, second edition, 2002.
- Damien Watkins, Mark
  Hammond, and Brad Abrams.
Programming in the .NET Environment.
Addison-Wesley, Reading, MA, 2002.