はじめに
スケールアップとスケールアウトはどちらもサーバーの処理能力を増強させる方法です。
大規模サービスに関わる上では両者を正しく理解する必要があります。
そこでこの記事では、スケールアップとスケールアウトの違いと使い分けについてまとめます。
スケールアップとは
スケールアップはサーバーのスペック(CPUのコア数、メモリ容量など)を増強することで処理能力を向上させる方法です。
「垂直スケーリング」とも呼ばれます。
メリット
- 既存のサーバーの設定を変更するだけなので、比較的カンタンに対応可能
- アーキテクチャ全体の変更なども必要ない
- 1台のサーバーを管理すればよいため、運用もカンタン
デメリット
- ハードウェア上の制約もあるため、サーバーのスペック増強は無限にはできない
- サーバーがダウンするとサービス全体の稼働が止まってしまう
- サーバーのスペック増強のために再起動が必要な場合、サービスの一時停止(ダウンタイム)が発生する可能性
- 高性能な機器が求められるため、コストも増大
スケールアウトとは
スケールアウトはサーバーのスペックではなく台数を増やすことで処理能力を向上させる方法です。
「水平スケーリング」とも呼ばれます。
メリット
- サーバーの数に上限はないため、理論上は無限に処理能力を向上させられる
- 1台のサーバーがダウンしても他のサーバーを使って稼働し続けられるため、可用性にも優れている
- 各サーバーは普通の性能で良いため、コスト面でもスケールアップより優れているケースが多い
デメリット
- サーバー間のデータ整合性の確保や負荷分散のための複雑な設定や対応が必要
- ロードバランサーによるトラフィック分散
- セッション管理
- データベースレプリケーション
- 多数のサーバーを管理しなくてはならないため運用も複雑
スケールアップとスケールアウトの使い分け
前述のようにスケールアウトの方が拡張性は高い分、変更や運用は複雑です。
ただしAWSを使えばこうした運用の手間はかなり軽減できます。
- EC2,ECS: 「Auto Scaling」機能を利用可能
- RDS: 読み取り専用のレプリカの作成、Auroraの自動スケーリングなど
- Lambda: リクエストが増えると勝手にスケールアウトしてくれる
このように現代ではクラウドが複雑な運用を一手に引き受けてくれるため、大規模アプリケーションにおいてはスケールアウトが主流と言えます。
スケールアウトが適切な場面
一方でデータベースへの書き込みや大量データのバッチ処理などはスケールアップが適しています。
複数のサーバーに書き込み処理を分散させてしまうと、以下の問題があるからです。
- データの同期や整合性の確保
- トランザクションの管理が煩雑になる
- ネットワーク通信の増加によるパフォーマンスの低下
このように、一概にスケールアップとスケールアウトのどちらが良いということではなく、状況や用途に応じた使い分けが必要です。
まとめ
- スケールアップ:サーバーのスペックを増強
- スケールアウト:サーバーの台数を増やす
- スケールアップはシンプルだけど限界あり
- スケールアウトは複雑だけど拡張性・可用性に優れている
スケールアウトが優れているとばかり思っていましたが、用途による使い分けが重要であることを再認識しました。
参考資料