xxxさんの備忘録

xxさんのブログです.xxさんはネカマです.

『新人エンジニアのためのインフラ入門』chapter5~8

##chapter5 物理サーバ

 


●コンピュータとは
5大装置ー演算、制御、記憶、入力、出力

 

 

●演算と制御
・CPUとは
演算と制御を担当するCPUになる。
CPUの役割は「プログラムを実行すること」に当たる。
CPUは制御装置と演算装置から成り立っているが、
制御・演算する際にはメモリ(主記憶装置)上の命令やデータをそのまま使用するのではなく、
CPU内部にあるレジスタという高速なメモリを使用する。
レジスタとメモリ間にはキャッシュメモリというCPUとメモリ(主記憶装置)間の性能差を埋める目的のメモリも存在する。

 

レジスタ
メモリを低速メモリとするならば、レジスタは高速メモリと表現することができる。
CPUはメモリから命令を取り出すと命令レジスタというレジスタに保存します。
さらに命令実行に必要なデータも別レジスタに保存し命令を実行する。

 

キャッシュメモリ
CPUはメモリからデータを取得するが、CPUの速度と比較するとメモリの速度は遅くボトルネックになる。
そのためメモリとの間にキャッシュメモリという中速メモリをCPU内部に持っておき、
使用頻度の高い命令やデータを配置しておくことで毎回低速なメモリまで見に行かなくて済むようにしている。

 

 

●記憶
・主記憶装置
「CPUが直接アクセスできる記憶装置」を指す。メインメモリやメモリと呼ばれる。
CPUは基本的にHDDから直接データを読み込むことはできない。
そのため、まずCPUにプログラムを処理させたい場合にはメモリに展開する必要がある。

DRAM
コンデンサを使用している。電荷がたまっていれば"1"なければ"0"を表現する。
つまり1つのコンデンサは1bitを表現できるが、メモリ容量分のコンデンサも必要となる。
時間とともにコンデンサ電荷は放電するため、定期的に再充電する必要がある。

SRAM
トランジスタを使用していて、1bitを表現するために6つのトランジスタを必要とし、
回路が複雑なため集積度を上げるのが難しく価格面でのデメリットがある。
DRAMよりも読み書き性能が良くリフレッシュの必要もなく消費電力も少なく済む。

・補助記憶装置
「CPUが直接アクセスできない記憶装置」を指す。代表的なものではHDD、DVD-ROM、テープ、ディスクストレージ
などを指す。
メモリはコンピュータの電源供給がなくなると同時に内容が失われるために保存したいものは補助記憶装置に
置いておく必要がある。

 

 

●入力・出力
コンピュータの代表的な入力装置としてはキーボードやマウス、出力装置としてはディスプレイなどが存在している。
また、ネットワークインターフェースのように入力と出力を兼ね備えた入出力装置もある。
ネットワークインターフェースに届いたデータはデバイス上のレジスタ(CPUのレジスタとは別のもの)
に保存する。その後レジスタからメインメモリに複製される
(ここまでくるとOSやアプリケーションがネットワーク上のデータを見ることができる)。


BIOS
ハードウェアの基本的な制御をするために、ハードウェア内部にはファームウェアと呼ばれるソフトウェアが組み込まれている。
BIOSファームウェアの一種であり、コンピュータの基本的な制御をするためにコンピュータ内部に組み込まれている。
コンピュータの電源を入れると、BIOSのプログラムが実行される(OSが起動されるわけではない)。
つまり、BIOSはハードウェアのチェックやOSの起動を担当をしている。OSに制御が移るまでがBIOSの出番である。
また、最近ではUEFIという仕組みがBIOSを置き換える形で浸透している。

 

 

##chapter6 OS


osは大まかに部類すると「サービスプログラム」、「言語プロセッサ」、「制御プログラム」に分類される。

 

1,サービスプログラム
コンピュータ利用者を手助けするプログラムを「サービスプログラム」と呼んでいる。

 

2,言語プロセッサ
人間が作成する「ソースプログラム」を言語プロセッサでプログラムへと変換することが行われる。

3,制御プログラム
ハードウェアやソフトウェアを制御するプログラムを指す。
制御プログラムが存在することで個々のプログラムはハードウェア管理から解放され、
プログラム開発の効率が上がるというメリットがある。
ハードウェア処理を行う場合には制御プログラムに仲介をお願いをする必要がありデメリットになる。

制御プログラムは一般に「カーネル(kernel)」と呼ばれている。
カーネルの代表的な役割には以下がある
・ハードウェアの抽象化
・メモリ管理
・タスク管理
・データ管理

 

 

●ハードウェアの抽象化
物理サーバには様々な種類が存在している。
アプリケーションの視点で見たときにハードウェアの細かい仕様から解放されることを意味する。
逆に抽象化されていることで、カーネル以外からハードウェアを制御することは基本的にできないようにもなっている。
そのため、OS(カーネル)の機能を呼び出すために「システムコール」が使われる。

 

 

●メモリ管理
複数の実行と終了を繰り返しているためにメモリ空間は虫食い状態になっている。
空き総量は十分でも連続したメモリ領域を確保できずにプログラムの読み込みに失敗することもあり得る。

1,仮想記憶
仮想記憶ではプログラムが実行されるたびにOSが仮想的なメモリを生成するが、
プログラムに対しては物理メモリではなくこの仮想メモリが割り当てられる。
このようにすることで、物理メモリが虫食い状態であっても領域を有効活用することができ
プログラムに対してはあたかも連続した領域を確保したかのように見せることができる。
また、メモリ空間が分離されているためにプログラムが暴走した際にも他のプログラムに影響を与えることがなくなる。

 

 

2,ページアウトとページイン
最近のOSではプログラム全てのページではなく必要なページだけが物理メモリに読み込まれている。
この必要か否かの判定は常に実施されており、不要と判断されたページは物理メモリからHDDに追い出される。
この追い出しを「ページアウト」と呼ぶ。
また必要とされたページはハードディスクから物理メモリに読み込まれるがこれを「ページイン」と言う。

物理メモリが不足している際にはこのページアウトとページインが頻繁に発生することで動作が遅い状態になり注意が必要である。

 

 

●タスク管理
コンピュータにおいて処理する仕事の最小限の単位をタスクと呼びOSがこのタスクを管理している。
(cf.現場ではプロセスと呼ばれることも多い)

 

●データ管理
(揮発してしまうため)メモリの内容をコンピュータに内蔵されたハードディスクやストレージ装置などの補助記憶装置に書き込む必要があり、これらの読み書きをOSが管理している。
(cf.OSはファイルシステムといった仕組みを使って管理する)

 

●コラムー構築とテスト
テストでは設定値が正しいかの確認から設計書通りの動作になっているかも確認する。
システムが正常通り動作するかを確認する「正常系テスト」と併せて「異常系テスト」も行う。
ex)障害を想定してサーバやネットワーク装置からケーブルを除去したり、
プロジェクトによってはサーバの電源モジュールを抜いたりをする。

 
##chapter7 ミドルウェア


アプリケーションとOSの中間的な処理を行うソフトウェア。

●Web、AP、DBの役割

・現在のシステムにおける一般的なシステム構成は「クライアント・サーバシステム」である。
また、Webページも「Webシステム」というWebブラウザを通して利用できるクライアント・サーバシステムの一つ。
「クライアント」と「サーバ」のように役割が非対称になっており、クライアント端末に専用のアプリケーションを
インストールしなくてもWebブラウザのみでシステムを利用できる
(対称の役割を持つ端末が相互に通信することをP2Pと呼ぶ)。

Webの3層構造がWeb、AP、DBに特化した機能を持つサーバ群である。

・webサーバ
主にクライアントからのリクエストに対して「静的コンテンツを見せること」と
「APサーバに動的コンテンツを要求し、送ってきた結果を見せること」という二つの役割がある。

 静的コンテンツ-誰が見ても常に同じ内容を表示するもの
 動的コンテンツー見る人や時間などによって内容が変わるもの


・APサーバ
APサーバはWebサーバから受けたリクエストを元にJavaPHPなどで作成されたアプリケーションを実行して
動的コンテンツを生成する。


・DBサーバ
DBサーバとはデータベース管理システムが動作しているサーバを指す。
DBサーバはストレージに新たなデータを書き込んだり、必要な情報を引き出したり更新したりする。
データを操作する際には、APサーバのリクエストに従って「SQL」と呼ばれるデータベース言語を実施し、
その結果をAPサーバに返す。

 DBサーバには性能を求められることも多く、物理サーバ自体も多くのCPUやメモリが搭載され、
インフラエンジニアにもより効率良くデータを抽出するための「チューニング」という作業が求められる。

・Web3層構造
Web3層構造が採用される理由には「セキュリティの高さ」、「管理のしやすさ」があげられる。

●コラム「運用引継ぎ」
開発担当から運用担当への引継ぎを「運用引継ぎ」と呼ぶ。
インフラ領域においては「サーバ起動・停止」、「バックアップ、リストア」などが該当する。


##Chapter8 ミドルウェア(システム運用)

 


・システム運用とは何か
運用においては「システム障害は起きるもの」として準備しておくことが重要である。
準備には様々な観点のものがあるが「単一障害ポイントをなくし、バックアップを定期的に取得し、障害検知のために監視すること」が基本になる。

●運用ミドルウェア
・バックアップ
1、バックアップ対象の確定
2、対象データの更新頻度に合わせたバックアップタイミングの決定

・バックアップデータの保存には別領域ディスクやLTO媒体(DtoT)がよく使用される。

・バックアップにおける「バックアップ対象の状態確認」→「バックアップ先の確認」→「バックアップ」
→「バックアップの成否確認」といった一連の処理はバックアップ専用のミドルウェアを介して運用者が扱いやすい
ひとまとまりになっており、これらは「バックアップジョブ」と呼ばれる。

・ジョブ管理

システムの運用中には定期的な定型作業が発生する(ex.ログの取得、サーバの再起動)。
このような作業を手動で1つ1つ実行するのは大変なためジョブ運用が行われる。

ジョブ運用ではバックアップなどの処理を実行するジョブ(スクリプトやコマンド)を設定し、
それぞれのジョブの順序やスケジュールを設定する。

・監視(Zabbix,Nagios,JP1)

・ノード監視
サーバやネットワーク装置、ストレージやLTO装置等の機器が稼働しているかを監視する。
(具体的には、SNMPやICMPといったプロトコルを使用して対象機器がネットワークの中で正常に動作しているかを確認する)
・リソース監視
それぞれの機器のリソース使用状況を監視する。
サーバであればCPU、メモリ、ディスクなどのリソースの使用状況を監視し、
設定した閾値を超えた場合に異常として検知する。
(ディスクがいっぱいで書き込み容量不足や、動作が遅くなる前の対策)

・プロセス監視
プロセスの起動状態を監視する。プロセスが何らかの原因で停止した場合に異常として検知する。
(サーバは起動しているが、サービスが止まっている状態への対策)

・ログ監視
OSのシステムログやミドルウェアのログを監視し、異常が出力された場合に検知する。
異常がログに出力されていても気が付かなければ対応が遅れるため。
(異常として検知するメッセージは設計の中で決める必要がある)

・高可用クラスタ
サーバを停止しないようにする手段としてサーバ冗長化がある。
サーバの冗長化とは「同じ機能を持つサーバを複数台用意する」ことになる。
このサーバの冗長化に使用されるミドルウェアが「高可用クラスタ」である。

冗長化すると「サーバが不慮の障害で停止した場合」などに自動で他のサーバへ切り替えて機能を提供する。
平時から現用系と待機系の両系が稼働している場合をactive/activeクラスタ構成、
平時は現用系のみ機能し障害時に待機系へ切り替わる場合をactive/standbyのクラスタ構成と呼ぶ。