2016-10-10 19 views
0

私のシステムアーキテクチャは、PHP Slim 3でLAMPスタックを実行してWebアプリケーションフロントエンドとして機能するWebアプリケーションサーバです。 APIを使用すると、両方の取得リクエストでデータを取得できますが、1秒ごとにPOSTするセンサーデバイスも取得できます。この同じサーバーでは、Pythonで書かれた処理アルゴリズムを実行し、5分ごとに600秒分のデータを処理します。PHP SlimアプリケーションMongoDB - 投稿要求をブロックするリクエストを取得する

MongoDBは、独自のリソースを持つ別のサーバー上にあります。最初はセンサーがほとんどなかったので、想像していたようにパフォーマンスは良かったです。しかし、データの量に比例してインデックスが増加し、データをポスティングするセンサーの数が増加するにつれて、Webアプリケーションのフロントエンドからのgetリクエストは、グラフを表示しても大きな遅延を引き起こし、センサデータの転記。これは大きな問題であり、私たちのために解決する必要があります。

私は、Webアプリケーションが、POST APIのための1つのWebサーバー、Webアプリケーションのための1つのWebサーバー、およびAPI取得要求の処理のための3つのコンポーネントに分割する必要があると考えてきました。そうすれば、MongoDBサーバーとの3つの個別の接続が可能になり、うまくいけば、データの投稿に対する要求を取得することによる悪影響はありません。

私の質問は、私がPHP Slimを使ってこれをやりなおし始めたらどうですか?

+0

Slimで問題があるように聞こえない、またはSlimだけで解決できるようです。 キャッシングを試しましたか?たとえば、Redisで表示データの非正規化/準備をキャッシュすることができます。 「600秒分のデータを処理するために5分ごとに実行するPythonで書かれた処理アルゴリズム」を説明してください。 –

+0

私はキャッシュを見ていますが、これは間違いなく現在行っているからです。処理アルゴリズムは、最後の600秒のセンサデータのバッチを取り、データを正規化するためにさまざまな変換を実行します(これがなぜPythonで行われるのか)。 5分ごとにcrontabとして実行され、過去10分間に生存していたすべてのセンサーデバイスのデータが処理されました。より多くのセンサーとデータの連続的なロギングでスケールアップすると、私は大きなデータ領域に入ります。 – ugotchi

答えて

0

これは実際にはスリムな問題ではなく、データベースの問題です。あなたのスリムなアプリはDBからデータを取り出す可能性があります...データベースが応答するのを待つ時間やDBからスリムなアプリケーションに送信されるすべてのデータの送信時間のいずれかをボトルネックにします。

ボトルネックがどこにあるか把握してください。 CLIでDBクエリを実行し、データをローカルに取得するのにどれくらいの時間がかかるかを確認します。データのMBであれば、データセンターであっても送信時間は問題になるでしょう....私は、 DCは500kbsなので、数MBのデータでさえ非常に遅くなるでしょう。

関連する問題