以下の内容はhttps://ozaki25.hatenadiary.jp/entry/2025/11/25/214046より取得しました。
Java Virtual Threads / Kotlin Coroutines / Go Goroutinesの比較
和田 隆道さん(LINEヤフー株式会社)
- 1リクエスト1OSスレッドだとC10K問題が発生する
- tomcatの方式
- 1リクエスト1OSスレッド
- ブロッキングI/O
- 処理は同期的
- OSが参照するスタックを切り替えて処理対象を切り替える
- OSスレッドの数は性能によって上限があるので達していると待たされる
- ブロッキングなのでCPUに余裕があるのに待たされることもある
- イベントループ
- 1つのOSスレッド上でループを回して複数のリクエストを処理する
- ノンブロッキングI/Oにする必要がある
- IO完了時の処理は非同期で行う
- Coroutine
- イベントループでノンブロッキングに処理をする
- Kotlinでは完了後の処理を同期的に書ける
- 軽量スレッド
- OSスレッドを共有して1リクエスト1軽量スレッドで処理する
- 軽量スレッドをOSスレッドにスケジューリングする
- JVMがノンブロッキングに書き換えてくれる
- Virtual Threadのスタックで実行状態を持ってる
初めてのKotlin:Javaチームが挑んだマイクロサービス開発
三木 一馬さん(株式会社出前館)
- Java開発者が新規のKotlinアプリを作った
- クイックマートのAPIの一つ
- 数千店舗の数万商品のデータが流れる
- 開発者6-8名
- Kotlin/SpringBoot/gRPC/Kafka
- 開発中の課題
- モデルが増え続ける
- 操作ごとにモデルを量産
- 同じフィールドが多くの場所にある
- 同じフィールドでも型が違うこともある
- -> sealed interfaceで共通フィールドを一箇所に集約できる
- 型安全性の問題
- 複数フィールドがStringで定義されてると渡し間違えが起きる
- -> ValueObjectで専用の型を定義
- gRPCの実装
- マイクロサービス間の通信はgRPC
- gRPC Server Streaming
- 1リクエストに複数レスポンスを返せる
- 逐次でレスポンスを受け取れる
- 処理時間は改善した
- toListで全件まとめようとすると結局streamingのメリットがなくなる
- エラーハンドリングの実装
- ビジネスエラーと非検査例外と混在し複雑化
- Result型によるエラー管理
- ビジネスエラーがエラーだが正常系という扱いになる
- 非検査例外と区別できる
- Kotest
意外と難しいドメイン駆動設計の話
木目沢 康廣さん(株式会社ZOZO)
- DDDでの設計パターン
- SQLにロジックを持つか
- SQLはシンプルに取得してアプリケーションでロジックを持つか
- 仕様変更に強い設計
- SQLだけ変えればよくてアプリケーションは変わらない方があいいか、その逆がいいか
- 多くの箇所を修正しないといけないのは避けたい
以上の内容はhttps://ozaki25.hatenadiary.jp/entry/2025/11/25/214046より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます
不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14