Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Java in containers and serverless

Shigeki Shoji
November 30, 2023

Java in containers and serverless

Shigeki Shoji

November 30, 2023
Tweet

More Decks by Shigeki Shoji

Other Decks in Technology

Transcript

  1. 庄司重樹 受賞歴 AWS 2023 Japan Top Engineers 資格 AWS認定12冠 (All

    Certifications) Professional Scrum Product Owner I Professional Scrum Master I Professional Scrum Developer I 翻訳レビュー Sam Newman著「モノリスからマイクロサービスへ」 2020. O’Reilly. コミュニティ AWS Community Builders program、関ジャバ、JJUG、Scala関西、もめんと会他 2
  2. 進化的 アーキテ クチャ 漸進的 誘導的 多元的 “Monoliths are not dinosaurs”

    - @WERNER https://www.allthingsdistributed.com/2023/05 /monoliths-are-not-dinosaurs.html 5
  3. イメージ のロード にかかる 時間の短 縮 • コンテナの場合 distroless などの小さく不要 なものを含まないベースイメージを選択しよ

    う • jlinkを使って小さく不要なものを含まない Javaランタイムを準備しよう https://learn.microsoft.com/ja- jp/java/openjdk/java-jlink-runtimes 11
  4. Nativeイ メージに する • メリット • イメージサイズを大幅に小さくできる • 起動の高速化が期待できる •

    デメリット • リフレクションが使えない場合がある等、 使える言語機能に制約があり、コードの修 正が必要になるかもしれない • JITによる最適化が期待できない 13
  5. CRaCを使 う • メリット • プロビジョニングする同時実行数の見積も りが不要 • SnapStart にかかる課金がない

    • デメリット • AWS LambdaではArmをサポートしていな い • 初期化時に外部リソース等を保持している 場合、Runtime hooksの実装が必要になる かもしれない • Java 11 以降 (Java 11、Java 17、Java 21) のマネージドランタイムのみサポート • Provisioned Concurrency との併用ができ ない等 14
  6. トレンド InfoQ Java Trends Report - November 2023で は、CRaC がイノベータに

    https://www.infoq.com/articles/java-trends- report-2023/ 17
  7. 起動した インスタ ンスを保 持する • メリット • Javaランタイムに限らず、また Intel でも

    Arm でもどちらにも適用可能 • デメリット • 5分単位での課金 • 必要なインスタンス数を見積もる必要があ る 18
  8. コネク ション プール • RDBなどのリソースに毎回接続すると、認証 等にかかるオーバーヘッドがある。これを回 避するためにあらかじめ一定量の接続を保持 して、必要に応じてこれを払い出すパターン がある。 •

    複数スレッドが異なるトランザクションを実 行する、伝統的なサーバアプリケーションで は有用だったが、サーバーレスのように1イ ンスタンス1トランザクションという処理だ と基本的に不要。さらにスケールした場合に 使われない接続が大量に発生することになる が、これはRDB側にとって害となる。 • ただし、接続が切れた時に自動的に再接続す る機能は嬉しいかもしれない。 19
  9. コンポー ネントス キャンに 注意 • Spring Framework等にあるコンポーネントス キャンは依存ライブラリから必要なクラスを 見つけるときzipにアーカイブされたファイル 一覧を読み取り、インジェクションを実行す

    る。一般的にこの処理は遅く、起動時間に影 響する。 • クラス数の少ないパッケージをコンポーネン トスキャンの対象に選ぶ。 https://github.com/takesection- sandbox/scan-classpath 20