完全にステートレスにできない大規模な Web サイトは、どのようにして Web 層で極端なスケーラビリティを実現するのでしょうか?
eBay や Amazon のようなサイトは、ショッピング カートなどを持っているため、完全にステートレスにすることはできません。ショッピング カート内のすべてのアイテムを URL にエンコードすることも、すべてのアイテムを Cookie にエンコードして接続ごとに送信することもできません。そのため、Amazon は、送信される Cookie にセッション ID を格納するだけです。したがって、eBay と Amazon の Web 層のスケーラビリティは、すべてを安らかに URL にエンコードできる Google 検索エンジンのスケーラビリティよりもはるかに困難であることを理解しています。
一方、eBay と Amazon の両方が、非常に大規模にスケーリングしました。噂によると、eBay には約 15000 の J2EE アプリケーション サーバーが存在します。
これらのサイトは、極端なスケーラビリティとステートフルネスの両方をどのように処理しているのでしょうか? サイトはステートフルであるため、単純な DNS バランシングを行うことは現実的ではありません。したがって、これらの企業は、そのサイトの単一の IP アドレスの背後にある唯一のデバイスである、BigIP、Netscaler などのようなハードウェア ベースのロード バランサーを持っていると想定できます。このロード バランサーは、SSL を復号化し (エンコードされている場合)、Cookie を検査し、その Cookie のセッション ID に応じて、どのアプリケーション サーバーがその顧客のセッションを保持しているかを判断します。
しかし、単一のロードバランサーでは何千ものアプリケーション サーバーの負荷を処理できないため、これではうまくいかないのでしょうか? これらのハードウェア ロード バランサーでさえ、そのようなレベルには拡張できないと思います。
また、負荷分散はユーザーに対して透過的に行われます。つまり、ユーザーは別のアドレスに転送されることはありませんが、すべてのユーザーがまとめて www.amazon.com にずっと滞在します。
だから私の質問は次のとおりです。Web層の透過的なシャーディングのようなものを達成できる特別なトリックはありますか(一般的に行われているデータベース層ではありません)? Cookie が検査されない限り、どのアプリケーション サーバーがこのセッションを保持しているかを知る方法はありません。
編集:サイトをスパイダーしてブックマークする必要がある場合は、透明性だけが必要であることに気付きました。たとえば、サイトが飛行機や電車のチケット予約システムのような単なる Web アプリである場合、ユーザーを異なる URL の背後にある Web サーバーの特定のクラスター (a17.ticketreservation.com など) にリダイレクトするだけで問題はありません。この特定のケースでは、それぞれが独自のロード バランサーの背後にあるアプリケーション サーバーの複数のクラスターを使用するだけで実現可能です。興味深いことに、この種の概念を使用しているサイトは見つかりませんでした。 編集:この概念がhighscalability.comで議論されているのを見つけました。この議論では、Lei Zhu の記事が参照されています。「Web 2.0 アプリケーションのクライアント側負荷分散」 . Lei Zhu は、クロス スクリプティングを使用して、このクライアント側の負荷分散を透過的に行います。
ブックマークや xss などの欠点があるとしても、これは特定の特別な状況、つまりスパイダーやブックマークを必要としないほとんどコンテンツのない Web アプリケーション (チケット予約など) には非常に良いアイデアのように思えます。システムまたはそのようなもの)。その場合、ロード バランシングを透過的に行う必要はありません。
www.ticketreservation.com から a17.ticketreservation.com へのリダイレクトなど、メイン サイトからサーバーへの単純なリダイレクトが存在する可能性があります。そこから、ユーザーはサーバー a17 に留まります。a17 はサーバーではなく、クラスター自体であり、冗長性を実現できます。
最初のリダイレクト サーバー自体が、ロード バランサーの背後にあるクラスターである可能性があります。このようにして、www の背後にあるプライマリ ロード バランサーは各セッションの開始時に 1 回だけヒットするため、非常に高いスケーラビリティを実現できます。
もちろん、別の URL へのリダイレクトは非常に厄介に見えますが、単なる Web アプリケーション (スパイダー、ディープ リンク、またはディープ ブックマークの必要がない) では、これはユーザーにとって視覚的な問題に過ぎないのでしょうか?
リダイレクト クラスタは、アプリケーション クラスタの負荷をポーリングし、それに応じてリダイレクトを適応させることができるため、単なる負荷分散ではなく、バランスを取ることができます。