Cache nedir? Neden önemlidir?

Son zamanlarda sıkça rastladığım problemlerin başında cache kullanmamak veya yanlış kullanılan cache yöntemleri geliyor.

Cache’in neden önemli olduğunu açıklamaya çalışacağım. Veri tabanlarında (veya başka ortamlarda) tuttuğumuz verileri alıp işlemek için belli bir işlem gücü harcıyoruz. Bu işlem gücü veri işleme mekanizmasının (algoritma, fonksiyon vs) ne kadar kapsamlı olursa hem harcadığımız işlem gücü artıyor hem de süre artıyor.

Web platformları gibi sürekli isteklerin geldiği bir ortamda ise bu tarz süreçler yığılmalara sebebiyet verebiliyor. Yani sunucu bir istek sonucu yapması gerekenleri henüz bitirmeden başka bir istek geliyor, yeterince optimize olmayan veya yeterli cpu/ram kapasitesi olmayan sunucularda bu durum sıkıntı yaratmaya başlıyor. Ek not; cpu / ram yeterli olsa bile kapasite dolana kadar bu süreç devam edebilir, önemli olan işlemleri en hızlı şekilde tamamlamaktır.

Cache mekanizması ise bu süreci hızlandırmak için kullanılması kaçınılmaz bir yöntem/felsefe/mekanizmadır. Örneğin bir web sitesinde bir önceki güne ait istatistikleri gösteriyorsanız bu verileri bir kere oluşturup cache’e aktarırsanız tekrar tekrar aynı şeyi oluşturmakla uğraşmazsınız.

Bütün bu bilgileri çoğu webmaster, yazılımcı vs biliyor zaten. Fakat gözden kaçan farklı noktalar var. Eğer işletim sisteminin veya kullandığınız sunucu yazılımının süreçlerine hakim değilseniz yanlış seçtiğiniz cache mekanizması sizi yarı yolda bırakabilir.

Cache kullanmamak dışında bu konuda yapılan en büyük yanlış dosya bazlı cache yöntemleri. Özellikle ssd gibi okuma/yazma hızı yüksek olan diskleri kullanmıyorsanız bir noktadan sonra, gül gibi bir “disk io” problemi ile karşı karşıya kalabilirsiniz. Son zamanlarda destek attığım bir çok wordpress sunucusunda benzer problemlerin yaşandığını gördüm.

SSD teknolojisini kullanmıyorsak, klasik disk mimarisi için sanıyorum donanım teknolojilerinin en eskilerinden ve en çok yavaşlığa sebebiyet verenlerinden biri desek yanlış olmaz. Disk işlemlere gerektiği kadar hızlı cevap veremediğinde sunucuda iki şey olur; disk io artar, disk io artması ile cpu kullanımı artar ve en sonunda cpu load dediğimiz işlemci yükü öyle bir noktaya gelir ve sunucuya erişmeniz bile mümkün olmayabilir.

Veriye hızlı erişmemiz hem hızlı bir kullanıcı deneyimi hem de veriyi işleyeceksek işlem süresini kısaltmak için önemli. Bu durumda devreden disk ve cpu kullanımını minimize etmemiz gerekiyor. Bunu da verileri ram üzerinde tutarak yapabiliyoruz. SSD disk kullanıyorsanız ram hızına daha yakın bir sonuç için ramdisk* kullanabilirsiniz. M.2 standardında ssd kullanıyorsanız belki buna da ihtiyacınız kalmayabilir tabi. Kısaca mümkün olduğu kadar hesaplanmış verileri ram gibi hızlı erişim imkanı sunan mekanizmalarda tutmamız gerekiyor. Örneğin MySQL InnoDB gibi tablo yapıları ile veya query cache mekanizması ile çeşitli sorgu ve verileri ram üzerinde tutabiliyor.

Cache Katmanları

Bir web mimarisinde bir kaç çeşit cache katmanı vardır. Veri tabanı tarafında (MySQL InnoDB, query cache vb), Yazılım tarafında belli alanlar için kullanabileceğiniz memcache, redis gibi cache sunucuları, Varnish gibi bir sayfanın html çıktısını ramde tutabileceğiniz sunucular. Yine sphinx, elasticsearch gibi full text search yapmak için kullanabileceğiniz yapıları da kısmı cache olarak nitelendirebilirsiniz.

Bunlar dışında web sunucularınıza (nginx, lighttpd, apache vs) yapacağınız ayarlamalarla kullanıcı tarafında tarayıcı cachelerini (etag, max age vs) de kullanmanız çok önemlidir.

Sizin projenize uygun olan, hızlı uygulayabileceğiniz, yönetebilirlik seviyenize uygun olan çözümü kendiniz bulmanız, denemeniz gerekiyor. Fakat yapacağınız çözüm ne olursa olsun karşınıza daha büyük sorunlar çıkartmamalı.

Özellikle yüksek trafikli wordpress kullanıcılarına kesinlikle Varnish gibi html çıktı cachelemesi yapan sistemleri öneriyorum. Yazılımına müdahale edemediğiniz sistemlerde dosya bazlı cache eklentileri kullanmak ileride sizi sıkıntıya sokabilir.

Sonuç olarak; lütfen cache kullanın, kullandırın, sunucuları ağlatmaya gerek yok :).

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.