春に続き、1 人で参加しました。
当初は懇親会まで参加…の予定でしたが、結果的に途中離脱しました(それについては後編の最後で)。
本編(午前)
Virtual Threads! Checkpoint Restore! Java の進化に対応する Spring Framework 6.1 / Spring Boot 3.2 の注目機能紹介(Maki さん)
ZoomのRecordingなので解像度よくないのと音声がよくないですが、参加できなかった方どうぞ #jjug_ccchttps://t.co/tP8R3rPqpC
— Toshiaki Maki (@making) 2023年11月11日
今回は会社へのフィードバックも意識しつつの参加だったので、
と迷いましたが、こちらを選択。
本当は会場で聞きたいけど時間帯被りのためありがたく後で読ませていただく。#jjug_ccc https://t.co/eruvw8EEiD
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
「Jakarta EE 11 キャッチアップ」登壇資料公開しました。
— 丸太/Takayuki MARUYAMA (@maruTA_bis5) 2023年11月11日
立ち見も出るほどにお集まりいただき、ありがとうございました!#jjug_ccc #jjug_ccc_a2https://t.co/V0WvEMZToH https://t.co/rDhE7tge3b
(ありがたや)
話の内容は、
- Virtual Threads サポート
- CRaC サポート
の 2 点に絞られていました(前者が中心)。
- Spring ではパラメータ 1 つ(
spring.threads.virtual.enabled=true
)で Virtual Threads を有効にできること- コードをチマチマ書き換えないでも良いのは楽チン!
- VIrtual Thread では R2DBC を使わなくても JDBC で
async
/await
的な処理に対応できること - 現状ではまだ(非 Spring でいうところの)
CompletableFuture
でallOf()
などの後join()
するような処理は Virtual Thread 対応では書けないのと流量制御はできないこと- 依然として Reactive API は必要
- ただし前者については Structured Concurrency がプレビュー中
- CRaC 対応ではセキュリティに配慮したチェックポイント(スナップショット)作成を検討中
というのがわかっただけでも収穫がありました。
Spring Boot 2系最後の2.7 OSSサポートEoL(EoS)はまもなく到来(2023/11/24)。#jjug_ccc #jjug_ccc_b
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
Virtual ThreadsだとI/O待ち発生でOSスレッドを開放するのでノンブロッキング処理が可能。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(他言語のPromise〜then()とかasync/awaitみたいな)#jjug_ccc_b #jjug_ccc
DBコネクタとかバージョン間対応マトリクスとか考えるとなかなかカオスになるからJDBCに一本化されると楽(MySQLとか本家のMySQL Connector/Jでノンブロッキングなやつも持ちつつR2DBCもメジャーどころが複数あったりでそれだけでカオス)。#jjug_ccc_b #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
Java(JVM 言語)で MySQL に接続しようとするとこういう問題があるんですよ…。
楽に使えるようになるとコンテナ環境で助かる。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(あまり楽になりすぎてスナップショットに機密データが残っちゃうとまずいけど←対策検討中)#jjug_ccc_b #jjug_ccc
Java の AoT コンパイルは現状では非常に遅いので、CRaC が本当に実用的に使えるようになると良いですね。
レガシーなWebサービスから世界標準への挑戦(Hashimoto さん)
自社の状況に被る部分(レガシー)と今後の参考になりそうな点(OpenAPI Specification の利用)があったので選択。
- 長く続いている(生きのこっている)プロダクトには色々な歴史的経緯があること
- OpenAPI でリソースベース(RESTful)ではなく手続きベースの API も定義できる(しても良い)こと
- 言われてみればそういう仕様だった
- スキーマから自動生成したコードをどこまで利用するかについては、やはり判断が難しそうなこと
を理解(?)しました。
いつもOpenAPIとOpenAIでこんがらがる(頭ではわかってても喋ると間違える)。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(個人的にはJavaじゃなくてGoでOpenAPI使ってる)#jjug_ccc_b #jjug_ccc
ここ数年 Java のコードをまともに書いてないんですよね(TypeScript >> Python > Go > Dart(Flutter) >>> Java みたいなイメージです)。
なんとなく、過去には「CSV(一般的なCSVの仕様に準拠しているとは言っていない)」みたいなフォーマットのデータがやり取りされていた雰囲気を感じる。#jjug_ccc_b #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
ノーコメント。
OpenAPIはOpenAPIで「スキーマ定義の更新が面倒で仕様変更時にスキーマ定義の変更を放置してコードを修正する」とかやりがちな気がしたり。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(それをやるとバリデーションとかテストとかいろいろ崩壊し始めて…)#jjug_ccc_b #jjug_ccc
自動生成したコードのディレクトリ構成とか記述のスタイルが受け入れられるかどうかの問題も。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(なので自動生成したコードを使わないケースも←スキーマ定義とコードの乖離の原因になったり)#jjug_ccc_b #jjug_ccc
GMO ペイメントゲートウェイ社では「バリデーションは従来から独自に実装を実装を用意しているので自動生成しているものは使っていない」とのこと。
できれば「OAuth認証」って呼んでほしくないな(仕方がない面はあるかもしれないけど)。#jjug_ccc_b #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
うーん(OIDC に準拠するより「OAuth 2.0 + 何か(ID 的な)」を選んじゃうんだろうな…)。
スポンサーブースでの LT
スペースの都合上「大人数」とはいきませんでしたが、そこそこの人数が昼食に直行せずに残って盛り上がっていました。
耳かっぽじて聞きます。#jjug_ccc pic.twitter.com/mhw5Cljleq
— モメンコ@五反田だいすき (@mome1014) 2023年11月11日
かっぽじって聞くとしたらどっちの耳だろう(そういう話じゃない)。
PayPay強し(たしか半年前くらいにも聞いた気がするのを思い出した)。#jjug_ccc pic.twitter.com/Txlg1NmalA
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
幅広い世代に浸透してますね(そういうわたしは「お試し」程度でやめちゃったんですけど)。
🐱#jjug_ccc pic.twitter.com/u7Ei7y2SB0
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
😺ニャー
雰囲気がわからずマジメな資料を作ってしまったらしい。#jjug_ccc pic.twitter.com/k4iOVTu2HV
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
EPP(Java 8 で 17 相当のパフォーマンス出すやつ)が使える話、覚えてる人少なかったみたいでした。
Infcurion社の知名度もキャッシュレス決済も伸びしろがたくさん。#jjug_ccc pic.twitter.com/5KVRMk2jxy
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
ごめんなさい、わたしも知らなかったです。
本編(午後)
コンテナ環境でのJavaトラブルシューティング技法(数村さん)
ミーティングルームの話も聞きたかったのですが体は 1 つなのでこちらを選択。
- コンテナイメージを小さくすればするほどコンテナ単体でのトラブルシューティングは難しくなる
- 言われてみればそのとおり
- 当然だけど忘れがち
- 言われてみればそのとおり
- コンテナのトラブルシューティング手法はいくつかあるが、それぞれ良い点悪い点があるし環境による制約もある
- 今回は Kubernetes が前提
- ECS on Fargate など、別の環境についても調べてみると良さそう
- 今回は Kubernetes が前提
なことがわかりました。
コンテナ起動時間の調査で「イメージpullに最も時間が掛かっている」という結果、JVM言語に限ると変わってきそう。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(どこまでを「起動時間」とするのか次第?)#jjug_ccc_c #jjug_ccc
文脈から判断すると JVM の JIT に起因する部分はここでいうところの「起動時間」の外?
イメージを小さくしようとすればするほどコンテナ単体でトラブルシューティングしづらくなる。#jjug_ccc_c #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
Linuxの中身とかはもっと理解したいなあ #jjug_ccc #jjug_ccc_c
— Tada🎉 (@suke_masa) 2023年11月11日
同意。
(そのままの勢いで、技術書典で本を購入しました)
K8sじゃなくてAWSのECS on Fargateだとこのへんに関連する話かな?https://t.co/IVxPU19GJz#jjug_ccc_c #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
サイドカーからメインのコンテナを突っつく話。Kubernetes の Pod じゃなくて ECS のタスクで同じようなことをするには…の呟きでした。
ルネサンスベンチマークはエフェメラルコンテナを使って実行する、と。#jjug_ccc_c #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
(貴族っぽい人たちは出てきません。まあ「エフェメラル」なので出てきてもすぐ消えていなくなりそうですが)
持続可能なデータアーキテクチャを実現したリアーキテクティング(Urano さん)
AWS とか DynamoDB とかデータ移行の話が出てくるようだったので選択。
ゆったりとしたペースで話していただけたので、話の流れがよくわかりました。
というのをあらためて認識しました。
データ量の増大がサービスの持続可能性に大きな影響を与えるあるある。#jjug_ccc_b #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
過去履歴はDynamoDBへ。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
たしかにデータ量増えればいい感じに勝手に分割されるから性能面では改善できそう(元がRDSでテーブルフルスキャンだとすると)。
データ量多くなってスキャン(指定期間分全レコード)のコスト的にはどうなんだろうか?#jjug_ccc_b #jjug_ccc
「データ量多くなって」の話、DynamoDB ではスキャンではなくクエリで処理している、とのこと。
確かにパーティションキーで絞り込む分走査対象のレコードが減りますが、インデックスを作っていないとパーティション内での走査は減らないような…?
DynamoDBだと、同じデータを別の切り口で使いたければ、可能な範囲ではGSIを使ってそこを超えてしまうケースではCDC的に別ストアに流す形になりそう。#jjug_ccc_b #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
ただ、作り込みすぎると色々なものが密結合になって変更しづらくなるんですよね。
DynamoDB、データ移行時と移行後でプロビジョンド→オンデマンド切り替え。
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
うまくやってる。#jjug_ccc_b #jjug_ccc
慌ててると忘れがちなやつ。
移行時と移行後でワークロード変わりますからね。
(あれ?今日はJAWS-UGに参加してるんだっけ?)#jjug_ccc_b #jjug_ccc
— hmatsu47(まつ) (@hmatsu47) 2023年11月11日
話を聞きながら、終始これが頭に頭に浮かんでいました。
後編はこちら↓