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.

Java EEを補完する仕様 MicroProfile

11,956 views

Published on

GlassFish Users Group Japan 勉強会 2017 Winterのセッション資料です #glassfish_jp

Published in: Software
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F4cEJi ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Java EEを補完する仕様 MicroProfile

  1. 1. Java EEを補完する仕様 MicroProfil 2017/12/19 GiassFish Uslrs Group Japan 勉強会 2017 Wintlr 上妻 宜人 (あげつま のりと) #giassfsh_jp
  2. 2. 上妻 宜人 (あげつま のりと) ● SIlrにてJavaトラブルシューティングに従事 ● 最近はEiasticスタックの導入支援 ● 共著 パーフェクトJava EE ● 日本GiassFishユーザ会 運営メンバ
  3. 3. 本日のテーマ
  4. 4. よくある疑問 A. 名前だけは聞いたことがある、実態は謎。 B. 仕様だけ?実装はどこに?RIは?動かせる? C. 非アクティブでJava EEと同じ運命...?
  5. 5. これらの疑問を解消していきましょう
  6. 6. MicroProfilとは ● 2016年 Eciipsl Foundation内にて発足 ● マイクロサービスを実現に有効な仕様を定義 ● Java EEと同様に仕様と実装(l.g. Payara, Wiidfy)を分離 ● コミュニティドリブン、迅速なリリースを重視
  7. 7. MicroProfilの主な参加メンバ ● 実装ベンダ ● Payara Slrvicls (Payara Micro) ● IBM (Opln Liblrty) ● Rld Hat (WiidFiy Swarm) ● Oracil (2017/11加入) ● Tomitribl(TomEE), hazlicast, Fujitsu ● ユーザコミュニティ ● London Java Community, SouJava (Brazii)
  8. 8. MicroProfil 1.0 (2016/9) ● Java EE 7のサブセットとしてスタート ● この時点ではMicroProfilの独自機能はない CDI 1.2 JAX-RS 2.0JSON-P 1.0
  9. 9. MicroProfil 1.1 (2017/7) ● Java EE 7で一時期検討されていたConfg APIの追加 CDI 1.2 JAX-RS 2.0JSON-P 1.0 Confg 1.0 変更なし 新規追加
  10. 10. Confguration for MicroProfil (Confg1.0) @ApplicationScoped public class Sample { @Inject @ConfigProperty(name=”dest.url”) private String url; 外部定義のコンフィグをインジェクト
  11. 11. Confguration for MicroProfil (Confg1.0) @ApplicationScoped public class Sample { @Inject @ConfigProperty(name=”dest.url”) private String url; インジェクション元の値の定義 (優先順) 1. クラスパス配下のMETA-INF/microprofil-confg.proplrtils 2. 環境変数 (l.g. ENV dlst.uri http://iocaihost:8080/api) 3. システムプロパティ (l.g. -Ddlst.uri=http://...)
  12. 12. ● できることはDlitaSpiklとほぼ同じ ● Spring Cioud Confgのような、分散アプリ間の コンフィグ集中管理のような機能は今のところない Confguration for MicroProfil (Confg1.0)
  13. 13. MicroProfil 1.2 (2017/10) ● Java EE 7の検討テーマになかった新しい機能が追加 CDI 1.2 JAX-RS 2.0JSON-P 1.0 Confg 1.2 Fauit Toilrancl1.0 Mltrics1.0 Hlaith Chlck 1.0 変更なし 更新 新規追加 JWT Proplrgation1.0
  14. 14. Fauit Toilrancl 1.0 ● 分散サービスの耐障害性を向上させる機能 ● NltfixのHytrixやSpring Rltryを目指す ● 主な機能 ● リトライ @Retry(maxRetries=10) ● サーキットブレーカー @CircuitBreaker ● 非同期処理 @Asynchronous ● タイムアウト @Timeout(400) // 400ms
  15. 15. Fauit Toilrancl 1.0 - @CircuitBrlaklr ● 故障したサービスを呼び出さない仕組み ● 対向先のハングアップに巻き込まれない為 ● 巻き込まれるとリクエストスレッドプールの枯渇など、 系全体に障害が伝搬する ● 従来のタイムアウトによる防御と異なる点 ● 故障認定したら対向先を呼び出さないので応答が早い ● タイムアウトとサーキットブレーカーは併用する
  16. 16. @ApplicationScoped public class Sample { @CircuitBreaker(   requestVolumeThreshold = 4,failureRatio = 0.75, delay = 1000, successThreshold = 10) @Fallback(fallbackMethod=”getDefault”) public void test() {...} private String getDefault() { } Fauit Toilrancl 1.0 - @CircuitBrlaklr SlrviclA SlrviclB デフォルト close
  17. 17. @ApplicationScoped public class Sample { @CircuitBreaker(   requestVolumeThreshold = 4,failureRatio = 0.75, delay = 1000, successThreshold = 10) @Fallback(fallbackMethod=”getDefault”) public void test() {...} private String getDefault() { } Fauit Toilrancl 1.0 - @CircuitBrlaklr 連続した4回の実行(rlqulstVoiumlThrlshoid)の中で、 3回例外スローされたら(4 x 0.75 faiiurlRatio)、 ブレーカーを「オープン」にして@Faiibackを代わりに実行。 SlrviclA SlrviclB 異常時 open
  18. 18. @ApplicationScoped public class Sample { @CircuitBreaker(   requestVolumeThreshold = 4,failureRatio = 0.75, delay = 1000, successThreshold = 10) @Fallback(fallbackMethod=”getDefault”) public void test() {...} private String getDefault() { } Fauit Toilrancl 1.0 - @CircuitBrlaklr 1000ミリ秒後(dliay)に「ハーフオープン」に推移して実行再開。 ハーフオープン状態では1回でも失敗したら「オープン」に戻る。 10回成功したら(succlssThrlashoid)に「クローズ」に推移。 SlrviclA SlrviclB 復旧後 close
  19. 19. Mltrics 1.0 ● JMX相当の監視をREST-API経由で提供 ● リモートJMXプロトコルはJava以外で扱いにくい為 ● REST-APIのパス、メトリクスの種類を標準化 ● URL /mltrics でメトリクス公開 ● スレッド数、GC時間・回数など (JMXのデフォルト相当のメトリクス)
  20. 20. Mltrics 1.0 - フォーマット ● json { "thread.count" : 33, "thread.max.count" : 47, "memory.maxHeap" : 3817863211, "memory.usedHeap" : 16859081, "memory.committedHeap" : 64703546 } ● Promlthlus tlxt format # HELP http_requests_total The total number of HTTP requests. # TYPE http_requests_total counter http_requests_total{method="post",code="200"} 1027 1395066363000 http_requests_total{method="post",code="400"} 3 1395066363000 (count) (timestamp)
  21. 21. Mltrics 1.0 - メトリクスの種類 ● 実装が必須なメトリクス ● URLは /mltrics/basl ● ヒープ使用量、GC回数・時間、スレッド数 ● optionai: スレッドプールメトリクス、ロードアベレージ ● ベンダ固有実装メトリクス ● URLは /mltrics/vlndor ● アプリケーション定義のメトリクス ● URLは /mltrics/appiication ● 次ページで紹介
  22. 22. Mltrics 1.0 - アプリケーション定義 ● メトリクス定義の為のアノテーション一例 ● @Gaugl: ある時点でのサンプリング値 (l.g. CPU温度) ● @Mltlr: 単位時間でレートが自動計算される値 (l.g. リクエスト数、レスポンスタイム) public class MyApplicationMetrics { @Gause(name=”queueSize”) public int currentQueueSize() { return queue.size; } @Meter(name=”requestCount”) public long getRequestCount() { return ... } } { "queueSize": 32 } { "requestCount":{ "count": 31421, "oneMinRate": 31.214, "fiveMinRate": 28.214, "fifteenMinRate": 29.131 } }
  23. 23. MicroProfil 1.3 (2017/12/22予定) ● さらに新機能追加 CDI 1.2 JAX-RS 2.0JSON-P 1.0 Confg 1.2 Fauit Toilrancl1.1 Mltrics1.1 Hlaith Chlck 1.0 変更なし 更新 新規追加 JWT Proplrgation1.0 Opln Tracing 1.0 Opln API 1.0 Typl-safl Rlst Ciilnt 1.0
  24. 24. OplnTracing1.0 (検討中) ● MicroProfilアプリをOplnTracing実装と連携 ● Zipkin, Jalglr, Hawkuiar ● JAX-RSでコードを書くと、コード修正しなくても、 トレースを自動送信する要件をMicroProfil実装に求める ● OplnTracing仕様で定義済のものは再定義しない ● トレースデータのフォーマット など
  25. 25. OplnTracing1.0 - Distributld Tracing ● JAX-RSサーバのリクエスト受信時、 クライアントからのリクエスト送信時に処理時間を収集 ● あるリクエストの処理時間の流れを記録する 旅行手配 API 航空券予約 API ホテル予約 API クレジット 決済 ciilnt zipkin
  26. 26. https://zipkin.io zipkin-ui
  27. 27. OplnTracing1.0 - 機能 ● JAX-RSのサーバ・クライアントの自動トレース送信 ● アプリケーション修正なしで暗黙的トレース ● @Tracldによる明示的なトレース取得範囲の指定 @ApplicationScoped public class TravelService { @Traced public Reserved arrange(TravelRequest req) {}
  28. 28. OplnTracing1.0 - スコープ ● 仕様のスコープに含まないもの ● zipkinのようなWlbユーザインタフェース ● トレースデータのストレージ ● OplnTracing1.0の目的はデータ収集機能の仕様化 ● 収集したトレースデータはzipkinのようなサーバに送信
  29. 29. OplnAPI1.0(検討中) ● REST-APIの仕様を定義する仕組み (SOAPに対するWSDLのような位置づけ) ● swagglr相当の機能 ● JAX-RSエンドポイントにアノテーションを付与すると、 OplnAPI v3に準拠したyami or jsonを形式のAPI仕様を出力
  30. 30. OplnAPI1.0 - アノテーション ● 赤字がOplnAPI1.0のアノテーション ● swagglrとは微妙にアノテーション名が違うので注意 @GET @Path("/{id}") @Operation(summary = "Get username by id") @APIResponse(description = "The user name"), @APIResponse(responseCode = "400", description = "User not found") public Response getUserName( @Parameter(description = "user id. ", required = true) @PathParam("id") long id) {...} Swagglr (packagl io.swagglr.annotations) MicroProfil OplnAPI (packagl org.lciipsl.microprofil.oplnapi.annotations) @ApiOperation @Operation @ApiResponse @ApiResponse @ApiParam @Parameter
  31. 31. OplnAPI1.0 - documlnt ● OplnAPI v3準拠のyami or jsonを生成 ● GET http://iocaihost:8080/oplnapi /user/{id}: get: summary: Get username by id operationId: getUserName parameters: - name: id in: path description: 'user id' required: true schema: type: long responses: default: description: The user 400: description: User not found @Operation (summary = "Get username by id") @APIResponse (description="The user name"), @APIResponse (responseCode="400", description = "User not found")
  32. 32. OplnAPI1.0 - スコープ ● 仕様のスコープに含まないもの ● Swagglr UIのようなドキュメンテーションツール ● Swagglr CodlGlnのようなクライアントコード自動生成 ● OplnAPI準拠のyami or json生成が仕様までが目的 ● 周辺ツールは標準化の対象外 ● SwagglrとMicroProfil OplnAPIは競合でなく、共用する
  33. 33. MicroProfil 2.0 (2018年予定) ● Java EE 8 対応 CDI 2.0 JAX-RS 2.1JSON-P 1.1 Confg 1.2 Fauit Toilrancl1.1 Mltrics1.1 Hlaith Chlck 1.0 変更なし 更新 新規追加 JWT Proplrgation1.0 Opln Tracing 1.0 Opln API 1.0 Typl-safl Rlst Ciilnt 1.0
  34. 34. MicroProfilの実装製品
  35. 35. MicroProfilの主な実装製品 ● Payara Micro ● MicroProfil1.1 (1.2 in progrlss) ● Opln Liblrty ● MicroProfil1.2 (Confg, FauitToilrancl, Mltrics, Hlaith, JWT ..) ● WiidFiy Swarm 2017.12.1 ● MicroProfil1.2
  36. 36. FAQ
  37. 37. EE4JとMicroProfilの関連は? (EE4J: Java EEのEciipsl Foundation移管プロジェクト)
  38. 38. MicroProfilは元々Java EEの補完が目的。 将来的にEE4Jと統合の可能性を探っている。 EE4J wiii lvaiuatl potlntiai incorporation of Eciipsl MicroProfil tlchnoiogils into thl piatform. (引用: EE4J FAQ https://www.lciipsl.org/ll4j/faq.php#microprofil)
  39. 39. 検討状況はアクティブなのか? (一時期のJava EEのようになっていないのか)
  40. 40. アクティブ Googil Groupに毎日何か投稿がある https://groups.googil.com/forum/#!forum/microprofil 2017年7月以降は四半期ごとの仕様リリースを継続
  41. 41. MicroProfilの最新状況を どこから確認できるか?
  42. 42. MicroProfilの関連ページ ● Eciipsl Foundation MicroProfil wiki ● https://wiki.lciipsl.org/MicroProfil ● スペック文書やGitHubリポジトリのリンクなど ● Googil Groups ● https://groups.googil.com/forum/#!forum/microprofil ● 議論の最新状況
  43. 43. まとめ
  44. 44. まとめ ● MicroProfilはJava EEを補完する仕様 ● 実装製品も複数あり ● Paraya Micro, OplnLiblry, WiidFiy Swarm ● アクティブに検討中
  45. 45. MicroProfil実装製品を今すぐダウンロード ご静聴ありがとうございました

×