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.

microprofile

jjug night seminar 2017/3/21

  • Be the first to comment

microprofile

  1. 1. Copyright 2017 FUJITSU LIMITED MicroProfile 背景と意義、そしてこれから 2017年3月21日 数村 憲治 0 JJUG ナイト・セミナー
  2. 2. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 1
  3. 3. 自己紹介 Copyright 2017 FUJITSU LIMITED Java VM Developer JCP Executive Committee 富士通沼津工場に勤務 Interstage Application Serverの開発 @kkzr 2
  4. 4. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 3
  5. 5. MicroProfile.io Copyright 2017 FUJITSU LIMITED An open forum to optimize Enterprise Java for a microservices architecture by innovating across multiple implementations and collaborating on common areas of interest with a goal of standardization. The Mission 4
  6. 6. マイクロサービスアーキテクチャ(MSA) Copyright 2017 FUJITSU LIMITED マイクロサービスアーキテクチャとは モノリシックなソフトウェアではなく、 疎結合な小さなサービスの集合・分散 サービスとして実装するアーキテクチャ。 マイクロサービスが訴求するのは 意思決定とビジネスの速さ マイクロサービスの価値 Observe Orient Decide Action OODAループ 迅速な意思決定を助けるアーキテクチャと フィードバックループによる進化 5
  7. 7. アプリケーション サーバー MSAレイヤーと要素技術 Copyright 2017 FUJITSU LIMITED VM/コンテナ アプリケーション サーバー アプリケーション docker memory footprint resiliency IaaS PaaS ステートレス API化 サービス分割 サーバレス 非同期 REST MicroProfile 1.0 Java EE 7 Java EE 8/9 MSAで必要な機能 (3)(2) (1) (1)JAX-RS、CDI、JSON-P (2)Websocket、JPA等 (3)Healthcheck等 6
  8. 8. Java EE にも Profile Copyright 2017 FUJITSU LIMITED Java EEにProfileを追加できるのはOracleだけ Java EE Full Profile Java EE Web Profile Java EE Micro Profile 追加 7
  9. 9. Java EE 歴史 Copyright 2017 FUJITSU LIMITED JSR Initiation Early Draft Review Public Review Final Release J2EE 1.4 2001/10 - 2002/5 2003/11 Java EE 5 2004/5 2005/4 2005/6 2006/5 Java EE 6 2007/7 2008/10 2009/1 2009/12 Java EE 7 2011/5 2012/4 2013/1 2013/5 Java EE 8 2014/8 2015/10 2017/7? J2EE 1.2 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 Java EE 7 Java EE 8 2000 2005 2010 2015 2020 リリース間隔 8
  10. 10. JCPステージ Copyright 2017 FUJITSU LIMITED Initiation Draft Release Final Release Main- tenance Expert Group設立 (SpecLead) 最終承認投票 (EC) 保守投票 (EC) ドラフト レビュー JSR レビュー ドラフト承認投票 (EC) RI & TCK (EG) JSR承認投票 (EC) 9
  11. 11. Java EE 8 状況 Copyright 2017 FUJITSU LIMITED JSR 機能 状況 (2016/3) 状況 (2017/3) 366 Java EE 8 Platform EDR EDR2 367 JSON-B 1.0 – JSON Binding EDR PR 371 MVC 1.0 – Model View Controller EDR2 EDR2 372 JSF 2.3 – Integration with WebSocket EDR FD 369 Servlet 4.0 – HTTP/2 EDR EDR 365 CDI 2.0 – outside of Java EE container EDR PR 375 Security API - EDR 370 JAX-RS 2.1 – non-blocking I/O - EDR 373 Management 2.0 - WD 380 Bean Validation 2.0 - EDR 368 JMS 2.1 EDR WD 374 JSON-P 1.1 EDR FD 10
  12. 12. GlassFish issues Copyright 2017 FUJITSU LIMITED created resolved 11
  13. 13. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 12
  14. 14. 仕様が先か、実装が先か Copyright 2017 FUJITSU LIMITED 仕様が先 実装が先 仕様策定に時間がかかる 公正な議論と、複数実装による適切な競争 イノベーションに向いている どこで誰が仕様を決めているか不明 13
  15. 15. JCP v.s. OpenJDK Copyright 2017 FUJITSU LIMITED JEPによる開発 JDKのオープンソース Java SE の RI JCP JSRによる開発 (Java Enhancement Proposal) openjdk.java.net OpenJDK 14
  16. 16. JCP構成 Copyright 2017 FUJITSU LIMITED Executive Committee JSR JCP member 非営利団体 企業 個人 Oracle 1シート Elected 6シート Ratified 16シート SpecLead 1-2名 Expert Group 数名選出 承認 設立 Associate 2シート 15
  17. 17. OpenJDKとMicroProfile Copyright 2017 FUJITSU LIMITED 競争原理が働かない ベンダ独自実装期間が短い JSR開始から仕様FIXまで、時間が短い OpenJDKの仕様が Java SEの仕様になる Java SE Java EE Microprofileの仕様が Java EEの仕様になる 競争あり マルチベンダによる実装 16
  18. 18. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 17
  19. 19. MicroProfile沿革 Copyright 2017 FUJITSU LIMITED 2016年6月設立 2017年1月 富士通が参加 2016年9月 JavaOne で Version 1.0 リリース 2017年2Q Version 1.1 リリース予定 2017年3Q Version 1.2 リリース予定 18
  20. 20. MicroProfileとは Copyright 2017 FUJITSU LIMITED 市場が評価 NG OK APSベンダーが MicroProfileを提供 フィードバックを反映 JCPへ提案 アジャイル的に OODAループを実践 最終的にはJCPへ 19
  21. 21. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 20
  22. 22. MicroProfile 1.0 Copyright 2017 FUJITSU LIMITED 2016/9 JavaOneでリリース JAX-RS CDI JSON-P 21
  23. 23. MicroProfile 1.1 Copyright 2017 FUJITSU LIMITED 2017/2Q リリース予定 Configuration API Health Check API JWT Token Definition Fault Tolerance (stretch goal) 22
  24. 24. Configuration API Copyright 2017 FUJITSU LIMITED 設定の外だし 別環境への移動時等、設定変更のためのリビルドを不要に 環境が変更するたびに、リデプロイが不要に 設定動的反映 Netflix/archaiusの考え方 優先度づけされた複数の設定(ConfigSource)で構成 1. システムプロパティ 2. 環境変数 3. 設定ファイル META-INF/microprofile-config.properties 高 (優先順位) 低 23
  25. 25. Configuration API Copyright 2017 FUJITSU LIMITED Config config = ConfigProvider.getConfig(); ConfigValue portConfig = config.access(“com.fujitsu.interstage.port”) .as(Integer.class) .cacheFor(5, TimeUnit.MINUTES) .logChanges(true) .evaluateVariables(true) .withDefault(8080); Integer port = portConfig.getValue(); 5分間キャッシュする Apache DeltaSpike由来のAPI org.apach.delatspike.core.api.config.Config.Resolver 値が変化したらINFOログ 出力 ${foo}のような変数の再評価 24
  26. 26. Configuration API Copyright 2017 FUJITSU LIMITED @Inject @ConfigProperty( “com.fujitsu.interstage.port”, cacheFor=5, timeUnit=TimeUnit.MINUTES, evaluateVariables=true) ConfigValue<Integer> portConfig; int port = portConfig.get(); アノテーションも使えるように 25
  27. 27. Interoperable JWT RBAC Copyright 2017 FUJITSU LIMITED OpenID ConnectベースのRole Based Access Control OpenID ConnectのIDトークンに 認可のためのクレームを加えたbearer/accessトークン が提案されている まだ具体的な仕様は少ない HTTPヘッダからトークン情報を取得したり、ハンドリングす るAPIも考えられているが。 JavaOne 2016のMicroProfile Meetingでセキュリティとして 優先だが高いとされた 26
  28. 28. Interoperable JWT RBAC Copyright 2017 FUJITSU LIMITED { "iss": "https://server.example.com", "sub": "24400320", "preferred_username": "jdoe", "aud": "s6BhdRkqt3", "nonce": "n-0S6_WzA2Mj", "exp": 1311281970, "iat": 1311280970, "auth_time": 1311280969, "realm_access": { "roles": ["role-in-realm", "user", "manager"] }, "resource_access": { "my-service": { "roles": [ "role-in-my-service" ] } }, 例: 27
  29. 29. Service Healthchecks Copyright 2017 FUJITSU LIMITED アプリケーションのヘルスチェックをするRESTエンドポイント仕様 Consumer Producer Health Check Procedure GET /health 200:UP or 503:Down 全てのProcedureを実行し、 結果をまとめてJSONで返却 Kubernetes health check互換 Health Check ProcedureHealth Check Procedure チェック対象のアプリケーションProducerの生存を特定するマシン (Kubernetesとか) 28
  30. 30. Service Healthchecks Copyright 2017 FUJITSU LIMITED Health Check Procedureの例 (JAX-RS) @Path("/app") public class HealthCheckResource { @GET @Path("/diskspace") @Health public HealthStatus checkDiskspace() { long freeBytes = path.getFreeSpace(); long threshold = 1024 * 1024 * 100; // 100MB return freeBytes>threshold ? HealthStatus.named("diskspace") .up().withAttribute("freebytes", freeBytes) : HealthStatus.named("diskspace") .down().withAttribute("freebytes", freeBytes); } 29
  31. 31. Fault Tolerance Copyright 2017 FUJITSU LIMITED RetryPolicy Fallback アプリケーションの実行論理と実行時のエラーハンドリングを 分離する機能 CircuitBreaker BulkHead Timeout 30
  32. 32. Fault Tolerance Copyright 2017 FUJITSU LIMITED RetryPolicy rp = retryPolicy .retryOn(TimeOutException.class) // リトライの条件 .withDelay(2, TimeUnit.SECONDS) // リトライ間隔 .withMaxRetries(2); // リトライ回数 Connection conn = execution .with(rp) // RetryPolicyの設定 .withFallBack(this::connectToBackup) // getのリトライに失敗した際の処理 .get(this::connectToPrimary) RetryPolicy Fallback 31
  33. 33. Fault Tolerance Copyright 2017 FUJITSU LIMITED CircuitBreaker cb = circuitBreaker .withFailureThreshold(3, 10) .withSuccessThreshold(5) .withDelay(1, TimeUnit.MINUTES); Connection conn = execution.with(cb).run(this::connect); CircuitBreaker closed CircuitBreaker open CircuitBreaker half-open 10回中3回失敗した 5回連続成功した 正常時 リクエスト送信遮断なし リクエスト送信遮断 1分後 5回連続成功しなかった リクエスト送信再開 CircuitBreaker 32
  34. 34. Fault Tolerance Copyright 2017 FUJITSU LIMITED @Inject @CircuitBreaker ( delay=1, failThreshold=3, successThreashold=5) CircuitBreaker cb; Connection conn = execution.with(cb).run(this::connect); CircuitBreaker (アノテーションでも) 33
  35. 35. Fault Tolerance Copyright 2017 FUJITSU LIMITED BulkHead bh = bulkHead.withPool(“myPool”); Connection conn = execution .with(bh) .run(this::connect); Connection connect = execution .withTimOut(2, TimeUnit.SECONDS) .run(this::connect); BulkHead 処理ごとに個別のスレッドプールを使用することで、 異常時の影響を分離 Timeout 34
  36. 36. Copyright 2017 FUJITSU LIMITED アジェンダ Java EEではだめなのか 仕様が先か、実装が先か MicroProfile 1.1 MicroProfileとは サマリ 35
  37. 37. サマリ Copyright 2017 FUJITSU LIMITED フィードバックループによるマイクロサービスを実践 既存のJavaコミュニティを分裂するものではない アプリケーションポータビリティ 最終的にはJCPで標準化 オープンイノベーション 実装(ベンダー)を選択可能 36
  38. 38. 37
  39. 39. Copyright 2017 FUJITSU LIMITED Javaは、Oracle Corporationおよびその子会社、関連会社の米国および その他の国おける登録商標です。 本ドキュメントに記載されている、社名、商品名等は各社の商標または 登録商標である場合があります。 その他の記載されている、商標および登録商標については、 一般に各社の商標または登録商標です。 38

    Be the first to comment

    Login to see the comments

  • Tadasihasimoto

    Mar. 21, 2017
  • minazou67

    Mar. 22, 2017
  • kyamane13

    Mar. 22, 2017
  • kumontatsuya

    May. 23, 2017

jjug night seminar 2017/3/21

Views

Total views

1,528

On Slideshare

0

From embeds

0

Number of embeds

329

Actions

Downloads

24

Shares

0

Comments

0

Likes

4

×