以下の内容はhttps://ozaki25.hatenadiary.jp/entry/2025/11/25/214046より取得しました。


「After JJUG CCC 2025 Fall」に参加してきました

Java Virtual Threads / Kotlin Coroutines / Go Goroutinesの比較

和田 隆道さん(LINEヤフー株式会社)

  • 1リクエスト1OSスレッドだとC10K問題が発生する
  • tomcatの方式
    • 1リクエスト1OSスレッド
    • ブロッキングI/O
    • 処理は同期的
    • OSが参照するスタックを切り替えて処理対象を切り替える
    • OSスレッドの数は性能によって上限があるので達していると待たされる
  • イベントループ
    • 1つのOSスレッド上でループを回して複数のリクエストを処理する
    • ノンブロッキングI/Oにする必要がある
      • 同じスレッドで多数のリクエストをさばくので
    • IO完了時の処理は非同期で行う
  • Coroutine
    • イベントループでノンブロッキングに処理をする
    • Kotlinでは完了後の処理を同期的に書ける
      • CPS変換という処理が行われるから
  • 軽量スレッド
    • 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のメリットがなくなる
      • REST APIのレスポンスをストリーミングにできればいいがそれもできない仕様
  • エラーハンドリングの実装
    • ビジネスエラーと非検査例外と混在し複雑化
    • Result型によるエラー管理
      • ビジネスエラーがエラーだが正常系という扱いになる
      • 非検査例外と区別できる
  • Kotest
    • テストケースを階層的に書ける

意外と難しいドメイン駆動設計の話

木目沢 康廣さん(株式会社ZOZO)

  • DDDでの設計パターン
    • SQLにロジックを持つか
    • SQLはシンプルに取得してアプリケーションでロジックを持つか
  • 仕様変更に強い設計
    • SQLだけ変えればよくてアプリケーションは変わらない方があいいか、その逆がいいか
    • 多くの箇所を修正しないといけないのは避けたい



以上の内容はhttps://ozaki25.hatenadiary.jp/entry/2025/11/25/214046より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14