25
1 Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Unless otherwise indicated, these slides are © 2013-2014 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Spring Cloud in a nutshell Tsuyoshi Miyake, Pivotal Software, Inc. @tsuyoshimiyake

Spring Cloud in a nutshell

Embed Size (px)

DESCRIPTION

Spring Cloud in a nutshell

Citation preview

Page 1: Spring Cloud in a nutshell

1 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/ Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a

Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Spring Cloud in a nutshell

Tsuyoshi Miyake, Pivotal Software, Inc. @tsuyoshimiyake

Page 2: Spring Cloud in a nutshell

2 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Agenda

§  Spring Framework in a word!

§  What is Cloud Foundry? • History •  Java/Spring on CF

§  What is Spring Cloud? • Goals • @ServiceScan

•  Extension

§  Demo

Page 3: Spring Cloud in a nutshell

3 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Spring Framework in a word!

Page 4: Spring Cloud in a nutshell

4 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

“Don't call us, we'll call you - Hollywood principle

Page 5: Spring Cloud in a nutshell

5 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Container (App Server)

アプリケーション in アプリケーション・サーバー (コンテナ)

Application

Application Information (Context)

Service Service Service

Page 6: Spring Cloud in a nutshell

6 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Yes, we know a lot..

GRAILS

Full-stack, Web

XD

Stream, Taps, Jobs

BOOT

Bootable, Minimal, Ops-Ready

Big, Fast,

Flexible Data

Web, Integration,

Batch

WEB

Controllers, REST, WebSocket

INTEGRATION

Channels, Adapters, Filters, Transformers

BATCH

Jobs, Steps, Readers, Writers

BIG DATA

Ingestion, Export, Orchestration, Hadoop

DATA

NON-RELATIONAL RELATIONAL

CORE

GROOVY FRAMEWORK SECURITY REACTOR

Page 7: Spring Cloud in a nutshell

7 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

What is Cloud Foundry?

Page 8: Spring Cloud in a nutshell

8 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

A bit history of Spring & Cloud Foundry

“Cloud Foundry will be the natural cloud deployment choice for Spring developers. Launching Cloud Foundry, The Industry’s First Open PaaS Rod Johnson, Spring Engineering Blog, Apr 12 2011

Page 9: Spring Cloud in a nutshell

9 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

3 meanings of Cloud Foundry for Spring/Java developers

As App Devs As Dev Ops As Dojo Devs

•  UAA/Login Server with Spring Security

•  Java Buildpack •  Service Broker with

Spring Boot/MVC

•  Spring + Grails native support

•  Gradle, Maven plugin •  Eclipse CF plugin

•  Spring Cloud (Today’s Topic)

Page 10: Spring Cloud in a nutshell

10 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

アプリケーションの Cloud Foundry Runtime へのデプロイ

①  アプリケーションとメタデータの push

push app

Router  ②  サービスの作成とバインド

③  アプリケーションのステージング

④  アプリケーションのデプロイ

⑤  アプリケーションのヘルスチェック Pivotal  CF  Elas1c  Run1me  

Blobstore DB

Cloud Controller Service Broker Node(s)

DEA DEA

DEA DEA

+ app MD

+ =

Service credentials

Page 11: Spring Cloud in a nutshell

11 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

サービスの作成とバインディング

Router  

Cloud  Foundry  Run1me  (ERS)  

DB Service credentials

reserve resources create service (HTTP) create service (HTTP)

bind service (HTTP) bind service (HTTP) obtain connection data

CLI Cloud Controller

Service Broker

Data Service

Page 12: Spring Cloud in a nutshell

12 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

アプリケーションのステージング Ro

uter  

Blobstore DB

DEA Detect Compile Upload No Yes System

Buildpacks

+ =

Cloud Controller

Pivotal  CF  Elas1c  Run1me  

Page 13: Spring Cloud in a nutshell

13 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

What is Spring Cloud?

Page 14: Spring Cloud in a nutshell

14 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

“Spring Cloud is DI Container

for Cloud OS - Anonymous

Page 15: Spring Cloud in a nutshell

15 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Container (Cloud Foundry)

アプリケーション in Cloud Foundry (コンテナ)

Application

Application Information (Context)

Service Service Service

Page 16: Spring Cloud in a nutshell

16 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Spring Cloud Goals

§  クラウド内のアプリケーション環境、およびサービスの抽象化

§  多様なクラウドへの対応 • Cloud Foundry • Heroku

•  Local

§  拡張性 • 新クラウド環境への対応

• 新サービスへの対応

• 新フレームワークへの対応

Page 17: Spring Cloud in a nutshell

17 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Service Scan (@ServiceScan)

§  Java Config (@Configuration) と併用

§  アプリケーションにバインドされたサービスをスキャン

§  各サービスについて Bean を作成

§  (Option) クラウド環境でのみ有効にするためには @Profile(“cloud”) を追加

@Configuration@ServiceScan// @Profile("cloud”)public class CloudConfig {}

Page 18: Spring Cloud in a nutshell

18 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Service Scan (@ServiceScan) カスタマイズ

§  パターン 1 : 同一タイプのサービス (e.g. DataSource) が 2 つ以上ある

§  パターン 2 : 各サービスの細かな設定が必要

§  パターン 3 : 独自サービスが必要

@Configurationpublic class CloudConfig extends AbstractCloudConfig { @Bean    public DataSource mysqlDataSource() {

return connectionFactory().dataSource("mysql-service"); } @Bean public DataSource postgresDataSource() {

PoolConfig poolConfig = new PoolConfig(20, 200);ConnectionConfig connectionConfig = new ConnectionConfig("characterEncoding=UTF-8");DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, connectionConfig);return connectionFactory().dataSource("postgres-service”, serviceConfig);

}}

Page 19: Spring Cloud in a nutshell

19 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

拡張性 (1) – 新クラウド環境への対応 (Cloud Platform)

§  CloudConnector interface を実装 •  isInMatchingCloud(): 意図した Cloud 環境かどうかを判定 •  getApplicationInstanceInfo(): アプリケーションの情報(ID, ホスト名など)を返す

•  getServiceInfos(): アプリケーションが利用可能なサービスの接続情報を返す

§  Cloud Platform の登録 • META-INF/services/org.springframework.cloud.CloudConnector に実装クラス

•  java.util.ServiceLoader により load() される

public interface CloudConnector {boolean isInMatchingCloud();ApplicationInstanceInfo getApplicationInstanceInfo();List<ServiceInfo> getServiceInfos();

}

Page 20: Spring Cloud in a nutshell

20 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

拡張性 (1) – 新クラウド環境への対応 (Cloud Platform)

§  CloudFoundry での実装例 (CloudFoundryConnector)

public class CloudFoundryConnector extends AbstractCloudConnector<Map<String,Object>> { public boolean isInMatchingCloud() { return environment.getEnvValue("VCAP_APPLICATION") != null; } public ApplicationInstanceInfo getApplicationInstanceInfo() { Map<String, Object> rawApplicationInstanceInfo = objectMapper.readValue( environment.getEnvValue("VCAP_APPLICATION"), Map.class); … } protected List<Map<String,Object>> getServicesData() { String servicesString = environment.getEnvValue("VCAP_SERVICES"); … }}

Page 21: Spring Cloud in a nutshell

21 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

拡張性 (2) – 新サービスへの対応

§  ServiceInfoCreator interface を実装 •  accept(): 引数 Service Data を調べ、該当サービスでハンドル可能か判断 •  createServiceInfo(): サービス情報(URI など)を返す

§  サービスの登録 • META-INF/services/ 以下に実装クラスを列挙したファイルを置く • 名称は Cloud Platform 依存

org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator

• CloudFoundry の場合 MysqlServiceInfoCreator, MongoServiceInfoCreator など

public interface ServiceInfoCreator<SI extends ServiceInfo, SD> {public boolean accept(SD serviceData);public SI createServiceInfo(SD serviceData);

}

Page 22: Spring Cloud in a nutshell

22 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

拡張性 (2) – 新サービスへの対応

§  CloudFoundry での実装例 (MongoServiceInfoCreator)

public class MongoServiceInfoCreator extends CloudFoundryServiceInfoCreator<MongoServiceInfo> { public boolean accept(Map<String, Object> serviceData) { return tagsMatch(serviceData) || labelStartsWithTag(serviceData) || uriMatchesScheme(serviceData); } public MongoServiceInfo createServiceInfo(Map<String,Object> serviceData) { @SuppressWarnings("unchecked") Map<String,Object> credentials = (Map<String, Object>) serviceData.get("credentials"); String id = (String) serviceData.get("name"); String uri = getStringFromCredentials(credentials, "uri", "url"); return new MongoServiceInfo(id, uri); }}

Page 23: Spring Cloud in a nutshell

23 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

拡張性 (3) – 新フレームワークへの対応

§  spring-service-connector のみが Spring に依存

§  つまりここを “my-service-connector” にすることで独自のフレームワークに対

応可能

§  具体的には

ServiceConnectorCreator.create() を実装し、ServiceInfo (MysqlServiceInfo) からフレームワー

クの Object (DataSource) に変換

spring-service-connector

core

cloudfoundry-connector

heroku-connector

localconfig-connector

Spring Cloud

Page 24: Spring Cloud in a nutshell

24 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Demo

Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

hello-spring-cloud

SPRING CLOUD

Page 25: Spring Cloud in a nutshell

25 Unless otherwise indicated, these sl ides are © 2013-2014 Pivotal Software, Inc. and l icensed under a Creative Commons Attr ibution-NonCommercial l icense: http://creativecommons.org/l icenses/by-nc/3.0/

Learn More. Stay Connected.

§  Spring Cloud Project: http://projects.spring.io/spring-cloud/

§  Source Code: https://github.com/spring-projects/spring-cloud

§  Sample: https://github.com/cloudfoundry-samples/hello-spring-cloud

§  Recording: https://www.youtube.com/watch?v=F49_LJJPs_s

§  Blogs •  https://spring.io/blog/2014/06/03/introducing-spring-cloud •  https://spring.io/blog/2014/07/29/using-spring-cloud-programmatically

•  https://spring.io/blog/2014/08/05/extending-spring-cloud