1

世界中のユーザーにサービスを提供する Web サービスを開発しています。

サーバーは、IIS でホストされる C# WCF アプリケーションに基づいています。MsSQL 構成データベース (ここではアクセス時間は重要ではありません) と、すべての重要なデータを含む MongoDB データベース (ここではアクセス時間は非常に重要です) を使用します。また、小さい画像 (48px * 48px JPEG) も提供します。

さて、画像のホスティングには、おそらく Amazon の CloudFront CDN ホスティングを使用します (より良い提案がない限り)。

私の問題は、Web アプリケーションと MongoDB の両方へのアクセス時間 (ping) を低く維持することです。

応答時間を短縮するために、シンガポール + 米国 + ヨーロッパ + 中東で 4 台のサーバーをリースすることを考えていました。

各サーバーは、Web アプリケーションと MongoDB のインスタンスを保持します。そして、1 つのサーバーが MSQL インスタンスを保持します。

すべての MongoDB を同期する必要があります (問題がある場合はすぐには同期できません)。

どのデザインを使用しますか?

4

1 に答える 1

0

短いアクセス時間は、コストと利益の関数です。まず、どれだけ低いかを特定する必要があります。アプリ全体で 100 ミリ秒の応答時間が必要ですか? または1s?

完了したら、さまざまなコストを計画します。

   Total time taken = time for request + //across internet 
processing by web app + request for data + 
preparing the response + response back to client.

希望するレイテンシーが 100 ミリ秒の場合、サーバーの速度に関係なく、ネットワーク トラフィックに時間がかかりすぎる可能性があるため、それを実行できない可能性が高くなります。

データセットを分析する必要があります。1000 のドキュメントをクエリすることは、10 億のドキュメントをクエリすることとは異なります。インデックスが使用しているサイズを計算する必要があり、それが RAM 内にあるかどうか。インデックスが RAM にない場合、アクセスが遅くなります。

Mongodb 構成

Mongodb はクラスター内で動作し、自動同期 (即時または遅延、構成可能) と自動フェイルオーバー (または手動、これも構成可能) を使用できます。データセットが巨大な場合はシャーディングもサポートするため、リクエストは実際にデータを含むサーバーに送信されます。

同様に、アプリケーション サーバーを調べて、保証された応答時間を得るために、コンポーネントがどの程度遅い/速いかを把握する必要があります。

あなたが提供した情報で、これは私ができる限り詳細な回答です。

プロファイリングしてから最適化する

リクエストの 80% が中東からのものである場合は、まずそれらを迅速に処理する必要があります。同じ原則を使用して、応答時間が最も遅いコンポーネントを見つけ出し、それらを改善する必要があります。そのためには、データを収集する必要があります。

クラスタリング

1 つの大陸または複数の大陸にクラスターをセットアップすると、冗長性、自動フェイルオーバー (構成されている場合)、および負荷分散 (構成方法によって異なります) を提供するのに役立ちます。大量のデータがある場合は、シャーディングを検討してください。

レプリケーションシャーディングのドキュメントを参照することを検討してください。

サーバーのセットアップ例

レプリケーション係数が 3 の 10 個のシャードが必要だとします。つまり、データが 10 台のサーバーに分割され、各サーバーは実際には 3 台のサーバーのレプリカ セットです (可用性とフェールオーバーのため)。つまり、レプリカ セットの各サーバーには重複データが含まれます。

ここで、s1p1 という表記は、シャード 1 - プライマリ 1、s1s1 はシャード 1、セカンダリ 1 などを意味します。

s1p1 s2p1 ...  s10p1
s1s1 s2s1  ... s10s1
s1s2 s2s2  ... s10s2

シャード 1 ~ 10 はデータを分割し、各シャードは合計の約 1/10 を保持します。各シャードは、プライマリと 2 つのセカンダリを含むレプリカ セットで構成されます。さらに冗長性が必要な場合は、これを増やすことができます。奇数に保つようにしてください。選挙中にはタイ ブレーカーがあります。データのコピーを 2 つだけにしたい場合は、「アービター」を導入して引き分けにすることもできます。

クエリを分析し、最も近いサーバーまたはリージョンにサービスを提供するサーバーにアクセスするようにシャード キーを選択できます。このビットを最適化するには、おそらく何らかの分析を行う必要があります。

それが役に立てば幸い。

于 2012-11-29T11:46:48.407 に答える