[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[ecf-dev] Re: More interfaces on remote OSGI services page
|
Hi Ken,
Ken Gilmer wrote:
These two documents shine brightly for me in regards to distributed OSGi:
flowSGi - Collaborative middleware for mobile devices
http://www.iks.inf.ethz.ch/publications/files/flowSGI.pdf (Jan would
make an ideal ECFer...)
Thanks...I'll check it out and attempt to contact Jan. If anyone
already knows Jan
A Note on Distributed Computing
http://research.sun.com/techrep/1994/smli_tr-94-29.pdf
Yes...this is one of my favorite articles on distributed computing.
They go into a very clear and concise explanation of why network
transparency...although an appealing idea...is not necessarily a good
idea...and why it usually makes sense to put as much control of
networking...including partial failure handling, etc...into the hands of
the application programmer (i.e. not try to hide the fact that there is
an unreliable, relatively slow network...but rather expose to the
application failure detection and ability to recover from partial
failure in an application specific manner). For another seminal paper
along these lines see Six Misconceptions about Reliable Distributed
Computing: http://www.cs.cornell.edu/vogels/papers/ew98.pdf
My take-away lessons for me of this research and own experience with
building frameworks for app development is that 1) Network communication
abstractions (e.g. sockets, pub-sub messaging, rpc, IContainer, failure
detection, etc) should be exposed to rather than hidden from
applications; 2) attempts to do 'transparent' distribution of object
graphs (i.e. hide network distribution and remote method invocation from
the app) don't really work very well, because networks fail, are slow,
etc., and devising a generic response to network failures is
hard/impossible...that is, it seems better to allow the application to
*know* (be notified) of such failures and then allow the application to
decide how it should recover. Because distribution of state *without*
knowledge of appropriate application behavior (i.e. at OS level) is very
hard/impossible to do 'appropriately' for all applications.
But exposing things like partial failure and asynchrony at the API level
are difficult...because this adds unfamiliar concepts to any API.
Therein lies the challenge, I think...create APIs that are as simple as
possible, without hiding too much from programmers/applications.
Regarding this topic as a whole, an implicit transition has been made
from "Eclipse" to "OSGi". They are different worlds with different
problem domains, and I have been pondering the pluses and minuses of
ECF in a pure OSGi context. The value of ECF in the Eclipse context
is clear, but it's value (in relation to other solutions) at the OSGi
level is ambiguous to me.
Yes. While Eclipse is an application, OSGI is a runtime...and in some
senses like an OS. Inter-process communication (whether RPC or asynch
messaging or whatever) is by definition a cross-runtime concern...and
ECF as a framework has been focused on supporting IPC by applications
rather than as part of the OS. Partially for the reasons expressed in
the papers above. Note also that ECF has a model for object replication
in a distributed group (shared objects), but the replication is *not*
automatic (i.e. it's explicitly controlled by the application). ECF's
shared object container also include the notion of a failure
detector...which is used to detect and inform containers and shared
objects within those containers of remote process or network failures
and subsequent group membership changes (represented as events like
IContainerDisconnectedEvent, etc). It doesn't do much automatically in
terms of replication (except 'clean up' non-primary replicas when
primary becomes disconnected)...but rather notifies the shared
object/application and allows it to deal with the given failure.
It's tricky because OSGi has some very compelling native services that
seem ripe for utilizing in a distributed manner (Event Admin, Device
Service). Again from yesterday's phone conversation it really depends
on your application. But given "A Note on Distributed Computing",
does it make sense to represent a remote service transparently in an
OSGi runtime?
I think of the OSGI services layer as an application-level API...to
allow bundles to expose services/APIs to one another in a
structured/consistent way (with the appropriate clean up, dealing with
classloading/dependencies, etc). So with the musings here
http://wiki.eclipse.org/index.php/Remote_OSGI_Services I've simply been
thinking about how to expose these app-level services across process
with ECF. I'm not sure that this (OSGI services) is the right level for
inter-process communication, but at first blush it seems reasonable to
me. At least all of the OSGI services structure for registration,
lookup, and clean up generalizes well...i.e. going cross
bundle/classloader is not *too* far from going cross-process :).
Is there merit in distinguishing Eclipse-ECF and OSGi-ECF?
Well, I think there is merit to distinguishing parts of ECF...ECF core
(useful in both domains), ECF datashare (useful in app), ECF presence
(useful in app), ECF 'remote services' (useful to app that uses the OSGI
services layer), etc.
Thanks for note.
Scott
-Ken
On Jul 10, 2006, at 5:46 PM, Scott Lewis wrote:
Hi Bob, Ken, and all,
This afternoon I put some more of the ideas for OSGI remote service
API that I've been playing around with here:
http://wiki.eclipse.org/index.php/Remote_OSGI_Services
Note as usual for ECF :-) this says exactly nothing about how these
APIs would be implemented...e.g. they could be implemented with some
existing RPC mechanism, or via RPC built on asych messaging (e.g. ecf
generic). Clearly I think of missing functionality as a feature :).
Also, as discussed during the conf call today the actual
implementation bundles (e.g. whether they are dynamically
loaded/installed or rather must be there to begin with) is left
unspecified...meaning that (for example) a call to
getRemoteServiceReferences could actually retrieve the bundles
holding the proxies associated with the given remote service. I
think that's a pretty exciting idea, actually.
Also note that the intention here was to present to remote clients an
OSGI service interface that 'looks' a fair amount like the OSGI
'local' service interface (e.g. BundleContext.registerService,
BundleContext.getServiceReferences, BundleContext.getService, etc).
This may/may not be a good idea...as Ken hinted at during the
call...that is, it's not clear whether a remote service interface is
best...or some way to access remote bundle code, or certain packages,
within bundle, etc. The process-local OSGI service concept, though,
is at least one that is standardized by OSGI itself...and used in
Eclipse and other RCP apps.
Any thoughts/comments/criticisms/'you are crazy's appreciated.
Scott