これが可能であるとは思えませんが、ここに問題と提案された解決策があります(提案された解決策の実現可能性がこの質問の目的です):
すべての要求で利用できる必要がある「グローバルデータ」があります。このデータを Riak に保存し、Redis をアクセス速度のキャッシング レイヤーとして使用しています (今のところ...)。データは、それぞれ約 8 KB の約 30 個の論理チャンクに分割されます。
各リクエストは、これらの 8KB チャンクのうち 4 つを読み取る必要があるため、Redis または Riak から 32KB のデータが読み込まれます。これは、読み取る必要があるリクエスト固有のデータに追加されます (これはかなりの量です)。
1 秒あたり 3000 リクエストでさえあると仮定すると (これはライブ サーバーではないため、実際の数値はありませんが、3000ps は合理的な想定であり、それ以上になる可能性があります)、これは、Redis または Riak からの 96KBps の転送を意味します。 -アプリケーションロジックから行われている重要でない他の呼び出し。また、Python はこれらの 8KB オブジェクトの JSON を毎秒 3000 回解析しています。
このすべて、特にデータを繰り返しデシリアライズしなければならない Python はまったくの無駄のように思えます。完全にエレガントな解決策は、デシリアライズされたデータを Python のインメモリ ネイティブ オブジェクトにキャッシュすることです。このすべての「静的」データが古くなったとき。毎秒 3000 回ではなく、数分 (または数時間) に 1 回。
しかし、これが可能かどうかはわかりません。メモリ内のデータをキャッシュするには、「常に実行されている」アプリケーションが現実的に必要です。そして、これはnginx + uwsgi + pythonの組み合わせ(ノードのようなものに対して)には当てはまらないことを知っています.pythonのメモリ内データは、ひどく間違っていない限り、私の知る限り、すべてのリクエストで永続化されません。
残念ながら、これは私が「継承」したシステムであるため、基本テクノロジーに関してあまり多くの変更を加えることはできません。また、Python プロセスの起動と永続化に関して、nginx + uwsgi + python の組み合わせがどのように機能するかについて十分な知識がありません。 Python のメモリ内データ - これは、上記の私の仮定とひどく誤解される可能性があることを意味します!
したがって、このソリューションが機能するかどうかについての直接的なアドバイスと、新しいプロセスの開始とメモリ割り当てに関してnginx + uwsgi + pythonがどのように機能するかを理解するのに役立つ資料への参照は、非常に役立ちます.
PS:
nginx、uwsgi などのドキュメントをいくつか読んだことがありますが、ユースケースごとの影響をまだ完全には理解していません。今後、何らかの進展が見られることを願っています
メモリ内のことがうまくいく場合は、Redis を削除します。これは、前述の静的データのみをその中にキャッシュしているためです。これにより、インプロセスの永続的なメモリ内 Python キャッシュがさらに魅力的になり、システム内の可動部分が 1 つ減り、リクエストごとに少なくとも 4 つのネットワーク ラウンドトリップが減ります。