[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [ecf-dev] remote services, load balancing | 
Hi Greg,
Greg House wrote:
<stuff deleted>
on the >consumer.  Does this fit with what you are seeing?
Yes, I see the following warning:
"...DiscoveredServiceTrackerImpl:handleDiscoveredServiceAvailable:No 
local RemoteServiceContainers found for endpoint 
description=ServiceEndpointDescriptionImpl[;providedInterfaces=[org.eclipse.ecf.examples.loadbalancing.IDataProcessor];supportedConfigTypes[ecf.jms.activemq.tcp.lb.server]..."
Ok, very good.  This pretty much confirms my suspicion about the 
activemq provider limitation (not really a bug per se...just not been 
added yet).
>BTW...what discovery mechanism are you using?  And do you have 
evidence that it is working properly on your net?
Both jslp and jmdns works with the 
org.eclipse.ecf.examples.remoteservices.hello.ds* examples in our network.
>I will be happy to look into this later today/Monday and fix it if 
necessary, but would it be possible to get your declarative services 
versions of the >load balancing example so that I can test?  Would you 
possibly be willing to contribute these projects as ECF examples?
Thank you very much for your help! The projects are attached to the 
e-mail. I think that some bundles have to be manually started (in my 
workspace their state is cached so I am not sure).
I cannot adjust the OSGI-INF/component.xml file for the 
org.eclipse.ecf.examples.loadbalancing.servicehost so I keep also the 
original DataProcessorServiceHostApplication. Just change the 
application extension point to DataProcessorServiceHostApplicationDS 
to test the declarative definition.
For the org.eclipse.ecf.examples.loadbalancing.server and 
org.eclipse.ecf.examples.loadbalancing.consumer I provide only the 
declarative code.
Ok.  I've created a bug/enhancement for this:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=310522
Would you please attach the code to this bug?...as then it can go 
through the normal EF process for contributions.  Thanks.
I see, though, that the projects are named the same as the existing 
projects...so I'm going to propose with your permission that I create 
new projects, so they can sit alongside the existing loadbalancing.* 
projects rather than replace them in the examples area.  Is that ok with 
you Greg?
Also, I would like to start by moving the consumer over to ds.  Given 
your use case, this seems to me the most important to make capable of 
using the OSGi remote services+ds code.  Once that's working and tested 
with a new project...named:   
org.eclipse.ecf.examples.loadbalancing.ds.consumer then we can move on 
to making sure that the activemq provider supports using ds with the 
service host and the servers.  Does that sound ok to you Greg?
>The cardinality is handled as with a 'normal' declarative 
service...i.e. the cardinality will determine whether the component is 
activated if the given >reference is present (1...n) or not (0...n).
Ok maybe I misunderstand the concept here. The cases (0..1) and (1..1) 
are ok for me, but (0..n) and (1..n) - is it possible for a consumer 
of a load balanced service to recieve more than one instance?
It is certainly possible that you could setup more than one service host 
for a given service...and then in that case the consumers can/could 
receive more than one proxy instance to that remote service.
In the case of the example code there probably only needs to be 0...1 or 
1...1, but it is possible that you may wish to have more than one 
service host for clients to consume...and in that case you may want the 
consumers to use 0...n or 1...n.
Does this make sense?
Also, BTW...I added the support in the activemq provider for the 
consumer and released this to HEAD (in the activemq provider bundle, of 
course).  So Greg if you want to test it out yourself please feel free 
to do so...I can't make any promises until I've had a chance to put 
together the org.eclipse.ecf.examples.loadbalancing.ds.consumer project 
and test it (which I have not done yet, but will do when I can).
Thanks,
Scott
Thank you in advance,
Greg
------------------------------------------------------------------------
*From:* Scott Lewis <slewis@xxxxxxxxxxxxx>
*To:* Eclipse Communication Framework (ECF) developer mailing list. 
<ecf-dev@xxxxxxxxxxx>
*Sent:* Mon, April 26, 2010 6:08:10 PM
*Subject:* Re: [ecf-dev] remote services, load balancing
Hi Greg,
Greg House wrote:
> Hello,
>
> I am moving the discussion 
(http://www.eclipse.org/forums/index.php?t=rview&goto=528121&th=166590#msg_528121 
<http://www.eclipse.org/forums/index.php?t=rview&goto=528121&th=166590#msg_528121> 
<http://www.eclipse.org/forums/index.php?t=rview&goto=528121&th=166590#msg_528121 
<http://www.eclipse.org/forums/index.php?t=rview&goto=528121&th=166590#msg_528121>>) 
to the mailing list as requested by Scott.
>
> Sorry if this e-mail is too long. I will explain the use-case I am 
trying to implement.
>
> Consider two or more OSGi platforms. Each platform exports (remote) 
services that the other platforms can use.
> At any time a new platform can appear (or disappear) and the other 
platforms should be able to see and use the new services without any 
additional
> configuration or restart.
> Because some of the services are expensive and time-consuming 
operations I want to be able to deploy them on
> several machines and the requests to these services to be 
load-balanced. In addition, I want to be transparent for a consumer
> if a local or a remote service is used. I don't want in my code to 
import any OSGi packages.
>
> For the platform and remote services implementations I am using 
Equinox and ECF.
>
> Now I know that if we remove the load-balancing requirement all this 
can be implemented with (remote) declarative services.
> Moreover, the distribution and discovery providers can be 
independently selected.
>
> However, the OSGI specification does not say anything about 
load-balancing, so one has to use some “nonstandard” approach and
> stick to specific distribution and discovery providers (and external 
components) – is my understanding correct?
Yes.
>
> The ECF has a solution to load-balance remote-services with 
JMS/ActiveMQ.
> For my use-cases it is OK to use ECF ActiveMQ provider and maintain 
separate ActiveMQ installations. However, is it possible the
> usage of services to be transparent for the consumers? The service 
providers define the properties (local, remote, load-balanced)
> of their implementation and the consumers just use the services?
Yes, this is correct.  The load-balanced service usage can be 
transparent for the consumers.
>
> I tried to convert the org.eclipse.ecf.examples.loadbalancing.* 
examples to declarative services and to remove all ECF references from 
the code
> but with no success.
What went wrong?  I don't immediately see a reason why this wouldn't 
work...for the loadbalancing consumer/client.
>
> The conversion of org.eclipse.ecf.examples.loadbalancing.server to 
declarative services is straightforward.
>
> About org.eclipse.ecf.examples.loadbalancing.servicehost I created 
the following OSFI-INF/component.xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
>    <implementation class="null" />
>    <property name="service.exported.interfaces" type="String" 
value="*"/>
>    <property name="service.exported.configs" type="String" 
value="ecf.jms.activemq.tcp.manager.lb 
<http://ecf.jms.activemq.tcp.manager.lb.sv>.svchost"/>
>    <property name="org.eclipse.ecf.containerFactoryArgs">
>        tcp://192.168.1.1:61616/exampleQueue
>        tcp://192.168.1.1:61616/exampleTopic
>    </property>
>    <property name="ecf.rsvc.proxy" type="String" value="true"/>    
<service>
>      <provide 
interface="org.eclipse.ecf.examples.loadbalancing.IDataProcessor"/>
>    </service>
>    <reference cardinality="1..1" 
interface="org.eclipse.ecf.core.IContainerFactory" 
name="IContainerFactory" policy="static"/>
> </scr:component>
>
> Should I use the service.exported.interfaces property? Is 
<implementation class="null" /> correct?
I would have to check the ds spec, but no, I don't think that 'null' 
is allowable for the implementation class.
>
> The main problem I have is with 
org.eclipse.ecf.examples.loadbalancing.consumer.
> I created the following OSGI-INF/component.xml file:
>
> <?xml version="1.0" encoding="UTF-8"?>
>
>    <implementation 
class="org.eclipse.ecf.internal.examples.loadbalancing.consumer.DataProcessorConsumerApplicationDS"/>
>    <reference bind="doTests" cardinality="0..n" 
interface="org.eclipse.ecf.examples.loadbalancing.IDataProcessor" 
name="IDataProcessor" policy="dynamic"/>
> </scr:component>
>
> Is this somehow related to DefaultProxyContainerFinder and should I 
specify “ecf.jms.activemq.tcp.client” in the config file?
I first have to ask whether you  are using the latest from HEAD or ECF 
3.2.  The reason I have to ask is that *since* 3.2 release the policy 
for handling automatic creation of containers in 
DefaultProxyContainerFinder has changed as per this bug:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=303979
Now (in HEAD/3.3/Helios), the default is to automatically create a 
container instance when discovered.
*BUT*...even if you are using HEAD....I think that there could be a 
bug in the ActiveMQ/JMS provider.  Specifically, when containers are 
discovered, and the DefaultProxyContainerFinder is consulted to find a 
suitable container, part of what the DefaultProxyContainerFinder does 
(using the auto create option that was changed in 303979) is that it 
gets the meta-data from the discovery and looks for a *compatible* 
container type.  By 'looks', I mean that it calls this method on 
container instantiatiors:
org.eclipse.ecf.core.provider.IRemoteServiceContainerInstantiator.getImportedConfigs(ContainerTypeDescription, 
String[])
And if the provider on the consumer responds with a non-null String 
array, then it has a match.
But it is quite possible that the JMS/ActiveMQ provider implementation 
of the getImportedConfigs method does not match with the load 
balancing container types (as these are 'special'), returns null, and 
the client container is never created/found by the 
DefaultProxyContainerFinder on the consumer.  Does this fit with what 
you are seeing?  BTW...what discovery mechanism are you using?  And do 
you have evidence that it is working properly on your net?
I will be happy to look into this later today/Monday and fix it if 
necessary, but would it be possible to get your declarative services 
versions of the load balancing example so that I can test?  Would you 
possibly be willing to contribute these projects as ECF examples?
> How is "cardinality" handled in the case of load-balanced service?
The cardinality is handled as with a 'normal' declarative 
service...i.e. the cardinality will determine whether the component is 
activated if the given reference is present (1...n) or not (0...n).
>
> I would appreciate any help or directions how to proceed.
I think the bug with the JMS/ActiveMQ provider I described above *may* 
be the issue.  If you can help me diagnose and test we should get it 
going in short order.
> More important, is my use-case achievable with Equinox and ECF?
Yes, it is.
Scott
_______________________________________________
ecf-dev mailing list
ecf-dev@xxxxxxxxxxx <mailto:ecf-dev@xxxxxxxxxxx>
https://dev.eclipse.org/mailman/listinfo/ecf-dev
------------------------------------------------------------------------
_______________________________________________
ecf-dev mailing list
ecf-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ecf-dev