2016-12-06 13 views

答えて

1

答えは次のとおりです。サービスに固有の複数の要因を考慮すると、最適な負荷分散が実現されます。たとえば、文字列をエンコードするAPIを提供するサービスがあるとします。エンコードは文字列の内容にのみ依存します。 N個のサービスのレプリカが実行されています。

簡単なアプローチの1つは、クライアントのサービスインデックスi = hash(string)/ Nを単純に持つことです。入力文字列がハッシング空間に一様に分布していると仮定すると、これはうまく動作し、実装が非常に簡単です。

何らかの理由で文字列がハッシュスペースにうまく分散していない(たとえば、多分文字列が繰り返し表示されるなど)理由があるとします。この場合、ラウンドロビンを実行するか、ランダムにインデックスを選択する簡単な方法を使用できます。サーバからのバックプレッシャーの尺度を得ることもできます。例えば、RPC呼び出しが同期している場合、クライアント側でどれくらいの時間がかかるかを測定し、文字列エンコーディングの場合は、文字列;クライアントがこの番号に気付くと、おそらくサービスが続行できず、クライアントがそのクライアントに送信するトラフィックを減らす可能性があることを意味します。これは明らかにもう少し複雑です。

TLDR:ロードバランシングにはさまざまなオプションがありますが、「最適」はスケーリングされる問題の性質によって異なります。

関連する問題