Laravel 4.2 üzerinde bir proje geliştirmekteyim. Laravel 5.x sürümlerine geçmeme sebebim 4.2 eğitimlerine başlayıp orada biraz daha iyi ve hızlı yazabilmem. Proje bitip canlıya çıktıktan sonra upgrade yapabilirim bunun şuan için bir önemi bulunmamakta. Canlıdayken site üzerinde yoğunluk yaşanabilir. Örneğin günde 1000 kişi civarı ve çoğunlukla giren kişiler veritabanı işlemleri yapacağından dolayı bu da günde bir çok sorgu demek oluyor. Sizlere sormak istediğim 4 soru var. Aslında anket yaparım diye planlamıştım ancak anket oluşturma sistemi bulunmuyor sanırım.
Sorular;
- Laravel için hangi işletim sistemini(server) tercih ediyorsunuz ?
- Nginx mi yoksa Apache2 mi ? Neden ?
- Eloquent mi yoksa DB::Table yapısı mı ?
- Database'i ayrı bir sunucuda siteyi ayrı bir sunucuda tutmam daha mı yararlı yoksa ikisinide aynı sunucuda tutsam performans açısından nasıl olur ?
Yukarda bahsettiğim gibi bir proje için hangi cevaplar daha performanslı olur ? Cevaplarınız için teşekkür ederim.
evrend
- Centos 6 üzerinde Cpanel ile cloud hosting(Digitalocean || Vultr ) kullanıyorum.
- Apache v2.4 ve PHP v5.6 ile kullanıyorum(5.1 için yükselttim.). Cpanel kullanmıyor olsaydım kesinlikle nginx(performans daha iyi) kullanırdım. Yine kullanılabilir ama cpanelden yönetilebilirlik sıkıntılı oluyor.
- Procedureleri çalıştırmak dışında, Eloquent kullanıyorum.
- Database aynı sunucuda. Günün birinde ayrı bir sunucuda tutacak olursam digitalocean yada benim kullandığım vultr gibi cloud platformlardaki private network özelliği ile aynı networkte çalışıyormuş gibi clustering yaparak load balancing yapılabilir.
Bunların dışında cache'de saklanabilecek sorguları cacheleyerek. İçeriklerinizi varnish gibi bir ara katman ile cacheleyerek veritbanını ve sunucuyu rahatlatabilirsiniz.
Bu sunucuda bir uygulama çalışacaksa, yani virtual host gerekmiyorsa, HHVM kesinlikle PHP performansınız için kullanılabilir.
Nacizane tavsiyem; Yolun başındayken(değilseniz bile), Laravel'in LTS(Long Term Support) versiyonu(5.1) yeni çıkmışken projenize onunla başlamanızdır. Yada fazla ilerlemeden upgrade etmeniz.
Kolay gelsin.
TuTaMixx
@evrend görüşlerin için teşekkür ederim upgrade konusu düşünmekteyim. Diğer arkadaşlarında yorumlarını sabırsızlıkla beklemekteyim
MURATSPLAT
- Laravel için hangi işletim sistemini(server) tercih ediyorsunuz ?
Elbette Gnu/linux dağıtımı kullanabilirsiniz. Ubuntu yaygınlık ve kullanıcı desteği çok iyi. Üstelik çok iyi bir LTS sürümü var. Ben de VPS'de ubuntu 14.04 kullanıyorum. Windows'da çoğu geliştirme aracı ve kütüphaneler sorunlu ya da kurması işkence..
- Nginx mi yoksa Apache2 mi ? Neden ?
Nginx performansı iyidir. Apache'ye göre bellek tüketimi çok azdır. Bu konu hakkında tartışmalar bu forumda oldu. Tekrarlamaya gerek yok.
- Eloquent mi yoksa DB::Table yapısı mı ?
DB::table diye bir yapı yok. Laravel'deki 'Illuminate\Database' paketi içinde yer alan Eloquent'de içinde bulunduğu adlı '\Illuminate\Database\Connection' sınıf . Eloquent ise bir ORM'dir. Çok yeteneklidir. Eloquent kullandığınızda '\Illuminate\Database\Connection' sınıfını kullanırsınız.
ORM etkin kullanan birisi oturup db query yazmakla uğraşmaz. Öğrenmesi biraz zaman alır, kullanıldıkça alışmaya başlarsınır. Öğrendiğinizde de 'db istekleri yazmaktan sürünüyorduk!' dersiniz. En azında ben bunu dedim
- Database'i ayrı bir sunucuda siteyi ayrı bir sunucuda tutmam daha mı yararlı yoksa ikisinide aynı sunucuda tutsam performans açısından nasıl olur ?
Bu konu hakkında bir şey söyleyemem ama projeniniz buna ihtiyaç duyacağını pek sanmıyorum. Bir de VPS gibi bir şey kullanıyorsanız çekirdekleri artırır ve belleği artırabilirsiniz. Eğer gerekmiyorsa veritabanı farklı bir makinede olmasına gerek yok. Veritabanında taboları belleğe atarsanız zaten veritabanına fazla bir istek gitmeyecektir. Bu konu hakkında endişe edene kadar Laravel'de cache sürücüsü ve tabloların nasıl önbelleğe aracağını araştırın..
Bir tabloyu belleğe atmak çok da zor bir şey değil.
 
 /**
 * to get all images in a file collection object
 * 
 * @return Illuminate\Support\Collection;
 */
 public function all() { 
 
 list($key, $time) = $this->getCachingParameters();
 
 $results = $this->cache->remember($key, $time, function() {
 
 return $this->builder->get(); 
 });
 
 return new Collection($results); 
 }
@evrend'de bahsettiği gibi HHVM'nin peformansı PHP5 sürümünden en az iki kat daha hızlı. PHP 7 çıkana kadar kullanabilirsiniz. Ama bellek tüketimi çok fazla. HHVM kullanacaksanız sunucu belleği en az 2 gb olmalı. Bu konu da forumda yazılmıştı..
PHP 7 stabil olduğunda HHVM kullanamaya gerek kalmayabilir. Zira performansı HHVM çok yakın.. 1 yıl içinde stabil sürümü muhtemelen yayınlanır.