Proxy önbelleği, sık istenen web kaynaklarının kopyalarını bir proxy sunucusunda saklayarak çalışır; böylece aynı içerik için gelen sonraki istekler, kaynak sunucudan yeniden çekilmek yerine doğrudan önbellekten karşılanır.
Proxy Önbelleğine Genel Bakış
Proxy sunucusu, istemci ile kaynak sunucu arasında aracı görevi görür. Önbellek için yapılandırıldığında, istemcinin web içeriği isteklerini (HTML sayfaları, görseller, stil dosyaları veya betikler gibi) araya girerek yakalar. İstenen kaynak proxy'nin yerel deposunda bulunuyorsa ve taze kabul ediliyorsa, proxy onu anında sunar. Bulunmuyorsa proxy isteği kaynak sunucuya iletir, kaynağı alır, istemciye sunar ve aynı anda ileride kullanmak üzere önbelleğine bir kopya kaydeder.
Proxy Önbelleğinin Faydaları
Proxy önbelleği uygulamak birçok operasyonel avantaj sağlar:
- Daha Düşük Gecikme: Coğrafi olarak daha yakın bir proxy önbelleğinden sunulan içerik, istemciye uzak bir kaynak sunucudan çekilen içerikten daha hızlı ulaşır ve algılanan uygulama performansını iyileştirir.
- Daha Az Bant Genişliği Tüketimi: Önbellekteki içeriği sunarak proxy, aynı verinin dış ağ bağlantıları üzerinden tekrar tekrar indirilmesi ihtiyacını en aza indirir; bu, özellikle sık erişilen kaynaklarda bant genişliği tasarrufu sağlar.
- Kaynak Sunucularda Daha Az Yük: Önbellekleme, isteklerin önemli bir kısmını kaynak sunuculardan alır; böylece sunucular daha fazla benzersiz isteği karşılayabilir veya daha az zorlanarak çalışabilir, bu da aşırı yüklenmeyi önleyip yanıt hızını artırır.
- Daha İyi Kullanıcı Deneyimi: Daha hızlı yükleme süreleri ve daha tutarlı içerik teslimi, son kullanıcı için doğrudan daha iyi bir deneyim anlamına gelir.
Proxy Önbelleği Nasıl Çalışır: İstek Akışı
Önbellekleme süreci bir dizi adımdan oluşur:
- İstemci İsteği: Bir istemci (örneğin bir web tarayıcısı), bir kaynak için proxy sunucusuna HTTP isteği gönderir.
- Önbellek Sorgusu: Proxy sunucusu isteği alır ve istenen kaynağın saklanmış bir kopyası için yerel önbelleğini kontrol eder. Önbellek anahtarı genellikle URL'den ve olası diğer istek başlıklarından türetilir.
- Önbellek İsabeti (Taze): Kaynağın geçerli ve taze bir kopyası önbellekte bulunursa, proxy bu kopyayı hemen istemciye sunar. Bu en hızlı yoldur.
- Önbellek İsabeti (Bayat/Doğrulama Gerekli): Bir kopya bulunur ancak bayat kabul edilirse (tazelik ömrü dolmuşsa), proxy kaynak sunucuya koşullu bir istek başlatır. Bu istek
If-Modified-SinceveyaIf-None-Matchgibi doğrulama başlıklarını içerir.- Kaynak sunucu
304 Not Modifiedile yanıt verirse, önbellekteki kopya hâlâ geçerlidir; proxy onu istemciye sunar ve tazelik bilgisini günceller. - Kaynak sunucu kaynağın yeni bir sürümüyle yanıt verirse (
200 OK), proxy önbelleğini yeni içerikle günceller, içeriği istemciye sunar ve tazelik bilgisini yeniler.
- Kaynak sunucu
- Önbellek Işkalaması (Cache Miss): Kaynağın hiçbir kopyası önbellekte bulunamazsa ya da kaynak sunucu önbellekteki kopyanın artık geçerli olmadığını bildirip yeni içerik gönderirse, proxy istemcinin özgün isteğini kaynak sunucuya iletir.
- Kaynak Sunucu Yanıtı: Kaynak sunucu isteği işler ve kaynağı proxy'ye geri gönderir.
- Önbelleğe Alma ve Teslim: Proxy kaynağı kaynak sunucudan alır, (önbelleğe alınabilir nitelikteyse) bir kopyasını önbelleğine kaydeder ve ardından kaynağı istemciye iletir.
Önbellek Geçersiz Kılma ve Tazelik
Önbellek tazeliğini korumak, istemcilerin güncel içerik almasını sağlamak açısından kritiktir. HTTP önbellekleme mekanizmaları öncelikle kaynak sunucunun sağladığı yanıt başlıklarına dayanır.
HTTP Önbellek Başlıkları
Kaynak sunucular, proxy'lere (ve istemci tarayıcılarına) içeriğin nasıl önbelleğe alınacağını bildirmek için belirli HTTP yanıt başlıklarını kullanır:
-
Cache-Control: Önbellek yönergeleri için birincil ve en güçlü başlık.max-age=<seconds>: Bir kaynağın taze sayılacağı azami süreyi belirtir.no-cache: Önbellek girdisi bayat olmasa bile, proxy'yi kullanmadan önce önbellekteki kopyayı kaynak sunucuyla yeniden doğrulamaya zorlar. "Önbelleğe alma" anlamına gelmez.no-store: Proxy'nin isteğin veya yanıtın herhangi bir bölümünü herhangi bir önbellekte saklamasını engeller.public: Kaynağın, paylaşımlı proxy önbellekleri dahil olmak üzere herhangi bir önbellek tarafından saklanabileceğini belirtir.private: Kaynağın tek bir kullanıcıya yönelik olduğunu ve yalnızca özel tarayıcı önbelleğinde saklanabileceğini, paylaşımlı proxy önbelleklerinde saklanamayacağını belirtir.must-revalidate: Önbellek girdisi bayatladığında kaynak sunucuyla yeniden doğrulamayı zorunlu kılar.proxy-revalidate:must-revalidateile benzerdir, ancak yalnızca paylaşımlı proxy önbellekleri için geçerlidir.
http Cache-Control: public, max-age=3600 Cache-Control: no-cache Cache-Control: no-store -
Expires: Yanıtın hangi tarih/saatten sonra bayat sayılacağını belirten eski bir HTTP/1.0 başlığı. İkisi birden varsaCache-Control: max-ageönceliklidir.http Expires: Thu, 01 Dec 1994 16:00:00 GMT -
ETag(Entity Tag): Kaynak sunucunun bir kaynağın belirli bir sürümüne atadığı, içeriği dışarıdan yorumlanamayan bir tanımlayıcı. Kaynak değişirse yeni birETagüretilir. Proxy'ler koşullu isteklerdeETagkullanır.http ETag: "67ab3246a-543-12345678" -
Last-Modified: Kaynağın kaynak sunucuda en son ne zaman değiştirildiğini gösteren zaman damgası. Proxy'ler bunu koşullu isteklerde kullanır.http Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Koşullu İstekler
Önbellekteki bir kaynağın tazelik ömrü dolduğunda, proxy kaynağın değişip değişmediğini kontrol etmek için kaynak sunucuya koşullu bir istek gönderir.
-
If-None-Match: Önbellekteki yanıtınETagdeğeriyle gönderilir. Kaynak sunucudakiETageşleşirse sunucu304 Not Modifiedyanıtı verir.http GET /images/logo.png HTTP/1.1 Host: example.com If-None-Match: "67ab3246a-543-12345678" -
If-Modified-Since: Önbellekteki yanıtınLast-Modifiedtarihiyle gönderilir. Kaynak bu tarihten beri değiştirilmediyse sunucu304 Not Modifiedyanıtı verir.http GET /styles/main.css HTTP/1.1 Host: example.com If-Modified-Since: Tue, 15 Nov 1994 12:45:26 GMT
Önbellek Tutarlılığı Zorlukları
Kusursuz önbellek tutarlılığını korumak (tüm istemcilerin her zaman kaynağın en son sürümünü almasını sağlamak) karmaşık olabilir. Stratejiler şunlardır:
* Kısa TTL değerleri: Daha yüksek tazelik için önbellek verimliliğinden bir miktar ödün vermek.
* Önbellek Geçersiz Kılma API'leri: Kaynak sunucuların, belirli önbellek öğelerini temizlemesi için proxy'leri açıkça bilgilendirmesi.
* Cache busting: Sık değişen kaynakların URL'lerine benzersiz sorgu parametreleri (örneğin ?v=123) eklemek ve proxy'leri yeni sürümleri çekmeye zorlamak.
Proxy Önbelleği Türleri
Proxy önbellekleri konumlandırılışlarına ve amaçlarına göre sınıflandırılabilir:
İleri Yönlü (Forward) Proxy Önbelleği
İleri yönlü proxy önbelleği, istemciler ile internet arasında konumlanır. İstemciler proxy'yi kullanmak üzere açıkça yapılandırılır. Bu tür önbellek, kurumsal ağlarda giden bant genişliğini azaltmak ve iç kullanıcıların erişim hızını artırmak için yaygındır. Bir istemci grubunun adına hareket eder.
Ters (Reverse) Proxy Önbelleği
Ters proxy önbelleği, bir veya daha fazla kaynak sunucunun önünde konumlanır. İstemciler ters proxy'ye bağlanır, o da istekleri uygun kaynak sunucuya iletir. Ters proxy, kaynak sunuculardan gelen yanıtları önbelleğe alarak onların yükünü azaltır ve dış istemciler için performansı artırır. Genellikle yük dengeleme, SSL sonlandırma ve içerik dağıtımı için kullanılır.
Şeffaf (Transparent) Proxy Önbelleği
Şeffaf proxy, istemci tarafında herhangi bir yapılandırma gerektirmeden istekleri araya girerek yakalar. Ağ yönlendirmesi, trafiği proxy üzerinden geçirecek şekilde yapılandırılır. İstemciler bir proxy kullandıklarının farkında değildir. Bu yöntem genellikle ISP'ler veya ağ yöneticileri tarafından, her cihazı ayrı ayrı ayarlamaya gerek kalmadan genel ağ performansını iyileştirmek için kullanılır.
Önbellek Anahtarı Üretimi
Bir proxy'nin kaynakları verimli biçimde saklayıp geri alabilmesi için her kaynağa benzersiz bir "önbellek anahtarı" üretmesi gerekir. Bu anahtar, sonraki bir isteğin önbellekteki bir girdiyle eşleşip eşleşmediğini belirler. Önbellek anahtarının başlıca bileşenleri genellikle şunlardır:
- URL: Şema, host, port, yol ve sorgu parametreleri genellikle önbellek anahtarının çekirdeğini oluşturur.
- HTTP Metodu: Genel olarak yalnızca
GETveHEADistekleri önbelleğe alınır. - Vary Başlığı: Kaynak sunucu bir
Varybaşlığıyla yanıt verirse (örneğinVary: Accept-Encoding, User-Agent), proxy belirtilen istek başlıklarının değerlerini önbellek anahtarına dahil etmelidir. Bu, bir kaynağın farklı temsillerinin (örneğin gzip'li ve sıkıştırılmamış, mobil ve masaüstü) ayrı ayrı önbelleğe alınmasını sağlar.
Depolama Mekanizmaları ve Tahliye Politikaları
Proxy önbellekleri çeşitli depolama mekanizmaları ve politikaları kullanır:
-
Depolama:
- RAM (Bellek): En hızlı erişim; çok sık istenen içerik veya meta veriler için kullanılır. Kapasitesi sınırlıdır.
- Disk (SSD/HDD): RAM'den yavaştır ama çok daha büyük kapasite sunar. Toplu içerik için en yaygın seçenektir.
- Hibrit: Meta veriler ve sık erişilen küçük nesneler için RAM'i, daha büyük veya daha seyrek erişilen içerik için diski birlikte kullanır.
-
Tahliye Politikaları: Önbellek depolama sınırına ulaşıldığında, proxy yeni öğelere yer açmak için hangi öğeleri kaldıracağına karar vermelidir. Yaygın politikalar şunlardır:
- LRU (Least Recently Used): En uzun süredir erişilmeyen öğeyi kaldırır.
- LFU (Least Frequently Used): En az sayıda erişilen öğeyi kaldırır.
- FIFO (First-In, First-Out): Önbellekteki en eski öğeyi kaldırır.
Yapılandırma Değerlendirmeleri
Etkili proxy önbelleklemesi dikkatli bir yapılandırma gerektirir:
- Önbellek Boyutu: Kullanılabilir depolamayı, önbelleğe alınacak içerik hacmiyle dengelemek. Çok küçük olursa isabet oranı düşer; çok büyük olursa disk I/O darboğaza dönüşebilir.
- Time-to-Live (TTL) Varsayılanları: Açık önbellek başlığı taşımayan kaynaklar için varsayılan tazelik süreleri belirlemek. Bu bir yedek çözümdür ve tazeliği etkileyebilir.
- Atlama (Bypass) Kuralları: Belirli URL'lerin, hassas içeriğin veya asla önbelleğe alınmaması gereken dinamik kaynakların (örneğin kişiselleştirilmiş veri döndüren API uç noktaları, kimlik doğrulamalı oturumlar) önbelleğe alınmasını engelleyen kurallar tanımlamak.
- HTTPS Önbellekleme: Şifreleme nedeniyle HTTPS trafiğini önbelleğe almak daha karmaşıktır. Proxy'nin başlıkları inceleyip içeriği önbelleğe alabilmesi için trafiği çoğu zaman şifresini çözmesi (kendi SSL sertifikası ve anahtarı gerekir) ve ardından yeniden şifrelemesi gerekir. Bu genellikle ters proxy'lerle veya istemcilerin proxy sertifikasına güvendiği açık ileri yönlü proxy'lerle yapılır. Şifre çözme olmadan şeffaf HTTPS önbellekleme yalnızca
CONNECTyanıtlarını önbelleğe almakla sınırlıdır, altındaki içeriği değil. - Günlükleme ve İzleme: Önbellek isabet oranlarını gözlemlemek, önbellek verimsizliklerini saptamak ve sorun gidermek için şarttır.
Yaygın Proxy Önbellekleme Yazılımları
Proxy önbelleklemesi için çeşitli güçlü çözümler mevcuttur:
- Squid: Yaygın kullanılan, açık kaynaklı ileri yönlü ve ters proxy; geniş önbellekleme yetenekleri sunar.
- Varnish Cache: Web içeriğini önbelleğe almak için özel olarak tasarlanmış yüksek performanslı bir HTTP hızlandırıcı (ters proxy). Son derece esnek önbellek politikaları yazmayı sağlayan VCL (Varnish Configuration Language) ile bilinir.
- Nginx: Öncelikle bir web sunucusu ve ters proxy olan Nginx, özellikle ters proxy olarak yapılandırıldığında güçlü önbellekleme özellikleri sunar.
- Apache HTTP Server: Önbellekleme proxy'si gibi çalışması için
mod_cachevemod_disk_cachegibi modüllerle yapılandırılabilir.
