2011/03/09

アーキテクチャスタイル

システムアーキテクチャ構築の原理の読書メモ

ソフトウェアパターンの分類

一般に以下の3つに分類される

  • アーキテクチャスタイル
  • デザインパターン
  • 言語イディオム

この3つの違いはシステム上でのレイヤーの違いで、アーキテクチャスタイルはシステムレベル、
デザインパターンはソフトウェア設計、言語イディオムはもっとも具体的な言語固有の問題の解決方法を表す。

アーキテクチャパターンのメリット

デザインパターンと同様で直接の解決策だったり、土台に利用したりもできる。
また一般的なパターンであれば、作業者のシステムの理解も早くなる。

アーキテクチャスタイル

  1. パイプとフィルタ Pipes and Filters

    • メリット
      • フィルタ処理が独立化するので変更、再利用が用意
    • デメリット
      • 状態情報の共有が困難
      • フィルタ間でデータ変換のオーバーヘッドがある
      • エラー処理が難しい
  2. クライアント/サーバ Client/Server

    • メリット
      • 複雑な処理の集中化
      • 機密性
    • デメリット
      • クライアントとサーバが同一マシン上ではない場合のオーバーヘッドの高さ
  3. 階層化(ティア)コンピューティング Tiered Computing

    それぞれ段階層がクライアント/サーバの役割する

    • メリット
      • 階層ごとに関心事を分離できる
      • 階層の再利用が可能になる
    • デメリット
      • 階層間の通信のオーバーヘッド
      • システム要素数の増加による追加開発の複雑さ
  4. ピアツーピア Peer-to-Peer

    各ピア(システム要素)がクライアント/サーバとなるが、中央サーバを必要とせずピア同士で自由に通信する

    • メリット
      • スケーラビリティの高さ
    • デメリット
      • 中央ピアリストが入手できないと、ピアのネットワーク分断が起こりやすい
      • 任意の時点でのシステムからの特定の応答が保証するのが困難
      • どういうこっちゃ?
  5. レイヤ実装 Layered Implementation

    システム要素をレイヤとし、各レイヤをスタックする。
    レイヤは抽象レベルによって分割されて、スタックの一番上が特定の操作等にあたり、 スタックの下にOSのシステムライブラリが来る。

    Note
    Tiered Computingとの違いはいまいちわからないが、単体でサービスを提供するかどうか、
    レイヤは機能の垂直分割、Tiered Computingは機能の水平分割の模様。
    所謂Web ApplicationのMVCのスタイルはTiered Computingにあたるんだろうか

    • メリット
      • レイヤの再利用
      • 関心ごとの分離
      • 各レイヤの分離による保守管理の用意さ
    • デメリット
      • 実装の柔軟性の低下
      • レイヤ毎に順番に開発する必要性がある
  6. パブリッシャ/サブスクライバ Publisher/Subscriber

    • メリット
      • SubscriberをPublisherの緩やかな結合
    • デメリット
      • 実装が複雑
      • 信頼性のあるメッセージ配信が必要な場合、複雑になりがち
  7. 非同期データ複製 Asynchronous Data Replication

    Publisher/Subscriberの変種。データを同期させる必要がある場合に利用される。
    データソース、データレプリカ、レプリケータの3つの要素で構成される

    Note
    DBのレプリケーションとかがこれにあたるのか

    • メリット
      • ロジックを複雑化させることなく、データが同期できる
    • デメリット
      • ソースとレプリカの更新の間で発生するタイムラグ
      • レプリカデータストアでの更新処理に対応すると複雑化する
  8. ディストリビューションツリー Distribution Tree

    パブリッシャ、ディストリビュータ、消費者の3つのタイプのシステム要素がある。
    パブリッシャがツリーの根になって、ディストリビュータが中間ノードを作り、消費者がツリーの葉になる。

    Note
    PubSubHubbubがまさにこれのような感じがする

    • メリット
      • 小規模から大規模まで拡張可能
    • デメリット
      • ディストリビュータを挟むので更新待ち時間がある
      • ディストリビュータが蓄えるキャッシュが規模の拡大に伴って負担になる
  9. 統合ハブ Integration Hub

    多数の異なるシステム間で情報を同期させる必要がある状況に利用される。
    非同期データ複製(Asynchronous Data Replication)を拡張したもの。

    データソース、データ送付先、ハブ、アダプタの4つのシステム要素がある。
    ハブを経由してデータソースとデータ送付先がデータを同期する。その際にアダプタがデータを共通形式に変換し、自由にデータを同期させられるよう責任をもつ

    • メリット
      • 新しいデータソースや送付先の追加による影響が少ない
      • アダプタによってソース独自の詳細等を隠蔽できる
    • デメリット
      • 全部の形式をサポートするのは現実的じゃないので、共通モデルの設計が難しい
      • 変換が多く挟まるので非効率的
      • ハブの作り込みが甘いと障害点になる
  10. タプルスペース Tuple Space

    クライアント(情報を生成して処理するコンピュータ処理要素)とタプルスペースそのもの(型づけされた情報タプルまたはレコードをクライアントが読み書きする記憶空間)の二つのタイプのシステム要素がある。
    クライアントとタプルスペースはクライアント/サーバネットワーク接続で接続する。クライアント同士は接続しない

    Note
    並列処理向きの模様。
    Job Queueもこれの一種?worker, clientがクライアント要素で、daemonがタプルスペースに当たるよね?

    • メリット
      • 単純なコンピュータ処理モデルを提供
      • クライアント間の緩やかな結合
    • デメリット
      • タプルスペースのスケーラビリティの限界

0 件のコメント:

コメントを投稿