Skip to content

Magento’nuzu APC, Memcached veya Redis ile Hızlandırın

Merhaba arkadaşlar,

Bugünkü makalemde sizlere Magento e-ticaret sitenizi APC, Memcached ve Redis ile nasıl hızlandıracağınızı anlatacağım. Hepsinin artılarından ve eksilerin bahsedeceğim. Ama öncelikle Magento’nun önbellekleme sistemine bir göz atalım.

Magento’nun İki-Aşamalı Önbellekleme Sistemi

Magento varsayılan olarak Zend Framework’ün iki-aşamalı önbellekleme sistemini kullanır.

Basit olarak anlatmak gerekirse önbellek kayıtlarını iki ayrı sistemle kaydedir. APC veya Memcached çok hızlıdır fakat sınırlıdır. Yavaş olan önbelleklemesi is dosya sistemidir.

APC ve Memcached key/value olarak önbellekleme yapar, fakat tagging(önbellek kayıtlarını gruplama) desteği yoktur. Dosya sistemi ve Redis ise tagging desteklidir.

magento_two_level_caching_overviewMagento Önbellek Sistemlerini İnceleyelim

Dosya sistemi (var/cache)

Magento varsayılan olarak önbelleklerini dosya sistemi ile sağlar. Bu önbellekleri var/cache klasörü altında bulabilirsiniz.

Bu önbellekleme sistemi küçük web siteleri için oldukça iyidir. Fakat sunucuya fazla istek göndermeye başladığınız zaman bu önbellekleri okumak gittikçe yavaşlamaya başlar çünkü önbellek kayıtlarının miktarı boyutları artar.

Magento önbellek sistemi tag’ler(etiketler) üzerine kuruludur; bu da önbellek kayıtlarınızın belirli önbellek gruplarına dahil olması demektir.

Avantajları
Varsayılan olarak çalışır, herhangi bir kurulum vs. ile uğraşmanıza gerek kalmaz.

Dezavantajları
Magento yeni sipariş verildiğinde, yeni ürün eklendiğinde  mağazanızın güncel kalması için ön bellek kayıtlarınız temizler. Fakat Magento bu temizlik sırasında bütün ön bellek gruplarınızdaki ön bellek dosyalarını tek tek açar ve satır satır kontrol eder. Eğer 1000 üründen fazla ürününüz varsa Magento’da kayıtlı bu 50MB’dan büyük ön bellek dosyasına işaret eder. 50MB ön bellek boyutu da 3500 kadar ön bellek dosyasına denk geldiğinde her dosyayı açıp işlemenin ne kadar zahmetli ve zaman alacağını siz düşünün.

Performansını artırmak için
1. Normal hard-disk yerine SSD kullanın
2. var/cache dizinini tmpfs içine koyun.

APC – Alternative PHP Cache (Key/Value)

APC, Alternative PHP Cache’in kısaltması olan ve PHP için ücretsiz ve açık kaynak kodlu opcode ön belleklemedir.

Avantajları
Çok hızlı bir ön bellekleme sistemidir.

Dezavantajları
APC, tagging’i desteklemez. Dosya sistemi ile yavaş ön belleklemeye de devam edersiniz.

Performansını artırmak için
1. “apc.shm_size” parametresi ile APC’ye yeterli hafızayı atadığınıza emin olun
2. Aşağıdaki en iyi php.ini ayarlarını uygulayın.

Ayarlama (app/etc/local.xml)

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

php.ini Ayarları

apc.enabled = 1
apc.optimization  = 0
apc.shm_segments = 1
apc.shm_size = 768M
apc.ttl = 48000
apc.user_ttl  = 48000
apc.num_files_hint = 8096
apc.user_entries_hint = 8096
apc.mmap_file_mask = /tmp/apc.XXXXXX
apc.enable_cli = 1
apc.cache_by_default  = 1
apc.max_file_size = 10M
apc.include_once_override = 0

Memcached (Key/Value)

memcached yüksek performanslı dağıtılmış hafıza nesnelerini önbellekleyen bir sistemdir. Web uygulamalarında veritabanı yükünü hafifletmek için kullanılır.

Avantajları
Çok hızlı bir ön bellekleme sistemidir.

Dezavantajları
Memcached, tagging’i desteklemez. Dosya sistemi ile yavaş ön belleklemeye de devam edersiniz.

Gereksinimler
– Memcached sunucu
– Memcached için olan PHP eklenti

Ayarlama (app/etc/local.xml)

<global>
...
<cache>
  <backend>memcached</backend><!-- apc / memcached / boş=dosya -->
  <memcached><!-- memcached ön bellekleme -->
    <servers><!-- birden fazla sunucu eklenebilir -->
      <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>
...
</global>

Redis

Bu ön bellekleme sistemi sayesinde Redis Sunucusunu merkezi depolama olarak kullanacaksınız. Tagging bu sistemde destekleniyor artık yavaş depolamaya hiç ihtiyacınız kalmayacak. Birden fazla sunucu havuzu ile çalışıyorsanız bu ön bellekleme sistemi tam olarak aradığınız sistem.

Avantajları
Tagging desteği olan süper hızlı bir önbellekleme sistemidir.
Günlük ziyareti 500.000 üzerinde olan Magento’da test edilmiş olup sonuç muhteşem ve kusursuz olmuştur.

Gereksinimler
Sunucuda Redis kurulu olmak zorundadır.
PHP Eklentisi olan phpredis kurulu olmalıdır.
Magento eklentisi olan “Cm_Cache_Backend_Redis” kurulu olmaldır.

Kurulum

  1. Redis‘i kurun. (2.4+ gereklidir.)
  2. phpredis‘i kurun.
  3. “Cm_Cache_Backend_Redis” Magento eklentisini kurun.
  4. app/etc/local.xml dosyasını düzenleyin
<global>
...
<cache>
  <backend>Cm_Cache_Backend_Redis</backend>
  <backend_options>
    <server>127.0.0.1</server>
    <port>6379</port>
    <persistent></persistent>
    <database>0</database>
    <password></password>
    <force_standalone>0</force_standalone>
    <connect_retries>1</connect_retries>
    <automatic_cleaning_factor>0</automatic_cleaning_factor>
    <compress_data>1</compress_data>
    <compress_tags>1</compress_tags>
    <compress_threshold>20480</compress_threshold>
    <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf and snappy -->
  </backend_options>
</cache>
...
</global>

Sonuç

Eğer küçük bir web siteniz varsa APC+Dosya Sistemi işinizi rahatlıkla görecektir. Hard-disk yerine SSD kullanıp ve önbellek klasörünüzü de tmpfs içine koyarsanız gayet hızlı olacaktır. Fakat büyük web siteleri için(tek sunuculu, çok sunuculu) en güzel çözüm Redis’dir. Redis’i kurup kullanmanızı öneririm.

Kolay gelsin,

TR Kodlama GitHub'da!

TR Kodlama'da yer alan makaleleri GitHub üzerinden düzenleyebileceğinizi biliyor muyudunuz? Harika değil mi? Bu makale ile ilgili düzenleme yapmak isterseniz aşağıdaki butona tıklayınız!

GitHub'da Görüntüle ve Düzenle!