はじめに
英語の技術動画で学ぶシリーズ。今回は ByteByteGo から、アプリを動かす土台の3つの選択肢の比較。
Big Misconceptions about Bare Metal, Virtual Machines, and Containers (7:02)
動画が立てる問いは「アプリをデプロイするとき、3つのうちどれを選ぶべきか」。それぞれの仕組み・利点・欠点を順に見ていき、最後に「正解は1つではない」と締める。
なお、タイトルにある「誤解(Misconceptions)」が何を指すのかは、字幕からは明示されていない。本編は素直な3者比較になっている。
3つの違いを一言で
まず全体像。違いは「何を仮想化するか」と「何を共有するか」に集約できる。
| ベアメタル | 仮想マシン | コンテナ | |
|---|---|---|---|
| 何か | 物理サーバーを1テナントで専有 | 物理マシンをソフトで模倣したもの | アプリと依存物をまとめた軽量パッケージ |
| 仮想化するもの | しない | ハードウェア | OS |
| 仕切り役 | なし | ハイパーバイザー | コンテナエンジン |
| 他テナントと共有するもの | なし | ハードウェア(CPUコア含む) | ハードウェア+ホストOS |
| 主な強み | 性能・セキュリティ | コスト・スケールのしやすさ | 軽さ・起動の速さ・持ち運びやすさ |
| 主な弱み | 高い・管理が大変・スケールしにくい | ノイジーネイバー、CPU脆弱性 | OSレベルの脆弱性にさらされやすい |
以下、それぞれを分解する。
ベアメタル:物理サーバーを丸ごと使う
「1台の物理サーバーを1つの利用者だけで使う」形 → bare metal(シングルテナント)。動画は3つの中の「元祖(granddaddy)」と呼び、かつてはすべてのサーバーがこれだったと説明する。
ハードウェアもその上のソフトウェア構成も完全に自分で制御できる。ハードの性能を限界まで引き出したいアプリに向く。
ベアメタルの2つの利点:物理的に隔離されている
物理的に分かれていることで、2つの利点がある。
| 利点 | 中身 |
|---|---|
| 1. 隣の影響を受けない | 同じハードを使う他テナントの負荷で自分の性能が落ちる問題 → noisy neighbor problem が起きない |
| 2. 最高レベルのセキュリティ | CPU設計上の欠陥を突いて隣のテナントから秘密を盗む攻撃 → side-channel attack の影響を受けない |
厳しいセキュリティ・コンプライアンス・規制要件を満たす必要がある場合、ベアメタルしか選択肢がないこともあると動画は言う。
欠点は「高い・管理が大変・スケールしにくい」。新しいハードの調達には時間がかかり、うまく運用するには有能なチームが要る。
仮想マシン:ハードウェアを仮想化する
物理コンピュータをソフトで模倣したもの → virtual machine。この仕組みを virtualization(仮想化)と呼ぶ。1台の物理マシン上で多数の仮想マシンが動く。
動画が示す層構造は下から次のとおり。
アプリ(テナントごと)
ゲストOS(仮想マシンごとに1つ)
ハイパーバイザー(= 仮想マシンモニター)
ホストOS
物理ハードウェア
ハイパーバイザーがハードの上に抽象化の層を作り、複数のOSを並べて動かせるようにしている。
補足:ベアメタル・ハイパーバイザーとは
動画が「ベアメタルのハードウェアと混同しないように」と注意している用語。
- ホストOSを介さず、ハイパーバイザーが直接ハードを制御する方式 → bare metal hypervisor
- ハードを完全に制御できるので性能が高い
- ただし、対応するハードウェアは高価
先ほどの層構造から「ホストOS」の段が抜けた形、と捉えると分かりやすい。
仮想マシンの利点と欠点
今は数コア・数GBの汎用型から、数百コア・TB級メモリの高性能型まで、ほぼどんなサイズでも選べる。
| 利点 | 欠点 |
|---|---|
| 安い。多数でハードを共有するのでリソース利用率が上がる | ノイジーネイバー問題を受けうる。リソースを食う隣と同居すると性能が落ちる |
| スケールしやすく、組織として柔軟になる | 同じ物理CPUコアを共有するので、CPU設計の欠陥を突く攻撃に弱い(例:Meltdown、Spectre) |
| 高機能な仮想化ソフトなら、動作中のVMを止めずに別の物理マシンへ移せる |
コンテナ:OSを仮想化する
アプリと、それが依存するライブラリ・フレームワーク・ランタイムをまとめた軽量で自己完結したパッケージ → container。動画は containerization を「仮想化の軽量版」と位置づける。
仮想マシンとの違いは、ハードではなくOSそのものを仮想化する点。
コンテナ(それぞれ隔離されたアプリ環境)
コンテナエンジン
ホストOS
物理ハードウェア
仮想マシンの図と比べると、「ハイパーバイザー+ゲストOS」の段が「コンテナエンジン」1つに置き換わっている。
コンテナの利点と欠点
| 利点 | 欠点 |
|---|---|
| 必要なものが全部まとまっているので、どこでも動く(ポータブル) | 同じホストOSを共有し、隔離はOSレベルの仕組みに頼っている |
| VMより軽く、少ないハードで動く。1台に載せられる数がVMよりずっと多い | そのため、OSレベルのより広い種類の脆弱性にさらされる |
| ホストOSのネイティブなプロセスとして動くので、起動がずっと速い |
まとめると、大規模にデプロイ・保守しやすいのがコンテナの強み、セキュリティ面が弱みという整理。
組み合わせ:VMの中でコンテナを動かす
コンテナは仮想マシンの中でも動かせる。
動画が挙げる理由は、攻撃対象領域(attack surface)を減らしてセキュリティを高められるから。これは「柔軟性とセキュリティのトレードオフ」だと説明している。
その先の選択肢としてサーバーレスとエッジコンピューティングにも触れているが、「別の動画で扱うかも」で終わっており、本編では深掘りしていない。
まとめ
動画の結論は「システムデザインはトレードオフ。この3つも同じで、唯一の正解はない」。
動画の内容から判断基準を引き出すと、次のようになる。
- 性能を限界まで出したい・規制が厳しい → ベアメタル
- コストとスケールの柔軟さを取りたい → 仮想マシン
- 軽さ・起動の速さ・大量デプロイを取りたい → コンテナ
- コンテナの手軽さとVMの隔離を両方ほしい → VMの中でコンテナ
サーバーレスとエッジコンピューティングとの比較は、また別途まとめたい。
覚えておきたい英単語
| 英語 | 意味 | 動画での使われ方 |
|---|---|---|
| single tenant | 1つの利用者だけが専有する形態 | A bare metal server is a physical computer that is a single tenant only. |
| noisy neighbor problem | 同居する他テナントの負荷で自分の性能が落ちる問題 | It is not affected by the noisy neighbor problem. |
| side-channel attack | CPUなどの設計上の欠陥を突いて情報を盗む攻撃 | Side-channel attacks like Meltdown and Spectre are some well-known examples. |
| hypervisor | 仮想マシンを管理し、ハードの上に抽象化層を作るソフト | Running on top of the host operating system is a special piece of software called a hypervisor. |
| attack surface | 攻撃されうる箇所の範囲 | It provides better security by reducing the possible attack surfaces. |