deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Cloudflare blog

Cloudflare, petabaytlarca depolama tasarrufu için Zstandard önbellek sıkıştırmasını prototipledi

Cloudflare, uygun önbellek varlıklarını Pingora proxy'si içinde Zstandard ile sıkıştıran bir prototip geliştirdi; bu sayede varlıklar diskteki boyutlarının yaklaşık üçte birine inerken, karşılığında yalnızca birkaç yüzde ekstra CPU harcanıyor.

Cloudflare, petabaytlarca depolama tasarrufu için Zstandard önbellek sıkıştırmasını prototipledi

Cloudflare, uygun önbellek varlıklarını diske yazılmadan önce Zstandard ile sıkıştıran Cache Transcoding adlı bir prototipi anlattı. Cloudflare bloguna göre ilk testlerde uygun varlıklar ortalama olarak diskteki orijinal boyutlarının kabaca üçte birine indi; küçük bir CPU artışı karşılığında şirketin petabaytlar düzeyinde etkili ek kapasite ve veri merkezleri arasındaki veri transferinin azalması olarak tahmin ettiği bir kazanım sağlandı.

Sistem, bir 1.1.1.1 Intern Program stajı sırasında geliştirildi ve Cloudflare'ın proxy framework'ü Pingora içinde çalışıyor. Sistem, köklü bir verimsizliği hedefliyor: Cloudflare geleneksel olarak origin'in gönderdiği byteları olduğu gibi saklıyordu; dolayısıyla sıkıştırılmamış bir yanıt sıkıştırılmamış biçimde önbelleğe alınıyor ve tesisler arasında da aynı biçimde taşınıyordu.

Prototip nasıl çalışıyor

Önbellek isabetinin olmadığı durumda (cache miss) proxy, yanıt gövdesini diske yazmadan önce zstd ile kodluyor ve önbellek metadata'sı orijinal içerik uzunluğunu korurken sıkıştırılmış temsili kaydediyor. Nesne önbellekte kaldığı sürece sıkıştırılmış halde kalıyor ve Tiered Cache'in üst ve alt katmanları arasında da bu biçimde yolculuk ediyor. Kod çözme işlemi yalnızca istemciye bakan hop'a bırakılıyor.

Saklanan nesne üzerindeki bir kodlama işaretleyicisi çift sıkıştırmayı önlüyor: başka bir katmandan nesne alan katman, nesnenin zaten zstd ile kodlanmış olduğunu anlayabiliyor ve onu olduğu gibi koruyor.

Neler sıkıştırılıyor

Uygunluk bilinçli olarak dar tutuluyor. Görseller, video ve fontlar gibi medya genellikle zaten sıkıştırılmış oluyor — Cloudflare'ın trafik örnekleminde bu dilim isteklerin yüzde 21,4'ünü ama bytelerin yüzde 63,3'ünü oluşturuyordu; dolayısıyla yeniden sıkıştırmak hiçbir fayda sağlamadan CPU harcatırdı. HTML, JSON, CSS ve JavaScript gibi sıkıştırılabilir metinler isteklerin yüzde 67,3'ünü ve bytelerin yüzde 22,3'ünü oluşturuyordu ve bunların kabaca yüzde 71'i Content-Encoding ayarlanmadan gelmişti.

Prototip yalnızca Content-Encoding ayarlanmamış, Content-Type sıkıştırılabilir metin olan ve bilinen Content-Length değeri en az 4 KiB olan 200 OK yanıtlarını dönüştürüyor. Range istekleri, slice alt istekleri, önceden sıkıştırılmış yanıtlar, aktif upstream sıkıştırması, uzunluğu bilinmeyen gövdeler ve ikili içerik atlanıyor. Cloudflare, 4 KiB tabanının çok sayıda küçük nesneyi elediğini, buna karşılık diğer durumlarda uygun bytelerin yalnızca yaklaşık yüzde 1'ini dışarıda bıraktığını söylüyor.

CPU ve depolama dengesi

Cloudflare'ın kontrollü test derleminde uygun varlıklar yaklaşık 2,834 kat sıkıştı. Kodlama maliyeti byte başına kabaca 4,31 nanosaniye — yaklaşık 232 MB/s — oldu ve bir varlık önbelleğe girerken bir kez ödeniyor. Kod çözme maliyeti byte başına kabaca 1,56 nanosaniye, yaklaşık 641 MB/s idi ve her sunuşta gerçekleşiyor. Varlıklar doldurulduklarından çok daha sık sunulduğu için bu asimetri sistemin lehine çalışıyor ve Cloudflare'ın modeli, test ettiği trafik ve yeniden kullanım varsayımları altında ekstra CPU'yu birkaç yüzde içinde tuttu.

Ekip başlangıçta dönüştürmeyi yalnızca popüler içerikle sınırlamayı düşündü, çünkü popüler varlıklar daha sık yeniden kullanılıyor; ancak her sunuşta kod çözme yapılması nedeniyle bu kısıtlamanın CPU'da eşdeğer bir düşüş sağlamadan depolama tasarrufunu azalttığını gördü. Daha basit politika — 4 KiB ve üzerindeki tüm uygun metinleri dönüştürmek — ölçülen depolama kazancının neredeyse tamamını sağlarken CPU'yu bütçe içinde tuttu. Hem sıkıştırma seviyesi hem de boyut eşiği sabit sınırlar değil, ayarlanabilir parametreler.

Neden Zstandard

Zstandard, Yann Collet tarafından Facebook'ta geliştirilen ve 2016'da open source edilen kayıpsız bir sıkıştırma algoritması. Cloudflare'ın önceki tarayıcı sıkıştırma testleri, neredeyse aynı dosya boyutunda Brotli'den yüzde 42 daha hızlı veri sıkıştırdığını ve karşılaştırılabilir hızda gzip'ten yüzde 11,3 daha küçük dosyalar ürettiğini buldu. Prototip 3. seviyeyi kullanıyor; Cloudflare bu seviyenin sıkıştırma faydasının çoğunu, önbellek doldurmalarını CPU'ya bağımlı hale getirmeden sağladığını söylüyor. Başlangıç CPU bütçesi artık anlaşıldığına göre daha yüksek seviyeler test etmeye değer olabilir.

Nasıl doğrulandı

Doğruluk testleri önbellek isabetlerini, isabetsizlikleri, tek hop'lu doldurmaları ve Tiered Cache doldurmalarını kapsadı; her istek, istek logları, Prometheus metrikleri ve Jaeger trace'leriyle ilişkilendirildi. Bir performans kampanyası 10 önbellek sunucusu üzerinden bir milyondan fazla istek gönderdi; yarısında Tiered Cache devre dışı, yarısında ise etkindi.

Neden önemli

Cloudflare bu çalışmayı, son bir yılda RAM ve sabit disk fiyatlarının keskin biçimde yükselmesi fonunda konumlandırıyor. Sıkıştırılmış depolama, mevcut donanım üzerinde önbellek yoğunluğunu artırıyor; böylece sıkıştırılmamış bir biçim yer işgal ettiği için daha az faydalı nesne önbellekten atılıyor ve daha küçük temsiller veri merkezleri arasındaki omurga trafiğini de hafifletiyor. Ekonomi asıl mesele: doldurma sırasında bir kez ödenen kodlama maliyeti, bir varlık her yeniden kullanıldığında geri dönüş yapmaya devam ediyor — pahalı kaynağın compute değil depolama olduğu bir dünyada giderek daha cazip görünen bir takas bu.

  • #cloudflare
  • #compression
  • #zstandard
  • #caching
  • #cdn

İlgili yazılar