jclouds high level overview by adrian cole

Post on 08-May-2015

1.593 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Overview

@jclouds

Agenda

•What is jclouds?

•What does it do?

• Relationship to other projects

•Code examples

• Extras

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)

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

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

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

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

Who’s integrating?

you?

Alternatives• Roll-your-own

• Jersey, RESTEasy

• EC2-based cloud apis

• typica, jets3t

• Dasein Cloud API

• Proprietary Service Provider SDKs

BlobStore LoadBalancer

Compute DNS, Block Storage, Network, Identity

Portable APIs

Embeddable

Provider-Specific Hooks

40 built-in providers & 20 apis and dialects!

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

@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

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

listAssignableLocations

IE

US

SG

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

@jclouds

New  Toys

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

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?

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

Small Distribution

• Before 1.6 we had more deps

• We now have much less deps

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

@jclouds

Where  now?

• jclouds.org• github/jclouds/jclouds-­‐examples• jclouds@googlegroups.com•@jclouds

@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

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

CLI github jclouds/jclouds-cli

BYON github jclouds/jclouds

top related