2012-08-06 12 views
7

मैं एक पिरामिड एप्लिकेशन की सत्र कॉन्फ़िगरेशन cookie से ext:memcached पर स्विच कर रहा हूं। मेरा एप्लिकेशन हेरोोकू पर होस्ट किया गया है और मैंने के अनुसार अपने memcache addon को कॉन्फ़िगर किया है।क्या मुझे हेरोोक पर मेमकेचे का उपयोग करते समय बीकर के 'session.lock_dir` को कॉन्फ़िगर करना चाहिए?

मैं Beaker documentation से समझता हूं कि को रोकने के लिए session.lock_dir निर्दिष्ट करना आवश्यक है। स्पष्ट होने के लिए: मुझे निर्देशिका में फ़ाइल पथ प्रदान करना होगा। बीकर तब इसे किसी प्रकार के लॉक के रूप में उपयोग करता है ताकि कई क्लाइंट एक ही समय में एक ही मूल्य को सेट करने का प्रयास कर सकें।

मेरे लिए, यह खराब वास्तुकला की तरह लगता है। Memcache के प्राथमिक फायदों में से एक यह है कि यह एक साझा बाहरी सेवा के रूप में काम करता है। डिस्क अनुप्रयोग लॉक पर मेरी एप्लिकेशन प्रक्रियाओं को बाध्य करना गलत दृष्टिकोण की तरह लगता है।

समान रूप से, हेरोोकू पर, मेरे पास एक ephemeral फाइल सिस्टम "प्रति" (जिसे मैं प्रति प्रक्रिया का मतलब समझता हूं) है। इसलिए जब मैं lock_dir निर्देशिका पथ प्रदान कर सकता हूं, यदि प्रत्येक प्रक्रिया एक अलग निर्देशिका का उपयोग करती है, तो क्या यह मुझे कुत्ते के ढेर प्रभाव से बचाएगी?

  • एक lock_dir निर्दिष्ट और के बारे में यह
  • बीकर कांटा करने के लिए प्रयास में चिंता मत और इस किसी भी तरह

पैच प्लस मैं में खुशी होगी:

मैं क्या मैं चाहिए यकीन नहीं है पता करें कि अन्य भाषाएं/ढांचे का उपयोग किस पैटर्न में किया जाता है। क्या यह सिर्फ एक बीकर समस्या है या कुत्ते के ढेर प्रभाव से पीड़ित अन्य गैर-फ़ाइल-बाध्य सेटअप करते हैं?

अग्रिम धन्यवाद,

जेम्स।

+0

मुझे काफी यकीन है कि memcached के बैकएंड को 'lock_dir' की आवश्यकता नहीं है, क्या आपने इसे बिना कोशिश की है? –

+0

हाय माइकल, 'beaker.ext.memcached' को 'memory' या' कुकी 'के अलावा किसी भी बैकएंड का उपयोग करते समय लॉक_डीर की आवश्यकता होती है। [यहां मेरा ट्रेसबैक] (https://raw.github.com/gist/3278155/d744c1087445b5c18270212796026dbafe9b5760/gistfile1.pytb)। – thruflo

+1

क्षमा करें, मेरी आखिरी टिप्पणी वास्तव में समझ में नहीं आया। Memcached बैकएंड के लिए 'lock_dir' की आवश्यकता होती है। मैंने पोस्ट किया गया ट्रेसबैक [इस कोड] (https: // बिटबकेट द्वारा ट्रिगर किया गया है।org/bbangert/बीकर/src/d1757ad53763/बीकर/ext/memcached.py # सीएल -85)। मैं [उसी मुद्दे की इस चर्चा] में आया हूं (https://bitbucket.org/bbangert/beaker/issue/78/clusterable- सत्र)। ऐसा लगता है कि उत्तर है: "एक lock_dir निर्दिष्ट करें और इसके बारे में चिंता न करें"। – thruflo

उत्तर

0

दुर्भाग्य से, मेरे अनुभव के अनुसार, बीकर वितरित ताला की अनुपस्थिति के कारण बहुस्तरीय बुनियादी ढांचे पर अच्छा काम नहीं करता है। यदि आप 2 होस्ट पर चल रहे वेब ऐप में बीकर का उपयोग करते हैं, तो कुत्ते का ढेर प्रभाव अभी भी होता है (हालांकि उसी उपयोगकर्ता से सभी अनुरोधों को एक सर्वर पर चिपकाकर इसे टाला जा सकता है, लेकिन यह सभी प्लेटफॉर्म पर काम नहीं करता है)।

कभी-कभी आप कुत्ते के ढेर प्रभाव को अनदेखा कर सकते हैं, कभी-कभी नहीं। जैसे यदि आप वैश्विक डेटा कैश करते हैं, तो कुत्ते के ढेर प्रभाव दर्द होता है। यदि आप उपयोगकर्ता डेटा कैश करते हैं, तो आप कभी-कभी इसे अनदेखा कर सकते हैं।

आपके मामले में, मैं इसे अनदेखा कर दूंगा। बीकर आपको बिना किसी लॉक डीआईआर के मेमकैच एक्सटेंशन का उपयोग करने की अनुमति देता है। इस मामले में, बीकर ताले केवल थ्रेड ताले का उपयोग कर प्रति प्रक्रिया काम करते हैं।

from beaker.middleware import SessionMiddleware 
from werkzeug.wrappers import Response 
from werkzeug.serving import run_simple 


def simple_app(environ, start_response): 
    # Get the session object from the environ 
    session = environ['beaker.session'] 

    # Check to see if a value is in the session 
    user = 'user_id' in session 

    # Set some other session variable 
    session['user_id'] = 10 
    session.save() 

    start_response('200 OK', [('Content-type', 'text/plain')]) 
    return ['User is logged in: %s' % user] 

# Configure the SessionMiddleware 
session_opts = { 
    'session.type': 'ext:memcached', 
    'session.url': '127.0.0.1:11211', 
    'session.auto': True, 
    'session.cookie_expires': True, 
} 
wsgi_app = SessionMiddleware(simple_app, session_opts) 


if __name__ == '__main__': 
    run_simple('127.0.0.1', 5000, wsgi_app, use_debugger=True, use_reloader=True) 

कुत्ते ढेर प्रभाव अभी भी आप के लिए एक समस्या है, तो मैं बीकर से कुछ और करने के लिए स्थानांतरित करने के लिए सुझाव है:

यहाँ सबूत है। जैसे dogpile.cache

संबंधित मुद्दे

 संबंधित मुद्दे