はじめに
10月からWeb開発エンジニアに転職したそらです!
今回は、ITインフラのしくみと技術がしっかりわかる教科書を読んだので、まとめてみます!
ITインフラを構成するハードウェアとソフトウェア
ハードウェア
- エンドユーザー端末(PCやスマホなど)
- サーバー
- ストレージ
- バックアップシステム
- ネットワーク
ソフトウェア
- OS
- ミドルウェア
ITインフラの形態
オンプレミス
物理的なサーバ、ストレージ、ネットワーク機器などを使って、インフラ環境を構築する形態のこと。
| メリット | ・データの完全な管理が可能で秘匿性が高い ・完全なカスタマイズが可能 ・ベンダーロックイン(特定ベンダーの製品に依存しない)のリスクがない |
| デメリット | ・初期コストが高額 ・運用保守の手間が大きい・リソース調達の柔軟性が低い |
パブリッククラウド
AWSやAzureなどのクラウドサービスを利用してインフラ環境を構築する形態のこと。
| メリット | ・初期コストがかからず、すぐに利用可能 ・リソースを柔軟に調達でき、スケーラビリティが高い ・運用保守を担う手間が少ない |
| デメリット | ・ベンダーに依存するリスクがある ・機密データの取り扱いには不向き ・カスタマイズに限界がある |
プライベートクラウド
クラウド基盤を構築して、仮想化技術を用いてリソースをプール化して利用する形態のこと。
| メリット | ・セキュリティが高く機密データの取り扱いに適している ・柔軟なカスタマイズが可能 ・オンプレに比べてリソース利用が柔軟 |
| デメリット | ・専門性が必要で基盤構築と運用コストが高い ・ベンダーによるサポートが十分に得られない |
ハイブリッドクラウド
オンプレミスとパブリッククラウドを組み合わせた形態のこと。
ネットワークの種類
| 名称 | 説明 |
|---|---|
| LAN (Local Area Network) |
限られたエリア内でのネットワークのこと |
| WAN (Wide Area Network) |
広範囲にわたるエリアをカバーするネットワークのことで、一般的な利用は、物理的に離れた場所にあるオフィスや施設間の接続 |
| Internet | 世界中の様々なネットワークが互いに連結された最大規模のネットワークのこと |
| Mobile Network | 持ち運び可能なデバイスが無線通信を利用してアクセスするためのネットワークのこと |
ネットワークの接続構造
ネットワークトポロジーは、ネットワークにおいて物理的または論理的な接続構造のこと。
ネットワーク内の各デバイスをノードと呼び、リンクによって互いに接続されている。
バス型
すべてのデバイスが単一の通信路に接続され、全てのデバイスで同じ通信路を共有する。
設置コストが低いが、問題が生じた時に全体に影響が出るリスクがある。
リング型
各デバイスがリング状に接続され、データは一方向に流れる。
データ転送が非常に効率的に行われるが、一部が故障した場合に修復までデータの流れが止まる可能性がある。
スター型
ネットワーク内の全てのデバイスが一つの中心点に接続される。
一つの接続が失われても他のデバイスに影響が出ない。
メッシュ型
ネットワーク内のデバイスが複数の他のデバイスと直接・間接的に接続される。
非常に高い冗長性と信頼性を提供する。
ネットワークを構成する要素
ルーター
ネットワーク間でデータを転送する。
異なるネットワーク同士を繋ぐ重要な役割を担う。
ハブ
受信したデータを接続されている全てのデバイスに送信する。
効率が悪く、データの衝突が発生しやすい。
スイッチ(スイッチングハブ)
受信したデータを特定のデバイスにのみ送信する。
ハブよりも効率が良くなり、ネットワーク全体のパフォーマンスが改善する。
L3スイッチ
デバイス間のデータを転送するだけでなく、異なるネットワーク間の転送も行う。
高度なデータ転送と内部ルーティングを可能にする。
OSI参照モデルの第3層からきている。
リピーター・ブリッジ
信号を増幅して、伝送距離を伸ばす。
2つの異なるネットワークセグメントを接続し、それらの間でデータを転送できる。
ファイアウォール
不正アクセスや攻撃から守るためのセキュリティメカニズムのこと。
外部ネットワークと内部ネットワークの境界で不正な通信をフィルタリングしている。
ロードバランサー
ネットワークトラフィックを効率的に分散し、サーバーの負荷を均等にする。
リクエストを分散させることで、パフォーマンスと信頼性を向上させている。
ネットワークアダプター
様々なデバイスをネットワークに接続するために使用するハードウェアのこと。
ネットワークプロトコル
通信のための共通規則のことで、データの送信形式や宛先の指定方法、エラー検出などがソフトウェアや物理的なレベルで定められている。
階層化
ネットワークの各機能を階層別に分離することで、複雑な通信プロセスを理解しやすくし、効果的に管理する手法。
複数のプロトコルを階層化して組み合わせたものは、プロトコルスタックと呼ばれる。
TCP/IP
最も広く利用されているプロトコルスタックである。
通信プロセスを4層に分けてモデル化されている。
| 階層名 | 役割 | 主なプロトコル |
|---|---|---|
| アプリケーション層 | ユーザとネットワーク間のインタフェースを提供する | HTTP, SMTP, DNS, FTPなど |
| トランスポート層 | エンドツーエンドの通信を提供する | UDP, TCP, QUICなど |
| インターネット層 | IPアドレッシングとデータのルーティングを行う | IP, ICMPなど |
| ネットワークインタフェース層 | データの受け渡し、フレーム化とエラー検出を行う | イーサネット, ARPなど |
OSI参照モデル
通信プロセスを7層に分けてモデル化されている。
| 階層名 | 役割 |
|---|---|
| アプリケーション層 | ユーザとネットワーク間のインタフェースを提供する |
| プレゼンテーション層 | データ表現形式を変換する |
| セッション層 | 通信セッションを管理する |
| トランスポート層 | エンドツーエンドの通信を提供する |
| ネットワーク層 | IPアドレッシングとデータのルーティングを行う |
| データリンク層 | データの受け渡し、フレーム化とエラー検出を行う |
| 物理層 | 物理的な接続と電気信号を扱う |
TCP/IP階層モデルとOSI参照モデルの関係
| OSI参照モデル | TCP/IPモデル | 目的 |
|---|---|---|
| アプリケーション層 プレゼンテーション層 セッション層 |
アプリケーション層 | ユーザがネットワークサービスにアクセスできるようにする |
| トランスポート層 | トランスポート層 | エンドツーエンドのデータ転送を信頼性のあるものにする |
| ネットワーク層 | インターネット層 | データを確実に転送するために、IPアドレッシングとルーティングを行う |
| データリンク層 | ネットワークインタフェース層 | 隣接するデバイス間でのデータ送受信を管理する |
| 物理層 | - | データを物理的な信号に変換し、伝送する |
IPアドレスとサブネットマスク
IPアドレス
ネットワークに接続する各デバイスに割り当てられるユニークな番号のこと。
IPv4は、8ビットごとにピリオド区切りされた32ビットで表す。
IPv6は、16ビットごとにピリオド区切りされた128ビットで表す。
プライベートIPアドレス
個々の管理範囲内で割り当てて利用できるIPアドレスのこと。
IPv4では、10.0.0.0~10.255.255.255, 172.16.0.0~172.31.255.255, 192.168.0.0~192.168.255.255はプライベートアドレスとして予約されている。
グローバルIPアドレス
インターネット上でデバイスを一意に識別するために使われる、ユニークなIPアドレスのこと。
サブネットマスク
IPアドレスを効率的に管理・使用するための仕組み。
ネットワーク部とホスト部に分けるために使用する。
CIDR表記
サブネットマスクをより簡潔に表す方法。
プレフィックス長(ネットワーク部のビット数)で表す。
ポート番号
ネットワーク上でデータを送受信する際に特定のプログラムやサービスを識別するための数字。
主にトランスポート層で使用され、TCPやUDPのプロトコルで用いられる。
0 ~ 1023はシステムポート、1024 ~ 49151はユーザポート、49152 ~ 65535は動的/プライベートポートとなっている。
| ポート番号 | トランスポート | サービス |
|---|---|---|
| 0 | UDP/TCP | Reserved |
| 22 | TCP | SSH |
| 25 | TCP | SMTP |
| 53 | UDP/TCP | DNS |
| 80 | UDP/TCP | HTTP |
| 123 | UDP/(TCP) | NTP |
| 143 | TCP | IMAP |
| 443 | UDP/TCP | HTTPS |
| 3306 | TCP | MySQL |
| 3389 | UDP/TCP | Windows RDP |
主要なアプリケーションプロトコル
HTTP/HTTPS
インターネット上でWebページやその他のデータを安全に送受信するためのプロトコル
SMTP
電子メールの送信・メールサーバ間での転送に使用されるプロトコル
SSH
インターネット上で安全にコンピュータを遠隔操作するためのプロトコル
NTP
コンピュータやデバイスがインターネットを介して正確な時刻を同期するためのプロトコル
FTP
インターネット上でファイルを送受信するためのプロトコル
DNS
Webサイトの名前をコンピュータが理解できるIPアドレスに変換するシステム
DHCP
ネットワーク内のデバイスに自動的にIPアドレスなどの情報を提供し割り当てるためのプロトコル
ネットワークのセキュリティ
SSL/TLS
通信を暗号化し、インターネット上でデータを安全に送受信する。
VPN
手元のデバイスと通信先のネットワークの間に仮想的なトンネルを作り、このトンネルを通してデータを送受信する技術。
DIS, IPS
IDSは侵入検知システムで、IPSは侵入防止システムのこと。
ネットワークyあコンピュータに対する攻撃や不正アクセスを検出・防御するためのセキュリティツール。
ファイアウォール
外部からの不正なアクセスや攻撃からネットワークを保護し、内部のデータが不正に外部へ漏れないようにする。
DDos攻撃対策
特定のWebサイトやネットワークサービスを意図的に過負荷状態にし、正常な利用者がアクセスできないようにする攻撃を防ぐ対策。
ネットワークセグメンテーション
ネットワークをより小さなネットワークに分割する手法のこと。
セキュリティの強化にも役立つ。
ミドルウェア
OSとアプリケーションの中間に存在するソフトウェアの総称。
アプリケーション開発やシステム運用を効率化することができる。
Webサーバー
クライアントからのリクエストに従い、WebサイトやWebアプリを提供するためのソフトウェア。
Apache HTTP Server, Nginx, Microsoft IISなどがある。
アプリケーションサーバー
アプリケーションサーバソフトウェアとWebアプリケーションフレームワークがある。
アプリケーションサーバソフトウェアは、WebサーバへのインタフェースやWebアプリの実行環境を提供する。
Webアプリケーションフレームワークは、Webアプリ開発を簡易にするための共通機能(ライブラリやツール)を提供する。
| 言語 | アプリケーションサーバソフトウェア | フレームワーク |
|---|---|---|
| Java | ApacheTomcat, JBoss | Spring Framework, Apache Struts |
| JavaScript | Node.js | Express, Koa |
| Ruby | Puma, Unicorn | Ruby on Rails |
データベースサーバー
DBMSとも呼ばれ、データの検索、追加、更新、削除などのデータベース操作を行う。
ロードバランサ
複数のサーバに負荷を分散させるためのソフトウェア。
サーバー仮想化
物理的なリソースを抽象化し、複数の独立した仮想環境として利用すること。
仮想マシン型仮想化
仮想化ソフトウェアでCPU・メモリ・ストレージなどのハードウェアリソースを仮想的に分割する。
それぞれを仮想マシン(VM)として扱い、個別にOSをインストールして仮想サーバーとして使用する方法。
-
ホスト型
既存のOS上に仮想化ソフトウェアをインストールして使用する方式。
仮想化環境の構築がしやすいが、オーバーヘッドが生じてしまう。 -
ハイパーバイザー型
サーバーハードウェアに直接仮想化ソフトウェアをインストールして使用する方式。
仮想化環境の構築に専門的な知識が必要になるが、多くのリソースを割り当てるためオーバーヘッドが生じない。
コンテナ型仮想化
OSのカーネルを共有しながら、OSの管理しているリソースを仮想的に分割して、それぞれを独立した環境(コンテナ)として使用する方式。
各コンテナで、ホスト名・ネットワークスタック・ユーザID・プロセスIDなどの名前空間を独立して持てる。
-
システムコンテナ
コンテナ内に通常のOSと同様にシステムプロセスやアプリが複数起動している。
仮想サーバーと同様の使い勝手を実現できる。 -
アプリケーションコンテナ
コンテナ内に単一のアプリやサービスが起動している。
ライブラリなどの依存関係を含む環境をカプセル化することで、異なるOS環境でも実行できる。
コンテナオーケストレータ
コンテナが起動する複数の物理サーバーおよび仮想サーバーをクラスタ化し、そのクラスに対して複数のコンテナを自動配置したり、運用を自動化したりするためのソフトウェアのこと。
- 自動デプロイメント
- 自動スケーリング
- 自動リカバリー
Docker/LXD
Docker
コンテナ型仮想化技術を使って、構築したアプリをデプロイ・実行するためのソフトウェア。
Webアプリが組み込まれたDockerイメージをダウンロードして起動するだけでWebサーバが瞬時に立ち上がる。
原則的に、1つのコンテナで1つのアプリだけを動かすように作られており、WebアプリとDBのように複数のアプリを稼働させる場合は、それぞれ別のコンテナで動かす必要がある。
そのためアプリケーションコンテナと呼ばれる。
Docker Compose
複数のDockerコンテナを効率的に管理・運用するためのツール。
YAML形式の設定ファイルにサービス・ネットワーク・ボリュームなどのコンポーネントを記述することで一連のコンテナを簡単に作成、起動、管理することができる。
開発チームで環境設定を共有し、同一の環境で開発を進めることができる。
LXD
LXC(Linuxコンテナ仮想化技術)をベースに開発されたコンテナ型仮想化環境マネージャー。
スタンドアロンで動作するOSを中心としたコンテナ実行環境になる。