7

のタスクサーバーとして機能しているRedisインスタンスを水平方向にスケールアウトしようとしていますPython-RQ

私の知る限り、これを行うための最良の方法は、シャーディングロジック(おそらくコンシステントハッシュを使用)をカスタムConnectionPoolおよび/またはConnectionクラスに追加することです。コンシステントハッシュメカニズムにはライブラリを使用したいと思います。これは、おそらく利用可能であるはずであり、自家製のソリューションよりも優れている/バトルテストが行​​われている可能性が高いためです。

このようなことをするのに良いパターンは何でしょうか?調べておくべきライブラリはありますか?私が考慮に入れるべきである私が見逃している何かがありますか?

どうもありがとう!

4

1 に答える 1

3

いくつかのことを念頭に置いておく必要があると思います。

最初の 1 つは、ボトルネックがどこにあるか、および 1 つの Python-Rq パラダイムの下で Redis バックエンドにパーティション アーキテクチャの方法を与える必要がある理由についてです。Redis は、ブートルネックがワーカーの数と、特定の時間に処理するジョブの数にあると信じる のに十分なパフォーマンスを備えていると思います。

次のように言うことができます: このジョブが処理されるまで何時間待つことができますか? この値がわかれば、レイテンシー。アーキテクチャにノードを追加/削除するための鍵があります。

ところで、Consistent Hashing を使用したシャーディング ソリューションを使用してインフラストラクチャを改善しようとしている場合は、新しいノードが削除または追加されたときのキーの再調整の問題を考慮する必要があります。

たとえば、新しいジョブが開始された後、そのジョブが終了する前に新しいサーバーが追加または削除されたため、現在のワーカーの 1 つが既存のジョブの間違った redis サーバーに接続されている可能性があります。

于 2013-03-11T11:26:07.067 に答える