Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Java EEを補完する仕様 MicroProfile

12.076 visualizaciones

Publicado el

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

Publicado en: Software
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F4cEJi ❶❶❶
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

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実装製品を今すぐダウンロード ご静聴ありがとうございました

×