Jump to content

Performans hakkında


Gombidi Bilişim

Recommended Posts

Merhaba arkadaşlar öncelikle hepinize iyi çalışmalar.

 

Bir süredir prestashop kullanıyorum. Yaşadığımız en büyük problemlerden olan performans sorunu hakkında edindiğim tecrübeleri paylaşmak, hatalı tecrübelerim olduysa sizlerin sayesinde bunları düzeltmek, doğru olduğunu ortakça düşündüğüm tecrübelerimin işinize yaramasını sağlamak amacındayım.

 

Forumda bazı konular gördüm, Türkiye sunucuları, yurtdışı sunucuları, bazı modüllerin kullanılmaması hakkında, vs..

 

İlk olarak değineceğim kısım sunucu bölümü.

 

Eğer anlık istek sayınız en fazla 200 ün altında ve toplam ürün sayınız 1000 den aşağıysa, Türkiyeden bir sunucu kullanabilirsiniz. Fakat firmayı doğru seçmeniz gerekiyor. Size destek vermeleri çok önemli, zira bazı performans ayarları yapmanız yada yaptırmanız gerekebilir.

 

Fakat anlık istek sayınız çok fazla ise merkezi fransa olan ve dünyanın bir çok bölgesinde datacenterları bulunan bir hosting firması önerebilirim. Fiyatları gerçekten çok uygun. Örneğin 128 GB DDR3 ECC ramli 2 adet Intel Xeon E5-2650v2 işlemciye sahip (buda 36 core yapıyor) bir makineyi 200 küsür euro ya (Vat hariç) alabiliyorsunuz. Garanti 500 mbit band veriyorlar. Hatta ani yüklenmeniz olur diye burst seçeneği var belirli bir süre sizi 3 gbit e çıkartıyorlar (bizzat şahit oldum). Türkiyede bu konuda iyi firmalar yok değil, oldukça fazlalar. Fakat fiyat performans derseniz bu firma gerçekten harika.

 

Yurtdışı sunucu kullanmanın avantajları ve dezavantajları.

 

Avantajları:

* Türkiyede bant genişliği çok pahalı olduğu için yurtdışı firmalar daha hızlı bir altyapıya daha ucuza sahipler.

 

* Türkiyede bulunabilecek bant genişliği sınırlı, bu yüzden gerçekten dünyanın bir numarası bir sunucunuz bile olsa zaten bağlantı ona çerez gibi gelecektir ve sunucu yükü %25 i görmeden siteniz yavaşlayacaktır.

 

Dezavantajları:

* Öncelikle şunu söylemem gerekir, Türkiyede bildiğim çok fazla firma var, ve bu kişiler destek konusunda gece yataklarından kalkıp ilgilenen kişiler, gerçekten dürüst bir satıcı bulduğunuzda ellerinizi ensenize alın sitenizdeki satışı takip edin sadece.

Özellikle sunucu yönetimi konusunda orta seviye bir bilgiye sahipseniz (dikkat edin amatör bile değil çünkü google da bile zar zor bulabileceğiniz bazı ayarlar mevcut) Türkiyeden bilindik güvenilir bir yerden almanızda fayda var. Yeterki paranız olsun. Zaten anlık 1000 istek alıyorsanız bunun sermayesi devede kulak kalır. Load balancing yaparlar, cdn konusunda yardımcı olurlar bir şekilde çözerler. Yurtdışında bu konu için iyi dil bilmeniz lazım. "Abi hallediver şunu gözünü seveyim parası neyse verelim" in ingilizcesini kullanan görmedim, varsa aynı samimiyeti alamaz.

 

* Çok tatlı firmalar var co location olarak kullanabileceğiniz. Bir makine alın koyun firmaya işiniz görülsün.

--------------------------------------------------------------------------------------------------------------------------------

Bazı bilinmesi gerekenler:

Sanıldığı gibi yurtdışı sunucuların seo açısından bir sakıncası bence yok. Çünkü o eskide kaldı. Google sayfanızla alakalı analizlere iki farklı şekilde ulaşıyor. Birinde siz yardımcı oluyorsunuz, diğeride kullanıcıların google üzerinden veya diğer kaynaklardan sitenize ulaşılması üzerine olan bir mantık. Birinci seçenekte google bunu bir java ile yapıyor ve biliyorsunuz ki javascript uygulamaları client bazlı çalışır. İkincisinde de kullanıcıların çerezleri javascript vasıtası ile tutuluyor ve bilgiler google a yollanıyor. Yani her ne kadar aksi söylenirse söylensin, ben henüz google ın sunucu lokasyonunu dikkate aldığını ispatlayamadım.

 

Sunucuyu seçtikten sonra yapılması gereken bazı ayarlar.

Diyelim sunucuyu alacağınız yeri seçtiniz. Özellikle kendi sunucusunu kendi kuran arkadaşlar için anlatıyorum.

Benim size tavsiyem litespeed kullanmanızdan yana. Zira bütün bencmark testler kendisinin hızını gösteriyor.

 

Aynı zamanda sunucunuza uygun mysql ayarlarını iyi yapmanız gerekiyor bunun için https://tools.percona.com/wizard adresinden yardım alabilirsiniz. Mysql konusunda hızım iyi olacak diye sakın ha tablolalarınızı MYISAM yapmayın. Zira prestashop kullanıyorsanız siz e-ticaret firmasısınız demektir. Ve veri kaybı söz konusu bile olamaz. InnoDB nin kendi için bir tür backup mantığı mevcut. Ve veriler daha stable tutuluyor.

 

join_buffer_size, sort_buffer_size, read_rnd_buffer_size gibi ayarlara pek fazla dokunmayın, bakmayın size tuner scriptlerin verdiği tavsiyelere. Bunlar tamamen kullanıcı başına düşen limitler. Sizin en önemli ayarınız gereken kısım innodb_buffer_pool_size. Bu alan raminizin %60 ını kaplasa iyi olur. Zira sorgularınızın kullanımı bu ayar düşük olduğunda hızlı olsada çok fazla kullanıcıya önceden hazırlıklı olmalısınız. bir sorguya 200 kişiden her birinin 3 er ms de bağlanması güzeldir. Ama bir sorguya 10.000 kişiden her birinin 30 er ms de erişmesi ve sunucunun takılmaması bence daha iyidir. Raminiz varsa dayayın gitsin.

 

Sizlere CDN kullanmanızı tavsiye edeceğim, ha eğer bütçem yeterli değil diyorsanız, bir subdomain açın image lar için, bunun bağlı olduğu klasöre bir ramdisk oluşturup mount edin ( yazma izinlerini unutmayın ). Ufak bir bash script yazıp cronjoblayın ( scriptinizi boota atmayı unutmayın) verileride bununla senkronize edin. Eğer litespeed kullanıyorsanız sadece ramdisk ayarlamanız yeterli çünkü bu konuyu düşünüp ayarını koymuşlar sağolsunlar. Başka bir sistem kullanıyorsanız fotoları ramden vermek sizi çok fazla tatmin edecektir.

 

Mysql datalarınızıda ramdiskde tutabilirsiniz, fakat bu konuda iyi bir bash yazmanız gerekebilir, çünkü bir reboot durumunda veri kaybı yaşarsınız.

 

Bu anlattıklarımı kendisi yapan bazı uygulamalar yok değil. Litespeed alırsanız zaten php ve statik içerikleriniz için gerekli herşeyi yapıyor sağolsun. Fakat mysql diyince iş değişiyor. Bu konudada percona daki bazı uçuk arkadaşlar var. Gerçekten innodb konusunda uzmanlar. http://www.percona.com/blog/2011/04/04/mysql-caching-methods-and-tips/ linki size faydalı olabilir.

 

Gelelim prestashopun performans ayarlarına.

 

Öncelikle smarty ayarlarında kesinlikle derlemeye zorlama işlemi yapmayın her zaman dosyalar değiştiğinde derlensin. Kesin tavsiyem önbelliği (sitenin kodlarında değişiklik yapmıyor yada bir modül denemiyorsanız) açık tutmanızdır. Eğer 3000-4000 den fazla ürününüz varsa cache ayarlarından memcache den başkasını sakın kullanmayın performansınız düşer. Ayrıca nedendir bilmem xcache kullandığımda bazı kullanıcılarım cookie sorunu yaşıyorlar. Denemek isterseniz tutmayayım sizi.

 

CCC diye bir güzellik var ama bu güzellik fazla ürün olan geniş veritabanlarında sıkıntı oluşturabiliyor. Ayrıca extra modül kullanıyorsanız javascriptleri sona taşımak çokta sağlıklı olmayabilir. HTML i küçültmek için prestashop sayfanın kodları bir sıkıntı oluşmaması için mysqle alıyor, sonra bu derlenmiş sayfa kodundaki gereksiz boşlukları, satır atlamalarını temizliyor sonra size cevap veriyor. Yine mysql yine mysql. Bunu kapalı tutun ve mümkünse tpl lerinizdeki gereksiz boşlukları ( zor olmayacaksa satır atlamarınıda) temizleyin. "HTML içindeki javascript i hizada sıkıştırın" seçeneğide aynı mantıkta. Kaç satır javanız varki sıkıştırıyorsunuz Allah aşkına. Yormayın sunucuyu bunlarla. Bunlar yüksek javaya ve html içeriğe sahip tpl ler için konulmuştur. Kısacası "HTML i küçültün" , "HTML içindeki javascript i hizada sıkıştırın" , "JavaScript sonuna taşıyın" bunlar hariç diğer CCC ayarlarını açabilirsiniz. 

 

Kullandığınız ve modüller çok önemli

 

Özellikle ürün içerikleriniz uzunsa (300 kelimenin üzerinde), unutmayın ki bunları ürün listelerken mysql den çağırmak tamamen saçmalık. Kodlarda bazı modifikasyonlar yapmanız gerekiyor. Aynı şey kategoriler ve markalar içinde geçerli. Prestashop sağolsun blockcategories modülünde tüm kategori içeriğini * ile çağırıyor, yada tek tek çağırdığı alanlarda cl.description da ekliyor. Yalnızca kategori adı, kök kategorisi, linki ve sırası gereken bir çekme işleminde neden böyle yapmışlar bilmiyorum. Bir bilen varsa yazsın bi zahmet :). Kısacası ürün listesi, kategori listesi vs... listesi alanların sadece lazım olan içerik için sql kodu kullanmak hızı arttırıyor.

 

Sepet kurallarınız çoksa cartrule.php için birazcık araştırma yapın. Uygun döküman bulacağınıza eminim.

 

Prestashop bir çok sorgusunda ( bazı yazılımcılar php konusunda uçsada mysqlde tecrübesizler ) where içinde select kullanmış. Tam olarak ne demek istiyorum. Örnek vereyim.

 

Hali hazırda çalışan bir sql scripti: 

SELECT c.id_parent, c.id_category, cl.name, cl.link_rewrite
FROM `tktk_category` c
INNER JOIN `tktk_category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = 11 AND cl.id_shop = 1 )
INNER JOIN `tktk_category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = 1)
WHERE (c.`active` = 1 OR c.`id_category` = 2)
AND c.`id_category` != 1
AND `level_depth` <= 4
AND nleft >= 4 AND nright <= 1193
AND c.id_category IN (
SELECT id_category
FROM `tktk_category_group`
WHERE `id_group` IN (1)
)
ORDER BY `level_depth` ASC, cs.`position` ASC

koyu olarak belirttiğim alan mysql i yormaktan başka bir işe yaramaz. Bunu yerine şu şekilde kullanın: 

SELECT SQL_NO_CACHE c.id_parent, c.id_category, cl.name, cl.link_rewrite
FROM `tktk_category` c
INNER JOIN `tktk_category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = 11 AND cl.id_shop = 1 )
INNER JOIN `tktk_category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = 1)
INNER JOIN `tktk_category_group` cg ON (cg.`id_category` = c.`id_category` AND cg.`id_group` IN (1))
WHERE (c.`active` = 1 OR c.`id_category` = 2)
AND c.`id_category` <> 1
AND `level_depth` <= 4
AND nleft >= 4 AND nright <= 1193
ORDER BY `level_depth` ASC, cs.`position` ASC

Doğru olan kısmı gösterdim. Tabi bu alan debug mode dan örnek verildiği. Kodlar içinde gerekli yerleri dikkate alacağınızı tahmin ediyorum.

 

Ayrıca aradaki farka dikkat ederseniz "!=" yerine "<>" şartını kullandım. Fazla ayrıntısına girmek istemiyorum fakat ikisi arasında performans farkı var. Biri eşitliği kendi içinde listeleyeip bunu terslerken diğeri eşitliği direk süzüyor.

 

Zaman içinde farklı performans değişkenleri daha bulabilirim diye düşünüyorum. Son olarak şunu belirtmek istiyorum. Burada yaşadığım tecrübeler tamamen tarafımdan tespit edilmemiştir. Bu konuda bir kaç büyük ustamın (isimlerini hunharca yayınlamak istemiyorum, bir tanesi freebsd ve squid uzmanı) yardımıda dokundu.

 

Burada verdiğim ayarlarda herhangi bir hata, eksiklik varsa tamamlayabilirsiniz. Kesinlikle alanımda iddialı değilim, fakat bunlar şahsımın elde ettiği ve sonuç aldığı tecrübeler. Sizde aynı sonucu vermez ise bu konuda bir sorumluluk alamam. Vakit ayırıp okuyanlar için çok teşekkürler. Umarım benim için ve sizler için faydalı bir konu olur.

 

Sürç-i lisan ettiysem affola.

  • Like 3
Link to comment
Share on other sites

oktay'ı şahsen tanıyorum. şuan tükiyenin en büyük en fazla satış rakamını yakalan prestashop sitesini yönetiyor. verdiği bilgiler çok yararlı ve takdire şayan açıklamalar. kendiside prestashop 'u baya düzenledi baya bi bilgisi var dikkate alın bence...

Link to comment
Share on other sites

Merhabalar,

Öncelikle aramıza hoş geldiniz, başlığı görünce dikkatimi çekti ve başından sonuna kadar okudum, emeğinize sağlık. Naçizane ben de birkaç ekleme yapmak isterim ama bundan önce belirtmek gerekir ki performans çok ciddi ve detaylı bir konu üstelik bir çok parametre söz konusu.

 

  • MYISAM ürün sayısından ziyade işlem sayısına (yani sürekli güncellenen tablolarda) tercih sebebi olabilir aksi halde InnoDB
  • Sunucu taraflı önbellekleme sisteminde ben de xCache 'i tavsiye etmiyorum eskiden MemCACHE kullanırken şu an bunların yerine Alternative PHP Cache yani APC kullanmaktayım, tavsiye ederim.
  • Yine sunucu tarafında: ben derleyici olarak Nginx kullanmaktayım tavsiye ederim: (ücretsiz) açık kaynak Rus yapımıdır, alanında oldukça başarılıdır yalnızca sizin de başarılı olmanız gerekir şöyle ki konfügirasyon ayarlarını güzel yaparsanız sıkıntı yaşamazsınız.
    Bu arada 2015 yılı itibari ile $10 Milyon yatırım almıştır ve artık Türkçe desteği de vardır bkz: Türkçe Nginx
  • Web sitenizdeki tüm çalışmalarınız bitene kadar hata gösterim modunu açık bırakıp en küçük detaylara bile önem göstererek hem hataları gidermiş olur hem de performans için destek sağlamış olursuuz.
  • MySQL optimizasyonu için MySQL Tuning kullanmak isterseniz buradaki yazımı inceleyebilirsiniz.
  • Slayt modülü kullanıyorsanız bu görsellerin boyutlarını da sıkıştırmanız gerekir eğer bir grafikerden destek alıyorsanız kendisi bunu yapacaktır veyahut hatırlatabilirsiniz ya da bu işlemi siz online yapmak isterseniz jpg için buraya, png için buraya bakabilirsiniz
  • CSS ve JS dosyalarınızı bir defaya mahsus olmak üzere yapılacağı için kendiniz küçültebilirsiniz manuel yapmak yerine online bazı araçlardan faydalanabilirsiniz örn: css için buraya js için buraya bakabilirsiniz.

 

Performans konusuyla ilgili döküman okumak isterseniz (EN) Prestashop ekibi tarafından hazırlanan ve bir çok detaya değinen bu sayfayı inceleyebilirsiniz. Yok İngilizce ve döküman bana göre değil" derseniz veyahut "Daha önce açılmış Türkçe başlık altında neler konuşulmuş?" diye merak ederseniz buraya ve buraya bakabilirsiniz.

 

"Performans sunucu taraflıdır!" diye kestirip atmak veyahut "Performans dediğin script taraflıdır!" demek günümüz çağında ne kadar  traji sözlerdir. Bu konuya değinmeyeceğim bile.

Ayrıca burada bahsi geçen konular, deneyimler neticesinde: e-ticaret sitesinin durumuna, geliştiricinin yorumuna ve birçok parametreye göre değişiklik gösterebileceği için kesin sonuçlar çıkarılamaz.

 

 

Not: Bu sayfada geçen bilgiler, son kullanıcıdan ziyade geliştiriciler içindir.

Özeleştiri: Performans konusu (eskisi kadar olmasa da) Prestashop için de maalesef bir sorundur.

 

Başarılar.

Link to comment
Share on other sites

Bu faydalı konu için çok teşekkür ederim. Nacizane birkaç görüşüm bende paylaşayım.

 

 Sunucu Türkiye'de gerçekden kaliteli firmalar var.
 Ama destek işi biraz şans tabi. Neticede insanla çalışıyorsunuz. Ağam paşamla işi götürmeye çalışıyorsunuz.
 
 Okuma ve filtreleme yapılan büyük tablolarda innodb tercih edilmeli,
 Hızlı insert yapılması gereken tablolarda ise Myisam tercih edilmeli diye biliyorum.
 
 Memcache gerçekten sunucuyu kurtarıyor ve bende kullanıyorum.
 Statik dosyalar içinse nginx'i faydalı buluyorum.
 Php dosyalarının hızlı derlenmesi için fastcgi tavsiye ederim.
 
 Saatlerce değişmeyen bir anasayfanız varsa, bunu arka planda bir index.php olarak yazdırabilir ve sorgusuz olarak oradan çektirebilirsiniz.
 Üst login kısımları dinamik olarak gelir, sonraki kısımları yazdırdığınız dosyadan çekebilirsiniz.
 
 Açıkcası 1.2.5 versiyonunda çok fazla php ve tpl kodlarında değişiklik yaptığım için bu defa hiç dokunmak istemiyorum. 
 Zaten scripti hazırlayanların bizlerden daha tecrübeli oldukları düşüncesine teslim oluyorum. Yinede css dosyalarının herbirinin bir yerde olması,
 global.css dosyasının boyutu beni düşündürüyor. Mümkün olsada bu css lerin hepsi bir klasörden çağrılsa. Bu css lerin içindeki gereksiz kodları temzlenmesi için
 firefox ve chrome için güzel eklentiler mevcut. size kullanılmayan satırları söylüyor ve isterseniz siliyor. dikkatli yaparsanız %70 ' varan küçültme sağlayabilirsiniz.
 
 Jquery dosyaları için google (hatta google serverları bu aylar sorunlu) http://code.jquery.com/jquery-1.11.2.min.js gibi jquery kütüphanesinden çağırmak,
 bant ve sayfa yükleme hızı bakımından gerekli.
Link to comment
Share on other sites

  • 10 months later...

bu bahsettiğiniz performans ayarları,prestashop.com un kendi online cloud serverinde mümkünmüdür? adamlar kendi online clodlarını açmışlar.tabiki kendi addons larından başka harici bir modül eklemiyorsunuz.illede kendi addonlarını satın alıp kullanmalısınız.

buprestanın kendi online cloud serverinin performansı hakkındada bilgi verirmisiniz?

Link to comment
Share on other sites

Bulut sunucuların genel mantığı konusunda uzun uzadıya bilgi verebileceğim bir konu başlığı değil burası. Fakat yinede aradığınız cevabı vermeye çalışacağım.

 

Öncelikli konu maliyet. Bulut sunucular tabi yapılacak işe göre düzenlenebilen sunucular olabileceği için ve prestashop ta kendi bulutlarını sadece kullanılacak işlere göre düzenlediği için performans elde edebilirsiniz. İlk başlarda maliyet size düşük gelebilir fakat kullanıcı sayınız arttıkça özellikleri yetmemeye başlayacak. Bu durumda tabi prestashop bulut boş durmuyor, kaynakların yetmediğine dair size mail bilgilendirmeleri yolluyor. Kısacası anlık 250-300 kullanıcının getireceği siparişten sonra maliyetiniz sizin için çok önem arz etmeyecek gibi olsa da kendi imkanlarınız ile kuracağınız sistemlerin ilerleyen safhalarda çok daha düşük bütçeye ihtiyaç duyduklarını fark edeceksiniz. 

 

Bir diğer konu ise serbestlik, Google dan, amazondan yada benzeri firmalardan alınabilen "dedicated cloud" yada "virtual dedicated cloud" sistemler olmadığı sürece hiç bir bulut sistemde serbestlik sağlayamazsınız. Hele konu prestashop bulut ise tamamen onun verdiği imkanları ve panelleri kullanmak zorunda kalabilirsiniz. Başlangıçta bir çok elektronik ticaret sitesi için bu çok önem arz etmesede, ilerleyen zamanlarda sunucu içinde özel yazılımlara ("bash scriptler", vb.. ) ihtiyacınız olabilir.

 

Maliyet konusuna bir şey diyemem çok ucuz olmasa da başlangıç için diğer firmalarla arasında uçurum yok. Ayrıca kolayca kurulum yapar destekte alabilirsiniz.

 

Eğer elektronik ticarete yeni başlıyorsanız ve şimdilik maliyet çok önemli değil diyorsanız prestashop bulut sistemini kullanabilirsiniz. Fakat ilerleyen zamanlarda zaten kendiniz tam kontrollü ( bulut teknolojisi olması tabi daha iyi ) bir "dedidated" a yada "cloud dedicated" a geçeceksiniz.

 

Burada bahsettiğim cloud dedicated tabiri biraz karışık geliyor olabilir. Google ve Amazonun hizmetleri bunlara bir örnek.

 

İyi çalışmalar dilerim.

Link to comment
Share on other sites

evet,şimdi biraz baktımda,çoğu hosting firması file count dosyalarını 250.000 ile 300.000 arasında tutuyorlar. örnek olarak 400.000'in üzerinde ürün kapasitesine sahip bir sitede,tabiki bu alan yetersiz gelir.her üründe enaz 2'şer,3'er resim varsa,eğer daha fazla varsa,bu durum kötü.mysql veritabanı boyutu da ayrı bir mesele.bu tür kısıtlı hostinglerde yer kiralamak biraz tehlikeli ozaman. sınırsız ban trafiğini geçtim.adamlar file count sınırı getirmişler. onun için yurt dışı hostinglere baktım.onlarda da file count sınırı var cloudlarda. vps ve dedicated lere baktım hdd kapasiteleri türkiyedekilerle aynı zaten.benim istediğim,sınırsız bandwith,dosya sayısı sınırsız,veri tabanı alanı sınırsız bir sistem ama,böyle birşey mümkün gibi görünmüyor galiba.özel donanım tasarlayıp sunucu sahiplerine verme imkanı varmı?

alibaba ve express clouda terfi edecekti. bi gelişme varmı acaba? onlar bunların altından nasıl kalkıyorlar? (tedarik süreci,bayi anlaşmasında filan bahsetmiyorum)

sadece bilmek istediğim nasıl bir altyapı ile çalışıyorlarki,milyonlarca ürün ve açıklaması,resimleri bir sunucuda barındırılabilir? veri tabanıda ayrı bir hikaye tabi.

hemen aklınıza şu gelmesin."eticarete daha yeni başlayacak olan adam,aliexpresin sistemini sorguluyor"

sorgulamak zorundayız ama birşekilde :) 

Link to comment
Share on other sites

web serverler içinde, web script bir sunucuda ise, diğer sunuculara ayrı ayrı ürünler nasıl girilir peki.bunu anlamadım.biz prestashopta ürün girin girince,kendi içinde kayıt ediyor.extra bir sunucuya nasıl kayıt gireriz? bunula ilgili bir makale varmı? ne önerirsiniz?

 

 

 

 

 

Load-balancer-Setup1.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...