orchestration vs choreography - plone siteorchestration vs choreography u in many cases, there is no...
Post on 04-Oct-2020
1 Views
Preview:
TRANSCRIPT
Orchestration vs Choreography
u In many cases, there is no unique point of invocation for the services n In these cases, we say that the system is a
choreography n Let starts with an example:
w Consider the popular OpenID protocol for distributed authentication via third party services
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
1. User sends username
OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
2. Username is forwarded
1. User sends username
OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
1. User sends username
3. User sends password
2. Username is forwarded
OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
2. Username is forwarded
4. Authorized/ Not authorized
1. User sends username
3. User sends password
How to model choreographies?
u Several approaches are usually adopted to model (and program) choreographies n MSC (Message Sequence Charts) n Cryptographic protocol notation n Open workflow nets n Collaboration diagrams n Process calculi-like languages n …
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Message Sequence Chart for OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Message Sequence Chart for OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
1. User sends username
Message Sequence Chart for OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
1. User sends username 2. Username is
forwarded
Message Sequence Chart for OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
1. User sends username 2. Username is
forwarded
3. User sends password
Message Sequence Chart for OpenID
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
1. User sends username 2. Username is
forwarded
3. User sends password
4. Authorized/ Not authorized
Chryptographic protocol notation
u (Part of the) Needham-Schroeder authentication with public key:
A → B: {nA, A}kB
B → A: {nA, nB}kA
A → B: {nB}kB
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Chryptographic protocol notation
u A man-in-the-middle attack at the Needham-Schroeder protocol:
A → I: {nA, A}kI I → B: {nA, A}kB B → I: {nA, nB}kA I → A: {nA, nB}kA A → I: {nB}kI I → B: {nB}kB
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Chryptographic protocol notation
u The patched Needham-Schroeder-Lowe protocol:
A → B: {nA, A}kB
B → A: {nA, nB, B}kA
A → B: {nB}kB
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Open workflow nets
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u Each partner is modeled by a Petri net with input/output places n The partners are
combined by merging their input/output places
Collaboration diagram
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Collaboration diagram
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u Two kinds of dependencies among events
n Local dependencies: total ordering of the events on the same channel (A2 follows A1)
n Causal dependencies: A2/C2 indicates that C2 causally depends on A2
The process-calculus approach
u The process-calculus approach: n Define the basic actions … n ... define operators to combine actions thus
obtaining processes u Approach adopted in the most popular
choreography language in the context of Web Services: n WS-CDL: Web Service Choreography
Description Language Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach u Global view of service interactions
Buyer
Seller
Bank Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach u Global view of service interactions
Buyer
Seller Request
Bank Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach u Global view of service interactions
Buyer
Seller
PayDescr
Request Offer
Bank Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach u Global view of service interactions
Buyer
Seller
PayDescr
Request Offer
Bank
Payment
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach u Global view of service interactions
Buyer
Seller
PayDescr
Request Offer
Bank
Payment Confirm
Receipt
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer )
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
WS-CDL approach
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer )
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Basic Action Buyer sends a message
“Request” to Seller
WS-CDL approach
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer )
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Sequential composition
Basic Action Buyer sends a message
“Request” to Seller
WS-CDL approach
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer )
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Sequential composition
Parallel composition
Basic Action Buyer sends a message
“Request” to Seller
Interaction Oriented Approach
u In the WS-CDL approach the basic action corresponds to n a sender that sends a message on an
operation exposed by a receiver n this is the so-called global view approach
u Easy to formalise … we will see:
I. Lanese, C. Guidi, F. Montesi, G. Zavattaro: Bridging the Gap between Interaction- and Process-Oriented Choreographies. Proc. of SEFM 2008: 323-332
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Choreography process calculus
u We have defined a choreography process calculus
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Basic Action r sends a message a to s
Choice
Sequential
Parallel
Repetition
Choreography operational semantics
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Ready to terminate
Final completion
A simple choreography (1)
u A client sends a reservation request to a travel agency, which contacts an airplane company and a hotel, and finally notify the client by confirming or cancelling the reservation:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
A simple choreography (2)
u A client negotiates with a shop the price for a product she initially indicates
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Subtleties in choreographies
u Suppose the decision to Decline is taken by the client:
u Are there possible problems with this choreography?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Possible problems
u Intuition: problems could depend on the kind of communication n Synchronous: (no problem) client and
shop synchronise on the branch to select n Asynchronous: (problem) client and shop
could select different branches (by emitting inconsistent messages)
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Choreography correctness
u We have performed a formal study of choreography correctness n A calculus for choreography (similar to
the previous one, without repetition) n Canonical projection:
w syntactic extraction from the choreography of the behaviour of the single roles
n Check that the parallel composition of the projections behaves like the choreography
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
IOC: Interaction Oriented Choreography calculus
u We have defined an Interaction Oriented Choreography (IOC) calculus
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Basic Action a sends a message o to b
Sequence
Parallel Choice
IOC: Interaction Oriented Choreography calculus
u We have defined an Interaction Oriented Choreography (IOC) calculus
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Success Failure
IOC: operational semantics
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
POC: Process Oriented Choreography calculus
u We have defined a Process Oriented Choreography (POC) calculus
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Process P playing role a Choreography
Processes Receive Send
POC: operational semantics -Processes-
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
POC: operational semantics -Choreographies-
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
POC: the client-shop example
u Here is the behaviour of the client and the shop in the first of the two already considered choreographies:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
POC: the client-shop example
u Here is the alternative version where the client sends the decline message:
u No problem: there are three possible
choices (Price, Confirm, and Decline) and the client / shop synchronize in taking this decision!
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Formal correspondence u The IOC and the POC:
have exactly the same traces of transitions in the operational semantics
u Here is the alternative version where the client sends the decline message:
u No problem: there are three possible
choices (Price, Confirm, and Decline) and the client / shop synchronizes in taking this decision!
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Canonical projection
u In the previous example, the behaviour of the roles in the POC is obtained from the IOC by means of projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
The OpenID Example
u The OpenId IOC:
and the projected POC:
u No Problem! Same traces! Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
An alternative end of OpenID u Consider the following alternative end:
and its projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
An alternative end of OpenID u Consider the following alternative end:
and its projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Choreography correctness
u Is it possible to check the correctness of a choreography? n Yes: by controlling three independent
conditions w Connectedness for sequence w Unique point of choice w Causality safety
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Connectedness for sequence
u Intuition: n Given the choreography C;D the rhs D
should start only when the lhs C has completed
n We check this condition by controlling that among the roles involved in the completion of C there is at least one role involved in the starting of D
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Initial and final transitions u The functions transI and transF return
the interactions in the starting and completion of a choreography
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Connectedness for sequence: formally
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u The last action before a sequential composition will surely occur before every possible intial action after n guaranteed by the involvement of at least
one role in both actions
Connectedness for sequence
u Here is a trivial example of an incorrect choreography:
having the following projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Unique point of choice
u Intuition: n Given the choreography C+D all the
involved roles should agree on the branch to select: w When an initial action in one branch occur, all
the initial actions in the other one should be disabled
w The selected branch must be communicated to all partners, hence the partners involved in C and in D must be the same
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Unique point of choice: formally
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u Every pair of initial actions in the two branches must include a common role: n this role will be the unique point of choice n moreover, the selected branch must be
communicated to all involved roles
Unique point of choice
u Here is a trivial example of an incorrect choreography:
having the following projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Causality safety u Intuition:
n If an operation occurs twice in a choreography, the two interactions should be not active contemporaneously
n Consider the following choreography:
with the projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Causality safety: formally
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u The relation ≤s formalises causal dependencies n hence if x ≤s y the two events x and y
cannot be both ready to be executed
Causality safety: formally
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u The relation ≤s formalises causal dependencies n hence if x ≤s y the two events x and y
cannot be both ready to be executed
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Connectedness for sequence: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Connectedness for sequence: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Unique point of choice: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Unique point of choice: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Causality safety: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise
u Which condition is not satisfied in the wrong alternative OpenID end?
Causality safety: ✗
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Let’s go back to the client-shop example
u Remember: possible problems if the
client sends Decline while the shop Price n This could happen in asychronously
communicating systems Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Asynchronous choreography correctness
u We have defined asychronous communication for POCs n We have defined the correspondence
between IOCs and their asynchronous execution w More complex because send and receive events
are disjoint in POCs
n We have revisited the three correctness conditions that guarantee correspondence
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
POC: Asynchronous semantics
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
POC: Asynchronous semantics
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Correspondence relation
u At the level of POC the interaction coincides with the receive event n Hence, interaction correspondence
guarantees correspondence of receive (send could not correspond)
n See the choreography:
with projection:
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Several correspondence relations
u The previous correspondence is named receiver correspondence n We have considered
a lattice of correspondence relations
n In the literature, receiver seems the mainly considered correspondence
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Receiver connectedness for sequence
u There are two ways to preserve the receive events in a sequential composition C ;D n the receiver in C is the emitter in D
n the receiver in C is also the receiver in D
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Receiver connectedness for sequence
u There are two ways to preserve the receive events in a sequential composition C ;D n the receiver in C is the emitter in D
n the receiver in C is also the receiver in D
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Asynchronous unique point of choice
u In an asynchronous setting, the emitter can locally decide to send a message n In a choice only the emitter decide a branch
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Asynchronous causality safety
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u Same definition, but with a relation ≤a that formalises causal dependencies for the asynchronous semantics
Asynchronous causality safety
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
u Same definition, but with a relation ≤a that formalises causal dependencies for the asynchronous semantics
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer )
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asynchronous unique point of choice: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asynchronous unique point of choice: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Trivial
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asynchronous causality safety: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asynchronous causality safety: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Trivial
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asychronous connectedness: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: the initial WS-CDL example
RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; PaymentBuyeràBank ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asychronous connectedness: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: try to remove the Payment RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; ( ConfirmBankàSeller | ReceiptBankàBuyer )
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: try to remove the Payment RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asynchronous unique point of choice: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Trivial
Exercise: try to remove the Payment RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asynchronous causality safety: ✔
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Trivial
Exercise: try to remove the Payment RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asychronous connectedness: ?
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Exercise: try to remove the Payment RequestBuyeràSeller ; ( OfferSelleràBuyer | PayDescrSelleràBank ) ; ( ConfirmBankàSeller | ReceiptBankàBuyer ) Asychronous connectedness: ✗
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
In an asynchronous setting there is no ordering guarantee (while it is guaranteed for synchronous communication!)
What to do with choreographies ? u You are now among the greatest
worldwide experts in choreographies! n so what? …
u Don’t worry... you didn’t lose your time n There is at least one programming
language that you can use to realise your distributed systems using choreographies
Marco Carbone, Fabrizio Montesi: Deadlock-freedom-by-design: multiparty asynchronous global programming. Proc. of POPL 2013: 263-274
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Choreography programming
u A IOC-like language is used to specify the possible communication protocols used in the system
u An enriched choreography language (variables, if-then-else, functions, ..) is used to specify the overall system
u End-point programs are obtained by means of projection (written in Jolie)
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
The approach: graphically
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Chor: basic ideas
u Describe the behaviour of processes in a system: n Each process has a local state n Processes take part to multiparty
conversations, tracked as sessions n Sessions are started through public
channels (e.g., URLs). n Both sessions and processes can be
dynamically created Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
Bertinoro 7-11/3/2016 Models and Languages for Service-Oriented and Cloud Computing
Alice and Bob buy a book together
top related