4

Nginx、Apache、Django、および Postgres でデプロイされたプロジェクトがあります。

プロジェクトには多数の組み込みデバイスがあり、5 分間隔でサーバー (https) にログインし、サーバーにファイルを送信します。また、プロジェクトの WebUI 面では、通常のユーザーがログインしてさまざまな機能を実行しています。

現在、システムは組み込みデバイスと通常の (人間の) ユーザーを区別していません。デバイス数が少ないときは、このメカニズムは必要な速度で正常に動作していました。しかし、時間外にデバイスの数が増えると、データベースの負荷が大幅に増加しました。1 日あたり約 60000 の django_session エントリが観察されました。デバイスから送信されたファイルを処理するために実行するインポート スクリプトが、受信データにほとんど追いついておらず、データベースに大きな負荷がかかっています。

デバイスを非常に高速に認証し、テキスト ファイルを送信できる最小限の認証メカニズムを実装したいと考えています。django 認証の方法を避けたいのですが、デバイスのユーザー名とパスワードに auth_user テーブルを使い続けたいです。パフォーマンス要件を考えると、nginx を使用し、実際には apache を描写せずにファイルを受け入れる何らかの方法が必要です。

これを達成するための最良の方法は何だと思いますか? また、このような大規模な組み込みデバイス関連のプロジェクトは、そのようなタイプのメカニズムに何を使用していますか?

4

2 に答える 2

2

私が理解しているように、各組み込みデバイスにはdjangoでユーザーアカウントが設定されており、このオーバーヘッドを回避したいと考えています。

最初の質問ですが、バックエンドは組み込みデバイスや人間のユーザーと通信していることをどのように認識しているのでしょうか? この情報はdjangoシステムに埋め込まれていると思います。

その場合、ユーザー名とパスワードが django に渡される前にインターセプトする必要がある場合は、データベース内のアカウントの種類を確認し、その組み込みデバイスがファイルを受け入れるだけの処理アプリにそれを渡すかどうかを確認し、それらを処理します。これをどのようにインターセプトするかはあなた次第です。ほぼすべての「Web」言語でそれを行うことができ、トラフィックの処理方法を決定したときにリダイレクトを使用するだけです.

これをさらに書き直す機会があれば、なぜ組み込みデバイス用のユーザー名とパスワードを持っているのでしょうか? それが組み込みデバイス(単一目的の最小限のインターフェース)であると仮定すると、それを識別するのに十分な既知の証明書のリストに対してSSL証明書をチェックしていませんか?これにより、djangoシステムとのやり取りがまったくなくなる可能性があります。必要なのは、既知のOK証明書のバンクに対して証明書をチェックすることだけです。

于 2010-02-18T20:39:31.997 に答える
1

組み込みデバイスを Postgres データベースに対して直接認証し、ファイルを適切な方法で保存する、コンパイル済みの cgi スクリプトを (C または C++ で) 記述できますか? 組み込みデバイスは 5 分ごとに 1 回限りの接続を行うため、明らかにセッションは必要ありません。

私は Django についてあまり知らないので (embedded タグから拾いました)、そのオーバーヘッドの原因がわかりません。

この単純な作業のために、C で CGI スクリプトを作成することは実際にはそれほど難しくありません (あなたまたはあなたのチームの誰かが C を知っていると仮定します)。

于 2010-02-19T02:29:38.210 に答える