システムアーキテクチャ

**システムアーキテクチャ**（）は、システムの構成要素（コンポーネント）として何があるか、各構成要素がどのような機能・役割を与えられ、相互にどのように連絡をして全体としてひとつのシステムとして機能するか、に関する記述や取り決めのこと。

なお、システムアーキテクチャの「システム」が指しているのはコンピュータシステムに限らない。（後述）

## 概説
;定義
いくつかの団体によるいくつかの定義の例を示す。
*システムの**構成**、**動作原理**を表している。（カーネギーメロン大学ソフトウェア工学研究所用語集）
*システム構成要素（部品）レベルの詳細さで設計や実装を可能とするレベルの記述がされている。（IEEE 1471やTOGAF）
*構成要素間の関係やシステム外の環境との関係が記述されている。
*要求仕様やシステムのライフサイクル全体を考慮している。

;概要
システムアーキテクチャは、システムの構成要素として何があるか、構成要素は相互にどのように連絡し全体としてひとつのシステムとして機能しているか、に関する記述や決めごとである。

システムアーキテクチャはシステム全体の構造を示すものであり、いわば "システム全体の概略設計図" や  "システムの骨格図"のようなものであり、システムの全体像を概観することを可能にするものである。

システムアーキテクチャは、システム構築のプロジェクトを進める上で、いわば基礎や土台として機能する。
大きなシステムを構築するには多くの人が携わる必要があり、そのようなシステム構築にはシステムアーキテクチャをあらかじめ作成することが必要である。

システムアーキテクチャは決めごとであり一種のルールとしても機能し、詳細設計の担当者や実装担当者がシステム全体と整合性がとれず矛盾してしまう細部を作ってしまうことを抑制する効果も持つ。

;「システム」の範囲
システムアーキテクチャで扱われる「システム」は、（コンピュータで構成されるシステムが多くはあるが、それに限らず）、人の組織や、知識体系すらも含まれることがある。

;システムアーキテクチャの分類
Mark Gautam Kumar と Eberhardt Rechtinによれば、システムアーキテクチャは以下のように分類される:
*製造システム
*社会システム
*ソフトウェアおよび情報技術システム
*統合的システム（インターネット、高度道路交通システム、防空システムなど）

;情報システムのシステムアーキテクチャ
情報システムのシステムアーキテクチャは、通常、ITとビジネスの双方に精通した人々が作成する。システムアーキテクチャを作成する人々を**システムアーキテクト**と言う。彼らは組織の事業計画や事業目標を理解し、それを要素に分解しそれを実現するために、複数のIT技術を分析・比較した中から、適切な組み合わせ方を提案する。システムアーキテクトは、どのようなシステムが物理的にどの程度の負荷に耐えうるかについてもかなり詳細に知っていなければならない。

システムアーキテクチャは、ハードウェア・ソフトウェア・ネットワーク・運用プロセスまでを含めたシステム全体の「最上位の設計図」であり、その中で**ソフトウェアアーキテクチャ**がアプリケーションのコード構造やデータ処理といった「論理的な内部設計」を担い、**[[コンピュータ・アーキテクチャ|コンピュータアーキテクチャ]]**がCPUの命令セットやメモリ階層といった「ハードウェア単体の物理的な動作原理」を担うという包含関係にある。つまり、システムアーキテクトが「どのようなハードとソフトを組み合わせてビジネス要件を満たす全体像を作るか」を描くのに対し、その内側の詳細として、コンピュータアーキテクチャは「物理的な計算能力の基盤」を、ソフトウェアアーキテクチャは「その上で動く論理的な機能の構造」をそれぞれ定義していると言える。なお、システムアーキテクチャが担うシステムの構成要素には、サブシステムが含まれうる。多くの場合、構成要素間の関係はインタフェースも記述し、環境（外界、特にユーザー）との関係・インタフェースも記述する。

## 背景
デジタルコンピュータの発明以前から、電子工学などの工学では「システム」という用語を普通に使っている。しかし、デジタルコンピュータが登場し、ソフトウェア工学が新たな分野として発展すると、ハードウェアとソフトウェア、およびそれら全体を区別する必要が生じてきた。プログラム可能なハードウェア、すなわちコンピュータのハードウェアはソフトウェアが無ければ何もできないし、ソフトウェアもハードウェアが無ければ何もできない。しかし、ハードウェアとソフトウェアが揃えば無数のタスクを実行できる。このため、コンピュータやソフトウェアを扱う工学分野（および通信などの工学）では、「システム」という用語が「有益な機能を実行するのに必要な全要素（つまりハードウェアとソフトウェア両方）を含むもの」と再定義された。

その結果、それらの工学分野ではシステムと言えばプログラム可能なハードウェアとその上のプログラムを一般に指すようになった。そして、システム技術者はソフトウェアとハードウェア両方を含む完全な機器を扱う者と定義され、より実用的に言えば、機器の（ソフトウェアとハードウェア間のインターフェイスを含む）全インターフェイスを扱う者と定義され、さらに言えば特に機器とそのユーザーとのインターフェイスを扱う者となった。ハードウェア技術者は程度の差はあってもほぼハードウェアだけを扱い、ソフトウェア技術者もソフトウェアだけを扱う。システム技術者はソフトウェアとハードウェアが整合するかどうかに気を配り、システムと外界（ユーザー）との相互作用に気を配る。

システムアーキテクチャは、ハードウェア要素とソフトウェア要素を組み合わせたシステムの設計を可能とする。よいアーキテクチャは一種の分割手法（あるいはアルゴリズム）であり、各部分はきれいに分割されて他の部分との境界や相互作用が明確化される。このような分割によって各部分の設計と実装をほぼ独立して並行に行うことが可能となる。また、よいアーキテクチャはユーザーの要求との対応も明確である。

## 主なシステム構成とデプロイメントモデル
システムアーキテクチャは物理的な配置やインフラの観点から以下のように分類できる。

* オンプレミス - 自社でデータセンターやサーバー機器を保有・管理する構成。物理的なセキュリティやハードウェアのカスタマイズ性が高い反面、調達リードタイムや維持コストがかかる。
* クラウドコンピューティング - AWS、Azure、Google Cloudなどのサードパーティが提供するリソースを利用する構成。IaaS/PaaS/SaaSがある。

* ハイブリッドクラウド / マルチクラウド: オンプレミスとクラウド、あるいは複数のクラウド事業者を組み合わせて、リスク分散やコンプライアンス要件を満たす設計。

* エッジコンピューティング - IoTデバイスや工場のセンサーなど、データを生成する場所（エッジ）の近くで処理を行う構成。通信遅延の短縮や帯域幅の節約を目的とする。

## システムレベルの品質特性と設計考慮点
ソフトウェアアーキテクチャがコードの保守性や再利用性を重視するのに対し、システムアーキテクチャは以下の非機能要件をハードウェア・ネットワーク・運用の組み合わせで実現する。

* 冗長化: 電源、サーバー、ネットワーク回線を二重化し、単一障害点（SPOF）を排除する設計。
* 災害復旧: 地震や火災に備え、物理的に離れた地域（リージョン）にバックアップサイトを構築する計画。
* スケーラビリティ
** スケールアップ: CPUやメモリを増強してハードウェア単体の性能を上げる。
** スケールアウト: サーバーの台数を増やして負荷分散装置（ロードバランサー）で処理を振り分ける。
* 通信遅延（レイテンシ）や帯域幅の上限、データセンターの電力容量や冷却能力など、物理法則やファシリティに基づく制約の管理。

## 参考文献


 

## 関連項目
*エンタープライズアーキテクチャ
*システム工学
*ソフトウェアアーキテクチャ
*コンピュータアーキテクチャ
*ソフトウェア工学
*要求分析 
*ANSI/IEEE 1471-2000 (ISO/IEC DIS 25961)
*The Open Group Architecture Framework (TOGAF)
*システムアーキテクト試験

## 外部リンク
*Principles of system architecture
*
*