Architectural synthesis Flashcards
What is an architectural view?
A representation of a system from the perspective of a related set of
concerns [IEE00] (e.g. a concern in a distributed system is how the software components are allocated to network nodes). This representation is comprised of a set of system elements and the relationships associated with them [CBB+02].
What is an architectural pattern?
Architectural pattern = architectural style.
Pattern = focusing on problem-solution
Style = focusing on solution, not context
What is a viewpoint?
A viewpoint focuses on relevant concerns
e.g. how is computation distributed over the nodes
There exists 8 common used viewpoints, what are they?
Component interaction
Distribution
User interaction
Language extension
Adaptation
Data centered
Data flow
Layered
What is the layered view about?
In the Layered View the system is viewed as a complex heterogeneous entity that can be decomposed into interacting parts. The individual parts of the system are components that are decoupled as much as possible from one another. The interaction mechanisms between the components are implemented through
connectors that include appropriate interfaces, states, and interaction protocols.
——————————-
What are the parts that make up the whole system?
———————————–
How do these parts interact with each other?
——————————
How do the parts perform their functionality and still remain decoupled from each
other?
——————————-
How are the quality attributes of modifiability, portability, and performance
supported?
Which pattern can be used with the layered view?
Layered architecture
What is the layered architecture pattern about?
A layer
- may only access the layer(s) below it
–Open = can depend on any lower layer
–Closed = only on the next one
- provides services to the layer above it through a well defined interface
- contains elements work on the same abstraction level
What is the data flow view about?
What are the elements that perform the transformations?
——————————————
What are the elements that carry the streams of data?
—————————————–
How are the two aforementioned types of elements connected to each other?
—————————————-
How are the quality attributes of modifiability, reusability, and integrability supported?
Which patterns can be used with the data flow viewpoint?
pipes and filters
What is the pipes and filters pattern about?
a complex task is divided into several sequential subtasks. Each of these sub-tasks is implemented by a separate, independent component, a filter,
which handles only this task. Filters have a number of inputs and a number of outputs and they
are connected flexibly using pipes but they are never aware of the identity of adjacent filters.
———————————-
- transform input data
- consume and produce data incrementally
- are composed using pipes which stream data
———————————
The use of PIPES
AND FILTERS is advisable when little contextual information needs to be maintained between
the filter components and filters retain no state between invocations.
What is the data-centered view about?
In the Data-centered View the system is viewed as a persistent, shared data store that is accessed and modified by a number of elements. The data store and the elements that access it are components. The data store is independent of
the components, and the components are usually independent of one another. It is possible that
there is more than one data store. The elements that transfer data written or read from the data
stores are connectors that are attached to the data store(s) and the accessors.
————————————–
* How is the shared data store created, accessed, and updated?
* How is data distributed?
* Is the data store passive or active, i.e. does it notify its accessors or are the accessors
responsible of finding data of interest to them?
* How does the data store communicate with the elements that access it?
* Do the accessor elements communicate indirectly through the shared data or also
directly with each other?
* How are the quality attributes of scalability, modifiability, reusability, and integrability
supported?
Which pattern can be used with the data centered viewpoint?
Shared repository, active repository, blackboard
What is the shared repository pattern about?
In the SHARED REPOSITORY pattern one component of the system is used as a central data store, accessed by all other independent components. This SHARED REPOSITORY offers suitable means for accessing the data, for instance, a query API or language. The SHARED REPOSITORY must be scalable to meet the clients’ requirements, and it must ensure data consistency. It must handle problems of resource contention, for example by locking accessed data. The SHARED REPOSITORY might also introduce transaction mechanisms.
———————————————-
Advantage:
- you don’t have to send the data around (compare with micro-services?)
——————————————–
Challenges:
scalability, data consistency, resource contention handling, … as
needed
What is the adaptation viewpoint about?
In the Adaptation View the system is viewed as a core part that remains invariable and an adaptable part that either changes over time or in different versions of a system. The two basic types of elements in this view are the invariable components and the adaptable
components (these are often called variation points). These two kinds of components communicate with each other through connectors that have clearly-specified interfaces.
—————————————–
* How can a system adapt to evolution over time or to multiple different versions of a basic
architecture?
* What is the system functionality that is more likely to change and what will possibly remain
invariable?
* How do the invariable parts communicate with the adaptable parts?
* How are the quality attributes of modifiability, reusability, evolvability, and integrability
supported?
Which patterns can be used with the adaptation viewpoint?
Microkoernel
Reflection
Interceptor
Plugin architecture
What is the Microkernel pattern about?
A MICROKERNEL realizes services that all systems, derived from the system family, need and
a plug-and-play infrastructure for the system-specific services. Internal servers (not visible to clients) are used to realize version-specific services and they are only accessed through the MICROKERNEL. On the other hand, external servers offer APIs and user interfaces to clients by using the MICROKERNEL. External servers are the only way for clients to access the MICROKERNEL architecture
What is the plugin architecture pattern about?
The core application defines a well-defined set of interfaces or extension points that plugins can hook into. These extension points represent specific areas or functionalities within the application where plugins can provide additional functionality or behavior. The plugins, on the other hand, implement the defined interfaces or extension points to extend the functionality of the application
What is the language extension view about?
In the Language Extension View the system is viewed as a part that is native to the software/hardware environment and another part that is not. The native part of the application and the non-native part are components. These communicate
indirectly through another type of component, an interpreter component that “translates” the latter into the former. The connectors between these components are data that contain the program
instructions in the non-native language, as well as the internal state of the non-native part.
————————————————–
* How can a part of the system that is written in a nonnative language be integrated
with the software system?
* How can the non-native part be translated into the native environment?
Which patterns can be used with the language extension viewpoint?
Interpreter
virtual machine
rule-based system
What is the interpreter pattern about?
An INTERPRETER for the language is provided, which provides both parsing facilities and an
execution environment. The program that needs to be interpreted is provided in form of scripts which are interpreted at runtime. These scripts are portable to each platform realization of the INTERPRETER. For instance, the INTERPRETER can define a class per grammar rule of the language. The parser of the interpreter parses language instructions according to these rules and
invokes the interpretation classes.
What is the user interaction view about?
- How is the user interface decoupled from the application logic?
- How are the quality attributes of usability, modifiability, and reusability supported?
- What is the data and the application logic that is associated to the user interface?
Which patterns can be used with the interaction viewpoint?
MVC
What is the MVC pattern about?
The system is divided into three different parts: a Model that encapsulates some application data
and the logic that manipulates that data, independently of the user interfaces; one or multiple. Views that display a specific portion of the data to the user; a Controller associated with each. View that receives user input and translates it into a request to the Model. Views and Controllers constitute the user interface. The users interact strictly through the Views and their Controllers, independently of the Model, which in turn notifies all different user interfaces about updates.
What is the component interaction view view about?
In the Component Interaction View the system is viewed as a number of independent components that interact with each other in the context of a system. The components retain their independence, since they merely exchange data but do not directly
control each other. The components interact with each other through connectors that pass data
from one to another.
————————–
* How do the independent components interact with each other?
* How are the individual components decoupled from each other?
* How are the quality attributes of modifiability and integrability supported?
Which patterns can be used with the component interaction viewpoint?
Client-sever
peer to peer
publish/subscribe
implicit invocation
What is the client server pattern about?
Problem: two distributed components need to communicate, one needing the service of
another
—————————————
The CLIENT-SERVER pattern distinguishes two kinds of components: clients and servers. The
client requests information or services from a server. To do so it needs to know how to access the server, that is, it requires an ID or an address of the server and of course the server’s interface. The server responds to the requests of the client, and processes each client request on its own. It does not know about the ID or address of the client before the interaction takes place
What is the peer to peer pattern about?
In the PEER-TO-PEER pattern each component has equal responsibilities, in particular it may act
both as a client and as a server. Each component offers its own services (or data) and is able
to access the services in other components. The PEER-TO-PEER network consists of a dynamic
number of components. A PEER-TO-PEER component knows how to access the network. Before
a component can join a network, it must get an initial reference to this network
———————————-
Advantage:
- No single point of failure
- Extremely scalable
——————————
Disadvantages
- Clients contribute a lot of resources
(prohibitive on mobile phones)
- Can’t bad bad actors
What is the publish/subscribe pattern about?
Problem: Event consumers and producers should be decoupled. Many consumers should receive
events from one producer
—————————————————
PUBLISH-SUBSCRIBE allows event consumers (subscribers) to register for specific events, and
event producers to publish (raise) specific events that reach a specified number of consumers.
The PUBLISH-SUBSCRIBE mechanism is triggered by the event producers and automatically
executes a callback-operation to the event consumers. The mechanism thus takes care of decoupling producers and consumers by transmitting events between them.
What is the distribution view about?
- How do the distributed components interact with each other?
- How are the distributed components decoupled from each other?
- How are the quality attributes of interoperability, location-transparency,
performance, and modifiability supported?
Which patterns can be used with the distribution view?
Message queue
Broker
Microservices
Monolith?
What is the Message queue pattern about?
Producer puts request into a queue - and can continue to operate
Consumer pulls requests from the queue and processes
Senders and receivers are decoupled in time and space
What is the event broker pattern about?
Problem: how do we update a consumer about a state change while keeping them
decoupled from the producers
—————————————
Consumers “subscribe” to events and receive
notifications when they occur.
—————————————-
Producer is not aware of the consumer who
receives it
—————————————
The event broker in the middle
- allows both parties to scale and evolve in a
loosely coupled manner
- might stores events or not
—————————————-
Challenges: Broker should be
- scalable
- high performant
- fault-tolerant
What is the microservices pattern about?
Problem: You need a highly available and scalable system / you have hundreds of
developers and you need to give evolve differently
—————————————————-
Services
- run independently
- deployed independently
- can use different technologies
- can be scaled independently
————————————
Challenges
- communication complexity (CAP
theorem: consistency, availability, and
partitioning… => eventual consistency)
- performance
- return of the monolith
What is a monolith?
Key characteristics:
- Single process
- Tight coupling
- Scalability Challenges
- Deployment and versioning
Why is synthesis important?
- Proposed architecture defines the
framework in which the rest of the
development will fit in - ## Think monolith vs. microservices
- Forces you to think deep upfront
- Even if often it must be iterated
(just as in real architecture)