Hi Andrew,

I done a quick Proof of Concept in to add a Azure BlobStore putBlob Async 
method:

 https://github.com/SpandanThakur/jclouds/tree/AsyncPOC

Important Classes to look at are:
AzureBlobClient.java
InvokeHttpMethod.java
HttpCommandExecutorService.java (Have a look at this class to see how call back 
is assigned)
BaseHttpCommandExecutorService.java

In S3 proxy we would suspend the jetty thread, complete the future and then 
continue the thread.

Though my example moves to java 8, I think we should be able to use guava and 
stay on current java version. Also we have not yet decided how many methods we 
want to make async.

As far as benefits goes, we saw that the S3 proxy throughput is throttled by 
the number of threads in the jetty server. When load is greater than the jetty 
threads performance degrades. Where as when we move a async implementation we 
are able to scale to any load (till CPU becomes a bottle neck) using even one 
jetty thread. Even when the load is less than the number of jetty threads the 
async gives slightly better throughput and response times.

I also wanted to know if you guys have any standard performance tests that you 
guys run? I could try running them on the POC.

Please let me know if you guys feel that my approach is correct and if this 
will benefit jClouds overall.

Regards,
Spandan

Reply via email to