システム構成

# システム構成
企業のシステム（発電所の制御システム・航空会社の予約システム）は停止すると、社会が大混乱！
→ システムを止めない工夫をしている

＊　**ミッションクリティカル**：　停止すると社会にダメージを与えるシステム

## デュアルシステム
二つのシステム：同じ処理、処理結果をチェック
→ 障害発生時　：　片方のシステムで処理
![デュアルシステム.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/84cdc054-abef-ff08-1675-ec3d556afbe0.jpeg)

## デュプレックスシステム
二つのシステム（現在系と待機系）で処理をする
→ 障害発生時　：　待機系に処理を移行する
![デュプレックスシステム.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/ba28c248-bc50-6c76-ec07-d5ef710175dd.jpeg)
待機系のシステムの待機方法
- **ホットスタンバイ**　：　暖かくスタンバイ（現用系と同システムを起動してスタンバイ）
- **コールドスタンバイ**　：　冷たくスタンバイ（現在系と違う処理をしてスタンバイ）

### システムの処理形態
- **バッチ処理**：　データを一定期間貯める　→　まとめて処理　例）給与計算
- **オンラインリアルタイム処理**：　データの発生と同時に処理する形態　　例）ATM

### バックアップサイト
災害に備える　→　システムを遠隔地に用意、システム待機状態の種類↓
- **ホットサイト**：現用系と同じように稼働・ネットワークを通してデータを常に更新
- **ウォームサイト**：　ハードウェアを準備・定期的にデータを搬入
- **コールドサイト**：　バックアップサイトのみ準備するもの

### 緊急事態の行動計画
- **BCP**（Business Country Plan）：　緊急事態に備えた、事前の行動計画
- **RTO**（Recovery Time Objective）：　中断　→ 復旧までの時間
- **BCM**（Business Country Management）：　BCPを管理すること
## クラスタシステム（クラスタ：ブドウの房）
複数のサーバーを一台のサーバーに見せかける技術（目的ごとに2構成あり）
→ サーバーが房のようにぶら下がっているイメージ

### 1. HAクラスタ（High Availability Cluster）
■ 目的
高可用性　→　高信頼化

**負荷分散型クラスタ**　　　　　　　　　　　　　　　　**フェールオーバ型クラスタ**
　![負荷分散型クラスタ＿フォールオーバー型クラスタ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/4f28c25a-9bda-c556-0b89-7e67623ae051.jpeg)
■　データベースをクラスタで分散させたときの整合性をとる方法
-  負荷分散型クラスタ：　**レプリケーション**（迅速な複製）
-  フェールオーバー型クラスタ
    -  **共有ディスク方式**　：　現用系サーバ＆予備系サーバ　→ 一つのディスクを共有
    -  **ミラーディスク方式**　：　現用系サーバのデータ　→ 予備系サーバに同期

### HPCクラスタ（High Performance Computing Cluster）
■ 目的
高性能化

![HPC.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/ad839f86-d443-f8ce-1917-62296de7fde9.jpeg)

## グリットコンピューティング
ネットワークを通じて、複数のコンピュータを連携させることで、仮想的に1台のすごいコンピュータをつくる技術

















# クライアントサーバーシステム
ネットワークを通じて、複数のコンピュータが組み合わさって動く
→ 組み合わせ方は色々
**集中処理**　：　昔、主流、ホストコンピュータへ処理集中
**分散処理**　：　次、主流、多くのコンピュータで処理分散
**クライアントサーバーシステム**　：　今、主流、処理を**クライアント（サービスを要求する）**・ **サーバー**（サービスを提供する）で分ける
![クライアントサーバーシステム.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/584ee070-18f5-0034-208a-fb953f8fca1d.jpeg)


## 3層クライアントサーバシステム
プレゼンテーション層・ファンクション層・データベース層（3層構造）
Webサイト・サーバーを使ったシステム構成
![プレゼンテーション_ファンクション_データベース層.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/debbec27-2eab-23e5-37c5-e307175b28a5.jpeg)
＊　大規模なWebサイトの構築　＝　Webサーバー　＋　APサーバーを置く
（メリット）
・　負荷の軽い静的なコンテンツ(会社情報)へのリクエスト→ Webサーバーで処理
・　負荷の重い動的なコンテンツ(商品の絞り込み)へのリクエスト→APサーバーで処理


## ストアドプロシージャ
クライアントサーバーシステム　→ DBへのアクセス：SQL文の負荷大
→ **ストアプロシージャ**　：　利用頻度が多い命令をサーバーに用意
→ ネットワーク負担軽減

# シンクライアントシステム（Thin:薄い）
クライアントの機能を薄くする（クライアントにデータ残らない＝情報漏洩）

## VDI（Virtual Desktop Infrastructure）
シンクライアントシステムを実装する仕組み
（サーバー）　　　　　　　　　　　（クライアント）
デスクトップ環境を作る　　　←   　　　サーバーに接続してデスクトップ画面を操作

＊　**NAS**（Network Attached Strage）：ネットワーク（LAN）に接続して使うファイルサーバ専用機
→ ファイル単位で共有できる
　
# サーバーの仮想化
コンピュータの中に複数の仮想的な（なんちゃって）サーバーを動かすこと
## サーバー仮想化のやり方
|||
|:--|:--|
|**ホスト型**|ホストOS上：仮想化ソフトウェア動かす　→ 別のゲストOS動かす|
|**ハイパバイザ型**|ハードウェア上：仮想化ソフトウェア（ハイパバイザ）動かす　→ 複数のゲストOS動かす|
|**コンテナ型**|OS上：管理ソフトウェア（コンテナエンジン）動かす　→　実行環境（コンテナ）動かす|

■ 概要図
　　　**ホスト型**　　　**ハイパバイザ型**　　　**コンテナ型**
![サーバ仮想化_形態.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/98cdb40c-79b3-8716-7cfe-13e42a9d4a56.jpeg)
※ **ライブマイグレーション**
仮想サーバを停止せず、別の物理サーバへ移動させる技術

## システムの処理能力を向上させる方法
- **スケールアップ**：　サーバーのCPU・メモリを増強する（サーバー自体を強化）
- **スケールアウト**：　サーバーの台数を増やす
































# RAIDと信頼性設計
## RAID（Redundant Arrays of Inexpensive Disks）
複数のハードディスクを組み合わせて、ハードディスクのアクセス・信頼性を上げる
|種類|ハードディスクにデータを書き込む方法|
|:--:|:--|
|**RAID0**|１データ：複数のディスクに分けて書く（**ストライピング**）→ 並列にアクセスするので高速|
|**RAID1**|ディスク2台：同じデータを書く（**ミラーリング**）→バックアップなので信頼性高|
|RAID3|ストライピング　＋　**パリティ**（故障時、データ修復の情報をディスク1台に書く）|
|**RAID5**|データ・パリティ　→ ストライピング（最低3台HDD必要）|

## 信頼性設計
世の中「諸行無常」いつか壊れる
→ 「壊れても大丈夫」なシステムにする

### フォールトトレランス（Fault Tolerance） Tlerance:許容
壊れても、必要な機能は維持するシステム
例）　小惑星探査機：　4基エンジン搭載　→ 実際必要なのは3基（1基故障してもOK）

### フェールセーフ（Fail Safe）
壊れたら、安全重視！
故障したときの設計）信号機：赤になる　　ストーブ：自動的に火が消える

### フェールソフト（Fail Soft）
壊れても、継続重視！　一部のシステムを止めて運転を続ける（**縮退運転**）

しかし、頻繁に壊れるのもよくない。。。。。

### フォールトアボイダンス（Fault Avoidance） Avoidance:回避
故障そのものを回避するシステム
例）　部品の性能高める、定期的に保守点検

### フールプルーフ（fool proof）＝　エラープルーフ
ヒューマンエラーをさせないシステムにする
例）　電子レンジ→扉が空いた状態では動かない
























# システムの性能評価
色々なシステムの構成があり、どのシステムが良いのかわからない...
→ システムの性能を評価する指標がある

|指標|説明|
|:--|:--|
|**スループット**|単位時間でできる仕事（ジョブ）量|
|**レスポンスタイム（応答時間）**|処理依頼を終える　〜　処理結果の出力が始まる（オンラインリアルタイム処理で使用）|
|**ターンアラウンドタイム**|処理依頼を始める　〜　処理結果の出力が終わる（バッチ処理で使用）|

![レスポンス_ターンアラウンドタイム.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/5a8b05c4-4b71-6a1a-3eb6-ad91abf2c09d.jpeg)

## ベンチマークテスト
プログラムを実行　→ 処理性能を評価
■ どの数値を指標にするかで種類が分かれる
|種類|内容|
|:--|:--|
|整数の計算|**SPECint**|
|浮動点少数の計算|**SPECfp**|
|トランザクションの処理|**TPCベンチマーク**|

## CPUの性能指標
### MIPS（Million Instructions Per Second）
「1秒ごとに命令する数」で性能を評価
20MIPS のCPU：2000万個/1秒の命令ができる
100MIPS のCPU：10000万個/1秒の命令ができる
→ 後者のCPUが処理性能は高い

### 命令ミックス
CPUの命令は種類によってバラバラ（MIPSはどの命令を基準に計算するか？）
→ よく使われる命令をセットにする（**命令ミックス**）
（命令ミックス）
|命令種別|実行時間（μs）|出現頻度（％）|
|:--|:-:|:-:|
|整数演算命令|1.0|50|
|移動命令|5.0|30|
|分岐命令|5.0|20|

１×０．５＋５×０．３＋５×０．２　＝　３．０マイクロ秒　（命令ミックスを実行するのにかかる時間）
→ MIPSで表す（1秒間に何百万回実行できるか？）
１（秒）　/３．０（マイクロ秒）
→　１/3.0　× 10⁻⁶ ＝　333,333.333・・・・
→ 約０．３MIPS























# システムの信頼性評価
## システムの信頼性を評価するための項目
→ **RASIS（ラシス）**
|頭文字|指標|説明|具体的な指標値|
|:--:|:--|:--|:--:|
|R|Reliability(信頼性)|正常に動いてること|MTBF|
|A|Availability(可用性)|使いたい時に使えること|稼働率|
|S|Serviceability(保守性)|故障時、復旧しやすいこと|MTTR|
|I|Integrity(保全性)|情報に一貫性があること|ー|
|S|Security(安全性/機密性)|情報漏洩、不正使用を防止すること|ー|

## 評価するための指標
### 信頼性の指標
#### MTBF（Mean Time Between Failures）：平均故障間隔
故障間隔が大きい　＝　信頼性高い
→ 予防保守（劣化部品を故障前に交換）　＝　MTBF 長
### 保守性の指標
#### MTTR（Mean Time To Repair）：平均修理時間
修理時間が短い　＝　保守性高い
→ 遠隔保守　＝　MTTR 短　（MTBF 長くなるとは限らない）
→ 保守センタを分散　＝　MTTR 短　（MTBF と関係はない）
### 可用性の指標
#### 稼働率：正常に動いている割合
100%に近い　＝　品質が高い
（求め方）
稼働率　＝　MTBF / MTBF ＋ MTTR （％）

### 複数システムの稼働率
直列システム　↔︎ 並列システム　＝　全体の稼働率は異なる
#### 直列システム
![稼働率_直列接続.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/8f2a9c92-f2fd-9813-c7dd-e9165ffc573e.jpeg)
（稼働状況）
|システムA|システムB|システム全体|
|:--:|:--:|:--:|
|●|●|●|
|●|✖️|✖️|
|✖️|●|✖️|
|✖️|✖️|✖️|

＊　全体が稼働　：　A・B稼働時のみ
→ 電気回路：直列つなぎ
→ **直列システムの稼働率　＝　稼働率A × 稼働率B**

#### 並列システム
![システム稼働率_並列システム.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/59c67fbb-5864-07b8-af91-74bbed7dffb6.jpeg)
（稼働状況）
|システムA|システムB|システム全体|
|:--:|:--:|:--:|
|●|●|●|
|●|✖️|●|
|✖️|●|●|
|✖️|✖️|✖️|

＊　全体が停止　：　A・B故障時のみ
→ 電気回路：並列つなぎ

（配列システムの稼働率）
→ 配列システムの稼働率　＝　１　ー　全体の故障率
→ 全体の故障率　＝　故障率A × 故障率B
→ 故障率A（B）　＝　１　ー　稼働率A（B）

**配列システム稼働率　＝　１　ー　（（１ー稼働率A）　＊　（１ー稼働率B））**

## バスタブ曲線
（故障の発生頻度と時間の関係）
風呂の形と似ている
![バスタブ曲線.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2746950/a3b436d0-e590-7994-ea79-641d634b58c5.jpeg)


||||
|:--:|:--:|:--|
|①|初期故障期間|導入初期：設計の欠点→故障率高くなる|
|②|偶発故障期間|突発的な故障→故障率は一定|
|③|摩耗故障期間|製品の寿命→故障率高くなる|