Hitory
参考
まず全体の流れから見てみて。
時代 ~年代 キーワード
─────────────────────────────────────────────────────
LAMP時代 ~2005 静的・シンプル・1サーバー完結
Web2.0時代 2005~2010 Ajax・動的・UGC爆発
クラウド夜明け 2008~2013 仮想化・スケールアウト・API
コンテナ革命 2013~2018 Docker・マイクロサービス・CI/CD
混沌の現代 2018~ K8s・サーバーレス・IaC・何でもあり
LAMP時代(〜2005年頃)
[ ブラウザ ]
↓ HTTP
[ Apache ] ← Linux上で動く
↓
[ PHP ] ← リクエストのたびにHTML生成
↓
[ MySQL ]
Linux + Apache + MySQL + PHP の4つの頭文字。 これが「LAMP」ね。
- サーバーは物理1台(でかい箱)
- デプロイ = FTPでファイル上書き(!)
- スケールしたければもっと高いサーバー買う(スケールアップ)
- セッション・状態・全部そのサーバーに依存
シンプルだけど、逆に言うと「サーバー落ちたら終わり」だった笑
Web 2.0 の波(2005〜2010年頃)
YouTubeやGmailが登場して「ページ遷移しないUI」が求められ始めた。
Before: ボタン押す → ページ全体リロード → 白くなる → 表示
After: ボタン押す → こっそりサーバーと通信 → 部分更新
↑
Ajax
(Asynchronous JavaScript and XML)
- jQuery(2006)が流行って JS 書くのが楽になった
- Ruby on Rails(2004〜)が「設定より規約」で爆速開発を実現
- ユーザーが投稿・生成するコンテンツ(UGC)が爆発
- → DBが激重になる問題が顕在化
クラウド夜明け(2008〜2013年頃)
物理サーバー買うのしんどすぎ問題を解決したのが AWS(2006〜)。
Before(物理時代):
需要急増 → サーバー発注 → 1ヶ月待つ → 届く → 設定 → やっと対応
After(クラウド時代):
需要急増 → API叩く → 5分でサーバー増える
仮想化技術(VMware等)のおかげで1台の物理サーバーを複数の「仮想サーバー」に分割できるようになった。
同時期に起きたこと:
| 出来事 | 意味 |
|---|---|
| NoSQL登場(MongoDB, Redis等) | RDBだけじゃなくなった |
| 水平スケールの一般化 | 安いサーバーをたくさん並べる発想 |
| APIエコノミー | サービス同士をAPIで繋ぎ合わせる |
| DevOpsという概念 | 開発と運用を一緒にやろうよ |
コンテナ革命(2013〜2018年頃)
Docker(2013)の登場が全てを変えた。
仮想マシン(VM):
┌─────────────────┐
│ アプリ │
│ OS(ゲスト) │ ← まるごとOSが乗る → 重い・遅い
│ ハイパーバイザ │
│ OS(ホスト) │
└─────────────────┘
コンテナ:
┌─────────────────┐
│ アプリ │
│ 必要なものだけ │ ← OSカーネルは共有 → 軽い・速い
├─────────────────┤
│ OS(ホスト) │
└─────────────────┘
Dockerの何がすごかったかというと:
「自分のMacで動いたのに本番で動かない」問題が消えた
コンテナに環境ごと詰め込むから、どこでも同じ動作が保証される。
で、コンテナが増えすぎた→ Kubernetes(K8s, 2014/Google)登場。
コンテナが100個あったとして...
「どのサーバーで動かす?」
「落ちたら自動で復活させて」
「負荷に応じて増やして」
↑
全部K8sがやってくれる
マイクロサービス化(同時期)
Dockerが普及すると「機能ごとにサービスを分割しよう」という思想が広まる。
LAMP時代(モノリス): マイクロサービス時代:
┌──────────────────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ │ │ 認証 │ │ 決済 │ │ 通知 │
│ ログイン機能 │ └──┬───┘ └──┬───┘ └──┬───┘
│ 決済機能 │ │ │ │
│ 通知機能 │ ┌──▼─────────▼─────────▼──┐
│ 検索機能 全部 │ │ APIゲートウェイ │
│ 推薦機能 一緒 │ └─────────────────────────┘
│ ... │
└──────────────────┘
メリット:独立してデプロイ・スケールできる デメリット:ネットワーク越しの通信が増えて複雑化←これが混沌の源泉の一つ
😵 混沌の現代(2018〜)
いろんな解決策が生まれすぎて、逆に選択肢が爆発した。
モダンスタック選択肢の森
フロントエンド: React / Vue / Next.js / Nuxt / Svelte / Astro / ...
バックエンド: Node / Go / Rust / Python(FastAPI) / ...
DB: PostgreSQL / MySQL / MongoDB / Redis / DynamoDB / ...
インフラ: AWS / GCP / Azure / Vercel / Fly.io / ...
コンテナ管理: K8s / ECS / Cloud Run / ...
サービス間通信: REST / GraphQL / gRPC / tRPC / ...
CI/CD: GitHub Actions / CircleCI / ArgoCD / ...
監視: Datadog / Prometheus + Grafana / ...
IaC: Terraform / Pulumi / CDK / ...
認証: 自前 / Auth0 / Cognito / Clerk / ...
さらにサーバーレスという概念も登場。
従来:
サーバーを「常に」起動しておく → アクセスなくても課金
サーバーレス(例: AWS Lambda):
リクエストが来たときだけ関数が起動 → 使った分だけ課金
※「サーバーがない」わけじゃなく「サーバーを意識しない」
まとめ:なんで混沌になったの?
問題が生まれる → 解決策が登場 → 解決策が増えすぎる → 新たな複雑性
↑ │
└───────────────────────────────────────────────────────┘
これの繰り返し
| 時代 | 主な「困った」 | 生まれた解決策 |
|---|---|---|
| LAMP | サーバー高い・遅い | クラウド・仮想化 |
| クラウド | 環境差異・デプロイ大変 | Docker・コンテナ |
| コンテナ | コンテナ多すぎ管理できん | Kubernetes |
| K8s | 設定多すぎ複雑すぎ | サーバーレス・マネージドサービス |
| 全体 | 選択肢多すぎどれ選ぶの | ……(現在進行形) |