どうも、えんつかです。
コンピューターに関する基礎知識を色々インプットしてますが、あれアウトプットしていないとふと思ったので、少しづつしていきます!
過去の自分に向けて分かり易く説明するつもりですが、完全に自己満になる可能性があるのでご容赦下さい。すみません!!
【初心者向け】WEBサーバーの基本【ざっくり解説】
バックエンド業務がメインになのでWEBサーバーについて学んでおります。
本日、参考に執筆するのがこちら!
サーバーの基本!
ざっと読んだ感想としては、入門書として最適かと思います!全体を広く浅く学べ、急に深く説明をしないので、これから深く学んでいく方の前段として良いのではないかと思いました!
特に私の方で大切だなぁと思ったのを次の様にピックアップしてまとめてみました。
- サーバーとは【サーバー基礎】
- WEB3層構想【WEBアプリ構成の基礎】
- プロトコルの役割【通信基礎】
- OSI参照モデルとプロトコル【通信方法の概念理解】
- 冗長化・障害対策【障害リスク軽減】
- ファイアウォールとは【セキュリティ】
オエッ。全部書いて説明していくのに吐き気が。。。ざっくりいきます!!笑
まとめてやろうとするからいけないんですね。こまめに区切ってやる方が良いですね。
サーバーとは【サーバー基礎】
サーバーとは、ネットワーク上のクライアントに色々なサービスや情報を提供するコンピュータですね。
WEBブラウザがクライアント、WEBサイトのコンテンツを持って提供している方がサーバーですね。サーバー/クライアントで構成されるシステムを「クライアント/サーバーシステム」という様です。クライアントからのこのWEBページみたい!の様な「リクエスト」に対して、サーバーがゴニョゴニョ処理して「レスポンス」としてWEBページだったりを返して動作するわけですね!
サーバーには役割毎に色々種類があるわけですね〜提供するサービスによって使い分けられます。例えば、
- WEBサーバー:WEBページがみたい!
- WEBアプリケーションサーバー:WEBアプリを利用したい!
- DNSサーバー:ネットに接続したい!
- FTPサーバー:ファイルをアップしたい!
- DBサーバー:データベースにデータを入れたい!
です!各コンピューターに分けて構成もOK。1つのコンピューターにまとめて構成もOKです。
用途が決まったら動作させるためにサーバーソフトウェアをインストールする必要があります。
- WEBサーバー:Apache、nginx…
- WEアプリケーションサーバー:Tomcat…
- DNSサーバー:BIND…
- FTPサーバー:vs-ftpd…
- DBサーバー:MySQL…
Apache、nginxあたりはおなじみのWEBサーバー用のオープンソフトウェアですね。インストールしてサーバーとしての準備を行います。
WEB3層構想【WEBアプリ構成の基礎】
そしたら、WEBアプリはどの様なサーバー構成となっているかですが、WEBアプリは、「WEBサーバー」「WEBアプリケーションサーバー」「DBサーバー」のWEB3層構成と呼ばれる組み合わせで利用されています。
それぞれのサーバーの役割は次の通り。
- WEBサーバー:静的なファイルのやり取り
- WEBアプリケーションサーバー:動的なファイルのやり取り
- DBサーバー:データを登録・管理して必要に応じてやり取り
LPの様なWEBサイトであれば、WEBサーバーでOK。
ログインとかクライアントによって提供する情報を変える必要があれば、WEBアプリケーションサーバー。
ユーザーを登録して、ユーザー管理する必要があるならDBサーバー。
この様に構成されているわけですね〜。
RubyやJavaですとWEBアプリケーションサーバーを構築してWEBアプリを構成する様ですが、普段私が触っているPHPはApacheがWEBアプリケーションサーバーとしての機能を代替してくれるので、構成せずにWEBアプリを作成することができちゃうようです。知らんかった。
プロトコルの役割【通信基礎】
さてさて、話が飛んでプロトコルの話になります。
プロトコルとは、「通信方法」とか「通信するためのルール」と言われています。分かり易い例だと、日本語とか中国語とか英語のようなものです。日本語は日本語を喋れる人でないと伝わらないですよね。英語、中国語もそうですよね。
コンピューターのネットワークには様々なプロトコルが存在しており、情報を伝える為に、通信方法が変わっているです。
なぜか。
そうすることで、それぞれ別々に動作するようにし、お互いに干渉しあわないようにする為にしています。また、分離しているのでトラブルシューティングにも対応し易くなります。
私たちが普段利用するWEBサイトはhttpやhttpsとみますが、あれもプロトコルの1種なんです。
OSI参照モデルとプロトコル【通信方法の概念理解】
OSI参照モデルとは、ISOが規定したコンピューターの通信機能を階層構造に分けて整理したモデルです。コンピューターのプロトコルの集まりみたいなものです。
レイヤー7:アプリケーション層 => HTTP…
レイヤー6:プレゼンテーション層 => HTTP…
レイヤー5:セッション層 => HTTP…
レイヤー4:トランスポート層 => TCP, UDP
レイヤー3:ネットワーク層 => IP…
レイヤー2:データリンク層 => イーサネット
レイヤー1:物理層 => イーサネット
私は上からアプセトネデブと覚えてます。どうでも良いか。
=> の右側に書いたのが主要なプロトコルです。
例えば、WEBアプリをイメージします。
クライアントからサーバーに回線を通してリクエストを送ると、クライアント側からサーバーのレイヤー1にまずアクセスして、徐々に上のレイヤーに上がっていき、レイヤー7のアプリケーション層にリクエストが届きWEBアプリを動作させます。
サーバー側からは、クライアント側から貰ったリクエストに対して、レイヤー7のアプリケーション層からどんな情報かをレイヤー6 => 5 => 4…とどんどん低レイヤー側に移りレイヤー1の物理層から、クライアント側のレイヤー1へレスポンスします。そこからどんどんまたレイヤーが上がって最終的にレイヤー7の自分がみているWEBアプリ上に応答が返ってきます。これがリクエスト/レスポンスの全体像です。
なお、クライアント/サーバー間のレイヤー1でやり取りされるデータは、レイヤー2〜7から渡されたデータがまとまった状態でやり取りされます。例えば、どこのサーバーにこのデータを送るのかとか(これはレイヤー3のIPで付与されます)、などが梱包されています。
これを説明しだすと長くなるので割愛!気が向いたら書きます!
冗長化・障害対策【障害リスク軽減】
ほむほむ。なんとなくクライアント/サーバーのやり取りが見えてきましたかね。
そしたら、次は冗長化・障害対策についてです。
サーバーは普段私たちが利用するノートPCとは違い常に稼働してサービスを提供することが望まれます。なので、シャットダウンとかできず常に稼働しなければならないといものが大半かと思います。その為、障害リスクの軽減は超重要。具体的にはどのような冗長化(複数で構成しておいて、どこかで障害発生しても、その他のシステムが生きていれば、システムの稼働事態に影響を及ぼさないようにする仕組み)にするか検討が必要です。
次が冗長化するための手段一覧です!色々手段があるわけです。
チーミング
【チーミング(ボンディング)】:複数の物理NIC(ネットワークカード)を1つの論理NICにまとめる技術。1つの論理NICとは外から見たら1 つのIPアドレスのように見せるということ。
【フォールトトレランス】:物理NICを冗長化(複数で利用)するモード。通常は1つのNICで通信を行う。そのNICが壊れたとして、冗長化していた別のNICで通信できるようにする。
【ロードバランシング】:物理NICを冗長化しつつ帯域拡張も図るモード。通常は2つのNICで通信を行う。仮に1つのNICが壊れたとしても、もう片方のNICで続けて通信が行えるようにする。
RAID
【RAID】:複数のストレージドライブ(SSD/HDD)を1つのドライブに見せて高速化と冗長化を図る技術。
【RAID1(ミラーリング)】:複数のドライブに対して同じデータをコピーする技術。1台のドライブが壊れたとしても、別の全く同じデータをもったドライブがあるので問題なし!
【RAID5(分散パリティ)】:データとパリティを複数のドライブに持つことで、信頼性とディスク容量の効率化を実現。パリティとは、データを修復するためのデータ。
【RAID1 + 0(ミラーリング + ストライピング)】:ストライピングとミラーリングの技術を持って構成する方法。ストライピングは、複数のドライブにデータを分散させて保持させる方法で高速化を図るもの。
クラスタリング
【クラスタリング】:複数のサーバーをネットワークで接続し、全体で1つのサーバーのように見せる技術。障害が発生した場合、クライアントから受け付けるIPアドレス(仮想IPアドレス)を別のサーバーに付け替えて処理を継続する。
【共有ストレージ構成】:複数のサーバーで共有するストレージを用意してデータの整合性を確保する方法。
【データミラー構成】:ストレージを全く同じ内容で複製(レプリケーション)し、データの整合性を確保する方法。
サーバー負荷分散技術
【サーバー負荷分散技術】:複数のサーバーに通信を振り分け処理負荷を分散する技術。システム全体の処理能力の向上や、耐障害性の向上が図れる。
【DNSラウンドロピン】:DNSを利用して負荷分散を実現。クライアントからの問い合わせに対して登録してあるIPアドレスを順番に振り分ける方式。
【サーバータイプ】:サーバーにインストールしたソフトウェアを利用して負荷分散を実現する方法。
【アプライアンスサーバータイプ】:負荷分散装置がサーバーの状態を監視して負荷分散を実現する方法。
広域負荷分散技術
【広域負荷分散技術】:いわゆるAWSでいう〇〇リージョンを複数持たせる技術。各サイトの状態を監視し、その結果に応じて返答するIPアドレスを変えることによって負荷分散を実現する。
色々な冗長化・耐障害対策がありますが、提供するサービス内容・サービス規模・お財布事情を総合的に判断して、どのような設計にするか考える必要があります。
ファイアウォールとは【セキュリティ】
ファイアウォールとは、IPアドレスやポート番号を元に通信を許可したり、遮断したりする機能。ポート番号は、通信方法(プロトコル)毎に振り分けられている番号です。HTTPなら80。HTTPSなら443。SSHなら22などのようにです。この番号に対して通信をどうするかがファイアウォールといいます。
ファイアウォールには、セキュリティーポリシーというのがあり、セキュリティーポリシーで、どのポート番号の通信を許可・遮断するかを決定します。
インバウンド通信(ネットから公開サーバー)は基本的には拒否し、必要最低限の通信だけ許可するようにします。(例:HTTP➡︎許可 HTTPS➡︎許可 その他➡︎拒否)
アウトバウンド通信(公開サーバーからネット)は基本的には許可し、必要最低限の通信だけ拒否します。(例:全ての通信➡︎許可)
はいっ!ざくっと要所をまとめました!
この辺りは基礎的で重要な所なのでぜひ覚えておきたいですね!
またアウトプットしていきます!
ほんじゃーね〜