83 lines
2.7 KiB
Racket
83 lines
2.7 KiB
Racket
#lang scribble/manual
|
||
@require[racket/include]
|
||
@include{prelude.inc}
|
||
|
||
@title{Concepts}
|
||
|
||
Marketplace integrates ideas from both distributed systems and
|
||
virtualized operating system designs to obtain an architecture of
|
||
nested @emph{virtual machines}. Each nested layer is equipped with its
|
||
own publish/subscribe network that also propagates @emph{presence}
|
||
information about the (dis)appearance of services.
|
||
|
||
The result suggests a @emph{marketplace} metaphor, where communicating
|
||
programs exist in a noisy, crowded, even chaotic context, rather than
|
||
in a quiet place systematically going through their inboxes.
|
||
|
||
@section{What is a process, what are event handlers?}
|
||
|
||
@deftech[#:key "process"]{Processes} are ...
|
||
|
||
@deftech{Process State} is ...
|
||
|
||
@deftech{Events} ...
|
||
|
||
@deftech{Actions} ...
|
||
|
||
@section{What is a VM?}
|
||
|
||
@deftech[#:key "vm"]{Virtual Machines (VMs)} are ...
|
||
|
||
@section{Endpoints: Subscription and Advertisement}
|
||
|
||
The Marketplace operating system's inter-process communication
|
||
facility is structured around @deftech[#:key
|
||
"pub/sub"]{publish/subscribe (pub/sub)} messaging.@note{For a survey
|
||
of pub/sub messaging, see
|
||
@hyperlink["http://www.cs.ru.nl/~pieter/oss/manyfaces.pdf"]{"The Many
|
||
Faces of Publish/Subscribe"}, ACM Computing Surveys, Vol. 35, No. 2,
|
||
June 2003, pp. 114–131. There's also plenty out there on the Internet;
|
||
a good starting point is to google for
|
||
@hyperlink["https://www.google.com/search?q=pub/sub message-oriented middleware"]{pub/sub message-oriented middleware}.}
|
||
|
||
@deftech{Endpoints} are ...
|
||
|
||
A @deftech{role} describes the role some process is playing in a
|
||
conversation. Concretely, roles are represented by @racket[Role]
|
||
structures. A role can be used by the currently-running process to
|
||
describe some role it wishes to play, or can be carried in some
|
||
@racket[EndpointEvent] to describe the role some @emph{peer} process
|
||
is playing in a conversation.
|
||
|
||
Roles have three parts:
|
||
|
||
@itemlist[
|
||
|
||
@item{An @deftech{orientation} (type @racket[Orientation]) describes
|
||
whether this role is concerned primarily with @emph{producing} or
|
||
@emph{consuming} messages.}
|
||
|
||
@item{A @deftech{topic} is a @deftech{pattern} over messages. Topics
|
||
perform double duty: they both scope conversations and filter
|
||
incoming messages. More on topics below.}
|
||
|
||
@item{An @deftech{interest-type} (type @racket[InterestType])
|
||
determines whether the endpoint playing the given role is genuinely
|
||
a participant in matching conversations or is simply observing the
|
||
real participants. More on interest-types below.}
|
||
|
||
]
|
||
|
||
@deftech{Messages} are ...
|
||
|
||
@subsection{Topics}
|
||
|
||
As mentioned above, topics ...
|
||
|
||
@subsection{Interest Types}
|
||
|
||
...
|
||
|
||
@section{Presence}
|
||
@section{Nesting, relaying, and levels of discourse}
|