Skip to content

Latest commit

 

History

History
90 lines (82 loc) · 4.01 KB

index.md

File metadata and controls

90 lines (82 loc) · 4.01 KB

EpDocs: Ep3. Railway Microservice Architecture

Fast iteration is important

  • Factorioは工場を作って作り直して作り直して作り直すゲーム
    • "作り直したくない"って思わないように設計しよう。
  • "作り直したくない"って思わないようにするにはどうするか?
    • 新しいのを作って乗り換えるのを簡単にする
    • "既存の工場を使い回す"のが常に選択肢になるように設計する。

What is Railway MSA?

  • よくある形じゃん
  • Main busの鉄道版じゃん

Main Busと何が違うか?

  • 工場の位置の自由度

    • →"作り直し"のコスト軽減
    • Main bus:
      • Bad: ベルトには上流下流の概念
      • Cost: ベルトを敷き直さないといけない, 工場の位置関係がそれなりに制約される
    • Railway MSA:
      • Good: 線路には上流下流の概念がない
      • 複線にすれば、もう自由自在
  • 新工場への移行(Migratability)

    • →"作り直し"のコスト軽減
    • Main bus:
      • 上流下流が変わるとベルトの敷き直しがいる
    • Railway MSA:
      • 列車の停車駅を変更するだけ。
  • 流量調節が容易

    • →運用の自由度
    • Main bus:
      • 下流にアイテムが行きにくい
      • Mapから流量調節ができない(splitterの優先順位が変えられない)
    • Railway MSA
      • だいたい均等に行き渡る
      • 回路でダイヤを制御すると優先順位付けられる
      • ダイヤはMapから変えられる。(回路はできないけど)

Railway MSAのPros/Cons

Pros

  • 交換可能性 (Optimizing for replceability)
    • 簡単に建替えができるから、最初は最適解を意識しないでもよい。
      • →工場長の設計に対する心理的ストレスの軽減
  • 合成可能性 (Composability)
    • 「とりあえず動けばいい」が可能
    • 既存の工場の使い回しができる。既存の実装の隠蔽化。
  • スケール (Scaling)
    • 生産量が足りないと思ったら工場コピペして駅を作るだけ。
    • 気分が乗れば特化工場を作っても良い
  • 列車がたくさん走っててMapが楽しい
    • 🚋💨🚋💨🚋💨

Cons

  • デバッグが難しい (Debuggability)
    • 「XXXが生産されない、なぜ?何が足りない?」の調査が難しい。
    • 工場間の依存グラフを脳内に入れる必要。
    • Alertを雑に設定した場合、"クリスマスツリー現象"が発生する
      • 雑記: クリスマスツリー現象って英語文献で見ないんだけど何って言うんだろ…?
    • Suggestion: 全体の依存関係を理解し死活/流量監視を行うSupervisor
  • 列車だらけになってダイヤ管理が超大変
    • Suggestion: Buffer駅の作成, O(NM)をO(N+M)にしよう。
  • 広い敷地が必要
    • 各加工工場の稼働率を100%未満にすべきので、デッドスペースがどうしてもできる。
    • 駅って意外とスペース食うのよね。
  • 在庫を大量に持つので汚染がやばい
  • 渋滞
    • 🚋💦🚋💦🚋💦
  • 轢死
    • 🏃💥🚋💨

今シリーズの計画

  1. 鉄道までmain bus方式でしのぐ
  2. Main busを列車IO駅に接続
  3. 列車IO汎用工場を作成
  • 再利用可能な形で設計
  1. 技術解禁とともに新たな列車IO工場を作成し、古いのを陳腐化(deprecate)
  • ex. 電気炉
    1. 電気炉ができた
    2. 電気炉の列車IO精錬場を作成
    3. Main bus駅発着をやめて電気炉精錬場駅に変更
    4. Main bus駅の撤去
  1. 最適化がしたくなったら、汎用工場を使わない専用工場の作成

なぜこのプロセスがいいか?

  • とりあえず動く、が常にできる
    • Done is better than perfect.
  • 飽き防止
    • 気分が乗れば特化工場を作って最適解を目指せる
    • めんどくさければ汎用工場でいい