Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Java in containers and serverless
Search
Shigeki Shoji
November 30, 2023
Technology
0
350
Java in containers and serverless
Shigeki Shoji
November 30, 2023
Tweet
Share
More Decks by Shigeki Shoji
See All by Shigeki Shoji
Introduction to kanjava
takesection
0
84
LT Slide 2025-04-22
takesection
0
130
Instructional Designer
takesection
0
130
Zero to Hero
takesection
0
200
Fargateを使った研修の話
takesection
0
250
20240730_kanjava.pdf
takesection
0
150
JavaのJCP会員になろう
takesection
0
100
JAWS-UG Okayama 2024 LT
takesection
0
100
IaCツールのいろいろ
takesection
0
410
Other Decks in Technology
See All in Technology
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.1k
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
120
AIエージェント最前線! Amazon Bedrock、Amazon Q、そしてMCPを使いこなそう
minorun365
PRO
14
5k
Amazon Bedrockで実現する 新たな学習体験
kzkmaeda
2
540
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
6
2.2k
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
110
PHP開発者のためのSOLID原則再入門 #phpcon / PHP Conference Japan 2025
shogogg
4
730
初めてのAzure FunctionsをClaude Codeで作ってみた / My first Azure Functions using Claude Code
hideakiaoyagi
1
220
生成AIで小説を書くためにプロンプトの制約や原則について学ぶ / prompt-engineering-for-ai-fiction
nwiizo
4
1.4k
Snowflake Summit 2025全体振り返り / Snowflake Summit 2025 Overall Review
mtpooh
2
390
セキュリティの民主化は何故必要なのか_AWS WAF 運用の 10 の苦悩から学ぶ
yoh
1
130
OpenHands🤲にContributeしてみた
kotauchisunsun
1
430
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
790
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
4 Signs Your Business is Dying
shpigford
184
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
It's Worth the Effort
3n
185
28k
Rails Girls Zürich Keynote
gr2m
94
14k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Transcript
コンテナ・サーバーレス環境に 対応しよう 2023年11月30日 Shigeki Shoji
庄司重樹 受賞歴 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
イベントの 宣伝 梅田で「もめんと会」します。よろしくお願いしま す! https://momentocommunity.connpass.com/event/3 02306/ 3
アジェンダ • 進化的アーキテクチャ • Javaの課題 • サイズを小さく • 起動時間を短く •
まとめ 4
進化的 アーキテ クチャ 漸進的 誘導的 多元的 “Monoliths are not dinosaurs”
- @WERNER https://www.allthingsdistributed.com/2023/05 /monoliths-are-not-dinosaurs.html 5
なぜJava? • 漸進的な小さな変更のために、動いているモ ジュールを再利用したい • 言語を変えて漸進的な小さな変更を実現する のは難しいかもしれない。どちらかというと 破壊的変更につながる場合が多そう 6
Javaは進化 を続けて いる JVMは人類の叡智の結晶だ 7
Quiz コンテナ・サーバーレスのアプリケーションで重要なことは? 1. イメージサイズの小ささ 2. 依存ライブラリのロードの俊敏さ 3. 起動の俊敏さ 8
俊敏なス ケール要 求 • 以前はサーバの増設、キャパシティを増やす のに数ヶ月かかることも多かった • 仮想化の進化、クラウドの登場により、今で は1秒以内でサーバのスケールが要求されるこ とも
9
高速な起 動を阻む もの達 • イメージのロードにかかる時間 • クラスファイルの解釈、Just In Timeコンパイ ラがコンパイルする時間
• 必要なリソースへの接続等の初期化 10
イメージ のロード にかかる 時間の短 縮 • コンテナの場合 distroless などの小さく不要 なものを含まないベースイメージを選択しよ
う • jlinkを使って小さく不要なものを含まない Javaランタイムを準備しよう https://learn.microsoft.com/ja- jp/java/openjdk/java-jlink-runtimes 11
jlink • Java 9 以降で使用可能 • 必要なモジュールだけのJREを作れる 12
Nativeイ メージに する • メリット • イメージサイズを大幅に小さくできる • 起動の高速化が期待できる •
デメリット • リフレクションが使えない場合がある等、 使える言語機能に制約があり、コードの修 正が必要になるかもしれない • JITによる最適化が期待できない 13
CRaCを使 う • メリット • プロビジョニングする同時実行数の見積も りが不要 • SnapStart にかかる課金がない
• デメリット • AWS LambdaではArmをサポートしていな い • 初期化時に外部リソース等を保持している 場合、Runtime hooksの実装が必要になる かもしれない • Java 11 以降 (Java 11、Java 17、Java 21) のマネージドランタイムのみサポート • Provisioned Concurrency との併用ができ ない等 14
CRaC があるとき〜 15 https://github.com/takesection-sandbox/aws-lambda-scala
CRaC がないとき〜 16
トレンド InfoQ Java Trends Report - November 2023で は、CRaC がイノベータに
https://www.infoq.com/articles/java-trends- report-2023/ 17
起動した インスタ ンスを保 持する • メリット • Javaランタイムに限らず、また Intel でも
Arm でもどちらにも適用可能 • デメリット • 5分単位での課金 • 必要なインスタンス数を見積もる必要があ る 18
コネク ション プール • RDBなどのリソースに毎回接続すると、認証 等にかかるオーバーヘッドがある。これを回 避するためにあらかじめ一定量の接続を保持 して、必要に応じてこれを払い出すパターン がある。 •
複数スレッドが異なるトランザクションを実 行する、伝統的なサーバアプリケーションで は有用だったが、サーバーレスのように1イ ンスタンス1トランザクションという処理だ と基本的に不要。さらにスケールした場合に 使われない接続が大量に発生することになる が、これはRDB側にとって害となる。 • ただし、接続が切れた時に自動的に再接続す る機能は嬉しいかもしれない。 19
コンポー ネントス キャンに 注意 • Spring Framework等にあるコンポーネントス キャンは依存ライブラリから必要なクラスを 見つけるときzipにアーカイブされたファイル 一覧を読み取り、インジェクションを実行す
る。一般的にこの処理は遅く、起動時間に影 響する。 • クラス数の少ないパッケージをコンポーネン トスキャンの対象に選ぶ。 https://github.com/takesection- sandbox/scan-classpath 20
まとめ • イメージサイズを小さくしよう • 初期化処理はほどほどに • CRaC、初期化済みインスタンスの活用、 Native化のメリット、デメリットを検討して 採用しよう 21
22 ご清聴ありがとうございました