🔥

インフラ設計

2025/02/16に公開

ずっとアプリ開発をしていたので、インフラって存在しているのが当たり前だと思っていました。
インフラ設計ではそもそもどんなことをやるのか知らず自分がプロジェクトで急にインフラ系の知識が必要になり焦っているので、頭の中の整理がてら記事にしたいと思います。

インフラ設計工程

インフラ設計では可用性設計、性能設計、監視設計を実施します。

可用性設計

高可用性とは、High availabilityと言われ、システムをいつでも使える状態にすることを指します。言い換えるとシステムの完全停止を防ぐための設計を行うことです。
システムに異常が発生することを障害といいますが、障害が発生する前提で考えた時にシステムが完全停止しない対策が必要となります。
対策としては冗長化が一般的です。

冗長化とは、予備や余剰を持ち同程度の性能や能力を保持するという意味です。
機器や構成に予備を持って障害発生時には予備を使い、システムの稼働を継続できるようにしておくことを指します。

冗長化例:
・電源やディスク等の危機において、予備を準備しておき障害発生時に切り替えて使用する(冗長化電源、RAID)
・サーバにおいて、予備を準備しておき障害発生時に切り替えて使用する(クラスタ)
・ネットワーク機器や回線において、予備を準備しておき障害発生時に切り替えて使用する(ボンディング、リンクアグリゲーション)

それぞれの対策について
冗長化電源(リダンダント):
RAID:ディスクの障害発生時にデータが消失しないような仕組み
クラスタ:複数のコンピュータがまとまり、1つのコンピュータとしてふるまう。
ボンディング:複数のNICをまとめて、1つのNICとしてふるまう。
リンクアグリゲーション:複数の回線をまとめて、1つの回線としてふるまう。

性能設計

性能は、機器の能力だけでなく、システムの処理速度やデータの転送速度等も含まれます。
システム全体の性能はアプリケーションだけでなくインフラ分野での性能も重要です。

性能設計とは、システムで使用されるハードウェア、ソフトウェアについて実際に利用される際の負荷や性能不足時の拡張方針等を考慮して、アプリケーションとともに求められる性能を満たす構成を考えることです。

希望要件としては主に下記のようなものがある
・システムの利用人数
・ピーク時や平常時のアクセス数
・使用するソフトウェアの動作要件
・障害時の性能

希望要件から下記のような項目を検討する
・使用するCPUのクロック周波数や物理コア数
・メモリ容量
・内臓ディスクの読み書き速度、容量
・NIC、回線の転送速度
・OS、サーバソフトウェアの動作速度

CPU選定
 機器が動作する上で不足がないようにCPUを選定する必要があります。機器の役割ごとにCPUを決めるのが一般的です。
選定の指標として参考になるベンチマークを掲載している以下の非営利団体があります。
Standard Performance Evaluation Corporation(SPEC)があるので、そのサイトを指標として参考にしてもよい。
https://www.spec.org/

メモリ選定
 種類、規格、枚数などの要素がありますが、機器が動作する上で不足がないように決める必要があります。機器の役割ごとに容量を決めるのが一般的です。

ディスク選定
 HDD,SSDのどちらを使用するのか検討します。データの読み書きに即だが求められる時はSSD、データの読み書きは速度が求められずアクセスも頻繁にされない場合は、HDDを使用する等、読み書きの速度やアクセス頻度も検討要素です。

NIC選定
 回線の選定結果によりNICの選定は決まります。回線の選定では、回線を流れるデータ量が多ければ光ファイバーを使用する、データ量があまり多くない場合は、メタル線を使用する等、一般的にはデータ量を基準として検討します。
 建物内で100m以上距離が離れる場合は、メタル線ではなく、光ファイバーを使用する。

OSやサーバソフトウェア
 OSに不要なリソースを停止し、余分な負荷を下げ、サーバに余分な処理をさせないように検討します。また、必要なリソースが優先的に処理されるように各種設定などを調整する必要があります。

拡張性
 性能が不足した場合の拡張方法についても検討が必要です。
 必要に応じて、性能をつけ足したり減らしたりできる状態を拡張性と呼びます。足りなくなった場合の方法として、機器を新たに追加(スケールアウト)、機器の部品を追加または入れ替えによって性能を向上(スケールアップ)があります。

セキュリティ

ITシステムを構成するあらゆるハードウェアやOS/ミドルウェアを含むソフトウェアに対して開発するための設定を行いますが、それらが仇になって脆弱性リスクをあげることもあります。

・様々なネットワークプロトコルの許可
・多くのウェルノウンポート番号の解放
・アクセス権限の制限を緩くする
・システム作業ごとにユーザを用意しない

セキュリティ設計について、
・サーバに負荷をかけ停止に追いやる脅威
・ハードウェア・OS・ミドルウェアの脆弱性を狙う脅威
・不正なプログラムによる脅威
・システムの設定を起因とする脆弱性を狙う脅威
に対応するために、以下のようなセキュリティ対策が挙げられます。

脅威 セキュリティ対策
サーバに負荷をかけ停止に追いやる脅威 ファイアウォール
ハードウェア・OS・ミドルウェアの脆弱性を狙う脅威 セキュリティパッチ適用、OS更新、ファームウェア更新
不正なプログラムによる脅威 ウィルスソフト導入
システムの設定を起因とする脆弱性を狙う脅威 ユーザの使い分け、使用するポート番号の変更、使用しないポート番号を閉じる。ファイルへのアクセス権限を設定し、特定のユーザしかアクセスできないようにする

監視設計

監視項目としては以下のようなものがあります。

・システムログ、アプリケーションログ(ログの内容)
・死活監視
・CPU、メモリ、ディスクの使用率
・稼働しているプロセス
・Webサイト表示

監視方法は一般的には監視ソフトウェアで一括管理します。
監視ソフトウェアは以下の2種類の方法で、監視対象を監視します。

・機器それぞれの状態や設定をまとめたデータベースを使用して監視する。
・OS、アプリケーションがログファイルに情報を書き込み、監視ソフトウェアで読み取って監視する

取得タイミング
・ポーリング:マネージャーからクライアントへ定期的に情報を取りに行くことを指す
・トラップ:クライアントはSNMPというプロトコルを使い、マネージャーへ情報を送ります。これをトラップorトラップ通知と呼びます。トラップはあらかじめトリガーを設定することで、条件成立時にトラップ通知します。

Discussion