गति: APC और मेमकेच्ड दोनों के साथ Magento


17

हमने कई मंचों का अध्ययन किया है और निम्नलिखित का उत्तर नहीं जानते हैं। हम दोनों है APCऔर Memcacheहमारे सर्वर पर स्थापित किया। हमें यकीन नहीं है कि सही और सबसे अच्छा विन्यास क्या है।

मेरा प्रश्न

एक ही समय में Memcache + APC दोनों का उपयोग करके Magento चलाने के लिए सबसे अच्छी सेटिंग्स क्या हैं / हैं? (या यह बिल्कुल स्मार्ट नहीं है)

पृष्ठभूमि शोध

यहां मेमाचे और एपीसी को तेज और धीमी कैश (लेकिन डिस्क नहीं) के रूप में सलाह दी जाती है। ऐसा लगता है कि केवल तभी काम करता है जब आपके पास पर्याप्त रैम हो (और इसके बारे में निश्चित)

और यह लेख Memcache या APC के बारे में है - और हमारे पास दोनों हैं

और यहाँ यह कहा गया है कि Memcache केवल तभी काम करता है जब आपके पास एक धीमा बैकएंड भी परिभाषित हो

और मुझे लगता है कि यह लेख भी यही कह रहा है

यह मेरे ISP का समाधान local.xml है

<cache>
  <backend>apc</backend>
  <prefix>sitenamehere__</prefix>
</cache>
<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
      </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>

परिस्थिति

साझा होस्टिंग ब्रिम FPC स्थापित की गई: http://ecommerce.brimllc.com/full-page-cache-magento.html (इस FPC में इसे और अधिक जटिल बनाने के लिए स्केलेबल फ़ाइल कैश भी है)


@sonassi, मेमेकैप्ट-टैग के बजाय क्यों नहीं? code.google.com/p/memcached-tag

जवाबों:


26

आपको इन दो उत्पादों के बीच स्पष्ट अंतर को समझने की आवश्यकता है कि उन्हें कैसे उपयोग किया जाए।

  • APC एक OPCode कैश और फास्ट बैकएंड दोनों है
  • Memcache सिर्फ फास्ट बैकेंड है

APC को OPCode Cache के रूप में उपयोग करना

बस अपने सर्वर पर मॉड्यूल स्थापित करें

pecl install apc

और इसे अपने में सक्षम करें php.ini

echo "extension=apc.so" >> /usr/lib/local/php.ini       (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini   (Debian)

फिर आप सक्षम और रनटाइम कॉन्फ़िगरेशन को ठीक करने के लिए, जैसे।

apc.enabled
apc.shm_seolution
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

फिर PHP / Apache को पुनरारंभ करें

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

उसके बाद, और कुछ करना नहीं है। APC की पुष्टि करें एक त्वरित के साथ सक्षम है phpinfo()- लेकिन अन्यथा, इस बिंदु पर, APC का OPCode कैश भाग सक्रिय है।

Magento के पक्ष में कुछ भी कॉन्फ़िगर करने की आवश्यकता नहीं है।

एपीसी को फास्ट बैकेंड के रूप में उपयोग करना

आपको निम्नलिखित को अपने साथ जोड़ना होगा ./app/etc/local.xml

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mystore_</prefix>
  </cache>
  ...
</global>

फिर अपने मौजूदा स्टोर कैश को फ्लश करें। यह सत्यापित करने के लिए कि यह काम कर रहा है, फ्रंट-एंड में एक पेज लोड करें और ./var/cacheडायरेक्टरी खाली रहनी चाहिए।

मेमेचे का उपयोग फास्ट बैकेंड के रूप में करना

आपको मेम्चे को PHP एक्सटेंशन के रूप में स्थापित करना होगा, और अपने सर्वर पर संबंधित मेकचे डेमन (मेम्केड) को स्थापित करना होगा।

pecl install memcache

और इसे अपने php.ini में इनेबल करें

echo "extension=memcache.so" >> /usr/lib/local/php.ini            (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini   (Debian)

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

फिर सर्वर पर मेम्केड को स्थापित करें। आरएच / सेंटोस के लिए, अपने रिलीज़ संस्करण और सीपीयू वास्तुकला के अनुरूप URL को समायोजित करें।

rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached

apt-get install memcached                               (Debian)

फिर एक तेज बैकेंड के रूप में मेमेचे का उपयोग करने के लिए मैग्नेटो को संशोधित करें, सॉकेट पथ को सूट करने के लिए टीसीपी / आईपी कनेक्शन में बदलें।

<cache>
  <slow_backend>database</slow_backend>

  <fast_backend>memcached</fast_backend>
  <fast_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </fast_backend_options>

  <backend>memcached</backend>
  <memcached>
  <servers>
    <server>
      <host>unix:///tmp/memcached.sock</host>
      <port>0</port>
      <persistent>0</persistent>
    </server>
  </servers>
</cache>

Memcache और टैगिंग के गुहाओं - यह क्या भंडारण है

Memcache केवल कुंजी-स्तरीय रिश्तों के एक स्तर का समर्थन करता है, इसलिए यह Magento कैश टैग्स को संग्रहीत नहीं कर सकता (जो कि स्वतंत्र रूप से कैश डेटा को फ्लश करने के लिए उपयोग किया जाता है)। परिणामस्वरूप, आपको या तो slow_backendकैश सामग्री टैग संबंध बनाए रखने के लिए निर्दिष्ट करने की आवश्यकता है , या किसी एक को परिभाषित नहीं करना है।

यदि आप इसे परिभाषित करते हैं slow_backend, तो आप कैशे टैग के बढ़ने का जोखिम इतना बड़ा लेते हैं कि प्रदर्शन नकारात्मक हो जाता है; यदि प्रत्येक सर्वर अपने स्वयं के कैश टैग को बनाए रख रहा है, तो आप एक से अधिक सर्वरों को स्केल नहीं कर सकते हैं।

तो जब मेमेचे का उपयोग करते हैं, तो बेहतर तरीका ( कैविट के साथ आप कैश को स्वतंत्र रूप से फ्लश नहीं कर सकते हैं), का उपयोग करने से परेशान नहीं है slow_backend

किस स्थिति में, हम <slow_backend>database</slow_backend>इसे हटाने और बदलने का सुझाव देते हैं :

  <slow_backend>Memcached</slow_backend>
  <slow_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </slow_backend_options>

यह कैशिंग के दूसरे स्तर को तोड़ देगा / निष्क्रिय कर देगा (और टैग संग्रहण को रोक देगा), लेकिन फिर भी मेमकेच के प्रदर्शन की अनुमति देगा।

जिसका उपयोग करना है

यदि इसका एक ही सर्वर परिनियोजन - सब कुछ के लिए एपीसी का उपयोग करने से कोई नुकसान नहीं है।

यदि इसका वितरित सेट-अप है - तो आपको मेमेचे को तेज बैकएंड के रूप में उपयोग करना होगा (ताकि सभी मशीनें आम स्टोर तक पहुंच सकें)।

अधिक विषय यह है कि यदि आपका होस्टिंग प्रदाता आपको उपयोग करने के लिए सही सेट नहीं बता सकता है, तो आप निश्चित रूप से गलत होस्ट के साथ हैं।


विशेषताएं: sonassi.com , php.net , repoforge.org


जब मैं इस ट्रिक का उपयोग करके slow_backend_cache को अक्षम करने का प्रयास करता हूं, तो मुझे slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceMage 1.7.0.2 में मिलता है
हारून पोलक

6

मैं पिछले उत्तरों से काफी सहमत हूं, लेकिन यहां इसे पूरा करने के लिए एक छोटी परिशुद्धता है: हां, एपीसी को कैश स्टोरेज इंजन और PHP बाइट कोड ऑप्टिमाइज़र के रूप में इस्तेमाल किया जा सकता है। लेकिन दो बिंदुओं को स्पष्ट करने की आवश्यकता है:

  • एक तेज़ बैकएंड के रूप में, एपीसी द्वारा उपयोग किए जाने वाले कॉन्फ़िगरेशन निर्देशों को यह समझने के लिए कि डेटा को कैसे सहेजना चाहिए, इसे apc.user_4 निर्देशों के माध्यम से प्रबंधित किया जाता है। अन्य लोग केवल बाइट कोड कैश की चिंता करते हैं (Ex Apttt: opcode cache के लिए समाप्ति अवधि, apc.user_ttl: आपके Magento द्वारा कैश किए गए डेटा के लिए समाप्ति अवधि)।

  • और एक तेज़ बैकएंड के रूप में, APC में मेमेकैच्ड के समान व्यवहार होता है: यह कैश टैग का प्रबंधन नहीं करता है, और Magento के लिए इसे कॉन्फ़िगर धीमी बैकएंड की आवश्यकता होती है (या डिफ़ॉल्ट बैकएंड फ़ाइल का उपयोग करके)।

मेरे अनुभव से, विशाल ट्रैफ़िक वाली वेबसाइटों पर, यदि आप केवल बाइट कोड ऑप्टिमाइज़र के रूप में एपेक का उपयोग करते हैं, तो आपको apc.shm_size कॉन्फ़िगरेशन मान में 96 और 256Mo के बीच की आवश्यकता होती है। इसके अलावा apc.num_files_hint को 1000 से बढ़ाकर 15000 करें: डिफ़ॉल्ट रूप से apc कैश बाइट कोड कैश केवल 1000 फाइलें और Magento में डिफ़ॉल्ट रूप से लगभग ~ 20,000 PHP और PHTML फाइलें होती हैं ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l)। तो अपने स्रोत कोड के साथ इस मान को अनुकूलित करें।

यदि आप APC का उपयोग करते हैं या तेज बैकएंड के रूप में याद करते हैं, तो आपको आवश्यक मेमोरी पर कुछ सुझाव प्रदान करना मुश्किल है: यह वास्तव में आपके उदाहरण पर लागू कैश पॉलिसी पर निर्भर करता है।

अभी के लिए, आपका कैश कॉन्फ़िगरेशन इस तरह काम करता है:

  • प्रत्येक सामग्री को मेमेकैक्ड और फ़ाइल दोनों में संग्रहीत किया जाता है
  • धीमे बैकएंड से पहले फास्ट बैकेंड का हमेशा अनुरोध किया जाता है
  • अगर तेज बैकेंड में कुछ नहीं पाया जाता है, तो मैगेंटो धीमी बैकएंड में दिखता है

ये दो स्तर प्रबंधन क्यों? याद किया और अन्य तेजी से बैकएंड मेमोरी स्टोरेज हैं। तो इसका मतलब है कि डेटा दूषित हो सकता है या गायब हो सकता है।

आप इस कॉन्फ़िगरेशन प्रदर्शन को कैसे बढ़ा सकते हैं?

दूसरा लेखन अक्षम करें संभवतः सबसे कुशल विकल्पों में से एक है। यह आपके द्वारा उल्लिखित चौथे लेख में बताया गया है। लेकिन आपके द्वारा slow_backend_store_data स्रोत कोड में संशोधन के बिना उपयोग करने में सक्षम नहीं हैं। आपके संदर्भ में, मैं निम्नलिखित कारणों से इस अनुकूलन को करने की अनुशंसा नहीं करता: कैश में संग्रहीत आपका डेटा कभी नियंत्रित नहीं होगा। आप मेमोरी में डेटा स्टोर करेंगे, प्रदर्शन अर्जित करेंगे, लेकिन संभवत: अपने vistors को एक अमान्य सामग्री भेजें। तो आपको एक समाधान खोजने की ज़रूरत है जो आपको मेमोरी एसेस (बेहतर प्रदर्शन के लिए), नियंत्रण लिखना और धीमा_बैकेंड_स्टोर_डाटा कैशिंग को अक्षम करने की क्षमता सुनिश्चित करता है। आप इस संदर्भ तक पहुँच सकते हैं:

  • मेम्केच्ड सर्वर को रेडिस वन से बदलें (रीडिस को रीडिस नियंत्रित कर सकता है जैसे यह एक फाइलसिस्टम द्वारा किया जाता है), और एपीसी को बाइट कोड ऑप्टिमाइज़र के रूप में उपयोग करना जारी रखता है

  • * सुनिश्चित करें कि आप slow_backend_store_data विकल्प का उपयोग करने में सक्षम हैं * या तो अपने स्रोत कोड को कस्टमाइज़ करके या डेटाबेस डेटाबेस बैकएंड पर स्विच करके (हाँ यह आपके डेटाबेस सर्वर के लोड को बढ़ाता है, लेकिन यदि आपकी कैश नीति अच्छी तरह से परिभाषित है, तो यह नहीं होना चाहिए) एक समस्या)

  • * slow_backend_store_data विकल्प को निष्क्रिय करें * : इस कॉन्फ़िगरेशन में अब इसकी आवश्यकता नहीं है, आपने रीडिस द्वारा किए गए नियंत्रण को पढ़ा और लिखा है।


2

इसके लिए एक अतिरिक्त नोट के रूप में, हमने पाया है कि जब एपीसी का उपयोग मैगेंटो (ओपोड कैशिंग के लिए - हम पारंपरिक मैगनेटो पृष्ठ और ब्लॉक कैशिंग के लिए रेडिस का उपयोग करते हैं) तो यह सुनिश्चित करना महत्वपूर्ण है कि स्टेट सेटिंग 0 के उत्पादन में है (लेकिन 1 में) विकास):

apc.stat = 0

Apststat सेटिंग का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या यह अनुरोध करने के लिए प्रत्येक स्क्रिप्ट पर एक स्क्रिप्ट की जांच की जाए कि क्या इसे संशोधित किया गया है ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) और इसलिए उत्पादन वातावरण में इसे 0 पर सेट करने से APC का प्रदर्शन लाभ प्रत्येक अनुरोध के साथ यह चेक नहीं करेगा।

वर्थ ध्यान में रखते हुए कि एक बार apststat 0 पर सेट हो जाने के बाद, आपको फ़ाइल परिवर्तन (यानी पोस्ट-परिनियोजन) लेने के लिए अपनी वेब सर्वर प्रक्रिया को पुनः आरंभ करना होगा, लेकिन यह वैसे भी आपकी पोस्ट-परिनियोजन रणनीति का हिस्सा होना चाहिए।


1

बैकेंड को तेज करने के लिए हमने जो सबसे अच्छी चीज की है, वह REDIS को कैश हैंडलर के रूप में स्थापित करना है । यह अब Magento 1.8 और ऊपर से कोर में भी समर्थित है।

कुछ भी तुलना नहीं करता ... अब यह क्लिक क्लिक क्लिक है

http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

इसके अलावा आप रेडिस सेशन एक्सटेंशन को जोड़ने के लिए रेडिस मेमोरी सर्वर में सत्र जोड़ने पर भी विचार कर सकते हैं ...

सौभाग्य!


0

इस स्थानीय। Xml फ़ाइल से, Magento अंतिम प्रविष्टि का चयन करेगा और मेम्चे का उपयोग करेगा। मुझे लगता है कि एपीसी और मेमकेच मैगेंटो के साथ कैसे काम कर सकते हैं, इसके बीच एक भ्रम है।

सबसे पहले, APC के 2 उपयोग हैं:

  • opcode कैशिंग - अपनी php फ़ाइलों को opcode में संकलित करें, स्क्रिप्ट निष्पादन को लगभग 25% तेज बनाता है
  • की / वैल्यू स्टोरेज - को Magento द्वारा कैश सिस्टम के रूप में उपयोग किया जा सकता है।

दूसरी तरफ मेमेचे बस एक कुंजी / मूल्य की दुकान है। Memcache का बड़ा फायदा यह है कि यह क्लाइंट-सर्वर मोड में काम कर सकता है, इसलिए कई फ्रंटएंड सर्वर एक ही कैश का उपयोग कर सकते हैं, जो कि एक ही वेबसाइट के समान कई सर्वरों के लिए आवश्यक है।

सबसे आम सेटअप एपीसी को ओपोड कैशिंग प्राप्त करने के लिए स्थापित करना है (ताकि आपको ~ 25% तेजी से स्क्रिप्ट निष्पादन मिल जाए) और कैश सर्वर के रूप में मेमचे का उपयोग करें। मैंने APC का उपयोग कैश सिस्टम के रूप में भी किया और यद्यपि सिद्धांत रूप में यह Memcache की तुलना में थोड़ा तेज होना चाहिए, आप अंतर नहीं बता सकते।


इसलिए अगर मैं इसे पढ़ता हूं: सबसे आम सेटअप है एपीसी को ओपोड कैशिंग प्राप्त करने के लिए स्थापित करना (ताकि आपको ~ 25% तेज स्क्रिप्ट निष्पादन मिल जाए) और कैश सर्वर के रूप में मेमचे का उपयोग करें। फिर हम दोनों का एक साथ उपयोग कैसे कर सकते हैं? क्या यह इस तरह है: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl

दोनों को एक साथ उपयोग करने के लिए, आपको एपीसी के साथ कुछ भी करने की घोषणा करने की आवश्यकता नहीं है।
बेन लेसानी - सोनासी

तो कोड सब कुछ से होगा? <cache> <backend> memcached </ backend> और पहला भाग
छोड़ें

के अतिरिक्त। मेरे लिए बैकएंड की गति हमेशा समग्र गति के लिए एक उपाय रही है (जैसा कि एफपीसी आदि यहां लागू नहीं होता है ...)
snh_nl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.