0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

色々なアーキテクチャスタイル簡易まとめ

Posted at

レイヤードアーキテクチャ

概要

  • 最も一般的なアーキテクチャスタイル
  • このアーキテクチャ内の各コンポーネントは、水平方向のレイヤーとして編成される
  • 各レイヤーは、アプリケーション内で特定の役割を果たす

主な特徴

  • コストが低くシンプルな構成で理解しやすい
  • 小規模でシンプルなアプリケーションやWEBサイトに適する
  • 大規模で複雑なアプリケーションには向かず、弾力性、スケーラビリティは低い
  • 時間が限られているとき、要件が定まっていないとき等にはレイヤードアーキテクチャは優れた選択肢の一つとなる

パイプラインアーキテクチャ

fosa_1101.png

概要

  • パイプとフィルターから構成される
    • パイプ:あるソースからの入力を他のソースに出力する
    • フィルター:入力ソースを加工する。1のフィルターで1つのタスクのみ行う

主な特徴

  • シンプルな一方通行の処理を進めることに向いている
  • コストが低く、シンプルな構成
  • 弾力性、スケーラビリティは低い

マイクロカーネルアーキテクチャ

fosa_1201.png

概要

  • コアシステムとプラグインの2つのコンポーネントで構成される
    -コアシステム:システムを実行するのに必要な最低限の機能
    -プラグイン:コアシステムを強化、拡張するための特殊な処理や追加機能

主な特徴

  • コストが低く、シンプルな構成
  • 弾力性、スケーラビリティは低い
  • ドメインによる分割と技術による分割の両方が可能なアーキテクチャ
  • プラグインコンポーネントの切り出しにより、通常よりテストが容易
  • ユーザーによってカスタマイズされるツール等によく使用されるアーキテクチャ(VSCode, Chromeなど)

サービスベースアーキテクチャ

fosa_1301.png

概要

  • 最も実用的なアーキテクチャスタイルの一つ
  • 分散型のレイヤード構造
  • このアーキテクチャにおけるサービスとは、粗い粒度のアプリケーションの一部(ドメインサービス)である
  • 各ドメインサービス内で、APIファザード層、ビジネス層、永続化層等で構成される、レイヤードアーキテクチャの形をとる
  • 多くのトポロジーが存在し、最も柔軟性の高いアーキテクチャスタイルの一つとなっている

主な特徴

  • ドメインによって分割されたアーキテクチャ
  • 耐障害性、可用性、テスト容易性等、運用・保守の観点で高い評価
  • コストが高すぎず、構成が複雑すぎず、全体的にバランスの良いアーキテクチャと言える

イベント駆動アーキテクチャ

概要

  • 非同期でイベント(リクエスト)を受信して処理する
  • 単体でも、他のアーキテクチャスタイルと組み合わせても使用できる
  • メディエータートポロジとブローカートポロジの2タイプがある

ブローカートポロジ

broker.png

  • 軽量メッセージブローカーを介して、ブロードキャスト方式でイベント処理コンポーネントに分散させる
  • イベントプロセッサーは非同期的に処理を行い、各プロセッサーが独立して動作する。これにより、高いスケーラビリティ、応答性、パフォーマンスを実現する
  • 単純なイベント処理フローを持ち、複数イベントの調整を必要としない場合に便利
  • エラー処理やワークフロー制御が難しいという問題点がある

メディエータートポロジ

mediator.png

  • ブローカートポロジーの欠点を解消するためのアーキテクチャ
  • イベントメディエーターで複数のイベントプロセッサーの調整を必要とするイベントのワークフローを管理・制御する
  • パフォーマンスやスケーラビリティは、ブローカートポロジの方が優れている(悪くはない)

主な特徴

  • パフォーマンス、スケーラビリティ、耐障害性に優れている
  • 動的なイベントフローにより、テスト容易性が低く、また複雑になっている

マイクロサービスアーキテクチャ

1_Jn_OZgq9dAG854kLEvG_-Q.png

概要

  • 近年人気を集めるアーキテクチャスタイル
  • このアーキテクチャでは、各サービスが単一目的に特化し、小さな独立した構成要素で構成される
  • データベースや他の依存コンポーネントを含め、各サービスが完全に独立して動作可能

主な特徴

  • スケーラビリティ、弾力性、進化性に優れている
  • 分散アーキテクチャとしての課題(サービス間通信を多用すると、耐障害性や信頼性に影響が生じる)がある
  • ただし、そういった問題の多くは、スケーリングや冗長性によって解決可能
  • 使用するネットワークの量から、パフォーマンスについても問題が生じやすいため、工夫が必要となる

参考

ソフトウェアアーキテクチャの基礎

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?