sql >> データベース >  >> NoSQL >> Redis

Celery for Realtime、Geventを使用した同期外部APIクエリの使用

    できるだけ多くの質問に答えようと思います。

    これはセロリを使用して行うことができますか(そしてこれを行う必要がありますか?

    はい、できます

    私はdjangoを使用しています。プレーンセロリよりもdjango-celeryを使用する必要がありますか?

    Djangoはセロリを適切にサポートしており、開発中の生活をはるかに楽にします

    これらのタスクはそれぞれ、発生したことをログに記録したり、他のタイプの分岐を行ったりするなど、他のタスクを生み出す可能性があります。これは可能ですか?

    副作用のみについてigno​​re_result=trueのタスクを使用してサブタスクを開始できます

    タスクは取得したデータを返す可能性がありますか?つまり、セロリを介してKbのデータ(この場合は基になるredis)を返す可能性がありますか、それともDBに書き込み、そのデータへのポインターを渡すだけですか?

    結果をdbに入れてから、idを渡すと、ブローカーとワーカーが幸せになることをお勧めします。データ転送/ピクルスなどが少なくなります。

    各タスクは主にI/Oバウンドであり、最初はWebスレッドからのgeventを使用してリクエストをファンアウトし、キューイング全体の設計をスキップする予定でしたが、別のコンポーネントで再利用されることが判明しました。 Qsの往復全体をリアルタイムで維持しようとすると、おそらく多くの作業者がキューをほとんど空にしていることを確認する必要があります。またはそれは? gevent workerpoolを実行すると、これに役立ちますか?

    プロセスはioバウンドであるため、geventは間違いなくここで役立ちます。ただし、gevent pool'd workerの同時実行性は、私も答えを探しています。

    gevent固有のタスクを作成する必要がありますか、それともネットワークIOでgevent pooldealを自動的に使用しますか?

    プールで使用すると、Geventは自動的にモンキーパッチを適用します。ただし、使用するライブラリはgeventでうまく機能するはずです。それ以外の場合、simplejson(cで記述されている)を使用して一部のデータを解析すると、他のgeventグリーンレットがブロックされます。

    特定のタスクに優先順位を割り当てることは可能ですか?

    特定のタスクに特定の優先順位を割り当てることはできませんが、それらを別のキューにルーティングしてから、さまざまな数のワーカーがそれらのキューをリッスンするようにします。特定のキューのワーカーが多いほど、そのキューでのそのタスクの優先度が高くなります。

    それらを整理するのはどうですか?

    チェーンは秩序を維持する1つの方法です。コードは要約するのに良い方法です。セロリが面倒を見てくれるので、心配する必要はありません。 gevent poolを使用している場合でも、最終的にはタスクの実行順序について推論することができます。

    セロリを飛ばして昆布だけ使うべきですか?

    ユースケースが時間の経過とともにより複雑なものに変化しない場合、およびceleryd +自分で監視することでプロセスを管理する意思がある場合は、可能です。また、セロリモンや花などのツールに付属しているタスクの監視を気にしない場合は

    セロリは、延期することができ、時間に敏感ではない「タスク」に向けられているようです。

    Celeryはスケジュールされたタスクもサポートします。それがあなたがその声明によって意味したことであるならば。

    このリアルタイムを維持しようとするのは嫌ですか?

    私はそうは思わない。消費者が十分に速い限り、それはリアルタイムと同じくらい良いでしょう。

    他にどのようなテクノロジーを検討する必要がありますか?

    セロリに関しては、結果ストアを賢く選択する必要があります。私の提案は、cassandraを使用することです。リアルタイムデータ(書き込みとクエリの両方)に適しています。 redisまたはmongodbを使用することもできます。結果ストアとして、独自の一連の問題が発生します。ただし、構成を少し調整することで、大きな効果が得られます。

    セロリとはまったく異なるものを意味する場合は、asyncio(python3.5)とzeromqを調べて同じことを実現できます。それについてはこれ以上コメントできません。




    1. MongoDBサーバーのシームレスなスケール

    2. socket.ioでredis接続を再利用する方法は?

    3. Redisレプリケーション構成

    4. Redis:競合状態とシングルスレッド