水平スケーリングって単にサーバー増やすだけでしょ?簡単じゃない?
サーバーを増やすこと自体はクラウドなら簡単だよ。でもアプリケーション側が複数台で動くように設計されていないとダメなんだ。例えばセッション情報をサーバーのメモリに持っていると、ユーザーが別のサーバーに振り分けられたときにログイン状態が消える。だからセッションはRedisやDBに外出しする必要があるんだ。
垂直スケーリングとどっちがいいの?
水平スケーリングは台数を増やすから理論上は上限がない。垂直スケーリングはCPUやメモリを増やすけど、物理的な限界がある。ただし水平スケーリングはアプリをステートレスにする設計変更が必要で、データベースのように簡単に台数を増やせないものもある。だから実際は両方を組み合わせて使うことが多いよ。
データベースの水平スケーリングってどうやるの?
読み取りの負荷分散ならリードレプリカを増やせばいい。書き込みの負荷分散になるとシャーディング(データを分割して複数のDBに分ける)が必要になるんだ。
シャーディングって何が大変なの?
シャーディングはデータベースの水平スケーリングの中でもかなり難しい領域でね。例えばユーザーIDでシャードを分けたとして、「全ユーザーの売上ランキング」を出すにはすべてのシャードに問い合わせて結果をマージする必要がある。JOINも複数シャードにまたがると使えなくなる。さらにシャード間でデータ量に偏りが出る「ホットスポット」問題もある。だからシャーディングは「他の手段を全部試した後の最終手段」と言われることが多くて、最近はAurora ServerlessやCockroachDBのように分散を隠蔽してくれるDBを選ぶ傾向にあるんだよ。