0

元の問題

Twisted非同期アプリ内からデータベースに対してクエリを実行したい。たとえば、新しいレコードを追加したり、何かを更新したり、データを取得したりします。

わたしの提案

Twistedアプリだけがアクセスできるdjangoで特別なビューを作成することを考えています。これにより、必要なデータベースに対してあらゆる種類の操作が実行されます。

たとえば、urldomain.com/server/getuserdata/{{ user_id }}/はユーザーに関するデータを便利な形式(json)で返します。

GET / POSTリクエストはTwistedで延期されるため、Twistedアプリがブロックされることはありません(間違っている場合は修正してください)。

私のTwistedアプリは、これらのリクエストをたまにしか実行しませんでした。データをリアルタイムで更新するわけではありません。リアルタイムデータはRedisに保存され、Djangoデータベースに保存する準備ができたら、redisに保存されているデータを使用してDjangoへのリクエストを実行します。

ただし、それでも1秒あたりのサーバーからの要求が多くなる可能性があります(たとえば、100から1000まで)。

私が読んだ別のアプローチ

  • ツイストnadbapiですが、2007年以降更新されていないので、正直に使いたくありません
  • リクエストをRedisに保存し、別のデーモン/アプリまたはcronで実行します。

質問

  • DjangoへのGET/POSTリクエストに遅延オブジェクトを使用するのは良いアプローチですか?
  • どういうわけか、Twistedアプリが信頼されているので、DDOSのように扱われないことをDjangoに伝えることはできますか?
  • これは非常に多くのリクエストで十分に高速ですか(もちろんキャッシュを使用)?
  • このタスクのより良いアプローチはありますか?

ツイストと同期アプリとの統合非同期アプリは初めてなので、愚かなことを入力した場合は申し訳ありません

4

1 に答える 1

2

DjangoへのGET/POSTリクエストに遅延オブジェクトを使用するのは良いアプローチですか?

これに深く答える経験があればいいのにと思います。リクエストが非同期である限り、ツイスト側では問題ないと思います。私はこれを竜巻の基本的な経験に基づいています。アプリがWebサービスを要求する必要があるのは比較的一般的であり、tornadoは、フレームワークに組み込まれているこれを行う非同期の方法を提供します。

どういうわけか、Twistedアプリが信頼されているので、DDOSのように扱われないことをDjangoに伝えることはできますか?

djangoは、どのサービスがそれを要求しているかを本質的に知っているとは思いません。速度を抑制したり、箱から出して要求したりすることはありません。要求があった場合に応答するだけです。これらが処理できるリクエスト数が多い場合、クラッシュします。djangoが処理できるリクエストの数は、プロジェクトとそのデプロイ方法によって異なります。gunicornを使って簡単に実行できnginx、その前に座ることができます。shoudlとして実行されていない場合は、別のgunicornインスタンスを開始できます。

これは非常に多くのリクエストで十分に高速ですか(もちろんキャッシュを使用)?

誰にも言えないと思います。あなたはそれを自分でベンチマークしなければならないかもしれません。さまざまなdjangoサーバー構成のベンチマークとなるブログ投稿/記事が多数あります。

このタスクのより良いアプローチはありますか?

これは比較的一般的なアプローチだと思います。RESTfulインターフェースを介してdjangoを介してメソッドを公開します。ツイストから非同期リクエストを作成します。

于 2013-01-08T16:17:29.770 に答える