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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Takatomo Torigoe

Takatomo Torigoe

June 15, 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できない) 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]