📖

【後半】Twelve-Factor Appを図で書いて理解する

2023/08/09に公開

先日書いた記事の続編です。
https://zenn.dev/not75743/articles/c6a58a1ca968cb

7~12について簡単にまとめてみました。

7. ポートバインディング

  • アプリケーションへは公開したポート番号からアクセスする
  • 実行環境にwebサーバ等を入れ、公開する必要がないようにする
  • アプリケーションが他のアプリケーションにとってのバックエンドサービスになれる
  • 避けるべきことはアプリケーションのスケーラビリティを制限するもの
    • ポート番号のハードコーディング、特定のインフラへの依存等

8. 並行性

  • アプリケーションが平行に(同時に)実行可能であること
  • スケールアウトを容易に、単純に実行できるようにする
    • プロセス間で状態を共有しない(ステートレス)
  • ワークロードの種類をプロセスタイプに割り当てる
    • フロントエンド、バックエンド、時間がかかる処理等

9. 廃棄容易性

  • プロセスを即座に起動・終了させることができる
    • 素早いスケール、デプロイのため
  • グレースフルシャットダウンによって未完了のタスクを完了してから終了することが推奨される
    • 処理が死んでも問題ないか?
    • 新しい処理が失敗しないか?

これはまあ図がなくても...(うまい例がおもいつきませんでした。)

10. 開発/本番一致

  • 継続的デプロイしやすいよう開発環境と本番環境のギャップを小さく保つ
  • ギャップは以下の3つに分類される
    • 時間
    • 人材
    • ツール

11. ログ

  • Twelve-Factor Appはアプリケーションの出力ストリームの送り先やストレージについて一切関知しない
    • stdoutに書き出したログをツール(Fluentd等)で飛ばす
  • 分析やアラートのために集約する

12. 管理プロセス

  • データベースのマイグレーションなどの一度限りのプロセスは、アプリと同じプロセスで実行するべき
  • 環境間の差異による問題を避けるため

おわりに

わかったようなわからないような...
今後アプリケーション、インフラ設計をする際に指針として使いたいと思います。
コンテナアプリケーションとの相性の良さを読みながらひしひしと感じました。

Discussion