Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In the first instance we should set the bar fairly low. I.e have the target be running a sample application across two SCA runtimes supporting java component implementations. This pretty much picks up where we were with the distribution support before the core modularization effort and so allows us to leverage the work already done where appropriate. In true don't run before you can walk style we can add more complex features once we can satisfy the simple scenarios. As we pull these ideas we should be prepared to decide whether an indea is destined for the first pass or whether we should park is for the future.

Distributing SCA Artefacts

Image Added

Allocating Components To Nodes

Somehow we need to tell each runtime which parts of the SCA model to run. So, if CA is to run on N1 we have have two options.

  1. Annotate the existing metadata (the SCDL) with the information
  2. Create separate metadata that maps N1 to CA

The first option was chosed for the existing distributed runtime implementation. There would likely have to be a hierarchical nature to these annotations where you migh mark a composite as belonging to a node or the individual components of a composite. Services and referecence can be assumed to belong to nodes running the related components.

Notfifying Nodes

...

of Allocations

You can imagine, in the long term, a scheme where running nodes are notified what components they should be running. This implies a number of service interfaces and a set of interacting services to maintain this information. In the first instace we could take the simpler approach of using a (shared) file system to pass our messages about what node is running what. In fact we could have each node read all of the model information. In that way each node is able to read the allocation annotaion and determine what artefacts it's interested in. Not ncessarily very service oriented but gets us going.

It will also be able tell which nodes are running the other artefacts in the domain. This is importation as each node has to invent remote wires to replace the local wiring between components being distributed. CA and CB in our case.

As we may want to swap out this approach in the future we could consider the mechanism which configures a distributed nodes as replaceable. The default would be to read all of the contributes from an SCA domain on a file system and fire the resulting set of contribution requests into the node.

Default Binding

Where two components that are connected locally in the SCDL are run on different node we would expect the runtime to be smart enough to invent a remote connection between the two. For the time being we can make some rules about what type of connection is constructued in these circumstances. For example, we could assume that the protocol is going to be WebServices and that each node will be configured with the information required to derive the required host name, port and path required to create and endpoint for the automaitcally creted bindings. We don't have to use web services. Anything that works now is an option. We should just pick the one we think will be simplest to use.

Consider the following:

Default Binding

User Experience

So I would expect a manager of a distributed SCA runtime to go through a
number of stages in getting the system up and running.

...

  • Identify contributions required to form running service network
    (developers will build/define contributions)
  • Contribution these contributions to the domain
  • in the simple shared file system scenario I would image they just
    end up in on this file system available to all nodes in
    the domain.

Add contributions to the Virtual Domain Level Composite

  • At this point it think we have to know where artifacts are physically
    going to run
  • It could be that all runtimes load all contributions and only expose
    those destined for them or, I.e. each node has the full model loaded but
    knows which bits it's running.
  • Alternatively we could target each node specifically and ask it to load
    a particular installed contribution and define
    a distributed model.

Manage the Domain

  • Need to be able to target the logical service provided by the domain at
    the appropriate runtime node

...