ความเร็ว: วีโอไอพีทั้ง APC และ Memcached


17

เราได้ศึกษาฟอรัมมากมายและไม่ทราบคำตอบต่อไปนี้ เรามีทั้งAPCและMemcacheติดตั้งบนเซิร์ฟเวอร์ของเรา เราไม่แน่ใจว่าการกำหนดค่าที่ถูกต้องและดีที่สุดคืออะไร

คำถามของฉัน

การตั้งค่าที่ดีที่สุดสำหรับการใช้ Magento โดยใช้ทั้ง Memcache + APC ในเวลาเดียวกันคืออะไร (หรือนี่ไม่ใช่สมาร์ทเลย)

การวิจัยพื้นหลัง

แนะนำให้ใช้ Memcache และ APC เป็นแคชที่เร็วและช้า (แต่ไม่มีดิสก์) ฟังดูเหมือนว่าจะใช้งานได้ก็ต่อเมื่อคุณมี RAM เพียงพอ (และแน่นอน)

และบทความนี้เกี่ยวกับ 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>

สถานการณ์

ติดตั้ง Brim FPC ที่ใช้ร่วมกันในพื้นที่: http://ecommerce.brimllc.com/full-page-cache-magento.html (FPC นี้ยังมีแคชไฟล์ที่ปรับขนาดได้เพื่อให้ซับซ้อนมากขึ้น)


@sonassi ทำไมไม่ลอง memcached-tag แทนล่ะ code.google.com/p/memcached-tag

คำตอบ:


26

คุณต้องเข้าใจความแตกต่างที่ชัดเจนระหว่างผลิตภัณฑ์ทั้งสองนี้เพื่อทำความเข้าใจวิธีการใช้งาน

  • APC เป็นทั้งแคช OPCodeและFast Backend
  • 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_segments
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()- แต่อย่างอื่น ณ จุดนี้ส่วนแคช OPCode ของ APC ทำงานอยู่

ไม่จำเป็นต้องกำหนดค่าทางด้านวีโอไอพี

การใช้ APC เป็นแบ็คเอนด์ที่รวดเร็ว

คุณต้องเพิ่มสิ่งต่อไปนี้ในของคุณ ./app/etc/local.xml

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

จากนั้นล้างแคชร้านค้าที่คุณมีอยู่ เพื่อตรวจสอบว่ามันใช้งานได้โหลดหน้าใน front-end และ./var/cacheไดเรกทอรีควรจะว่างเปล่า

การใช้ Memcache เป็นแบ็คเอนด์ที่รวดเร็ว

คุณจะต้องติดตั้ง Memcache เป็นส่วนขยาย PHP และติดตั้ง Memcache Daemon (Memcached) ที่เกี่ยวข้องบนเซิร์ฟเวอร์ของคุณ

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)

จากนั้นติดตั้ง Memcached บนเซิร์ฟเวอร์ สำหรับ RH / Centos ให้ปรับ URL ให้เหมาะกับรุ่นที่วางจำหน่ายและสถาปัตยกรรมของ CPU

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)

จากนั้นแก้ไข Magento เพื่อใช้ Memcache เป็นแบ็กเอนด์ที่รวดเร็วเปลี่ยนพา ธ ซ็อกเก็ตเป็นการเชื่อมต่อ TCP / IP ให้เหมาะสม

<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 ได้ (ซึ่งใช้เพื่อล้างข้อมูลแคชอย่างอิสระ) ดังนั้นคุณต้องระบุ a slow_backendเพื่อรักษาความสัมพันธ์ของแท็กเนื้อหาแคชหรือไม่กำหนดสิ่งใดเลย

หากคุณกำหนด a slow_backendคุณจะเสี่ยงต่อการเพิ่มแท็กแคชขนาดใหญ่จนทำให้ประสิทธิภาพไม่ดี นอกจากนี้ยังมีปัญหาโดยเนื้อแท้ที่คุณไม่สามารถขยายข้ามเซิร์ฟเวอร์หลายเครื่องหากเซิร์ฟเวอร์แต่ละเครื่องยังคงรักษาแท็กแคชของตนเอง

ดังนั้นเมื่อใช้ Memcache ที่ดีกว่าวิธีการ (ที่มีข้อแม้ว่าคุณจะไม่สามารถแคชล้างอิสระ) 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>

สิ่งนี้จะแบ่ง / ปิดใช้งานการแคชระดับที่ 2 (และป้องกันการจัดเก็บแท็ก) แต่ยังคงประสิทธิภาพการทำงานของ Memcache

ที่จะใช้

หากเป็นการปรับใช้เซิร์ฟเวอร์เดียว - ไม่มีอันตรายเพียงแค่ใช้ APC สำหรับทุกสิ่ง

หากเป็นการตั้งค่าแบบกระจายคุณจะต้องใช้ Memcache เป็นแบ็กเอนด์ที่รวดเร็ว (เพื่อให้ทุกเครื่องสามารถเข้าถึงร้านค้าทั่วไปได้)

สิ่งที่เกี่ยวกับคือถ้าผู้ให้บริการโฮสติ้งของคุณไม่สามารถบอกได้ว่าคุณถูกต้องหรือไม่


คุณสมบัติ: sonassi.com , php.net , repoforge.org


เมื่อฉันพยายามที่จะปิดการใช้งาน slow_backend_cache โดยใช้เคล็ดลับนี้ฉันได้รับslow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceใน Mage 1.7.0.2
Aaron Pollock

6

ฉันเห็นด้วยกับคำตอบก่อนหน้านี้ แต่นี่เป็นความแม่นยำสั้น ๆ เพื่อให้เสร็จสมบูรณ์: ใช่สามารถใช้ apc เป็นทั้งเครื่องมือจัดเก็บแคชและเป็น PHP ตัวเพิ่มประสิทธิภาพโค้ดไบต์ แต่จะต้องมีการชี้แจงสองประเด็น:

  • ในฐานะแบ็กเอนด์ที่รวดเร็วคำสั่งการกำหนดค่าที่ APC ใช้เพื่อทำความเข้าใจว่าจะต้องบันทึกข้อมูลอย่างไรจึงถูกจัดการผ่านคำสั่ง apc.user_% อีกอันเกี่ยวข้องกับแคชรหัสไบต์เท่านั้น (เช่น apc.ttl: ระยะเวลาการหมดอายุสำหรับแคช opcode, apc.user_ttl: ระยะเวลาการหมดอายุสำหรับข้อมูลที่เก็บในวีโอไอพีของคุณ)

  • และในฐานะแบ็กเอนด์ที่รวดเร็ว APC มีพฤติกรรมเหมือนกันกับ memcached: มันไม่ได้จัดการแท็กแคชและสำหรับวีโอไอพีนั้นต้องการแบ็กเอนด์ช้าที่กำหนดค่าไว้

จากประสบการณ์ของฉันบนเว็บไซต์ที่มีปริมาณการใช้งานมากหากคุณใช้ apc เป็นเครื่องมือเพิ่มประสิทธิภาพโค้ดไบต์เท่านั้นคุณต้องมีค่าระหว่าง 96 และ 256Mo ใน apc.shm_size ค่าการกำหนดค่า เพิ่ม apc.num_files_hint จาก 1,000 เป็น 15000: โดยค่าเริ่มต้นแคชโค้ดไบต์ไบต์แคชรหัส 1,000 ไฟล์เท่านั้นและ Magento มีประมาณ ~ 20,000 PHP และ PHTML ไฟล์โดยค่าเริ่มต้น ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l) ดังนั้นปรับแต่งค่านี้ด้วยซอร์สโค้ดของคุณ

หากคุณใช้ APC หรือ memcached เป็นแบ็กเอนด์ที่รวดเร็วเป็นเรื่องยากที่จะให้คำแนะนำเกี่ยวกับหน่วยความจำที่จำเป็น: มันขึ้นอยู่กับนโยบายแคชที่ใช้กับอินสแตนซ์ของคุณ

ในตอนนี้การกำหนดค่าแคชของคุณทำงานดังนี้:

  • เนื้อหาทั้งหมดจะถูกเก็บไว้ทั้งใน memcached และในไฟล์
  • ต้องการแบ็กเอนด์ที่รวดเร็วก่อนที่จะแบ็กเอนด์ช้า
  • หากไม่พบสิ่งใดในแบ็กเอนด์ที่รวดเร็ววีโอไอพีจะมองหาแบ็กเอนด์ที่ช้า

ทำไมการจัดการสองระดับนี้ memcached และแบ็กเอนด์อย่างรวดเร็วอื่น ๆ คือการเก็บรักษาหน่วยความจำ ดังนั้นหมายความว่าข้อมูลอาจเสียหายหรือหายไป

คุณจะเพิ่มประสิทธิภาพการกำหนดค่านี้ได้อย่างไร

การปิดใช้งานการเขียนครั้งที่สองอาจเป็นหนึ่งในตัวเลือกที่มีประสิทธิภาพที่สุด นี่คือคำอธิบายในบทความที่สี่ที่คุณพูดถึง แต่คุณไม่สามารถใช้งานได้หากไม่มีการแก้ไขซอร์สโค้ด slow_backend_store_data ในบริบทของคุณฉันไม่แนะนำให้ทำการปรับแต่งนี้ด้วยเหตุผลดังต่อไปนี้: ข้อมูลของคุณที่เก็บไว้ในแคชจะไม่ถูกควบคุม คุณจะเก็บข้อมูลไว้ในหน่วยความจำจะได้รับประสิทธิภาพ แต่อาจส่งเนื้อหาที่ไม่ถูกต้องให้ผู้ชมของคุณ ดังนั้นคุณต้องหาโซลูชันที่ช่วยให้คุณมีหน่วยความจำ acces (เพื่อประสิทธิภาพที่ดีขึ้น) การควบคุมการเขียนและความสามารถในการปิดใช้งานการแคช slow_backend_store_data คุณสามารถเข้าถึงบริบทนี้ได้โดย:

  • แทนที่เซิร์ฟเวอร์ memcached โดย Redis One (Redis สามารถควบคุมการอ่านและเขียนเหมือนที่ทำโดยระบบไฟล์) และใช้ Apcเป็นเครื่องมือเพิ่มประสิทธิภาพรหัสไบต์ต่อไป

  • * ตรวจสอบให้แน่ใจว่าคุณสามารถใช้ตัวเลือก slow_backend_store_data *โดยการกำหนดซอร์สโค้ดของคุณเองหรือโดยการสลับไปที่แบ็กเอนด์ช้าฐานข้อมูล (ใช่มันจะเพิ่มภาระของเซิร์ฟเวอร์ฐานข้อมูลของคุณ แต่ถ้านโยบายแคชของคุณกำหนดไว้อย่างดี ปัญหา)

  • * ยกเลิกการใช้งานตัวเลือก slow_backend_store_data * : ในการกำหนดค่านี้ไม่จำเป็นต้องใช้อีกต่อไปคุณได้ควบคุมการอ่านและเขียนโดย redis


2

เพื่อทราบเพิ่มเติมเกี่ยวกับสิ่งนี้เราพบว่าเมื่อใช้ APC กับ Magento (สำหรับ opcode caching - เราใช้ Redis สำหรับหน้า Magento ทั่วไปและ block caching) ดังนั้นสิ่งสำคัญคือต้องแน่ใจว่าการตั้งค่าสถานะเป็น 0 ในการผลิต (แต่ 1 ใน การพัฒนา):

apc.stat = 0

การตั้งค่า apc.stat ใช้เพื่อตรวจสอบว่ามีการตรวจสอบสคริปต์ในแต่ละคำขอเพื่อตรวจสอบว่ามีการแก้ไขหรือไม่ ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat) ) และดังนั้นการตั้งค่านี้เป็น 0 ในสภาพแวดล้อมการผลิตจะนำมาซึ่งประโยชน์ด้านประสิทธิภาพของ APC ที่ไม่ทำการตรวจสอบนี้กับคำขอแต่ละครั้ง

น่าสังเกตว่าเมื่อตั้งค่า apc.stat เป็น 0 คุณอาจต้องเริ่มกระบวนการเว็บเซิร์ฟเวอร์ใหม่เพื่อรับการเปลี่ยนแปลงไฟล์ (เช่นการปรับใช้ภายหลัง) แต่นี่ควรเป็นส่วนหนึ่งของกลยุทธ์หลังการปรับใช้ของคุณ


1

สิ่งที่ดีที่สุดที่เราทำเพื่อเพิ่มความเร็วในการแบ็กเอนด์อย่างมีนัยสำคัญคือการติดตั้ง REDIS เป็นตัวจัดการแคช ตอนนี้ได้รับการสนับสนุนใน core จาก Magento 1.8 ขึ้นไป

ไม่มีอะไรเปรียบเทียบ ... ตอนนี้มันคลิกคลิก clickerdy ​​คลิก

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

นอกจากนี้คุณสามารถลองเพิ่มส่วนขยาย Redis Session เพื่อเพิ่มเซสชันในเซิร์ฟเวอร์หน่วยความจำ redis ...

โชคดี!


0

จากไฟล์ local.xml นี้ Magento จะรับรายการสุดท้ายและใช้ Memcache ฉันคิดว่ามีความสับสนระหว่าง APC และ Memcache สามารถทำงานกับ Magento ได้อย่างไร

ก่อนอื่น APC มีการใช้งาน 2 แบบ:

  • opcode caching - รวบรวมไฟล์ php ของคุณเป็น opcode ทำให้การประมวลผลสคริปต์เร็วขึ้นประมาณ 25%
  • การจัดเก็บคีย์ / ค่า - Magento สามารถใช้เป็นระบบแคชได้

Memcache ในทางกลับกันเป็นเพียงที่เก็บคีย์ / ค่า ข้อได้เปรียบที่ยิ่งใหญ่ของ Memcache คือมันสามารถทำงานในโหมดไคลเอนต์ - เซิร์ฟเวอร์ดังนั้นเซิร์ฟเวอร์ส่วนหน้าหลายเครื่องสามารถใช้แคชเดียวกันซึ่งเป็นสิ่งที่ต้องมีหากคุณมีเซิร์ฟเวอร์หลายตัวที่ให้บริการเว็บไซต์เดียวกัน

การตั้งค่าที่พบบ่อยที่สุดคือการติดตั้ง APC เพื่อรับการทำ opcode (ดังนั้นคุณจะได้รับการดำเนินการสคริปต์ที่เร็วขึ้น ~ 25%) และใช้ Memcache เป็นแคชเซิร์ฟเวอร์ ฉันยังใช้ APC เป็นระบบแคชและแม้ว่าในทางทฤษฎีแล้วมันควรจะเร็วกว่า Memcache เล็กน้อยคุณไม่สามารถบอกความแตกต่างได้


ดังนั้นหากฉันอ่านสิ่งนี้: การตั้งค่าที่พบบ่อยที่สุดคือการติดตั้ง APC เพื่อรับการทำ opcode (ดังนั้นคุณจะได้รับการดำเนินการสคริปต์ที่เร็วขึ้น ~ 25%) และใช้ Memcache เป็นแคชเซิร์ฟเวอร์ แล้วเราจะใช้ทั้งสองวิธีร่วมกันได้อย่างไร เป็นเช่นนี้ไหม
snh_nl

หากต้องการใช้ทั้งสองอย่างร่วมกันคุณไม่จำเป็นต้องประกาศอะไรกับ APC เลย
Ben Lessani - Sonassi

ดังนั้นรหัสจะเป็นทุกอย่างจาก <cache> <backend> memcached </backend> และออกส่วนแรกออกไป
snh_nl

นอกจากนี้ สำหรับผมความเร็วแบ็กเอนด์ที่ได้รับเสมอวัดสำหรับความเร็วโดยรวม (ตาม FPC ฯลฯ อย่าใช้ที่นี่) ...
snh_nl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.