9

複数のプロセスが同じデータセットで動作するシステムをセットアップする必要があります。アイデアは、ワーカー プロセスによって (非同期的に) 取得できる要素のセット (つまり、値の繰り返しがない) を持つことです。プロセスは複数のサーバーに分散される可能性があるため、分散ソリューションが必要です。

現在考えているパターンは、Redis を使用して、作業データを保持するセットを保持することです。各プロセスはセットに接続し、そこから値をポップする必要があります。セット内の要素へのランダムなアクセスが必要なため、のランダム機能spopは実際には私たちにとってプラスです。データは、メインの PostgreSQL データベースから入力する必要があります。

前述したように、クエリに使用できる PostgreSQL データベースもあり、プロセスは要素を要求するときにアクセスできます。ただし、負荷が大きい場合にボトルネックになる可能性があるかどうかはわかりません。このサブシステムでは、非常に大量の同時アクセス (数百または数千のプロセスを考える) が予想されます。

これに関連する場合に備えて、rQ非同期タスク (ジョブとワーカー) を処理するために Python を使用しています。

編集:サイズに関しては、要素はそれほど大きくないと予想できます-トップサイズは約500〜1000バイトである必要があります。これらは基本的に URL であるため、何かおかしなことが起こらない限り、そのサイズよりも十分に小さくする必要があります。要素の数は同時プロセスの数に依存するため、おそらく約 10 ~ 50 K の要素が適切な目安になります。これは一種のステージング領域であることに注意してください。そのため、サイズよりも速度に重点を置く必要があります。

要約すると、私の質問は次のとおりです。

  1. 複数のプロセスを使用する場合、Redis セットは共有アクセスに適していますか? そのソリューションがどのように拡張されるかを示すデータはありますか? もしそうなら、何か指針やアドバイスを提供できますか?

  2. 共有データを入力する場合、適切な更新戦略は何ですか?

どうもありがとうございました!

4

1 に答える 1

3

完全な答えではなく、いくつかの考え: 前述のように、Redis はセットをメモリ内に保持するため、1 に答えるには、次の最悪のシナリオについて考えるか、少なくとも推定する必要があります。

  • セットの各要素に必要なメモリ容量
  • 非常に重い負荷である要素の数 (数量)

見積もりが得られたら、計算して、Redis の使用が可能かどうかを確認できます。

たとえば、100 バイトの要素があり、1.000.000 要素の「非常に重い」負荷が予想される場合、Redis のためだけに少なくとも 100MB のメモリが必要であり、それを使用することは実現可能であり、さらに安価です.しかし、500 バイトが必要な場合要素ごとに負荷が高く、30.000.000 要素を意味する場合、15 GB のメモリが必要です。それは実行可能ですが、postgre db を使用するのに比べて高すぎる可能性があります。必要な 2 番目の見積もりにつながります。

  • Redis/Postgre サーバーに対する 1 秒あたりのリクエスト数 (合計)、またはリクエストを行うと予想されるプロセスの数と、各プロセスが 1 秒あたりに行うリクエストの数。

いくつかの見積もりがあると、要件/予算に最適なソリューションを決定するのに役立ちます。

于 2012-12-31T21:21:05.527 に答える