Yazılım mimarisindeki modeller: Boru ve filtre modeli

Adanali

Active member
Yazılım mimarisindeki modeller: Boru ve filtre modeli


  1. Yazılım mimarisindeki modeller: Boru ve filtre modeli

Modeller, modern yazılımın geliştirilmesinde ve yazılımın mimarisinde önemli bir soyutlamadır. Açıkça tanımlanmış terminoloji, temiz dokümantasyon ve öğrenme en iyisinden sunarlar. Boru mimarisi modeli ve filtresi seviye modeline benzer ve veri akışlarını işleyen sistemlerin yapısını tanımlar.











Katman modelinin arkasındaki fikir, üst katmanların alt katmanların hizmetlerine dayanacak şekilde katmanlı sistemi yapılandırmaktır. Borular ve filtreler modeli, katman modelini bir filtre olarak katmanları ve boru olarak veri akışını kullanarak doğal bir şekilde genişletir.

Borular ve filtreler


Kapsam

  • Verileri farklı adımlarda işleyen bir sistem.
  • Her adım, diğerlerinden bağımsız olarak verilerini işler.
Uygulama

  • Farklı işleme aşamalarında etkinliğin bölünmesi.
  • Her işleme aşaması bir sonraki işlem aşamasını eklemektir.
  • İşleme aşamasına filtre denir; Filtreler arasındaki veri kanalına tüp denir.
  • Veriler, datenen'deki verilerin ve arazilerin kökeninden gelir.


yapı















Filter

  • Giriş verileri alır,
  • Giriş verileri ile işlemini yönlendirir e
  • çıktı verileri üretir.
Pipe

  • Verileri iletir,
  • Kuyruğundaki Buffert verileri e
  • Komşuları senkronize edin.
Data Source

  • Ayrıştırma boru hattı için girdi oluşturun.
Data Sink

Boru ve filtre modelinin en ilginç kısmı veri akışıdır.

Veri akışı


Veri akışını kontrol etmenin birkaç yolu vardır.

İtme prensibi

  • Filtre, önceki filtre verileri verilerek başlatılır.
  • Filtre (N-1) verileri (yazma işlemi) N-TT filtresine gönderir.
  • Veri oranı veri akışını başlatır.
Prensibi Çıkarın

  • Filtre, önceki filtre verileri isteyerek başlatılır.
  • N-TE filtresi, filtreden (N-1) verileri gerektirir.
  • Dataenke veri akışını başlatır.
Push/Çekme Karışık prensibi

  • N-TE filtresi, filtreden (N-1) verileri gerektirir ve bunları açıkça filtreye (N+1) iletir.
  • N-TE filtresi, işleme zincirindeki tek aktif filtredir.
  • N-TE filtresi veri akışını başlatır.
Bağımsız işlemler olarak aktif filtreler

  • Her filtre, önceki kuyruk verilerini okuyan veya verileri aşağıdaki kuyrukta yazan bağımsız bir işlemdir.
  • N-TE filtresi verileri yalnızca filtre (N-1) bağlantı kuyruğuna yazdıktan sonra okuyabilir.
  • N -TE filtresi verilerini yalnızca filtre (n+1) ve bağlantı kuyruğunu okumadan sonra yazabilir.
  • Bu yapı bir üretici/tüketici olarak gösterilmiştir.
  • Her filtre veri akışını başlatabilir.
Örnekler


Boru ve filtre modelinin en bilinen örneği Unix komut kabuğudur.

Unix komut kabuğu

  • Python3.6 kurulumumda en fazla satıra sahip beş Python dosyasını bulun:







İşte boru hattının pasajları:

  • Tüm dosyaları bulun py SON: find -name "*.py".
  • Her dosyadan satır sayısını alın: xargs wc -l.
  • Sayısal siparişler: sort -g .
  • Son iki satırı alakasız istatistiksel bilgilerle kaldırın: head -n -2.
  • Son beş satırı belirleyin: tail -5.
Son olarak, Douglas McLlroy tüpleri ile komut çizgisinin detaylandırılmasının klasiği.



tr -cs A-Za-z 'n' |
tr A-Z a-z |
sort |
uniq -c |
sort -rn |
sed ${1}q


Bu boru hattının nasıl çalıştığını bilmek istiyorsanız, “daha fazla kabuk, ana yumurta” makalesinde arkasındaki hikayeyi bulacaksınız.

C ++, C ++ 20'deki aralık aralığı sayesinde boru ve filtre modelini destekler.

Rütbe

Aşağıdaki program firstTenPrimes.cpp 1000'den başlayarak ilk on ilk sayıyı görüntüleyin.



// firstTenPrimes.cpp

#include <iostream>
#include <ranges>
#include <vector>

bool isPrime(int i) {
for (int j = 2; j * j <= i; ++j){
if (i % j == 0) return false;
}
return true;
}

int main() {

std::cout << 'n';

auto odd = [](int i){ return i % 2 == 1; };

auto vec = std::views::iota(1'000)
| std::views::filter(odd) // (1)
| std::views::filter(isPrime) // (2)
| std::views::take(10) // (3)
| std::ranges::to<std::vector>(); // (4)

for (auto v: vec) std::cout << v << " ";

}


Veri oranı (std::views::iota(1'000)) 1000'den başlayarak doğal sayı oluşturun. İlk olarak tek sayılar filtrelenir (1) ve dolayısıyla asal sayılar (2). Bu boru hattı on değerden (3) sonra durur ve öğeleri iter. std::vector (4). Pratik işlev std::ranges::to Yeni bir aralık oluşturun (4). Bu işlev C ++ 23 için yenidir. Bu nedenle, kodu yalnızca derleyicinin kaşifindeki en son Windows derleyicisiyle gerçekleştirebilirim.









Avantajlar ve dezavantajlar


Aşağıdaki karşılaştırmamda evrensel arayüz terimini kullanıyorum. Bu, tüm filtrelerin XML veya JSON ile aynı dili konuştuğu anlamına gelir.

Avantajlar

  • Bir filtre verileri doğrudan komşusundan çıkarırsa veya bunu iterse, ara veri arabelleği gerekmez.
  • Bir N-TRON filtresi seviye modelini uyguladı ve bu nedenle kolayca değiştirilebilir.
  • Evrensel arayüzü uygulayan filtre yeniden düzenlenebilir.
  • Her filtre diğer tarafta bağımsız olarak çalışabilir ve yakın filtre hazır olana kadar beklememelidir. Bu, filtreler arasında optimal bir çalışma bölümüne izin verir.
  • Filtre dağıtılmış mimaride gerçekleştirilebilir. Borular uzak birimleri birleştirir. Tüpler ayrıca veri akışını bölebilir veya senkronize edebilir. Borular ve filtre genellikle dağıtılan mimarilerde veya viacide aracılığıyla kullanılır ve performans ve ölçeklenebilirlik için harika fırsatlar sunar.
Dezavantajlar

  • İletişim, serileştirme ve genel senkronizasyon giderleri nedeniyle verilerin paralel işlenmesi verimsiz olabilir.
  • Sistem gibi bir filtrenin tüm verilere ihtiyacı vardır.
  • Filtrelerin performansı homojen değilse, aralarında harika bir hafızaya ihtiyacınız var.
  • Evrensel arayüzü desteklemek için veriler filtreler arasında biçimlendirilmelidir.
  • Bu modelin en karmaşık kısmı hataların tedavisidir. Veri işleme sırasında boruların ve filtrelerin mimarisi anormal olarak durursa, veriler sadece kısmen veya işlenmemiş işlenebilir. Şimdi aşağıdaki seçenekler var:
    • Orijinal veriler hala mevcut olduğunda işlemi tekrar başlatın.
    • Yalnızca tamamen ayrıntılı verileri kullanın.
    • Sistem bir kaza olduğunda işaretler kullanılarak işlemin tekrar başlatılabileceği işaretler eklendikten sonra
Sırada ne var?


Yeniden ortaya çıkan hizmet çağrılarıyla etkileşime giren komisyoncu yapılarında dağıtılan yazılım sistemleri. İletişim koordinasyonundan, sonuçlarından ve istisnalarından sorumludur. Bir sonraki makalemde mimari kalıpların komisyoncusunda daha derin olacağım.

Benim adıma: 2023'teki tek açık C ++ 20 seminerim


Kendiliğinden insanlar için. C ++ 20 ile ilgili tüm detaylar:

  • C ++ 20: 18.04.2023 – 20.04.2023 (Aramis Hotel'de Herrenberg'de varlığın eğitimi)

()




Ne yazık ki, bu bağlantı artık geçerli değil.

Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.


Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
 
Üst