私は現在、Web サーバーの構築を完了しています。この Web サーバーの主な責任は、各 http ポスト リクエストの本文データの内容を単純に取得し、ログ ファイルに書き込むことです。投稿データの内容は、受信時に難読化されます。そのため、投稿データの難読化を解除し、サーバー上のログ ファイルに書き込みます。難読化後のコンテンツは、リクエストごとに異なる一連のランダムなキーと値のペアです。固定データではありません。
サーバーは 2.6+ カーネルの Linux を実行しています。サーバーは大量のトラフィックを処理するように構成されています (開いているファイルの制限は 32k など)。このアプリケーションは、web.py フレームワークを使用して Python で作成されています。http サーバーは、Nginx の背後にある Gunicorn です。
Apache Benchmark を使用していくつかの負荷テストを行った後、ログ書き込みの問題なしで 1 秒あたり最大約 600 ~ 700 のリクエストを処理できることに気付きました。Linux はネイティブでバッファリングを適切に処理します。1 秒間にこの数を超えるリクエストが同じファイルに同時に書き込もうとすると、問題が発生し始めます。データは書き込まれず、情報は失われます。「ファイルに直接書き込む」という設計は、最初から適切なソリューションではなかった可能性があることを私は知っています。
だから、この問題を克服できるインフラストラクチャとコードをあまり変更せずに、すぐに実装できるソリューションを誰かが提案できるかどうか疑問に思っていますか?
Redis のようなメモリ ストレージについて読んだことがありますが、サーバーの障害時にデータがメモリに残っていると、そのデータが失われることに気付きました。redisを永続ストアとして構成できるドキュメントを読みました.Redisがそれを行うには、サーバーに十分なメモリが必要です. この解決策は、特定の間隔で Redis (メモリ) からログ ファイルにデータをダンプするスクリプトを作成する必要があることを意味します。
より迅速な解決策があるかどうか疑問に思っていますか? どんな助けでも大歓迎です!