スケーラビリティとは?
ソフトウェア開発の世界にいると、このスケーラビリティという言葉に何度も出会いますね。
スケーラビリティとは一体何なのか、なぜそんなに重要なのか、システムをスケーリングすることがなぜ
必要なのか。アメリカでCS専攻をしている駆け出しエンジニアの私が簡単にまとめてみました。
(注意:基本的な内容です。)
スケーラビリティとは、
レイテンシを犠牲にすることなく、増加したワークロードの処理に耐えるアプリケーションの能力
を意味します。scal(ability)→能力。
例えば、ユーザーがリクエストに応答するのにx秒かかる場合、アプリ上の100万の同時ユーザーリクエスト
のそれぞれに応答するには、同じx秒ずつかかります。アプリのバックエンドインフラが、100万の同時リクエストの
負荷で崩れることが無いように、大量のトラフィック負荷がかかった場合に適切にスケーリングさせて
システムのレイテンシ(遅延)を最小にするように維持する必要があります。
アプリケーションをスケーリングするには2つの方法があります。
垂直スケーリング (scaling up)
水平スケーリング (scaling out)
垂直スケーリング (scaling UP)
垂直スケーリングでは、アプリを実行するハードウェアの能力を高めます。
これは、コードのリファクタリングを必要とせず、複雑な構成やものを作成する必要がないため
スケーリングする最も簡単な方法です。
ただし、垂直にスケーリングする場合にできることは限られています。 1台のサーバーで拡張できる容量には制限があります。
分かりやすい例えでいうと、高層ビルです。明らかに、建物を月まで垂直に拡大することはできません。
そこで、水平スケーリングというもう一つのスケーリング方法があります。
水平スケーリング (scaling OUT)
水平スケーリングは建物を高くしていくのではなく、複数の建物を建てるように、ハードウェアの数を増やしていきます。
トラフィックが多すぎて単一のハードウェアで処理できない場合、より多くのサーバーを取り込んで連携します。
これにより、システム全体の計算能力が向上します。増加したトラフィックは、増加した計算能力に簡単に対処できます。
また、無限のリソースがあると仮定した場合、水平方向に拡張できる量に文字通り制限はありません。
水平スケーリングは、事前計画と規定の時間を必要とする垂直スケーリングとは対照的に、ウェブサイトの
トラフィックが一定期間にわたって増減するときにリアルタイムで動的にスケーリングする機能を提供します。
クラウドコンピューティングが業界で非常に人気を博した最大の理由は、動的に拡大縮小できることです。
ウェブサイトが必要とするリソースに対してのみ支払うので、コスパも高いです。
レイテンシとは?
レイテンシは、システムがユーザーのリクエストに応答するのにかかる時間です。
画像や動画を取得するためにアプリにリクエストを送信すると、システムがリクエストに応答するのに仮に2秒かかると
仮定すると、そのシステムのレイテンシは2秒ということです。
レイテンシを最小にすることが、ソフトウェア開発で目指すべきものなので、
システムのトラフィック負荷がいくら増えても、待ち時間が長くならないように設計することが重要です。
AWSのEC2はスケーラブルなクラウド上の仮想サーバーというのは、つまり、たくさんのユーザーからの
リクエンストでも遅延を最小に処理してレスポンスを返すことを可能にするサービスということですね。
レイテンシの測定
レイテンシは、ユーザーがウェブサイトで行うアクションの時間差として測定されます。
これは、ボタンのクリックなどのイベントと、そのイベントに反応するシステムの応答です。
この遅延は通常、主に2つに分けられます。
ネットワーク遅延
アプリケーション遅延
ネットワーク遅延
ネットワーク遅延は、ネットワークがポイントAからポイントBにデータパケットを送信するのにかかる時間です。
ネットワークは、ウェブサイトで増加するトラフィック負荷を処理するのに効率的でなければなりません。
ネットワーク遅延を削減するために、企業はContent Delivery Network(CDN)を使用し、エンドユーザーの
できるだけ近くに世界中のサーバーを展開しようとします。
アプリケーション遅延
アプリケーション遅延は、アプリケーションがユーザー要求を処理するのにかかる時間です。
アプリケーションの遅延を削減する方法はいくつかあります。最初のステップは、アプリケーションで
ストレスおよび負荷テストを実行し、システム全体の速度を低下させるボトルネックを調べることです。
エンジニアの採用過程では、コーディングテストがアメリカでは必ずありますが、その目的はネストループ
でアプリ側でのアルゴリズムの実装において、実行時間O(n^2)で平気な顔をしている無頓着なエンジニアを
雇ってしまうのを防ぐためでもあります。
なぜ、レイテンシがそんなに重要なのか?
待ち時間は、オンラインビジネスにおいて、顧客を獲得するか失うかを決定する上で重要な役割を果たします。
ウェブサイトでの応答を待つのが好きな人はいないですね。レイテンシ次第で企業の利益に繋がります。
例えば、大規模なFortniteのようなマルチプレイヤーオンラインゲームにおいて、イベントのわずかなラグが
ユーザーエクスペリエンス全体を台無しにしてしまいます。
ということ、スケーラビリティの意味からそれに派生して出てきたレイテンシについて理解できたところで
息抜きにコーヒを飲みながら、Fortniteプレイしてきたいと思います。