Coursera Software Architecture Week2 Learning Objectives-2

ちょっと体調を崩してしまい、中断していました。今日から再開します


Database

データを集中管理し、スケーラビリティを確保するため、データベースを使用することが一つの有益な方法である。 データベースを使用する際には、データベースの管理コンポーネントと、その管理コンポーネントへのアクセサ(トランザクションなどを行うのもこの部分)を併用する。 これにより、データの保存、信頼性の担保を管理コンポーネントに任せ、システムはデータベースへのアクセスについてだけ考えればよいことになる。 しかし、このやり方にも問題はある。データベースに依存することにより、データベースが使えなくなるとシステム全体が使えなくなる。データベースの構造変更にはコストがかかる。 それでもデータベースアーキテクチャは広く使われており、システム構築にあたって有益な方法である。

Layered System

レイヤードアーキテクチャーでは、コンポーネントを複数のレイヤーの内部に配置することを想定する。このとき、各レイヤー内のコンポーネントは、同じレイヤー内のコンポーネントか、隣接するレイヤーのコンポーネントとのみやりとりする。例えば、三層のレイヤーを想定したとき、一番上のレイヤーは真ん中のレイヤーとしかやりとりができず、一番下のレイヤーと直接やりとりすることはできない。

下部(コアに近い)レイヤーは、上のレイヤーにサービスを提供する。上部のレイヤーは下部のレイヤーから命令を受け取る。各レイヤーのインターフェースはシステムのニーズに応じて設計される。 このようにすると、関心の分離を行うことができる。レイヤーをプレゼンテーション層、ロジック層、データ層に分け、それぞれのレイヤーがそれぞれの役割に注力するなどである。 OSは関心の分離のよい例である。最下部にカーネル層がある。この層はハードウェアとのやりとりと、リソース配置を役割として受け持つ。その上にはシステム・アプリケーションライブラリ層がある。これはプログラミング可能な高レベルの機能(実装内ではカーネルとのやりとりを行う)を提供する。一番上にユーティリティ・アプリケーション層がある。ユーティリティはコマンドラインのようなツールであり、OSの機能をユーザーが実行したりファイル一覧を見たりすることができる。アプリケーションはユーザーによってインストールされる特定の用途のプログラムである。これらは下部のレイヤーに依存しているが、下部の実装を知らなくても使うことができる。

システムの実装をきれいレイヤー分けできないことも多い。また、隣接するレイヤーとしかやりとりができないということは、それだけオーバーヘッドを生む要因にもなる。 しかし、レイヤードアーキテクチャーは関心の分離・疎結合なシステムの構築に役立つ。

n-Tier/Multitier

n-Tierは、レイヤードアーキテクチャーと似ているが、各レイヤー内のコンポーネントが物理的に別のマシン内に存在することがある場合につかわれる。 2-Tierの具体的な例はクライアントとサーバーの関係である。サーバーがデータ操作やロジックその他の処理を行い、クライアントが処理の実行をサーバーに要求する。

3-Tierの具体的な例は、クライアント、アプリケーションサーバー、データベースサーバーという構成である。

Tierを追加すると、それだけシステム全体の複雑性は増す。障害発生時のリカバリーにも時間がかかることになる。 しかし、レイヤードアーキテクチャーの利点に加え、スケーラビリティの向上、集中管理、リソースの最適な配置などの利点により、n-Tierは一般的に使用されている。

Interpreter-Based Architecture

エクセルの計算式のように、ユーザー自身がスクリプトやマクロなどを書き、実行できる構造をInterpreter-Based Architectureという。 インタープリターは既存の機能からシステム上で作成され、インタープリターがスクリプトやマクロを実行する。このアーキテクチャーは柔軟性、ポータビリティというメリットがある。