内部ネットワークは、多くの場合1 Gbps以上の接続を使用します。光ファイバー接続またはボンディングにより、サーバー間の帯域幅を大幅に拡大できます。ここで、APIからのJSON応答の平均サイズを想像してください。1秒間に1 Gbps接続で送信できる応答はどれくらいですか?
実際に計算してみましょう。1 Gbpsは1秒あたり131 072 KBです。JSONの平均応答が5 KB(これは非常に多い!)である場合、1組のマシンで1秒間に26 214応答を送信できます。そんなに悪くないですよね?
これがネットワーク接続が通常ボトルネックではない理由です。
マイクロサービスのもう1つの側面は、簡単に拡張できることです。2つのサーバーを想像してください。1つはAPIをホストし、もう1つはAPIを使用します。接続がボトルネックになった場合は、他の2つのサーバーを追加するだけで、パフォーマンスを2倍にできます。
これは、以前の26 214応答/秒がアプリの規模に対して小さすぎる場合です。他の9つのペアを追加すると、262 140の応答を提供できるようになります。
しかし、サーバーのペアに戻り、比較を行いましょう。
データベースへのキャッシュされていないクエリの平均が10ミリ秒かかる場合、1秒あたり100クエリに制限されます。100件のクエリ。26 214応答。1秒あたり26 214応答の速度を達成するには、大量のキャッシュと最適化が必要です(応答が実際にデータベースのクエリなどの有用な処理を必要とする場合、「Hello World」スタイルの応答は適格ではありません)。
私のコンピューターでは、GoogleのホームページのDOMContentLoadedが394ミリ秒で発生しました。リクエストが送信された後。1秒あたり3リクエスト未満です。Programmers.SEホームページの場合、603ミリ秒でした。リクエストが送信された後。1秒あたり2回のリクエストでもありません。ちなみに、私は100 Mbpsのインターネット接続と高速コンピューターを持っています。多くのユーザーはもっと長く待つでしょう。
ボトルネックがサーバー間のネットワーク速度である場合、これらの2つのサイトは、ページを提供しながら、文字通り異なるAPIに対して何千もの呼び出しを行う可能性があります。
これらの2例は、ネットワークは、おそらく理論的にはあなたのボトルネックになることはないだろうことを示している(実際には、あなたがのボトルネックの正確な位置を決定するために、実際のベンチマークとプロファイリングを行う必要があり、あなたの特定のハードウェア上でホストされている特定のシステムを)。実際の作業(SQLクエリ、圧縮など)を実行し、結果をエンドユーザーに送信するのに費やした時間がはるかに重要です。
データベースについて考える
通常、データベースはそれらを使用するWebアプリケーションとは別にホストされます。これは懸念を引き起こす可能性があります。アプリケーションをホストするサーバーとデータベースをホストするサーバー間の接続速度はどうですか?
実際には、接続速度が問題になる場合があります。つまり、データベース自体で処理する必要がなく、すぐに利用できるはずの大量のデータ(大きなバイナリファイル)を保存する場合です。ただし、そのような状況はまれです。ほとんどの場合、転送速度はクエリ自体の処理速度に比べてそれほど大きくありません。
転送速度が実際に重要なのは、企業がNASで大きなデータセットをホストしていて、NASが複数のクライアントから同時にアクセスされる場合です。これは、SANがソリューションになる可能性がある場所です。とはいえ、これが唯一の解決策ではありません。Cat 6ケーブルは、最大10 Gbpsの速度をサポートできます。ボンディングを使用して、ケーブルやネットワークアダプターを変更せずに速度を上げることもできます。複数のNASにわたるデータ複製を含む他のソリューションが存在します。
速度を忘れてください。スケーラビリティについて考える
Webアプリの重要なポイントは、スケーリングできることです。実際のパフォーマンスは重要ですが(より強力なサーバーにお金を払う必要はありません)、必要に応じて追加のハードウェアを投入できるため、スケーラビリティがはるかに重要です。
同様に、仮想マシンは10年前に大きなパフォーマンスの問題として認識されていました。実際、サーバーでアプリケーションをホストする場合と仮想マシンでホストする場合は、パフォーマンスに重要な影響がありました。現在、このギャップははるかに小さくなっていますが、依然として存在しています。
このパフォーマンスの低下にもかかわらず、仮想環境は柔軟性を備えているため非常に人気がありました。
ネットワーク速度と同様に、VMが実際のボトルネックであり、実際の規模を考えると、VMなしでアプリを直接ホストすることで数十億ドルを節約できます。しかし、これはアプリの99.9%で起こることではありません。それらのボトルネックはどこか他の場所にあり、VMによる数マイクロ秒の損失という欠点は、ハードウェアの抽象化とスケーラビリティの利点によって簡単に補われます。