なぜ必要なのか
小さなアプリを扱いやすい手順で公開したい。複数サービスの個別配布や調整が、今の課題より大きくなることがあります。
どう解決するのか
- 架空の読書アプリ。一チーム、アプリv1にカタログ・ライブラリ・課金を含む。A17はタグなし。
- ライブラリにタグ機能を加え、アプリv2をデプロイ。課金の動作は同じでも同じ成果物に含まれる。共有データベースはアプリが所有。
- ライブラリがプロセス内でカタログを参照し、
travelを記録。書き込み前の参照失敗ならタグなしのまま。復旧後に再試行。
説明用の架空の例
一つの成果物をまとめて更新
読書アプリ · 一チーム · A17はタグなし
変更:ライブラリにタグを追加。課金の動作は同じ。
デプロイ単位 · 1
アプリv1 → アプリv2サーバーアプリケーション全体をビルド・デプロイ
カタログ
動作は同じ
ライブラリ
タグ機能を追加
課金
動作は同じ
ライブラリ → カタログ · プロセス内呼び出し
機能の枠は内部のモジュール構成を規定しません。
共有データベース · 所有者:アプリ
カタログ / ライブラリ / 課金
カタログ参照の成功後、ライブラリがタグを記録。
- 参照成功 → travelを記録 → A17のタグはtravel。
- 書き込み前に参照失敗 → タグなし。失敗を伝え、復旧後に再試行。
レプリカは同じ成果物のコピーで、別サービスではありません。プロセス停止はそのレプリカの全機能に影響し得ます。
所有権の枠はアクセス規則を示し、データベースのマシン数を示しません。
どんな考え方なのか
モノリスはサーバーアプリケーションを一単位でデプロイします。同じ成果物のレプリカを増やしてもモノリスであり、内部にモジュールを置けます。Lewis・Fowler
リリースとプロセス障害は共有します。境界が重要になれば明示的なモジュールを加えます。
この選択を話し合う
コメントは全言語で共有。投稿にはGitHubログインが必要です。