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
プールにゆこう
Search
irof
March 25, 2024
Programming
2
480
プールにゆこう
関ジャバ'24 3月度
https://kanjava.connpass.com/event/311167/
3月後半でもう春だよなぁプール開きだよなぁと思ってたんだけど、当日クソ寒かった。
irof
March 25, 2024
Tweet
Share
More Decks by irof
See All by irof
技術的負債の正体を知って向き合う
irof
0
270
関ジャバと言う場
irof
0
81
型で語るカタ
irof
2
1.4k
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
380
複数アプリケーションを育てていくための共通化戦略
irof
9
5k
SpringBootにおけるオブザーバビリティのなにか
irof
1
1.1k
Javaアプリケーションモニタリングの基本
irof
7
2.8k
Webアプリケーションを作りましょう
irof
0
200
Javaの新しめの機能を知ったかぶれるようになる話 #kanjava
irof
3
6.7k
Other Decks in Programming
See All in Programming
Devoxx BE - Local Development in the AI Era
kdubois
0
150
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.8k
テーブル定義書の構造化抽出して、生成AIでDWH分析を試してみた / devio2025tokyo
kasacchiful
0
320
CSC305 Lecture 11
javiergs
PRO
0
310
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
360
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
47k
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
4
830
What's new in Spring Modulith?
olivergierke
1
170
釣り地図SNSにおける有料機能の実装
nokonoko1203
0
200
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
330
三者三様 宣言的UI
kkagurazaka
0
280
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
4.9k
Site-Speed That Sticks
csswizardry
13
930
Become a Pro
speakerdeck
PRO
29
5.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Building an army of robots
kneath
306
46k
The Cult of Friendly URLs
andyhume
79
6.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The Pragmatic Product Professional
lauravandoore
36
7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
RailsConf 2023
tenderlove
30
1.3k
Transcript
ϓʔϧʹΏ͜͏ ؔδϟό'24 3݄ @irof h t t ps://irof.me
ϓʔϧ • ͳʹ͔ΛཷΊ͓ͯ͘ͷ • JavaͷੈքͰʮͳʹ͔ʯʹʮΦϒδΣΫτʯ • ͭ·ΓʮϓʔϧʯʹΦϒδΣΫτϓʔϧ • ཷΊͯɺ͑ΔΑ͏ʹ͍ͯ͠Δঢ়ଶ •
ϓʔϧͱ͍͏໊લʮཷΊΔʯʹओ؟͕͋Γͦ͏͕ͩɺ͏ͨΊʹཷΊΔΜͩΑͶͱ • ͳͷͰʮཷΊΔʯͦͷΑ͏ʹݟ͍͑ͯΕɺ࣮ࡍཷ·͍ͬͯͳͯ͘Α͍
ཷΊΔཧ༝ • ͏࣌ʹ࡞ΔͷͰෆ߹͕͋Δ • CPUϝϞϦΛ͏ • ͕͔͔࣌ؒΔ • ... •
ཧ͍ͨ͠ • : ଟ͗ͯ͢ࠔΔͷͱ͔ • ...
ࠓ͢ϓʔϧͨͪ
ίωΫγϣϯϓʔϧ
ίωΫγϣϯϓʔϧɺͨͱ͑ɻ • σʔλϕʔείωΫγϣϯϓʔϧ • : σʔλϕʔεͱͷଓʹ͕͔͔࣌ؒΔ • ௨৴ͷཱ֬ɺೝূɺ΄͔ • :
σʔλϕʔε͕ड͚ೖΕΒΕΔଓʹݶΓ͕͋Δ • σʔλϕʔεαʔόʔͷϦιʔεΛফඅ͢Δ • దʹղ์͠ͳ͍ͱ͍͚ͳ͍
😕
None
☺
• ࠓ͜ͷ͘Β͍ͷղ૾Ͱ͢ɻ
σʔλϕʔείωΫγϣϯϓʔϧΛ͏͜ͱͰ • ίωΫγϣϯΛ͍͍ͨͱ͖ʹίωΫγϣ ϯϓʔϧ͔ΒआΓͯ͘ΔͷͰɺଓ࣌ͷί ετΛલ͍Ͱ͖Δ • ʮΓͳ͍࣌ʹ৽ͨʹଓ͢Δʯͱ͔ ͢ΔͷͰɺৗʹલ͍͢ΔͱݶΒͳ͍ • ෳͷΫϥΠΞϯτͰίωΫγϣϯΛڞ༗
Ͱ͖Δ • ʮ100ΫϥΠΞϯτ͋Δ͔Β100ίωΫ γϣϯཁΔʯͱ͔Ͱͳ͍ • ίωΫγϣϯͷཧΛͤΒΕΔ
ίωΫγϣϯϓʔϧଞʹ • RDBͷίωΫγϣϯϓʔϧʢjavax.sql.DataSourceʣ͕Α͘ݟΔίωΫγϣϯϓʔϧͩ ͕ɺଞͷίωΫγϣϯΛϓʔϧ͢Δͷ͋Δɻͨͱ͑HTTP ClientͷίωΫγϣ ϯɻ • ୯Ұαʔόʔʹશ෦٧Ίࠐ·ͣʹωοτϫʔΫΛհͯ͠৭ʑ͢ΔͷͰɺ͋ͪͪ͜Ͱʮί ωΫγϣϯʯΛѻ͏ɻίωΫγϣϯߴίετͳͷͰɺϓʔϧ͢ΔՁ͕͋Δɻ •
ίωΫγϣϯͷͳʹ͕ߴίετ͔ʁׂѪɻ • ࣗͰ։͍ͨίωΫγϣϯΛ͏߹ͱɺϓʔϧ͞Ε͍ͯΔίωΫγϣϯΛ͏߹Ͱ ΤϥʔϋϯυϦϯάʢϦτϥΠϙϦγʔͱ͔ʣ͕ҟͳΔͱ͔ѻ͏ɻ
εϨουϓʔϧ
εϨουϓʔϧɺͨͱ͑ɻ • ϫʔΧʔεϨουϓʔϧ • ϦΫΤετΛεϨουͰࡹ͘ΞϓϦέʔγϣϯͰग़ͯ͘Δ • : εϨουͷੜʹ࣌ؒίετ͔͔Δ • :
ͨΓʹεϨουΛੜ͢ΔͱJVMͷϦιʔεΛ৯͍௵͢ • : εϨου༻࣌ʹ͏ଆ͕ҙࣝͨ͘͠ͳ͍ܾ·Γࣄ͕͋Γ͕ͪ
None
😖
None
😎
😀
ϫʔΧʔεϨουϓʔϧΛ͏͜ͱͰ • ෳͷϦΫΤετΛಉ࣌ʹࡹ͚ΔΑ͏ ʹͳΔ • Ϣʔβʔ͕1ਓͰҰʹ1ϦΫΤετ͠ ͔͛ͳ͍ͳΒશવཁΒͳ͍ • ͳΒWebΞϓϦʹ͢Δҙຯͳ͍ •
ͷΜͿΖ͖ͬΜ͙ͱ͔͍ͬͯಉ͡Ͱ ͢ɻ͏εϨου֨ஈʹҧ͏͚Ͳɻ
εϨουϓʔϧଞʹ • @AsyncͰΘΕΔඇಉظλεΫεϨου • @ScheduledͰΘΕΔεέδϡʔϥʔεϨου • ͦͷଞҙͷεϨου • εϨουΛ͏࣌εϨουϓʔϧΛ͏ •
java.util.concurrent.ExecutorService εϨουϓʔϧͱࢥͬͯྑ͍ • ݱɺϓϩμΫτͰnew Thread()͢Δ͜ͱͳ͍
ͦͷଞͷϓʔϧɺͨͱ͑ɻ • DIίϯςφ • ʮDIίϯςφʯͨ·ʹʹͳΔ͠Ԍ্͢Δ͚ͲɺಛఆίϯςΩετʹ͓͚ΔΠϯ ελϯεͷੜํ๏Λड͚͍࣋ͬͯΔɻ • : ΠϯελϯεԽʹίετ͕͔͔Δ •
ʮDBίωΫγϣϯʯΠϯελϯε • : ΠϯελϯεΛ࡞ΔͨΊͷύϥϝλ͕ࢄΔͱࠔΔ
ϓʔϧશൠʹݴ͑Δ͜ͱ • ͩͨ͠ΒͲ͢👶 • ͍ऴΘͬͨΒඞͣϓʔϧʹ͢ • ϓʔϧϓʔϧରͷϥΠϑαΠΫϧΛཧ͢Δͷ͕ϑΝΫτϦͳͲͱҧ͏ͱ͜Ζ • ͠ΕͨΓ͢Δͱϓʔϧ͙͢Γͳ͘ͳΔ •
Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ೖ͍ͬͯΔͷͷʢՄมͷͷಛʹʣ
εϨουϓʔϧͰͱ͘ʹ͓͖͍ͬͯͨ͜ͱ • Θ͔ΔΑ͏ʹ͓ͯ͘͠ • ԿݸͷεϨου͕͋Δ͔ • ԿݸͷεϨου͕͍ͯ͘͠͠Δ͔ • Կ݅ͷλεΫ͕ͪड͚த͔ •
ҟৗ࣌Λߟྀ͓ͯ͘͠ • εϨου͕ࢮΜͩΒͲ͏ͳΔ͔ • JVM͕ࢮΜͩ࣌ʹॲཧதͪड͚தͷ͕Ͳ͏ͳΔ͔
ͨͱ͑ɺJDKͰͨ·ʹ͋Γ·͢ • java.net.http.HttpClientͰίωΫγϣ ϯΛϓʔϧʹฦ͠ΕΔͬͯόά • 11.0.8ҎલͬͯΔͱى͜Δ
WEBΞϓϦʹ͓͚Δ ϓʔϧͷαΠζ
None
WEBΞϓϦͱϓʔϧ • ϓʔϧͳ͠ͷੈքɺͭ·ΓΫϥΠΞϯτ͔ ΒϦΫΤετΛ͏͚͔ͯΒશ෦Δੈք؍ ͋Δ • ͕ɺJavaͳWebΞϓϦͦΜͳੈք؍Ͱ ͳ͍ • JavaͳWebΞϓϦ͍ΖΜͳϓʔϧΛ४උ
͔ͯ͠ΒʮΑͬ͠Ό͜ʔ͍ʯͬͯΓ·͢ • Javaͷʢىಈ͕ʣ͍ͱ͔ݴΘΕΔҰҼ • ىಈ࣌ͷΫϥεಡΈࠐΈClassLoaderͬͯ ϓʔϧʹΫϥεใΛ٧ΊࠐΜͰΔͱݴ͑Δ
ແݶʹ༻ҙ͓͚͍͍ͯ͠ͱ͍͏ͷͰͳ͍ • Ϧιʔε͍ͭͩͬͯ༗ݶɻΫϥΠΞϯτͱͯ͠ͷίωΫγϣϯϓʔϧαʔόʔଆ͕ड͚ೖΕΒΕΔݶ ͕͋Δ͠ɺ1ϓʔϧͰ༗͍͍ͯ͠ʹݶ͕͋ΔɻεϨουJVMͷதͷ͚ͩͲɺεϨουΛ࡞Δ͝ ͱʹϝϞϦΛ͏͔ΒɺͦΕΛߟྀͨ͠ϝϞϦઃఆ͕ඞཁɻ • ͨ͘͞ΜͷͷͷॳظԽΛʮલआΓʯ͢Δͱɺવͦͷ͚ͩىಈ͕͘ͳΔɻ • ඞཁͳ͚ͩΛ֬อͯ͠͠Ύͬͱىಈͯ͠΄͍͠ɻ •
༻ҙͨ͠ͷͷϥΠϑαΠΫϧཧ͕͍Δ • ίωΫγϣϯϓʔϧʮଓ͕༗ޮ͔ʯͷ֬ೝ͕͍Δɻஅ͞ΕͨίωΫγϣϯΛͨ͠ΒʮίωΫ γϣϯϓʔϧΛೖΕͨΒ͏·͘௨৴Ͱ͖ͳ͍͜ͱ͕૿͑ͨʂʯͱ͔ͳΓ·͢ͷͰɻϋεΩʔϐϯάΛ ͢ΔεϨου͕८ճͯͬͨ͠Γ͢ΔͷͰɺ͕ଟ͍ͱͦΕ͚ͩෛ୲ʹͳΔɻ • ͜ΕΒͷαΠζͦΕͳΓʹؔ࿈͕͋ͬͨΓͳ͔ͬͨΓʢͬͯΛ࣍ʹ͠·͢ʣ
ϓʔϧͷσϑΥϧταΠζ • SpringBootͷ߹ • TomcatͷϫʔΧʔεϨου: 200 • HikariCPͷίωΫγϣϯϓʔϧ: 10 •
10ͬͯগͳ͍ʁͱࢥ͏ํHikariCPͷ WikiʹσϑΥϧτ10ͱͯ͠Δཧ༝આ໌ ͯ͠Δ͔ΒɺҰݟ·͠ΐ͏ɻ
αΠζͷؔ࿈ • ϫʔΧʔεϨουϓʔϧͱίωΫγϣϯϓʔϧͷΛฒ͍ͯΔͷɺগͳ͘ͱ ϫʔΧʔεϨουΑΓଟ͘ͷίωΫγϣϯΛอ͍࣋ͯͯ͠·ͣΘΕͳ͍͔Βɻ • ΞϓϦͷ࡞ΓʹΑͬͯΘΕΔ • ͲΜͳ࡞Γͨ͠ΒʮϫʔΧʔεϨουҎ্ͷίωΫγϣϯΛ͏͔ʯ͓ͬͯ͘ ͱྑ͍
ڞ༗σʔλϕʔεͱσʔλϕʔείωΫγϣϯϓʔϧ
୯ҰΞϓϦέʔγϣϯͰαʔόʔෳ͕͋ͨΓ·͑ • ΞϓϦέʔγϣϯαʔόʔ͕ϦΫΤετΛ ·͕ͨͬͨঢ়ଶΛ࣋ͭͱʮͳΜͰͦΜͳ࡞ ΓʹͳͬͯΔΜͩʁʯͱݴΘΕ͔Ͷͳ͍ɻ • ίϯςφͷޙԡ͋ͬͯ͠ɺΞϓϦέʔ γϣϯαʔόʔͷΑΓՄมʹͳ͍ͬͯ Δɻ •
ੲͷ͏ɺҰ߸ػɺೋ߸ػͱ͍͏;͏ ʹαʔόʔΛݺΜͰ͍ͨΜ͡Ό👴 • ແఀࢭσϓϩΠͱ͔͢Δͱ͞Βʹഒʹ ͳͬͨΓ͢ΔɻΠϯϓϨʔεͳϩʔϦϯά Ͱ࠷1૿͑Δɻ
ڞ༗σʔλϕʔεͰͷίωΫγϣϯࢉ • ಄ͷਤɻ2ΞϓϦέʔγϣϯͰ20ʁ • ΞϓϦ͝ͱʹ10ଓɺͦΕ͕2Πϯελϯ εɻ͜͜ʹσϓϩΠ͕ॏͳͬͨΒ2ഒɻͦΕ ͕2ΞϓϦͳͷͰɺMAX80ʹͳΔɻ • 80͘Β͍ͳΒʹͳΒͳ͍͚Ͳɺ1ΞϓϦέʔ γϣϯ͋ͨΓͷσʔλϕʔείωΫγϣϯϓʔ
ϧ͕10ͰΓΔઃܭ͕Ͱ͖͍ͯΔ͔ʹ͔͔Δɻ Ͱ͖͍ͯͳ͍ͳΒ૿͟͞ΔΛಘͳ͍ɻ • 1ΞϓϦ100ʹͨ͠Β800ͩͶ⭐ • ڞ༗σʔλϕʔεͳઃܭΛ͢Δੈք؍Ͱɺ2Ξ ϓϦͳΜ͔Ͱޮ͔ͳ͍Ͱ͠ΐ͏ɻ
ॳظαΠζͷ • ϫʔΧʔεϨουʢTomcatʣ • Initial: 10, Max: 200 • ίωΫγϣϯϓʔϧʢHikariCPʣ
• Initial: 10, Max: 10 • ϓʔϧ͢Δͷίετ͕ߴ͍ɻ֬อ ͓ͯ͘͠ʁ΄Μͱʁ֦ு͢ΔͳΒɺͦ ͷίετΛ୭ʹෛΘͤΔʁϋζϨҾ͍ ͨϢʔβʁʁ
͓·͚
None
None