Top Banner
Overview @jclouds
23

jclouds High Level Overview by Adrian Cole

May 08, 2015

Download

Technology

Everett Toews
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: jclouds High Level Overview by Adrian Cole

Overview

@jclouds

Page 2: jclouds High Level Overview by Adrian Cole

Agenda

•What is jclouds?

•What does it do?

• Relationship to other projects

•Code examples

• Extras

Page 3: jclouds High Level Overview by Adrian Cole

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)

Page 4: jclouds High Level Overview by Adrian Cole

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

Page 5: jclouds High Level Overview by Adrian Cole

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

Page 6: jclouds High Level Overview by Adrian Cole

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

Page 7: jclouds High Level Overview by Adrian Cole

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

Page 8: jclouds High Level Overview by Adrian Cole

Who’s integrating?

you?

Page 9: jclouds High Level Overview by Adrian Cole

Alternatives• Roll-your-own

• Jersey, RESTEasy

• EC2-based cloud apis

• typica, jets3t

• Dasein Cloud API

• Proprietary Service Provider SDKs

Page 10: jclouds High Level Overview by Adrian Cole

BlobStore LoadBalancer

Compute DNS, Block Storage, Network, Identity

Portable APIs

Embeddable

Provider-Specific Hooks

40 built-in providers & 20 apis and dialects!

Page 11: jclouds High Level Overview by Adrian Cole

// 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);

java overview github jclouds/jclouds

Page 12: jclouds High Level Overview by Adrian Cole

@jclouds

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();}

12

Page 13: jclouds High Level Overview by Adrian Cole

jclouds locationsLocation helps normalize placement across resource types All top-level resources have a locationLocation metadata is extensible

listAssignableLocations

IE

US

SG

Page 14: jclouds High Level Overview by Adrian Cole

jclouds modularityAPIs are software focused Providers are offering focusedAPI + location + defaults = Provider

jclouds-blobstore

s3

aws-s3

walrus

eucaluptus-partnercloud-s3

googlestorage

scality-ring

scaleup-storage

Page 15: jclouds High Level Overview by Adrian Cole

@jclouds

New  Toys

• Fluent  Pagina,on  (1.5)• Small  distribu,on  (1.6)

Page 16: jclouds High Level Overview by Adrian Cole

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?

Page 17: jclouds High Level Overview by Adrian Cole

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();

Page 18: jclouds High Level Overview by Adrian Cole

Small Distribution

• Before 1.6 we had more deps

• We now have much less deps

• You can now make a <5MB cloud app!

Page 19: jclouds High Level Overview by Adrian Cole

@jclouds

Where  now?

• jclouds.org• github/jclouds/jclouds-­‐examples• [email protected]•@jclouds

Page 20: jclouds High Level Overview by Adrian Cole

@jclouds

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()) { }

20

Page 21: jclouds High Level Overview by Adrian Cole

chef integration github jclouds/jclouds-chef

if (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));

Page 22: jclouds High Level Overview by Adrian Cole

CLI github jclouds/jclouds-cli

Page 23: jclouds High Level Overview by Adrian Cole

BYON github jclouds/jclouds