私のシステムアーキテクチャは、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を使ってこれをやりなおし始めたらどうですか?
Slimで問題があるように聞こえない、またはSlimだけで解決できるようです。 キャッシングを試しましたか?たとえば、Redisで表示データの非正規化/準備をキャッシュすることができます。 「600秒分のデータを処理するために5分ごとに実行するPythonで書かれた処理アルゴリズム」を説明してください。 –
私はキャッシュを見ていますが、これは間違いなく現在行っているからです。処理アルゴリズムは、最後の600秒のセンサデータのバッチを取り、データを正規化するためにさまざまな変換を実行します(これがなぜPythonで行われるのか)。 5分ごとにcrontabとして実行され、過去10分間に生存していたすべてのセンサーデバイスのデータが処理されました。より多くのセンサーとデータの連続的なロギングでスケールアップすると、私は大きなデータ領域に入ります。 – ugotchi