スケールアップとスケールアウトの違いとは
スケールアップは
スケールアップとスケールアウトは、増やし方の方向が違う
アクセスが増えてサーバの処理が追いつかなくなったとき、増やし方は2通りあります。サーバ1台の性能を上げるのがスケールアップ、サーバの台数を増やすのがスケールアウトです。
どちらを選ぶかで、1台が故障したときに全体が止まるかどうかと、どこまで増やせるかが変わります。スケールアップは垂直スケーリング、スケールアウトは水平スケーリングとも呼びます。
スケールアップとは、サーバ1台の性能を上げる方法
スケールアップとは、いま使っているサーバ1台のCPUやメモリを増やし、1台あたりの処理能力を高める方法です。EC2のインスタンスタイプを、より性能の高いものに変えるのがスケールアップの例です。
性能を上げられる上限は、1台に載せられるCPUやメモリの量で決まります。クラウドでは、選べる最大のインスタンスタイプが上限です。サーバは1台のままなので、設定の変更先はいつも1か所です。
ただし、1台の構成を変えるため、変更の間はサーバを使えなくなることが多くあります。また、そのサーバが故障すると、処理能力がすべて止まります。
スケールアウトとは、サーバの台数を増やす方法
スケールアウトとは、サーバの台数を増やして処理能力を増やす方法です。1台あたりの性能は変えず、同じ性能のサーバを並べます。リクエストは、ロードバランサで複数台に振り分けます。
台数を増やすことで、1台の性能の上限を超えて処理能力を増やせます。1つの計算を多くの台数に分けると、計算を配る手間もかかります。その影響は、グリッドコンピューティングの記事で確かめられます。複数台に分かれているため、1台が故障しても残りの台数で処理を続けられます。ただし、処理できる量は故障した1台の分だけ減ります。
台数が増えると、どのサーバにリクエストを振り分けるかを管理する手間が増えます。サーバごとに違う情報を持たないような設計も必要になります。台数の調整を自動で行う仕組みが、Auto Scalingです。AWSでは、振り分けはELBが受け持ちます。
性能を下げる方向はスケールダウンと呼びます。台数を減らす方向はスケールインと呼びます。
同じ処理量を2通りの構成で比べる
スケールアップとスケールアウトの違いは、同じ処理量を目指す場合で比べるとはっきりします。1秒400件まで処理できるようにする例で比べます。
スケールアップは、いまのサーバを強いサーバ1台に置き換えます。スケールアウトは、同じ性能のサーバを4台に増やし、振り分けの仕組みで束ねます。
強いサーバ1台は、故障すると処理能力がすべて止まります。4台に分かれたサーバは、1台が故障しても残り3台で処理を続けられます。このとき処理できる量は、1秒300件に減ります。1か所の故障が全体の停止につながる箇所を、単一障害点と呼びます。サーバが単一障害点になるかどうかが、2つの構成の違いです。
メリット・デメリットを比べる
スケールアップとスケールアウトは、単一障害点・拡張の上限・変更中の稼働・運用の複雑さで違いがあります。
| 観点 | スケールアップ | スケールアウト |
|---|---|---|
| 単一障害点 | サーバが1台のため起きる | 複数台に分かれるため起きにくい |
| 拡張の上限 | 1台の最大スペックで止まる | 台数を増やせる範囲で拡張できる |
| 増やす単位 | 製品やインスタンスタイプの段階ごと | 1台分ずつ |
| 変更中の稼働 | 使えなくなることが多い | 既存の台は動き続けられる |
| 運用の複雑さ | 変更先が1台で済む | 振り分けや台ごとの設計の手間が増える |
スケールアウトで処理が速くなるのは、増やした部分だけです。たとえば裏側のデータベースが詰まっている場合、Webサーバを増やしても処理は速くなりません。データなどの状態を持つ部分は、こうした詰まりの原因になりがちです。
単一障害点を避けたい場合や、将来さらに増やす可能性がある場合は、スケールアウトが向きます。変更の手間を抑えたい小規模なシステムでは、スケールアップで十分なこともあります。
増やし方の違いが費用の総額にどう表れるかは、TCOの考え方で比べられます。動かし始めた後にサイズや台数を見直して費用を抑える取り組みは、FinOpsの記事で説明しています。
必要な処理量から、台数・倍率を計算する
必要な処理量を決めると、スケールアップで性能を何倍にすればよいか、スケールアウトで何台に増やせばよいかを計算できます。下の図で、処理量ごとに両方の計算結果を比べられます。ここでの処理量は1秒あたりの件数で、システムのスループットにあたります。
スケールアウトは1台分ずつ増えるため、今回はちょうど必要な分だけ増やせます。スケールアップも、選べる性能は製品やインスタンスタイプの段階で決まるため、ちょうど3倍の1台があるとは限りません。1台の故障で全体が止まるのはスケールアップのほうで、スケールアウトは残りの台で処理を続けられます。
スケールアウトは1台分ずつ増えるため、必要な量より少し多い処理能力になります。スケールアップも、選べる性能は製品やインスタンスタイプの段階で決まるため、ちょうど4.5倍の1台があるとは限りません。1台の故障で全体が止まるのはスケールアップのほうで、スケールアウトは残りの台で処理を続けられます。
スケールアウトは1台分ずつ増えるため、今回はちょうど必要な分だけ増やせます。スケールアップも、選べる性能は製品やインスタンスタイプの段階で決まるため、ちょうど12倍の1台があるとは限りません。1台の故障で全体が止まるのはスケールアップのほうで、スケールアウトは残りの台で処理を続けられます。
Auto Scalingは、スケールアウトを自動化する仕組み
Auto Scalingは、スケールアウトとスケールインを自動で行う仕組みです。負荷が増えるとサーバを自動で増やし、負荷が減ると自動で減らします。いつ何台に増減させるかの設定は、ELBとAuto Scalingの記事で説明しています。サーバではなくコンテナを同じイメージから増やす方法は、コンテナの記事にあります。
参考にした資料
- Microsoft Learn「Autoscaling Guidance - Azure Architecture Center」(スケールアップ・スケールアウトの定義と、変更時の可用性の違い)
- Microsoft Learn「Design to scale out - Azure Architecture Center」(スケールアウトと信頼性の関係)
練習問題(全5問)
正解:サーバ1台の
スケールアップとは、
正解:サーバの
スケールアウトとは、
正解:スケールアップ
スケールアップは、
正解:5台
スケールアウトは
正解:スケールイン
台数を
選んでから「採点する」を押すと、解説つきで答え合わせができます。