🙄

# ソフトウェア設計とアーキテクチャ #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