🙄
# ソフトウェア設計とアーキテクチャ #1 概観
1. はじめに
アプリケーションを作るとき、単にコードを書く以上に大事なのが 「どんな構成で作るか」 です。
これを扱うのが ソフトウェア設計とアーキテクチャ。
ここでは代表的なアーキテクチャパターンを整理します。
2. Monolithic Apps(モノリシックアプリ)
- 特徴: すべての機能をひとつのアプリケーションとしてまとめる。
- メリット: 開発・デプロイがシンプル。小規模なら効率的。
- デメリット: 規模が大きくなると変更やスケーリングが難しい。
3. Microservices(マイクロサービス)
- 特徴: 機能を小さなサービス単位に分割。独立して開発・デプロイ可能。
- メリット: スケーラブルでチーム分割しやすい。障害の切り分けもしやすい。
- デメリット: サービス間通信やデータ整合性が複雑になる。
4. SOA(Service-Oriented Architecture)
- 特徴: サービス指向。再利用可能な「サービス」を組み合わせてシステムを構築する考え方。
- 関係性: マイクロサービスの前身的な概念。より大規模・業務システム寄り。
5. Serverless(サーバーレス)
- 特徴: サーバー管理を意識せず、イベント駆動でコードを動かす。
- 例: AWS Lambda、Azure Functions
- メリット: スケーリングや運用をクラウドに任せられる。
- デメリット: 実行環境が制限される、コールドスタート遅延など。
6. Service Mesh(サービスメッシュ)
- 特徴: サービス間通信をアプリではなくインフラ層で管理。
- メリット: リトライ、ロードバランシング、認証を統一的に扱える。
- 例: Istio、Linkerd
7. Twelve-Factor App(12要素アプリ)
-
概要: Heroku発祥の「クラウド時代のアプリ設計原則」。
-
要点:
- 設定は環境変数で管理
- ビルド・リリース・実行を分離
- ステートレスプロセス
- ログをイベントストリームとして扱う
-
目的: スケールや移植が容易で、クラウド環境に適した設計にすること。
8. まとめ
- 小規模ならモノリシックで十分。
- 大規模や分散開発ではマイクロサービスやSOAが有効。
- 運用を減らしたければサーバーレス。
- 通信管理が課題ならサービスメッシュ。
- どの形でも、12要素アプリの考え方を押さえておくとクラウド対応がしやすい。
Discussion