Şu tarihte

OpenLiteSpeed ve Wordpress ile Performans

Uzun yıllardır Wordpress kullanan biri olarak yakın zamanda Apache'den OpenLiteSpeed'e geçtim. Bu hareketle neler kazandım, nelerle karşılaştım anlatayım.

Öncelikle hikayemi anlatayım.. 2010'lardan beri Wordpress ile site koşturmaktayım. Bu domaine whois çekerseniz 2013'ten beri kayıtlı olduğunu görürsünüz. Öncesi de var o yüzden maziden bahsetmeye gelmediğim için Wordpress'i ne amaçlarla kullandığımı anlatayım. Bu gördüğünüz siteyi bir not defteri mecra tabiriyle blogging amaçlı olarak kullanmaktayım. Bunun haricinde geçmişte e-ticaret (shopping) ve topluluk portalı olarakta Wordpress'i kullandım. WP'nin bu modüler ve her yöne çekilebilir yapısı, büyük topluluğu ile birlikte bir çok teknik ve teknik olmayan insana web site yaratmak için ideal bir çözüm olarak görülebilir. Bazı senaryolarda ise bana kalırsa bulaşılmaması gereken bir altyapı diyebilirim.

Nereden çıktı?

Uzun süredir Pagespeed ve YSlow skorlarını nasıl yükseltirim diye düşünürken daha önce de duyduğum fakat denemediğim LiteSpeed'i araştırmaya başladım. Pagespeed, Google'ın web geliştiriciler için web sitelerinin performanslarını optimize etmelerine yönelik tavsiyeler ve metodlar sunan aracı, bu araç ile sitenize mobil ve masaüstü için 100 üzerinden bir skor verip sitenizi değerlendirir. Eksik veya yanlış gördüğü yerleri belirtir, nasıl çözeceğinize dair yol gösterir. YSlow'da Pagespeed'e benzer fakat açık kaynak bir projedir. GTMetrix gibi bir araç ile hem Pagespeed hem YSlow skorunuzu öğrenebilirsiniz. Site optimizasyonu mevzusu o kadar ilerledi ki son yıllarda neredeyse bir mühendislik dalı haline geldi diyebiliriz. Optimizasyon sadece sitenin kullanıcı tarafından görülen kısmından ibaret olmadığını unutmamak gerekir. Kısaca HTML, CSS, JS minify etmekten ibaret değil.

Yani?

HTTP sunucularından en çok bilinen ve kullanılanı Apache'dir diyebiliriz. Wordpress'e yeni başlayanlar da deneyimli olanlar da kullanmaktadır, yalnızca Wordpress için değil hemen hemen her amaçla kullanılabilen açık kaynak bir projedir. Ben de uzun yıllar boyu Apache ve Wordpress ikilisini kullandım, ilk başladığım zamanlarda adını şu an hatırlayamadığım ufak bir posting sağlayıcısı ile çalışıyordum, ta ki DigitalOcean sahneye çıkana kadar. DO muazzam bir PR çalışması ile referral sistemi üzerinden bir çok meraklıya ulaştı. Ben de birçokları gibi ufak bir kupon ile DO'da bir sunucuya geçtim, ilk defa bu işlerle uğraşıyorsanız "ben ne yapıyorum şimdi?" diyebilirsiniz. Uzun zamanlar kullandıktan sonra Amazon EC2'ye geçiş yaptım. AWS'yi bilenler bilir fazlasıyla karmaşık ve detaylı bir arayüzü bulunur, ay sonu fantastik faturalarla karşı karşıya gelebileceğiniz bir üründür. Neyse ki ben biraz işini bilen biri olduğum için EC2 ile ufak bir makinede siteyi koşturdum bir süre, AWS'de EC2'nin karmaşıklığının farkına varmış olacak ki, Lightsail adını verdikleri sabit ücretli VPS hizmeti sundular. En düşük paket 3.5 USD'lik 512MB RAM, 1 vCPU, 20GB SSD'li Türkiye'deki hosting sağlayıcılarına göre hem çok ucuz hem de çoğu işinizi görebiliyordu. Ben de sunucuyu oraya taşıdım ve hala kullanmaktayım. Son zamanlara kadar Lightsail üzerinde 2 ayrı WP sitesi için 2 ayrı sunucu, 1 adet geliştirme sunucusu bulunduruyordum. Wordpress siteleri kullanım kolaylığından Bitnami'nin Wordpress stacki ile kurup yedek dosyalarımı da All-in-One WP Migration eklentisi ile taşıyordum. Takribi 3 yıl gibi bir süre iki ayrı siteyi totalde ayda 7$ gibi bir ücretle koşturdum. Fakat sitenin birinde optimizasyon problemi ve hantallık (eklentiler, portal olmanın getirdiği çok fazla özelliği bir arada bulundurma gibi) ile uğraşıyordum.

Abi mevzuya hala giremedin

Neyse, LiteSpeed'i biliyordum fakat ücretli olduğunu da biliyordum ta ki OpenLiteSpeed'i görene kadar, bunu görünce dedim ki kesinlikle geçmeliyim. Ama nasıl? Bir amacım da siteleri tek bir sunucuya geçirip iki ayrı sunucu ile uğraşmamak. 512MB RAM'in yetersiz geleceğini düşündüm ama pekte önemsemedim. CyberPanel adında OpenLiteSpeed ile gelen yeni bir panel projesi gördüm. Tam olarak aradığım önümdeydi. Denemek istedim ve Lightsail üzerinden 512MB RAM'lik bir sunucu açtım. Hemen kurulumu yaptım - cidden basit - ve bu sitenin yedeğini alıp CyberPanel üzerinden tek-tık ile Wordpress kurulumu yaptım, domaini yönlendirdim ve ta da önümde OLS'li yeni site. Migration'ı tamamladım. Sunuculardan biriyle HTTP yük testi yapıyorum, inanılmaz sonuçlar 100ms'nin altında response time'lar, 80k reqs./min. gibi beni tatmin edecek değerler alıyordum. Migration yaptıktan sonra doğal olarak biraz yükseldi (response time), LSCache eklentisi ile caching ayarlarını yaptım, yük testleri hala başarılı geliyordu. Dedim ki madem öyle diğer siteyi de taşımalıyım, denedim. 512MB RAM kesinlikle yetmedi. Temel sebebi MariaDB'ye RAM'in yetersiz gelmesiydi. Daha fazla zorlamadan 1.7GB RAM'lik pakete geçip tekrar kurulumları gerçekleştirdim, diğer siteyi de geçirdim ve sonuç gerçekten harikulade. Maliyeti yükseltmiş bulundum ama en azından 1 siteyi alabilecek (belki 2'de olabilir) bir altyapı hazırladım, CyberPanel ile birlikte gelen Memcached veya Redis seçenekleri de çok iyi çünkü onlarla da object caching yapılabiliyor.

OpenLightSpeed'in sitesinde yayınlanan teste göre OLS, LSCache eklentisi ile saniyede 20 binden fazla talebe yanıt verebiliyor:

ols perf

Bunların yanında CDN hizmeti ile de sitenizi desteklerseniz - Türkiye'de POP'u bulunan bir CDN sağlayıcı ile - Google'ın tavsiyesi olan <300 ms. response time'a erişebilirsiniz.

Sandıkları terketmiyoruz

Aşağıda göreceğiniz deney sonuçları wrk ile e2-medium (2 vCPU, 4 GB bellek, Intel Broadwell işlemcili, Ubuntu 20.04 LTS) bir Google Cloud sanal makinesi ile yapılmıştır, hedef makine ise AWS Lightsail üzerinde bulunan 2 GB RAM, 1 vCPU, 60 GB SSD CentOS yüklü bu siteyi ve bir başka siteyi daha barındıran sunucudur. Deney boyunca hedef makinede CPU utilization %39'u, konak makinede ise %77'yi geçmedi.

İlk testimizde bu siteyi anlık 40 bağlantı ve 2 thread (aynı anda işi yapan parça) ile 30 saniye süreyle deniyoruz:

load test

Gördüğünüz gibi 30 saniye gibi bir sürede 56k requeste cevap vermiş bulunuyor, maksimum gecikme 1.6 saniye. Toplam aktarılan veri ise 2.53GB, 38 time-out bulunuyor. HTTPS protokolü ile yapıldığını söylemek gerek. Kısacası bu testte sonucumuz 1.8k req/sec.

İkinci testimiz ise 30 saniye süre ile 40 bağlantıyı 10 thread ile denemek:

ikinci load test

Ufak bir yükselme oldu ve 2.2k req/sec'e ulaştık. Biraz abartalım ve 500 bağlantıyı 10 thread ile 1 dakika boyunca yükleyelim:

wrk test

Doğal olarak 1k req/sec değerine düştü, yılmıyoruz. Header'a Accept-Encoding: GZIP, deflate değerini ekliyoruz, şov başlasın:

gzip

200 bağlantı ve 20 thread ile 4534 req/sec değerine çıktı. Gzip'in ne kadar önemli olduğunu bir daha görüyoruz. Son olarak 40 bağlantıyı 10 thread ile test edelim:

gzip test

7729 req/sec'a çıktık, 1 dakika içerisinde 464k request, 4.26GB transfer. Düşük ücretli bir sunucudan alınabilecek verimi sonuna kadar aldığımı düşünüyorum. OLS'nin resmi sitesindeki benchmark'a göre 15k req/sec'a çıkabiliyoruz bkz. OpenLiteSpeed, biz sadece yarısına kadar çıkabildik fakat gördüğünüz sitenin de tamamiyle optimize olmadığını düşünürsek, gayet iyi.

OpenLightSpeed, Apache ve NGINX arasında OLS'nin yapmış olduğu benchmark

Saded

Apache'nin ardından sıcak sulara OpenLightSpeed ile geçmek mümkün, NGINX'de alternatifler arasında fakat benchmarklardan çıkan sonuçlar LiteSpeed'i önde gösteriyor genel olarak, OLS'nin Apache uyumlu yapısı da geçişi kolaylaştırıyor, NGINX için bambaşka bir conf dosyası yazmak gerekecektir. Yukarıda da gördüğünüz gibi üstüne çalışılmamış bu sitede bile güzel sonuçlar veriyor, Pagespeed, YSlow analizlerinde yüksek skor elde etmek için yapacağınız şeylerden ilki belki de altyapı işleri olmalıdır. En kolay yolu en baştan doğru tercihler ile binayı inşa etmek olacağından, sitenizi ilk defa yayına alacaksanız CyberPanel-OLS-WP üçlü kombosuyla başlamanız olacaktır.