So what does it mean to know architectural styles? There
are many many, many architectural styles. So we cannot cover them
all here. What I want to do instead is, I want to
mention a few of those. And then I want to go in
more depth, on one of them. So the first item I
want to mention is pipes and filters. And pipes and filters indicate
an architectural style in which a chain of processing elements, which
can be processes, threads, co-routines, is arranged so that the output
of each element is the input of the next one
and usually with some buffering in between consecutive elements. A
typical example of this, if you're familiar with Unix are
Unix pipes, that you can use to concatenate Unix commands.
Another style I want to mention is the event driven
one. An event driven system typically consists of event
emittors, like the alarm over here, and event consumers, like
the fire truck, down here, and consumers are notified when events
of interest occurr and have the responsibility of reacting
to those events. A typical example will be a GUI,
in which widgets generate events and listeners listen to those
events and react to them. For example, they react to
the push of a button. A very commonly used
architectural style is Publish-subscribe, represented by the paper boy. Over
here. And this is an architectural style in which senders
of messages, they're called publishers, do not send messages directly
to specific recievers. Instead, they publish messages with one
or more associated texts without knowledge of who will
receive such messages. Similarly subscribers will express interest in
one or more tags. And will only receive messages of
interest according to such tags. A typical example of
a publish-subscribe system, will be Twitter. And I'm pretty
sure that most of you are familiar with the
client-server architecture. In which computers in a network, assume one
of two roles. The server provides the resources and
functionality. And the client initiates contact with the server,
and requests the use of those resources and functionality.
Also in this case, a typical example would be
email, in which an email server provides email storage
and management capabilities, and an email client will use
those capabilities. You may also be familiar with peer-to-peer,
or P2P, systems. A P2P system is a type
of decentralized and distributed network system in which individual nodes
in the network, that are called peers, act as independent
agents that are both suppliers and consumers of resources. This
is in contrast to the centralized client-server model, where client
nodes interact with the central authority. And I'm not going to
say anything more about peer-to-peer, because I'm going to show you
two examples, of peer-to-peer systems in the rest of the
lesson. And you probably have at least heard of rest.
Which in this case is not an invitation to
relax as the graphic might indicate. But rather stands for
Representational State Transfer. REST is a hybrid architectural style
for distributed hypermedia systems, that is derived from several other
network based architectural styles. And that is characterized by
uniform connector interface, and even if I'm not going to say
anything else about the rest, I wanted to mention
it, because it is an extremely well known architectural style.
And the reason for this is that REST is
very widely used, because it is basically the architectural style
that governs the world wide web. So we use it
all the time when we browse the internet, for instance.