Ana içeriğe geç

Backpressure

Türkçe karşılığı
geri basınç
Okunuşu
bekpreşır

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/backpressure

Kısaca

Backpressure, yavaş tüketicinin hızlı üreticiye yavaşlaması için sinyal vermesini sağlayan, verinin işlenebileceğinden hızlı birikmesini önleyen mekanizmadır.

Backpressure nedir?

Backpressure, bir sistemde geriye doğru akan dirençtir: bir parça, sonraki parçanın kaldırabileceğinden daha hızlı veri ürettiğinde yavaş olan parça geri iter ve üreticiye yavaşlamasını ya da durmasını söyler. Bu olmazsa fazlalığın bir yere gitmesi gerekir; genellikle sürekli büyüyen bellek tamponlarına. Bu da artan gecikmeye, bellek yetersizliği (out-of-memory) çökmelerine ya da verinin rastgele bırakılmasına yol açar.

Sistemler aşırı yükü birkaç şekilde yönetir. Tüketici, pull tabanlı akışlarda ve reaktif kütüphanelerde olduğu gibi, veriyi yalnızca hazır olduğunda çekerek akışı denetleyebilir. Sınırlı bir tampon ya da kuyruk, dolduğunda üreticiyi bekletebilir. Ya da sistem, fazla işi örneğin 429 Too Many Requests veya 503 Service Unavailable ile reddederek bilerek yük atabilir (load shedding). Node.js'te iç tampon dolduğunda stream.write() false döndürür ve iyi davranışlı bir üretici daha fazla yazmadan önce drain olayını bekler; pipeline() bunu otomatik yönetir. TCP'de backpressure yerleşiktir; alıcının tamponu dolduğunda akış denetimi göndericinin penceresini küçültür.

Akşam yoğunluğundaki bir restoranı düşünün: aşçılar bunaldıysa host, sipariş fişlerinin birikip her yemeğin gecikmesine izin vermek yerine bir süre yeni misafir almayı durdurur. Backpressure, veri farklı hızlarda çalışan aşamalar arasında hareket ettiği her yerde önemlidir: dosya ve ağ akışları, mesaj kuyruğu tüketicileri, olay akışı boru hatları, loglama sistemleri ve birbirini çağıran mikroservisler gibi.

Backpressure sıklıkla rate limiting ve tamponlama ile karıştırılır. Rate limiting, sunucu ne kadar meşgul olursa olsun istemci başına dakikada 100 istek gibi sabit bir üst sınır uygular; backpressure ise o anda tüketicinin gerçek kapasitesine tepki verir. Tampon yalnızca kısa ani artışları emer ve sınırsız bir tampon bellek bitene kadar sorunu gizler; bu yüzden backpressure farkındalığı olan bir sistemdeki tamponların her zaman bir sınırı vardır. Sonsuza kadar büyüyen bir mesaj kuyruğu, tüketicilerin ölçeklenmesi ya da üreticilerin yavaşlaması gerektiğinin işaretidir.

Önemli noktalar

  • Backpressure, yavaş bir tüketicinin hızlı bir üreticiye yavaşlamasını veya durmasını söylemesini sağlar.
  • Bu olmadan sınırsız tamponlar, gecikme fırlayana veya bellek bitene kadar büyür.
  • Yaygın stratejiler pull tabanlı tüketim, engelleyen sınırlı tamponlar ve load shedding'dir.
  • Node.js akışları, write() false döndürdüğünde backpressure sinyali verir.
  • Rate limiting sabit bir sınırdır; backpressure ise gerçek zamanlı kapasiteye uyum sağlar.

Örnek

Node.js akışlarında backpressure'a uymakjavascript
import { createReadStream, createWriteStream } from "node:fs";
import { pipeline } from "node:stream/promises";

// pipeline() handles backpressure: reading pauses whenever
// the slower destination's buffer is full, then resumes
await pipeline(createReadStream("huge.log"), createWriteStream("copy.log"));

// Doing it by hand: respect the return value of write()
function writeChunk(stream, chunk, next) {
  if (stream.write(chunk)) next();   // buffer has room: keep going
  else stream.once("drain", next);   // buffer full: wait for "drain"
}

Sık sorulan sorular

Backpressure olmazsa ne olur?

Sistemin hızlı ve yavaş parçaları arasında veri bellekte birikir. Birikme büyüdükçe gecikme artar ve sonunda süreç belleği tüketir, çöker ya da veri bırakmaya başlar.

Backpressure ile rate limiting aynı şey midir?

Hayır. Rate limiting isteklere sabit, önceden tanımlı bir sınır uygular; backpressure ise tüketicinin o anda ne kadarını kaldırabildiğine dayanan dinamik bir sinyaldir. Sistemler çoğunlukla ikisini birlikte kullanır.

Mesaj kuyrukları backpressure'ı nasıl yönetir?

Tüketiciler mesajları kendi hızlarında, çoğunlukla bir seferde kaç tane alacaklarına dair bir sınırla çeker; böylece kuyruk ani artışları emer. Consumer lag denen büyüyen birikme, tüketici eklemek ya da üreticileri yavaşlatmak için sinyaldir; sınırlı kuyruklar da dolduklarında yeni mesajları reddedebilir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar