İçeriğe geçin

Backpressure

Backpressure, alıcının yavaşlama veya duraklama sinyaliyle gelen veri akışını işleme kapasitesine uyarlar.

Yazılım mimarisi

Backpressure, kapasitesi dolan alıcının kendisinden önceki veri kaynağına daha az veri göndermesini veya bir süre durmasını bildirmesidir. Böylece bir işleme adımı, gelen akışı kendi kapasitesine göre düzenleyebilir.

Kurgusal bir içe aktarmada kaynak saniyede 120 kayıt okurken veritabanı 40 kayıt işler. Hızlar aynı kalır ve kayıt atılmazsa bekleyen iş saniyede 80 kayıt artar. Tampon belleği büyütmek sorunu erteler. Backpressure, işleme tarafı yetişene kadar kaynağın okumayı yavaşlatmasını veya duraklatmasını sağlar.

Duraklama sinyalini kaynağa iletmek

Çalışır durumdaki bir Node.js yazma akışında .write() çağrısının false döndürmesi, yeni veri parçaları göndermeye ara verilmesini bildirir. Önceden iletilen parça sırf bu nedenle tekrar gönderilmez. drain sonrasında yeni parçalar iletilebilir; hatalar ve akışın kapanması ayrıca ele alınmalıdır. Tampon eşiği highWaterMark, toplam bellek kullanımına kesin bir üst sınır koymaz.

Sinyalin işe yaraması için önceki adımlar da buna uymalı ve kendi tamponlarını sınırlamalıdır. Kaynak yavaşlatılamıyorsa uygulama ayrıca kabul edeceği işi sınırlamalı ve aşırı yükte ne yapacağını belirlemelidir. Rate limiting izin verilen istek hızını tanımlar; backpressure veri akışındaki alıcının kabul kapasitesine tepki verir.

Kaynaklar