- From: Ricky Ho <riho@cisco.com>
- Date: Sun, 16 Mar 2003 08:04:06 -0800
- To: "Assaf Arkin" <arkin@intalio.com>, <public-ws-chor@w3.org>
- Message-Id: <4.3.2.7.2.20030316074318.02940c58@franklin.cisco.com>
Assaf,
I fully agree the way you define "general choreography". My earlier
definition of choreography should better be called "bi-lateral
choreography". Do you think this restrictive subset has some attractive
properties that the workgroup should also define it ?
I realize though that we have a different opinion in what the term
"orchestration" means.
I look at "orchestration" as one specific way of
"implementation". Orchestration is a programming language expressing the
logic of executing activities, so it is OK to invoking something no
externally visible. WS-Orchestration is just an Orchestration while all
activities are web services interaction.
You look at "orchestration" as a single-party view of a choreography. This
single-party view is completely derivable from the choreography so I don't
fully understand why it is important to have a separate concept. Is it
true that WSCI is expressing this single-party view and BPSS is trying to
express the every-party view ?
Best regards,
Ricky
At 05:52 PM 3/15/2003 -0800, Assaf Arkin wrote:
>I want to offer an alternative definition.
>
>I like to talk in terms of generic models that do not exclude any
>particular type of application, before drilling down into a specific
>application. When you talk in generic terms it may seem hard at first to
>understand 'how my specific problem is solved in that case', but the
>benefit is that it allows more problems to be solved, not just specific ones.
>
>For example, an OO language is one that allows you to define the common
>behavior of multiple objects, and allows the behavior to relate to data
>owned by the object (or referencing other objects). Another definition is
>that an OO language allows me to build business objects. What about
>non-business objects like a window or a counter? What about utility
>objects like a line item list or an address object? A generic definition
>has more utility then an application-specific definition.
>
>The term choreography was interesting because it was borrowed from
>performance arts where it usually refers to a dance or a ballet. It places
>no restriction on how many dancers may participate in the dance. Tango is
>a choreographed dance that has just two dancers. So while Choreography is
>a good term for any dance involving any number of dancers, if there is an
>intent to allow only two dancers, I would prefer to use Tango instead.
>
>In OO we talk about objects and classes. We don't talk much about class
>instances. Similary in the WS world we talk about service and interface.
>We don't talk about service instance (though such a thing does exist), nor
>do we talk about service being an interface instance. Similarly, I would
>like to propose that we distinguish between Choreography as the definition
>and Conversation as what actually happens when these services communicate
>with each other. While we're using two different terms, I think it will
>actually reduce some of the confusion when we get to discuss more complex
>use cases.
>
>So what is a choreography: a choreography is a specification of how
>multiple things interact with each other over space and time.
>
>In our case space means different services in different places, time means
>the ordering of activities with relation to each other. I would like to
>suggest the following definition of WS Choreography (as opposed to just
>about any choreograph):
>
>WS Choreography: A specification of the behavior of multiple servies that
>interact with each other by exchanging messages
>
>You will notice that in my presentation I've tried, and hopefully
>succeeded, to make that distinction clear. I was talking about a generic
>concept first, and then tried to place it in the scope of WS. So I never
>imagined WS as the only way to choreograph things, but I do think that
>WS-Choreography would talk only about Web services, as defined by the WSA.
>This is also important because there are some choreography definitions
>that cannot be defined by WS-Choreography and in my opinion are not
>interesting for us, e.g. updating shared states in a database, or using
>some non-WS means to do that. A load balancing engine has a way to manage
>shared states that involve multiple servers, but since this is done below
>the WS level it's not exposable in WS-Choreography (and quite frankly not
>of interest to this group).
>
>Let's assume that two (or more) Web services are performing a dance with
>each other based on some WS Choreography scripted for them by some
>language. What is each of these services doing? Each of these services is
>talking to other services. It's arranging or controling elements (in this
>case WS operations) that allow it to achieve some overall effect or goal.
>That's pretty much the dictionary definition of orchestration (conducting
>a symphony is another unrelated definition).
>
>So I would like to propose a definition for WS Orchestration that does
>something like:
>
>WS Orchestration: A specification of how a service interacts with other
>services by exchanging messages
>
>As I pointed out on the whiteboard, a choreography is a combination of
>orchestrations. Let's look at a simple example using a bi-party choreography.
>
>Service A sends some message (m) to service B. Following that, service B
>sends some message (m1) to service A. That's a very simple choreography of
>how two services interact with each other. It's also a specification of
>their orchestration. Service A sends message m0 and waits to receive
>message m1. Service B receives message m0 and then sends message m1.
>
>Let's look at a more complex example involving multi-party choreography
>with services A, B, C and D. In the choreography we define that service A
>sends messages to B and C. C sends messages to D. So we also have a
>definition of what the orchestration in this context would look like: A
>talks to B,C. B talks to A. C talks to A,D. D talks to C. Magically, the
>definition of choreography is nothing more than the composed definition of
>orchestrations, and as I'll show below vice versa.
>
>But there's an interesting question. In defining the orchestration of some
>service, say service D in the example above, did we also define the
>implementation? Not necessarily.
>
>Let's say that service D receives a message from C, and based on some
>information sends back a message to D. How did D get that information? It
>can have some piece of code in there that does it, whether we write it in
>Java, BPEL or Perl makes no difference. We've expressed it's orchestration
>but not it's implementation. In this case, which covers the majority of
>cases, we've expressed the service interface, one coarse grained
>orchestration is must perform to participate in the choreography, but in
>no way did we express its implementation.
>
>So I would also like to formulate three axiomatic restrictions:
>
>1. Closure: A choreography of n service types includes only messages the
>are exchanged by these n service types.
>
>2. Completeness: Any orchestration for one service type that involves n
>other service types can be expressed as a choreography of n+1 service types.
>
>3. Non-reflexive: An implementation is a super set of some (possibly more
>than one) orchestration.
>
>These restrictions are important because they allow us to attain some of
>the properties of choreography that we all care about, namely:
>
>1. Abstraction: A choreography asks the implementation to do certain
>things, but does not strive to restrict the number of possible
>implementations. I argue that a choreography model that does not observe
>restriction #1 or #3 is not useful.
>
>2. Validation: Since the choreography expresses a subset of the
>orchestration of a service (#2 and #3), it allows us to determine that the
>service actually observes it's role obligations in the choreography,
>regardless of how we choose to implement it. (In other words, we can
>ensure that the implementation matches the contract, but we don't decide
>on what the implementation looks like and we can change it as often as we like)
>
>3. Utility: Since we placed no other restrictions we can allow a service
>to participate in any number of choreographies, and we can allow
>choreographies that are applicable to B2B, choreographies that are
>applicable to A2A, simple back & forth and complex end-to-end, reuse and
>recursive composition, etc.
>
>Note that throughout this discussion I've been talking about services and
>not business entities. How we map services to business entities is
>orthogonal. For example, a choreography involving n service types may in
>fact be a choreography involving two business entities. But since one of
>these business entities elected to reuse multiple service types in that
>choreography the choreography involves more than two service types. This
>makes choreographies more interesting because they support reuse,
>recursive composition and more than a limited set of scenarios.
>
>Also I did not limit bindings intentionally. In WS terms we talk about
>service types (or interfaces) and then bind services during the message
>exchange, possibly passing service references in the messages. Practical
>examples may be more restricting, depending on what you want to achieve.
>In some cases services must be fixed as soon as possible and never
>changed, in other cases the "interesting" services are those that are
>bound later on (e.g. marketplace scenario). There is no technical
>restriction that imposes that all services be bound in advance, and a
>variety of mechanisms that allow them to be bound later on (WSDL, UDDI,
>WS-Addressing, WS-Callback, WSCI's locator, etc).
>
>I also did not express choreography as a sequence of state alignments for
>a very simple reason. Choreography is a solution for addressing state
>alignment, and allows a variety of models (e.g. point-to-point, group
>consensus, transaction contexts, state expiration). On the other hand, a
>language for expressing state alignment may be useful but does not specify
>how WS are used to achieve this. It is quite likely that two services
>would have a perfect understanding of the states they want to align, but
>not a perfect understanding of how they intend to do that, resulting in
>misaligned states. On the other hand, a choreography gives a framework for
>expressing the deterministic interaction that leads to proper state
>alignment for any number of executions.
>
>arkin
>
>-----Original Message-----
>From: public-ws-chor-request@w3.org
>[mailto:public-ws-chor-request@w3.org]On Behalf Of Ricky Ho
>Sent: Saturday, March 15, 2003 8:10 AM
>To: public-ws-chor@w3.org
>Subject: Choreography and Orchestration
>
>I try to put up my own definition of "Choreography" and "Orchestration"
>and use a simple buyer/seller use case to illustrate what I mean.
>I'm particularly interested to see how the "Choreography" portion of this
>simple example get represented by WSCI and BPSS.
> 1 Definitions
>
>1.1 Choreography
>=================
>CHOREOGRAPHY defines the public part of a bi-lateral interaction between
>two communicating parties. It formalize a contractual agreement between
>these parties.
>
>CHOREOGRAPHY defines TWO communicating parties in terms of ROLES, which
>will be bound to the actual business entity when the choreography instance
>starts. The binding doesn’t change throughout the lifecycle of the
>CHOREOGRAPHY INSTANCE.
>
>CHOREOGRAPHY defines a set of “SHARED STATES” between the TWO
>communicating parties.
>
>CHOREOGRAPHY defines the TRANSITIONS of SHARED STATES in terms of MEP,
>where one ROLE sends a message to another ROLE. In other words, the
>purpose of MEP is to align the SHARED STATES between the two ROLES.
>
>CHOREOGRAPHY does NOT reflect the perspective of a single party. It can
>be taken by any parties who wants to play a role within it.
>
>The CHOREOGRAPHY INSTANCE starts when the following occurs
>• One party sends the first message (which propose the initial
>SHARED STATES) to another party.
>• This another party verifies that the initial SHARED STATES meets
>the pre-requisite to start the CHOREOGRAPHY
>
>1.2 Orchestration
>=================
>ORCHESTRATION defines the private part of the implementation of a
>particular party who plays a ROLE in the CHOREOGRAPHY. It formalize the
>execution logic of that party throughout the message exchanges.
>
>ORCHESTRATION realize a particular ROLE of a CHOREOGRAPHY. Therefore,
>ORCHESTRATION needs to be conformed with the CHOREOGRAPHY.
>
>ORCHESTRATION can potentially span across multiple
>CHOREOGRAPHIES. Therefore, CHOREOGRAPHY INSTANCES can form
>inter-dependent relationship at the ORCHESTRATION level.
>
>Note here that I try to restrict choreography to 2 parties and disallow
>changes of role binding throughout the lifecycle of choreography
>instance. The downside is now a multi-party interaction needs to be
>broken down into multiple bi-lateral choreographies and their
>inter-dependencies is not externalized at the choreography level. It is
>up to the implementation (which is the orchestration) to determine such
>inter-dependencies. The purpose of these restrictions is to simplify the
>choreography model which I think still address 80% of the real life use
>cases. I would like to see where it breaks before remove this restriction.
>
>2 Use Case Example
>
>Lets look at a very simple example of the product purchase interaction
>between a BUYER, a SELLER, and a COURIER.
>• The buyer send a PURCHASE ORDER message to the seller.
>• The seller check the credit history of the seller as well as the
>product availability and decide either to accept or reject the purchase order.
>• If the seller decide to reject the order, he send an ORDER
>REJECTION message back to the buyer. The interaction ends here.
>• If the seller decide to accept the order, he will arrange shipment
>of the purchased product by selecting one of his preferred couriers.
>• The selected courier pickup the product from the seller and
>deliver to the buyer’s location. The courier start a new interaction with
>the buyer by sending a SHIPMENT NOTICATION message.
>• The buyer verifies the product is delivered in good shape and send
>back a SHIPMENT RECEIVED message to the courier as well as FULFILLMENT
>COMPLETE message to the seller. Otherwise, the buyer sends back a
>SHIPMENT REJECTED message to the courier as well as FULFILLMENT FAILED
>message to the seller.
>3 Illustration
>
>3.1 Choreography
>=================
>There are four possible CHOREOGRAPHIES in this example
>• Product Purchase (Buyer and Seller)
>• Credit Checking (Seller and CreditCheck provider)
>• Arrange Delivery (Seller and Courier)
>• Shipment Delivery (Courier and Buyer)
>
>For the purpose of this discussion, I’ll focus in the first one.
>
>3.1.1 Public / Shared States
>=======================
>Product Purchase choreography defines the following “PUBLIC STATES”
>• OrderNo
>• OrderStatus (“Submitted”, “Accepted”, “Rejected”, “Delivered”,
>“Returned”, “Terminated”)
>• ShipmentNo
>
>3.1.2 Message Exchanges
>======================
>Product Purchase Choreography defines the PUBLIC STATE TRANSITIONS in
>terms of the following message exchanges …
>
>Start State = “submitted”: (OrderStatus=“submitted”)
>Triggered by: when buyer send a “PurchaseOrder” to sender
>
>State = “accepted”: (OrderStatus= “accepted”, OrderNo, ShipmentNo)
> From State “submitted”
>Triggered by when seller send a “OrderAcceptance” message to buyer
>
>State = “rejected”: (OrderStatus= “rejected”)
> From State “submitted”
>Triggered by when seller send a “OrderRejection” message to buyer
>
>End State = “delivered”: (OrderStatus= “delivered”, OrderNo, ShipmentNo)
> From State “accepted”
>Triggered by when buyer send a “FulfillmentCompleted” message to seller
>
>End State = “returned”: (OrderStatus= “returned”, OrderNo, ShipmentNo)
> From State “accepted”
>Triggered by when buyer send a “FulfillmentFailed” message to seller
>
>3.2 Orchestration
>=================
>Here is the Orchestration of the Seller within the Product Purchase
>Choreography
>
>Wait for receiving a PurchaseOrder message from buyer
>Starts a new instance of “Credit Check” choreography by invoke the
>CreditCheck web services. After receiving the response, this “Credit
>Check” choreography instance is terminated.
>Invoke an internal web service to check the stock level of product
>availability
>If (credit is OK and product is available) {
> Invoke an UDDI search to lookup shipping companies.
> Select one courier based on company specific decision logic
> Starts a new instance of “Arrange Shipment” choreography by invoking
> the ShipmentHandling web services.
> Send an “OrderAcceptance” message (which include the shipment No) to
> the buyer
> Wait for receiving either “FulfillmentComplete” or
> “FulfillmentFailed” message from the buyer and update the OrderStatus
> correspondingly. The choreography instance ends here.
> If the OrderStatus is “return”, log into the customer care DB.
>} else {
> Send an “OrderRejection” message to the buyer
>}
>
>As you can see, some activities within the orchestration is not visible by
>the buyer and hence is the private part of the seller.
>- Check the credit history
>- Check the product availability
>- Start another choreography with the courier
>
>
>
>Comments and Thoughts ?
>
>Best regards,
>Ricky
Received on Sunday, 16 March 2003 11:04:32 UTC