2017-03-29 52 views
1

私はGunicornとFlask(Pythonn 3.6)を使用している小さなサービスに取り組んでいます。以下の擬似コードは、おおよその動作を示しています。シリアライズされたfooオブジェクトがたくさんあります。できるだけ多くのものをメモリに保持し、それらをLRUベースで削除したいと考えています。Gunicornワーカー間でどのようにキャッシュを共有できますか?

cache = Cache() 

@app.route('/') 
def foobar(): 
    name = request.args['name'] 
    foo = cache.get(name) 
    if foo is None: 
     foo = load_foo(name) 
     cache.add(foo) 

    return foo.bar() 

問題は、Gunicornワーカー間でこのキャッシュを共有する方法がわかりません。私は限られたメモリで作業しており、重複したオブジェクトを保持したくない。特定のオブジェクトは頻繁に使用され、おそらく決して使用されないため、メモリ内に保持するのが理にかなっていると思います。

これは、別のアプリケーション(両方が同じサーバー上で実行されている)からの要求を取得するだけのものです。このコードを別にしておきたいだけです。私は最初の場所でGunicornを使っても完全に間違った方向に向いていますか?

答えて

0

私はGunicornの使用に間違いはありませんが、実稼働に近づけない限り、水平方向のスケーリングについて考える必要はないでしょう。とにかく、私は別のサービスをキャッシュとして使用することをお勧めしたいと思います。これにより、各ワーカーは必要に応じてキャッシュへの接続を開くことができます。 Redisは一般的なオプションですが、データを保存するためにデータ操作が必要な場合があります(例:データをPythonオブジェクトではなくJSON文字列として格納します。 RedisはLRUキャッシュとして機能することができます。https://redis.io/topics/lru-cache

関連する問題