# 非機能要件の確認について
非機能要件とは「機能以外の要件」で、例えば、システムの稼働率、セキュリティレベルだったり性能、サポートするOSなどのことを指します。
下記にて代表的な部分を解説していきます。
項目によって特にインフラエンジニアの実装方針が変わってくるので、事前に確認しておく必要があります。
レベルとともに表していますが、基本的にレベルが上がれば上がるほど開発コストやメンテナンスコストが上がってくるため、予算に合わせて現実的なレベルを決めていきます。


## 稼働率
1つ目は稼働率です。
万が一、サービスが停止した場合どれくらいの時間で復旧が必要なのかというのを決めておきます。
求められる稼働率によってインフラであったりサーバ側の構成がかなり変わってくるため事前に確認が必要です。

<table>
  <thead>
    <tr>
      <th rowspan="2">稼働率</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>レベル0｜97.5%（許容ダウンタイム 18.0時間/月）</td>
    </tr>
    <tr>
      <td>レベル1｜98.0%（許容ダウンタイム 14.4時間/月）</td>
    </tr>
    <tr>
      <td>レベル2｜99.0%（許容ダウンタイム 7.2時間/月）</td>
    </tr>
    <tr>
      <td>レベル3｜99.5%（許容ダウンタイム 3.6時間/月）</td>
    </tr>
    <tr>
      <td>レベル4｜99.8%（許容ダウンタイム 1.44時間/月）</td>
    </tr>
  </tbody>
</table>

## 冗長化
2つ目は冗長化です。
稼働率と合わせて、冗長化するのかどうかも確認します。
冗長化とは、ざっくり説明すると予備のサーバーを動かしておき、障害が発生したり、負荷がかかった際にも、サーバーがダウンしないようにすることです。

<table>
  <thead>
    <tr>
      <th rowspan="2">冗長化</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>レベル0｜いずれのサーバーも非対応</td>
    </tr>
    <tr>
      <td>レベル1｜DBサーバーのみ対応</td>
    </tr>
    <tr>
      <td>レベル2｜すべてのサーバーを対応</td>
    </tr>
  </tbody>
</table>

## セキュリティレベル
3つ目はセキュリティレベルです。
個人レベルのシステムを作るのと大企業向けのシステムを作るのではやはり求められるセキュリティの要件が異なってくるので、制作するものであったりの制作するシステムを運営する会社によって
セキュリティレベルは変える必要があるため、事前に確認するようにしておきましょう。

<table>
  <thead>
    <tr>
      <th rowspan="2">機密性</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>レベル0｜個人情報のアクセス制限</td>
    </tr>
    <tr>
      <td>レベル1｜個人情報、社内非公開情報のアクセス制限</td>
    </tr>
    <tr>
      <td>レベル2｜個人情報、社内非公開情報、企業機密のアクセス制限</td>
    </tr>
    <tr>
      <td>レベル3｜個人情報、社内非公開情報、企業機密、国家機密レベルのアクセス制限</td>
    </tr>
  </tbody>
</table>

## 応答速度
4つ目は応答速度です。
レスポンスが速いにこしたことはないのですが、どれくらいの応答速度を目指す必要があるのか、目標値を確認しておきましょう。

<table>
  <thead>
    <tr>
      <th rowspan="2">レスポンス</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>レベル0｜平均応答時間が最大2秒目標</td>
    </tr>
    <tr>
      <td>レベル1｜平均応答時間が最大1秒目標</td>
    </tr>
    <tr>
      <td>レベル2｜平均応答時間が最大0.5秒目標</td>
    </tr>
  </tbody>
</table>

## スケーラビリティ
5つ目はスケーラビリティです。
スケーラビリティとは、利用負荷などのアクセスの増大に対応できる度合いのことです。

<table>
  <thead>
    <tr>
      <th rowspan="2">レスポンス</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>レベル0｜同時100人接続可目標</td>
    </tr>
    <tr>
      <td>レベル1｜同時1,000人接続可目標</td>
    </tr>
    <tr>
      <td>レベル2｜同時10,000人接続可目標</td>
    </tr>
  </tbody>
</table>

