Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

jclouds High Level Overview by Adrian Cole


Published on

Published in: Technology
  • Be the first to comment

jclouds High Level Overview by Adrian Cole

  1. 1. Overview@jclouds
  2. 2. Agenda• What is jclouds?• What does it do?• Relationship to other projects• Code examples• Extras
  3. 3. What is jclouds?• Apache licensed Java multi-cloud SDK• b 3/2009; ~525k loc; 110 contributors• connects tools portably regardless of, yet also availing backend• Over 40 cloud providers supported• next release is 1.6 (March)
  4. 4. What does it do?• Helps projects become cloud projects, and developers become cloud developers. • through consistency in • Tools vs Services • Services vs Model • API approach
  5. 5. Tools vs Services• jclouds helps existing tools connect to cloud services • a consistent integration pattern and configuration • adjustable library dependencies • sample patterns, integrations, and abstractions
  6. 6. Services vs Model• jclouds simplifies modeling of cloud services • Standards focus with pragmatic extensions. (JSR-330, 311) • Clean means of addressing service quirks • pluggable strategies for error/retry
  7. 7. API Approach• Backend before abstraction • proprietary features, multiple abstractions• Async/Sync api mirroring • scalably deal with 400ms-3m response time• Guava• Universal Testing Approach • unit, “expect”, and live tests
  8. 8. Who’s integrating? you?
  9. 9. Alternatives• Roll-your-own • Jersey, RESTEasy• EC2-based cloud apis • typica, jets3t• Dasein Cloud API• Proprietary Service Provider SDKs
  10. 10. Portable APIs BlobStore LoadBalancer DNS, Block Storage, Compute Network, IdentityProvider-Specific HooksEmbeddable40 built-in providers & 20 apis and dialects!
  11. 11. java overview github jclouds/jclouds// initcontext = ContextBuilder.newBuilder(“cloudfiles-us”) .credentials(apikey, secret) .buildView(BlobStoreContext.class);blobStore = context.getBlobStore();// create containerblobStore.createContainerInLocation(null, “adriansmovies”);// add blobblob = blobStore.blobBuilder("sushi.avi").payload(file).build();blobStore.putBlob(“adriansmovies”, blob);
  12. 12. java overview github jclouds/jclouds// initcontext = ContextBuilder.newBuilder(“openstack-nova”) .endpoint(“https://keystone:5000/v2.0”) .credentials(tenantUser, password) .modules(singleton(new SshjSshClientModule())) .buildView(ComputeServiceContext.class);compute = context.getComputeService();// create a couple nodes and open a couple portsnodes = compute.createNodesInGroup(“hbase-master”, 1, runScript(install). inboundPorts(60000, 60010));// gather my ip addressesfor (NodeMetadata node : nodes) { node.getPublicAddresses(); node.getPrivateAddresses();} @jclouds 12
  13. 13. jclouds locationsLocation helpsnormalize placementacross resource typesAll top-level resources listAssignableLocationshave a location USLocation metadata is IE SGextensible
  14. 14. jclouds modularityAPIs are softwarefocused jclouds-blobstoreProviders are offering s3focused aws-s3 scality-ring walrusAPI + location + googlestorage scaleup-storagedefaults = Provider eucaluptus-partnercloud-s3
  15. 15. New  Toys• Fluent  Pagina,on  (1.5)• Small  distribu,on  (1.6)@jclouds
  16. 16. Fluent Pagination• Many apis == pagination differences• Desire ease, but also ability to “opt-out” of lazy continuations• Can we make it easier to filter/transform resources?
  17. 17. FluentIterablelazy advance through all your metrics:FluentIterable<Metric> allMetrics = cloudwatch.getMetricApi().list().concat();advance only until we find the load balancer we want:Optional<LoadBalancer> firstInterestingLoadBalancer = elb .getLoadBalancerApi().list() .concat() .firstMatch(isInterestingLB());get only the first page of google instancesIterableWithMarker<Instance> firstPage = gce.getInstanceApiForProject("myproject").listFirstPage();
  18. 18. Small Distribution• Before 1.6 we had more deps• We now have much less deps• You can now make a <5MB cloud app!
  19. 19. Where  now?•• github/jclouds/jclouds-­‐examples•• @jclouds@jclouds
  20. 20. java overview github jclouds/jclouds// create a couple nodes and open a couple portsnodes = compute.createNodesInGroup(“web-prod”, 2, runScript(installApache). inboundPorts(22, 8080));// load balance the nodes mapping port 80 -> 8080lb = lbapi.createLoadBalancerInLocation(null, “web-prod”, “HTTP”, 80, 8080, nodes);// gather my lb addressesfor (String lbAddress : lb.getAddresses()) {} @jclouds 20
  21. 21. chef integration github jclouds/jclouds-chefif (any(cookbookVersions, containsRecipe("apache2"))) runList = new RunListBuilder().addRecipe("apache2").build();chef.updateRunListForGroup(runList, “web-prod”);boot = chef.createClientAndBootstrapScriptForGroup(“web-prod”);nodes = compute.createNodesInGroup(“web-prod”, 1, runScript(boot));
  22. 22. CLI github jclouds/jclouds-cli
  23. 23. BYON github jclouds/jclouds