Upgrade to Pro — share decks privately, control downloads, hide ads and more …

型付きアクターモデルがもたらす分散シミュレーションの未来

 型付きアクターモデルがもたらす分散シミュレーションの未来

Avatar for Takatomo Torigoe

Takatomo Torigoe

June 13, 2025
Tweet

More Decks by Takatomo Torigoe

Other Decks in Programming

Transcript

  1. 2 自己紹介 研究開発まわりで、分散処理をよく扱っています💪 • 2012-2016 シミュレーションエンジニア@構造計画研究所 ◦ Open MPIで無線通信シミュレータ開発など • 2016-2019 データ・MLエンジニア@サイバーエージェント

    ◦ Apache Sparkでビックデータ集計・機械学習など ◦ 関数型まつり前身のScalaMatsuri 2018で登壇 • 2019- リサーチャー@トヨタ自動車 ◦ Apache Pekkoを用いた分散シミュレーション用 メッセージングフレームワーク「ArkTwin」の研究開発など 鳥越 貴智 takatomo_torigoe @mail.toyota.co.jp GitHub: @piyo7 SpeakerDeck: @piyo7
  2. 5 分散シミュレーションのためのArkTwin 異なるシミュレータ・VRを汎用的に接続するためArkTwin Center・Edgeを開発 gRPC REST API シミュレータ・VRは オンラインゲームのように 別拠点からもネット越しに通信可

    シミュレータ・VRごとに異なる 時間粒度や座標系を変換する サイドカー シミュレータ・VRが抱える エージェントの時空情報を Pub/Subするブローカー
  3. 8 分散処理の勘所 関数型プログラミングのカンファレンス 「関数型まつり」を開催します! 関数型: 2 …… 関数型プログラミングはメジャーな言語・ フレームワークに取り入れられ、…… たとえば

    関数型まつり宣伝文の ワードカウントを MapReduceで 行うことを考えると…… 関数型: 1 …… 関数型: 3 …… 関数型: 2 関数型: 1 …… 左図は Hadoop: The Definitive Guide Figure 2-4 引用 タスク依存をどういったプログラミングパターンで制御するか、が分散処理の勘所 並列 処理 並列 処理 タスク依存あり (Mapが全て終わらないとShuffleできない)
  4. 9 各プログラミングパターンのタスク依存制御 プログラミングパターン タスク依存の制御ポイント ハマりどころ Mutual Execution (Mutex, Synchronizedなど) ロックの取得・解放

    デッドロックを起こしやすい Future Futureの合成やawait ネストのフラット化が難しい MPI プロセス間通信 通信元・先のプロセスを 明確に管理する必要あり Reactive 依存データの更新 メモ化などの最適化が難しい MapReduce Shuffleや外部出力 Map処理の負荷が不均一だと 並列性能が悪くなる 個人的な実装経験を元に整理してみると…… 「アクター間メッセージ」でタスク依存を制御するアクターモデルがピッタリかも どれも帯に短し襷に長しな場合…… 抽象度 低 高
  5. 10 Apache Pekkoとは • Scala言語で開発されたアクターモデルライブラリ ◦ Scala APIのほか、Java APIあり ◦

    Erlang言語の影響が強い • ビッグテックでも利用事例多数なAkkaからフォークしたOSS ◦ Akkaが2022年に有償ライセンスBSLへ切り替わったため、コミュニティがフォーク ◦ その後すばやくApache Incubator入り ◦ 公開前のArkTwinもAkkaに依存していたが、Pekkoへ移行 • 発音は「ペッコ」が一般的っぽい?(YouTubeの解説動画などで確認) https://www.apache.org/logos/
  6. 12 アクター間メッセージングの基本パターン ① Fire and Forget ② Request-Response ③ Request-Response

    with   ask from outside an Actor Pekkoを利用しているArkTwinの設計を例に、具体的なメッセージングパターンを紹介 図はPekko公式サイトより引用 https://pekko.apache.org/docs/pekko/1.1/typed/interaction-patterns.html 非同期でメッセージ投げつける 相手が受信できたかは気にしない シンプルが故に高性能 リクエストに自身の参照を返送先として含め 非同期でレスポンスを返してもらう レスポンスは待たず次のメッセージ処理に移る アクター外からリクエストする際は Futureで受け取り可
  7. 16 まとめ • 分散シミュレーション用メッセージングフレームワーク「ArkTwin」を実例として 型付きアクターモデルの基礎とアクター間メッセージングの設計パターンを紹介 • 本セッションを「いいね!」と感じたら GitHub Star ⭐

    貰えるとめっちゃ嬉しいです ◦ https://github.com/arktwin/arktwin • ArkTwinのOSS利用・開発に興味ある方・組織は、お気軽にご連絡ください! ◦ https://github.com/arktwin/arktwin/discussions ◦ [email protected]