Software Architectural Styles in distributed computing - Cloud Computing

Software Architectural Styles

  • Software architectural styles are based on the logical arrangement of software components.
  • They are helpful because they provide an intuitive view of the whole system, despite its physical deployment.
  • They also identify the main abstractions that are used to shape the components of the system and the expected interaction patterns between them.

Data Centered Architectures

  • These architectures identify the data as the fundamental element of the software system, and access to shared data is the core characteristic of the data-centered architectures.
  • Within the context of distributed and parallel computing systems, the integrity of data is the overall goal of such systems.
  • The repository architectural style is the most relevant reference model in this category. It is characterized by two main components – the central data structure, which represents the current state of the system, and a collection of independent components, which operate on the central data.
  • The ways in which the independent components interact with the central data structure can be very heterogeneous.
  • In particular repository-based architectures differentiate and specialize further into subcategories according to the choice of control discipline to apply for the shared data structure. Of particular interest are databases and blackboard systems.

Blackboard Architectural Style

  • The blackboard architectural style is characterized by three main components:
    • Knowledge sources: These are entities that update the knowledge base that is maintained on the blackboard.
    • Blackboard: This represents the data structure that is shared among the knowledge sources and stores the knowledge base of the application.
    • Control: The control is the collection of triggers and procedures that govern the interaction with the blackboard and update the status of the knowledge base.

Data Flow Architectures

  • Access to data is the core feature; data-flow styles explicitly incorporate the pattern of data-flow, since their design is determined by an orderly motion of data from component to component, which is the form of communication between them.
  • Styles within this category differ in one of the following ways: how the control is exerted, the degree of concurrency among components, and the topology that describes the flow of data.
  • Batch Sequential: The batch sequential style is characterized by an ordered sequence of separate programs executing one after the other. These programs are chained together by providing as input for the next program the output generated by the last program after its completion, which is most likely in the form of a file. This design was very popular in the mainframe era of computing and still finds applications today. For example, many distributed applications for scientific computing are defined by jobs expressed as sequence of programs that, for example, pre-filter, analyze, and post process data. It is very common to compose these phases using the batch sequential style.
  • Pipe-and-Filter Style: It is a variation of the previous style for expressing the activity of a software system as sequence of data transformations. Each component of the processing chain is called a filter, and the connection between one filter and the next is represented by a data stream.

Virtual Machine architectures

  • The virtual machine class of architectural styles is characterized by the presence of an abstract execution environment (generally referred as a virtual machine) that simulates features that are not available in the hardware or software.
  • Applications and systems are implemented on top of this layer and become portable over different hardware and software environments.
  • The general interaction flow for systems implementing this pattern is – the program (or the application) defines its operations and state in an abstract format, which is interpreted by the virtual machine engine. The interpretation of a program constitutes its execution. It is quite common in this scenario that the engine maintains an internal representation of the program state.
  • Popular examples within this category are rule based systems, interpreters, and command language processors.

Rule-Based Style:

  • This architecture is characterized by representing the abstract execution environment as an inference engine. Programs are expressed in the form of rules or predicates that hold true. The input data for applications is generally represented by a set of assertions or facts that the inference engine uses to activate rules or to apply predicates, thus transforming data. The examples of rule-based systems can be found in the networking domain: Network Intrusion Detection Systems (NIDS) often rely on a set of rules to identify abnormal behaviors connected to possible intrusion in computing systems.
  • Interpreter Style: The presence of engine to interpret the style.

Call and return architectures

  • This identifies all systems that are organized into components mostly connected together by method calls.
  • The activity of systems modeled in this way is characterized by a chain of method calls whose overall execution and composition identify the execution one or more operations.
  • There are three categories in this
    • Top-down Style : developed with imperative programming
    • Object Oriented Style: Object programming models
    • Layered Style: provides the implementation in different levels of abstraction of the system.