Menü
Bedava
kayıt
ev  /  sorunlar/ Keith Matsudeira: Ölçeklenebilir Web Mimarisi ve Dağıtılmış Sistemler. BBR sistemi: doğrudan tıkanıklık üzerinde tıkanıklık kontrolü Çıkış yok ayrıntısı cfm

Keith Matsudeira: Ölçeklenebilir Web Mimarisi ve Dağıtılmış Sistemler. BBR sistemi: doğrudan tıkanıklık üzerinde tıkanıklık kontrolü Çıkış yok ayrıntısı cfm

Bu yazıda, kasa fanı seçerken kullanmanız gereken bazı kavramları özetleyeceğiz ve size farklı fan türleri için tipik olan özellikleri anlatacağız. Ayrıca bir yılı aşkın süredir Thermaltake Sonic Tower işlemci soğutma sisteminin aktif elemanı olarak hizmet veren, işlemci ve ekran kartlarının test edilmesinde kullanılan 120 mm akasa Amber AK-183-L2B fanını da test edeceğiz. . Ve kaynağımızdaki hayranlara adanmış bir dizi incelemede ilk kahraman olma hakkını tamamen hak ettiğine dikkat edilmelidir.

Cevaplamaya çalışacağımız sorular şunlar olacak...

Kasa fanı için gereksinimler nelerdir?

  1. Performans seviyesi.
  2. Gürültü seviyesi.
  3. Görünüm (aydınlanmanın varlığı ve türü).
  4. Ek özellikler (PWM güç kaynağı desteği, titreşim önleyici montaj ile birlikte bir hız kontrol cihazının varlığı).

Kasa fanları arasındaki temel farklar nelerdir?

1.Boyutlar- çark boyutu.

Kasada dahili havalandırma oluşturmak için, çoğu durumda, kasada montajları için başlangıçta montaj delikleri sağlandığından, standart boyutta 80 mm, 92 mm veya 120 mm'ye eşit fanlar kullanılır. Fanın pervane boyutu ne kadar büyük olursa, hava akışını pompalama kabiliyetinin o kadar yüksek olduğu oldukça açıktır. Bu nedenle, verimlilik göstergelerini elde etmek için daha küçük boyutlu fan büyük modeller daha yüksek bir hızda dönmeniz ve buna göre çok daha fazla ses çıkarmanız gerekecek. Bu nedenle, popüler olan 120 mm'lik büyük fanlardır.

Bu özellikleri göstermek için, aynı Xinruilian Science & Technology Co serisinin fan modellerinin özelliklerini karşılaştırabilirsiniz. farklı boyutlara sahip:

boyut, mm

hız rpm

Hava akımı CFM

Gürültü seviyesi, dB

Basınç, mm H 2 0

Modellerin verilen özelliklerine bakarak, 92 mm'lik aynı dönüş hızında, fanın 80 mm'den 1,65 kat daha verimli olacağı ve 120 mm'lik fanın 92 mm modelinden iki kat daha verimli olacağı sonucuna varabiliriz, tüm fanların tek tip pervaneye sahip olduğu dikkate alınır.

Farklı çark çaplarına ek olarak, fanın profil boyutu veya derinliği de aynı derecede önemlidir. 25 mm'lik profil, geleneksel muhafazalar için "klasik"tir. Daha küçük profile sahip hayranlara düşük profilli, daha büyük profile sahip hayranlara yüksek profilli denir. Hava akış kuvveti, spesifikasyonda maksimum basınç değeri ile karakterize edilen profil boyutuna doğrudan bağlıdır.

Örneğin, aynı dönüş hızında çalışan normal profilli ve yüksek profilli iki 120 mm modelin özelliklerini karşılaştıralım.

boyut, mm

hız rpm

Hava akımı CFM

Gürültü seviyesi, dB

Basınç, mm H20

Tablodan, yüksek profilli fanın yalnızca maksimum hava akış basıncının en iyi göstergesinde farklılık gösterdiği görülebilir. sıradan bilgisayar sistemleri aşırı basınç oluşturmaya gerek yoktur, bu nedenle bu fanlar içlerinde kullanılmaz. Çoğu durumda, sunucularda yüksek profilli fanlar kullanılır, buna ek olarak, sahip oldukları artan hız dönme ve sonuç olarak yeterince büyük bir çalışma gürültüsü.

2. Rulman tipi.

Fanlarda kullanılan üç ana yatak türü vardır: düz, birleşik kaymalı ve yuvarlanmalı ve iki makaralı yatak. Bu tip rulmanlara ek olarak, bazı üreticiler tarafından özel olarak ayrı olarak geliştirilen, önemli ölçüde daha az sıklıkta hidrodinamik tipler vardır.

Çoğu zaman, rulman tipi, fan modeli adına aşağıdaki endekslerin mevcudiyeti ile belirlenebilir, ancak her zaman resmi spesifikasyonla kontrol edilmesi tavsiye edilir:

S (elbise kolu) - esasen bir manşon olan manşonlu yatak;
İLE BİRLİKTE (kombo) - bir bilyeli yatak ve kısa burç;
B (top) veya 2B (2 top)- iki bilyalı rulman.

En basit ve en ucuz, ancak ne yazık ki, özellikle dayanıklı değil, kovanlı yataktır. Bu yatak, dönerken içinde çark milinin (çubuk) kaydığı küçük bir bakır burç şeklindedir. Yağlanmış kovanlı yeni bir fan tamamen sessiz olabilir, ancak bu özellik zamanla kaybolabilir. Uygun yağlama seviyesinin yokluğunda, burç oldukça hızlı bir şekilde "tükenir" ve bu da fanın ses çıkarmasına neden olur. Ayrıca, yağlama yapılmadığında, yüksek sıcaklığa sahip bir alanda çalışırken, fan tamamen sıkışabilir. Bu gerçek, özellikle, güç yarı iletken elemanlarının soğutulmasını sağlayan bir kovan yatağında duran bir fan vakalarının olduğu, ucuz Çin güç kaynaklarına sahip vakalarda açıkça gösterilmiştir. Sonuç olarak, güç kaynağı başarısız oldu.

Rulmanın kombine versiyonu nispeten daha uzun bir rulman ömrüne sahiptir.

Çift bilyalı rulman en pahalı ama aynı zamanda daha dayanıklı bir seçenektir. Bu tip rulman, yüksek sıcaklıktaki bir alanda serbestçe çalışabilir. Ancak aynı zamanda, bu tür hayranlar arasında genellikle oldukça yüksek ve hoş olmayan bir ses çıkaran örnekler bulabilirsiniz. Benzer bir resim özellikle ucuz fanlar için karakteristiktir, çünkü tüm yapının gürültü özellikleri doğrudan minyatür bir yatağın üretim kalitesine bağlıdır. Bu nedenle, bilyalı rulmanlı bir ürün seçerseniz, hiçbir durumda ucuzluğunu takip etmeyin, çünkü daha pahalı modeller bile nadiren sessizdir.

3. Motor sınıfı.

Tüm kutu fanları 4 kutuplu motorlarla çalışır doğru akım... Hız açısından hepsi üç kategoriye ayrılır: 2000 rpm'ye kadar düşük hız, 2000 rpm'den 3000 rpm'ye kadar orta hız ve 3000 rpm'nin üzerinde yüksek hız. Fan motorunun sınıfını, genellikle etikette belirtilen adındaki dizine göre bulabilirsiniz:

L (düşük) - yavaş hareket eden ( 2000'e kadar rpm);
m (orta) - ortalama ( 2000'den 3000'e rpm);
H (yüksek) - yüksek hız ( 3000'den fazla rpm).

Üretici şartnamesinde verilen verilerin özellikleri nelerdir?

Pervane hızı dakikadaki devir sayısıyla ölçülür (RPM - dakikadaki devir sayısı). Fan hızı, besleme gerilimi ile hemen hemen doğru orantılı olarak değişebildiğinden, spesifikasyonda verilen değer, nominal besleme gerilimine karşılık gelir. Dönme hızı ne kadar yüksek olursa, fan o kadar verimli olur, ancak aynı zamanda genellikle daha gürültülü olur.

Hava akımı CFM (dakikada fit küp, CFM) - dakikada fit küp veya saatte metreküp (m 3 / h) cinsinden belirtilebilir. Bu durumda 1 CFM ≈ 1,7 m3/h. Bu değer, hava akışına direnç olmaması, yani fanın her iki tarafında eşit hava basıncı olması koşuluyla, belirli bir süre için "pompalanan" hava miktarını yansıtır. Tabii ki, bu değer ne kadar büyükse, o kadar iyidir.

Statik hava akış basıncı Fan genellikle mm su sütunu olarak verilir ve fanın üretebileceği hava akışının kuvvetini karakterize eder.

Basıncın P = F / S formülüyle hesaplandığını hatırlayın. Yani basınç, hava akış kuvvetinin etki ettiği alana oranıdır. Spesifikasyon, fanın direnç nedeniyle hava akışı oluşturamadığı zaman oluşturduğu hava akışının maksimum değerini belirtir.

Fan karakteristiğinin tamamı "Performans Eğrisi" grafiğinde görülebilir.

Performans eğrisi, hava akışı ve basınç arasındaki ilişkiyi temsil eder. Eksen üzerinde bulunan eğrinin en üst noktası, spesifikasyonda verilen maksimum basınçtan başka bir şey değildir. Eğrinin diğer eksende uzanan alt noktası, basınç oluşturması gerekmediğinde fanın maksimum hava akışına karşılık gelir. Gerçek koşullarda, yani durumda, hava akışının bir miktar direnci aşması gerekir. Her vücudun ayrı ayrı kendi direnç derecesi vardır. Sistemin direnci grafikte eğimli olarak ifade edilecektir ve düz çizgi ile eğrinin kesişme noktası koşullu sistemimizde fanın çalışma noktasından başka bir şey değildir.

hayran kaynağı Fanın çalışması ve beyan edilen özellikleri sağlaması gereken bin saat sayısı ile ölçülür. Makalenin yazarı, hizmet ömrü doğrudan çalışma koşullarına bağlı olduğundan, belirtilen değerlerin elde edildiği çalışma koşullarının tam olarak farkında değildir. Fanın gürültü kalitesini kaybetmeden belirtilen saat kadar çalışabileceği varsayılmıştır. Kaynak, büyük ölçüde yatağın tipine ve kalitesine bağlıdır. Kaymalı yataklar için genellikle 30.000 saat, kombine yataklar için 45.000 saat ve çift bilyalı yataklar için değerler 60.000 saat veya daha fazlası için rapor edilir.

Çoğu durumda, manşonlu yataktaki bir fan, üreticiler 30 bin rakamı beyan etse de, yaklaşık bir yıl boyunca oldukça sessiz çalışabilir, bu nedenle, bu sayılar hakkında önyargılı olmamalıdır - bunlar oldukça görecelidir. Ve araştırırsanız, üreticinin fanların periyodik bakımını da kastettiği ortaya çıkıyor, yani. yağla sıradan kullanıcılar nadiren üretir.

Şimdi hayran incelememizin kahramanına dönelim. akasa AK-183-L2B ve özelliklerine bakın:

akasaAK-183-L2B

boyut, mm

Dönme hızı, rpm

Hava akımı CFM

Basınç, mm H20

Kaynak, h

Rulman tipi

iki yuvarlanma

3 pimli

Gürültü seviyesi, dB

Besleme gerilimi, V

Ürünler web sayfası

ortalama fiyat

akasa AK-183-L2B fan, şeffaf bir plastik torba içinde paketlenmiştir. Paketin arkası, şeffaf kasayı ve fanın yarı saydam amber-sarı çarkını vurgulayan mavi bir karton levha içerir. Genel olarak, her şey Akasa Group'un olağan kurumsal mavi-sarı renginde dekore edilmiştir.

Karton ekin arkasında beş farklı dilde bir teknik özellik sayfası vardır.

Fana ek olarak, paketin en altında “3-4 pinli adaptör” olarak tercüme edilen yazıtlı küçük siyah bir karton kutu var.

Bu nedenle, kutunun, fanı çevresel aygıtların konektörlerinden bağlamanıza izin veren aynı adaptörü ve ayrıca fan dönüş hızını kontrol etmek için ek olarak 3 pimli bir konektöre sahip olması şaşırtıcı değildir. Ayrıca küçük kara kutuda fanı kasaya takmak için dört vida vardı.

Aksa AK-183-L2B fan kasası beyaz şeffaf plastikten, çarkı ise kehribar sarısı yarı saydam plastikten yapılmıştır. Aslında, akasa şirketinin tüm ürün yelpazesini düşünürsek, o zaman içinde bazı basit ve standart çözümler nadiren bulunur, çünkü şirket, çoğunlukla, özellikle modlama için tasarlanmış malların dağıtımıyla uğraşmaktadır. Ancak bu, modcular kastına ait değilseniz ve ürünü yalnızca pratik nedenlerle değerlendirmeye alışkınsanız, bu fan ve benzer ürünün geri kalanının size uygun olmayacağı anlamına gelmez. Aslında, sözde zor kullanıcılar, modcular veya overlokçular için ürünlerin üretiminde, her şeyden önce işçilik kalitesine ve biraz daha yüksek özelliklerine daha fazla dikkat edilmesi anlamına gelir. Bu nedenle, bu tür ürünlerin tüketici niteliklerinin neredeyse her zaman basit ürünlerden daha yüksek olması hiç de şaşırtıcı değildir.

Dışarıdan, fan şüphesiz öncelikle sarı ve beyazın güzel kombinasyonu ile öne çıkıyor ve böyle bir fanın sadece bir arka ışığı olması gerektiği anlaşılıyor, ama aslında öyle değil. Aerodinamik açıdan bakıldığında, fanda hiçbir yenilik veya teknik bilgi uygulanmadı - yedi kanatlı basit bir çark.

Aksa AK-183-L2B fan düşük hızlı modellere aittir, nominal dönüş hızı 1400 rpm, maksimum hava akışı 44,8 CFM'ye ulaşabilir ve statik basınç 1,1 mm su sütunudur. Özellikler ne süper yüksek ne de oldukça sıradan, ancak bu şaşırtıcı değil, çünkü bir ev sisteminin kasa fanı için daha yüksek gürültü gereksinimleri ilk sırada yer alıyor.

Ve bu bağlamda, spesifikasyon, 18 dB'lik oldukça düşük bir gürültü seviyesini gösterir. Aksa AK-183-L2B fanın iki bilyalı rulmana dayandığını ve üretici verilerine göre kaynağının 80.000 saat olduğunu belirtmek gerekir. Bilyalı rulmanlar için olağan değer 60.000 saattir, bu nedenle biraz artan bir değer, imalatlarına daha iyi bir yaklaşım için umut vermek için sebep verir, çünkü daha önce belirttiğimiz gibi, gürültü özelliklerini belirleyen bir bilyeli yatağın üretim kalitesidir. .

Fan, PWM güç kaynaklarını desteklemeyen 3 pimli bir güç konektörü tarafından çalıştırılır.

Test yapmak

Testin pratik kısmı, fanın üretilen hava akışını nominal hızda test etmenin yanı sıra ses şiddetini kulaktan değerlendirmenin iki aşamasından oluşur.

1 numaralı test

İlk testte fan, Thermalright SI-128 soğutucusunun aktif bir elemanı olarak görev yapacak. Test açık bir durumda gerçekleştirilir ve ana kontrol edilen parametre, 2,8 GHz'e hız aşırtmalı Intel Core 2 Duo E6300 işlemcinin ısıtma sıcaklığı ve anakartın sıcaklığıdır.

2 numaralı test

İkinci testte fan, arka panele monte edilmiş ve dışarı üflemek için çalışan bir kasa fanı olarak amacına uygun olarak kullanılacaktır. Test sırasında kasa kapatılacak ve içinde başka fan açılmayacaktır. Ana kontrol edilen parametre aynı zamanda Intel Core 2 Duo E6300 işlemcinin ısıtma sıcaklığı olacaktır, ancak şimdi pasif Thermaltake Sonic Tower (CL-P0071) soğutma sisteminin kurulu olduğu hız aşırtma olmadan ve anakartın sıcaklığı. Test sonucu, Everest uygulamasında işlemci stres testinin 10 dakikalık "çalışmasından" sonra kaydedilir.

ile test platformu yapılandırması Intel işlemci aşağıdaki bileşenlerden oluşur:

Anakart

Gigabyte GA-965P-DS4 (Intel P965 Express)

İşlemci

Intel Core 2 Duo E6300 (LGA775, 1.86 GHz, L2 2MB) @ 2.8 GHz

Veri deposu

2 х DDR2-800 1024 MB Apacer PC6400

Video kartı

EVGA GeForce 8600GTS 256 MB DDR3 PCI-E

HDD

Samsung HD080HJ 80GB SATA-300

Optik sürücü

ASUS DRW-1814BLT SATA

Güç kaynağı

Chieftec CFT-500-A12S 500W 120mm fan

CODEGEN M603 MidiTower

Fan akasa AK-183-L2B, diğer rakiplerle eşit düzeyde iyi bir performans sergiliyor. Bildirilen 18 dB'lik oldukça düşük gürültü seviyesini sadece kendi sübjektif görüşümüzle teyit edebiliriz. Belirtilen değer, gerçek gürültü seviyesiyle gerçekten oldukça tutarlıdır - maksimum hızda küçük bir uğultu yayar.

Sonuçlar.

Aksa AK-183-L2B fanı, alıcıya hemen görünebileceği gibi, yalnızca modifiye edici güzel bir dekorasyon değildir. Oldukça büyük bir hava akışı oluşturabilir ve en önemlisi, oldukça düşük bir gürültü seviyesi yayar. Rulmanlı bir fanın yüksek kaliteli bir modeli için kabul edilebilir maliyetini dikkate alırsak, bu mal kategorisinde fiyat / tüketici nitelikleri açısından en iyilerinden biri olacaktır. Tekrar edelim ki test laboratuvarımızda akasa AK-183-L2B fanı bir yılı aşkın süredir çalışmakta ve bu süre zarfında ses kalitesi pratikte değişmemiştir.

Avantajlar:

  • büyük bir hava akışı yaratır;
  • düşük gürültü seviyesi;
  • iyi fiyat/tüketici kalite oranı.

Dezavantajları şunları içerir:

  • PWM desteği eksikliği.

Test için sağlanan ekipman için PF Service LLC (Dnepropetrovsk) şirketine şükranlarımızı sunarız.

Makale 4669 kez okundu

Kanallarımıza abone olun

Açık kaynaklı yazılım, en büyük web sitelerinden bazıları için temel bir yapı taşı haline geldi. Bu web sitelerinin büyümesiyle, mimarileri için en iyi uygulamalar ve yönergeler ortaya çıktı. Bu bölüm, büyük web siteleri tasarlarken göz önünde bulundurulması gereken bazı temel konuların yanı sıra bu hedeflere ulaşmak için kullanılan bazı temel bileşenleri kapsamayı amaçlamaktadır.

Bu bölüm, materyallerin bir kısmı diğer dağıtılmış sistemler için de tahmin edilebilmesine rağmen, web sistemlerinin analizine odaklanmaktadır.

1.1 Dağıtılmış web sistemleri oluşturma ilkeleri

Ölçeklenebilir bir web sitesi veya uygulama oluşturmak ve yönetmek tam olarak ne anlama geliyor? İlkel düzeyde, kullanıcıları İnternet üzerinden uzak kaynaklara bağlamaktır. Ve birden çok sunucuya dağılmış kaynaklar veya bu kaynaklara erişim, web sitesini ölçeklenebilir kılan bağlantıdır.

Hayattaki çoğu şey gibi, web hizmetinizi oluşturmak için önceden plan yapmak için zaman ayırmak yardımcı olabilir. Büyük web sitelerinin ardındaki bazı hususları ve ödünleri anlamak, daha küçük web siteleri oluştururken daha akıllı kararlarla sonuç verebilir. Aşağıda, büyük ölçekli web sistemlerinin tasarımını etkileyen temel ilkelerden bazıları verilmiştir:

  • kullanılabilirlik: Web sitesi çalışma süresi, birçok şirketin itibarı ve işlevselliği için kritik öneme sahiptir. Daha büyük çevrimiçi perakende mağazalarından bazıları için birkaç dakika bile ulaşılamamak, binlerce veya milyonlarca dolarlık gelir kaybına neden olabilir. Bu nedenle, her zaman kullanılabilir ve başarısızlığa karşı dayanıklı sistemlerinin geliştirilmesi de temel bir iş ve teknoloji gereksinimidir. Dağıtılmış sistemlerde yüksek kullanılabilirlik, önemli bileşenler için yedekliliğin dikkatli bir şekilde değerlendirilmesini, kısmi sistem arızalarından hızlı kurtarmayı ve sorunlar ortaya çıktığında sorunsuz bir şekilde küçültmeyi gerektirir.
  • Verim: Web sitesi performansı çoğu site için önemli bir metrik haline geldi. Web sitesi hızı, kullanıcı deneyimi ve memnuniyetinin yanı sıra arama motoru sıralamalarını da etkiler - doğrudan kitleyi elde tutma ve geliri etkileyen bir faktör. Sonuç olarak, kilit nokta, hızlı yanıtlar ve düşük gecikme için optimize edilmiş bir sistem oluşturmaktır.
  • Güvenilirlik: sistem, belirli bir veri talebinin belirli verileri tutarlı bir şekilde döndüreceği şekilde sağlam olmalıdır. Veri değişikliği veya güncelleme durumunda, aynı istek yeni veri döndürmelidir. Kullanıcıların sisteme bir şey yazılıp yazılmadığını veya içinde saklanıp saklanmadığını bilmeleri gerekir, daha sonra veri alma olasılığı için yerinde kalacağından emin olabilirler.
  • Ölçeklenebilirlik: Herhangi bir büyük dağıtılmış sistem söz konusu olduğunda, boyut dikkate alınması gereken birçok şeyden sadece biridir. Aynı derecede önemli olan, yaygın olarak sistem ölçeklenebilirliği olarak adlandırılan büyük hacimli iş yükünün üstesinden gelmek için verimi artırma çabalarıdır. Ölçeklenebilirlik, sistemin farklı parametrelerine atıfta bulunabilir: miktar ek trafiküstesinden gelebileceği, depolama kapasitesini büyütmenin ne kadar kolay olduğu veya başka kaç işlemin işlenebileceği.
  • kontrol edilebilirlik: Kullanımı kolay bir sistem tasarlamak bir diğer önemli faktördür. Sistemin yönetilebilirliği, "bakım" ve "güncellemeler" işlemlerinin ölçeklenebilirliği ile eşittir. (Yani, herhangi bir hata veya istisna olmaksızın beklendiği gibi çalışıyor mu?)
  • Fiyat: Maliyet önemli bir faktördür. Bu, açık bir şekilde donanım ve yazılım maliyetlerini içerebilir, ancak sistemi dağıtmak ve sürdürmek için gereken diğer hususları da dikkate almak önemlidir. Sistemi kurmak için gereken geliştirici süresi, sistemi kurmak ve çalıştırmak için gereken operasyonel çaba miktarı ve hatta yeterli düzeyde eğitim öngörülmelidir. Maliyet, toplam sahip olma maliyetidir.

Bu ilkelerin her biri, dağıtılmış bir web mimarisinin tasarımında karar vermenin temelidir. Bununla birlikte, birbirleriyle çatışabilirler çünkü birinin hedeflerine ulaşması, diğerlerini ihmal etme pahasına gelir. Basit bir örnek: performans çözümü (ölçeklenebilirlik) olarak birden çok sunucu eklemeyi seçmek, yönetilebilirlik (ek bir sunucu çalıştırmanız gerekir) ve sunucu satın alma maliyetlerini artırabilir.

Herhangi bir web uygulaması geliştirirken, projenin bir veya daha fazlasını bağışlayabileceğini doğrulamak için bile olsa bu temel ilkeleri dikkate almak önemlidir.

1.2 Temel Bilgiler

Sistem mimarisi göz önüne alındığında, hangi bileşenlerin kullanılmaya değer olduğu, bunların nasıl birbirine uyduğu ve hangi ödünleşimlerin yapılabileceği gibi vurgulanması gereken birkaç konu vardır. Açıkça ihtiyaç duymadan ölçeklendirmeye para yatırmak akıllıca bir iş kararı olarak kabul edilemez. Bununla birlikte, planlamada bazı öngörüler gelecekte zamandan ve kaynaklardan önemli ölçüde tasarruf sağlayabilir.

Bu bölüm, neredeyse tüm büyük web uygulamaları için kritik olan bazı temel faktörlere odaklanmaktadır: Hizmetler,
fazlalık, segmentasyon, ve reddetme işlemi... Bu faktörlerin her biri, özellikle önceki bölümde açıklanan ilkeler bağlamında, seçimler ve ödünleşimler içerir. Açıklığa kavuşturmak için bir örnek verelim.

Örnek: Resim Barındırma Uygulaması

Muhtemelen daha önce web'de resimler yayınladınız. Birden çok görüntüyü depolayan ve sunan büyük siteler için, düşük yanıt gecikmesine (hızlı alma) sahip uygun maliyetli, son derece güvenilir bir mimari oluşturmanın zorlukları vardır.

Kullanıcıların görüntülerini merkezi bir sunucuya yükleyebildiği ve görüntülerin Flickr veya Picasa'ya benzer bir site bağlantısı veya API aracılığıyla istenebildiği bir sistem hayal edin. Açıklamayı basitleştirmek için, bu uygulamanın iki ana görevi olduğunu varsayalım: sunucuya görüntü yükleme (yazma) ve görüntü isteme yeteneği. Elbette verimli yükleme önemlidir, ancak kullanıcılar talep ettiğinde hızlı teslimat bir öncelik olacaktır (örneğin, resimlerin bir web sayfasında veya başka bir uygulamada görüntülenmesi istenebilir). Bu işlevsellik, bir web sunucusunun veya İçerik Dağıtım Ağı (CDN) uç sunucusunun sağlayabileceğine benzer. Bir CDN sunucusu tipik olarak veri nesnelerini birçok konumda depolar, böylece coğrafi/fiziksel konumları kullanıcılara daha yakın olur ve bu da daha iyi performansa yol açar.

Sistemin diğer önemli yönleri:

  • Depolanan görüntülerin sayısı sınırsız olabilir, bu nedenle depolama ölçeklenebilirliği bu açıdan değerlendirilmelidir.
  • Resim indirmeleri / istekleri için düşük gecikme olmalıdır.
  • Bir kullanıcı sunucuya bir resim yüklerse, verileri her zaman eksiksiz ve erişilebilir kalmalıdır.
  • Sistemin bakımı kolay olmalıdır (yönetilebilirlik).
  • Resim barındırma çok karlı olmadığı için sistem uygun maliyetli olmalıdır.

Bu tasarımla ilgili bir başka olası sorun, Apache veya lighttpd gibi bir web sunucusunun genellikle işleyebileceği eşzamanlı bağlantı sayısında bir üst sınıra sahip olmasıdır (varsayılan değer 500 civarındadır, ancak çok daha yüksek olabilir). bu limiti hızlı bir şekilde kullanabilir. Okumalar eşzamansız olabileceğinden veya gzip sıkıştırma veya parçalama gibi diğer performans optimizasyonlarından yararlanabileceğinden, web sunucusu besleme okumalarını daha hızlı değiştirebilir ve istemciler arasında geçiş yapabilir, maksimum bağlantı sayısından (Apache ile ve maksimum bağlantı ile) çok daha fazla istek sunabilir. 500 olarak ayarlanmış bağlantı sayısı, saniyede birkaç bin okuma isteğine hizmet etmek oldukça mümkündür). Öte yandan girişler, tüm indirme süresi boyunca açık bir bağlantı sürdürme eğilimindedir. Örneğin, sunucuya 1 MB'lık bir dosyanın aktarılması çoğu ev ağında 1 saniyeden fazla sürebilir ve bunun sonucunda web sunucusu bu eşzamanlı yazmalardan yalnızca 500'ünü işleyebilir.


Şekil 1.2: Okuma ve Yazmayı Ayırma

Bu potansiyel sorunun öngörülmesi, görüntülerin okunması ve yazılmasının gösterilen bağımsız hizmetlere ayrılması gerektiğini göstermektedir. Bu, yalnızca her birini ayrı ayrı ölçeklendirmeye değil (çünkü her zaman yazmaktan daha fazla okuma yapmamız muhtemeldir), aynı zamanda her hizmette neler olup bittiğini takip etmeye de izin verecektir. Son olarak, gelecekteki sorunları tanımlayacak ve yavaş okuma erişimi sorunlarını teşhis etmeyi ve değerlendirmeyi kolaylaştıracaktır.

Bu yaklaşımın avantajı, sorunları birbirimizden bağımsız olarak çözebilmemizdir - aynı bağlamda yeni görüntüler kaydetme ve elde etme ihtiyacını düşünmek zorunda kalmadan. Bu hizmetlerin her ikisi de hala global imaj korpusunu kullanır, ancak belirli bir hizmet için uygun yöntemleri kullanırken, kendi performanslarını optimize edebilirler (örneğin, istekleri sıraya alarak veya popüler görüntüleri önbelleğe alarak - daha sonra anlatacağız). Hem bakım hem de maliyet açısından, her hizmet gerektiğinde bağımsız olarak ölçeklenebilir. Ve bu olumlu bir faktördür, çünkü bunları birleştirmek ve karıştırmak, yukarıda açıklanan senaryoda olduğu gibi, yanlışlıkla performanslarını etkileyebilir.

Tabii ki, iki farklı uç noktanız varsa yukarıdaki model en iyi sonucu verecektir (aslında bu, bulut depolama sağlayıcılarının ve İçerik Dağıtım Ağlarının çeşitli uygulamalarına çok benzer). Bu sorunları çözmenin birçok yolu vardır ve her durumda bir takas bulunabilir.

Örneğin, Flickr bu okuma-yazma sorununu, her modülün yalnızca sınırlı sayıda belirli kullanıcıya hizmet edebilmesi için kullanıcıları farklı modüller arasında dağıtarak çözer ve kullanıcı sayısı arttıkça kümeye daha fazla modül eklenir (bkz. sunum.
http://mysqldba.blogspot.com/2008/04/mysql-uc-2007-presentation-file.html). İlk örnekte, donanımı gerçek kullanım yüküne (tüm sistemdeki okuma ve yazma sayısı) göre ölçeklendirmek daha kolaydır, Flickr ölçeklendirmesi ise kullanıcı tabanına göre yapılır (ancak bu, farklı kullanıcılar arasında eşit kullanımı varsayar, dolayısıyla kapasite marj ile planlanmalıdır). Geçmişte, hizmetlerden birinin kullanılamaması veya bir sorun, tüm sistemin işlevselliğini çalışmaz hale getirdi (örneğin, hiç kimse dosya yazamaz), o zaman Flickr modüllerinden birinin kullanılamaması yalnızca onunla ilişkili kullanıcıları etkiler. İlk örnekte, tüm bir veri kümesi üzerinde işlemleri gerçekleştirmek daha kolaydır - örneğin, yazıcı hizmetini yeni meta veriler içerecek şekilde güncellemek veya tüm görüntü meta verilerini aramak - oysa Flickr mimarisinde her modülün güncellenmesi gerekiyordu. veya arandı (veya gerçekten bunun için tasarlanan meta verileri sıralamak için arama hizmetinin oluşturulması gerekiyordu).

Bu sistemlere gelince, her derde deva değildir, ancak her zaman bu bölümün başında açıklanan ilkelerden hareket etmelisiniz: sistem ihtiyaçlarını belirleyin ("okuma" veya "yazma" işlemleriyle veya hepsini bir kerede yükleme, paralellik düzeyi , veri kümeleri, aralıklar, denemeler vb. üzerinde sorgular), farklı alternatiflerin karşılaştırmalı kıyaslamasını gerçekleştirin, olası sistem arızası koşullarını anlayın ve kapsamlı bir arıza planı geliştirin.

artıklık

Hatayı zarif bir şekilde ele almak için web mimarisinin hizmetlerinde ve verilerinde fazlalık olması gerekir. Örneğin, tek bir sunucuda depolanan bir dosyanın yalnızca bir kopyası varsa, o sunucunun kaybı, dosyanın da kaybı anlamına gelecektir. Bu durum pek olumlu bir şekilde karakterize edilemez ve genellikle birden çok kopya veya yedek oluşturarak önlenebilir.

Aynı ilke hizmetler için de geçerlidir. Bir uygulamanın birden çok kopyasının veya sürümünün aynı anda çalışmasını sağlamak için bir uygulamaya entegre bir işlevsellik parçası sağlayarak tek düğüm hatasına karşı koruma sağlayabilirsiniz.

Sistemde yedeklilik oluşturarak zafiyetleri ortadan kaldırabilir ve bir felaket durumunda yedekli veya yedekli işlevsellik sağlayabilirsiniz. Örneğin, "üretimde" çalışan aynı hizmetin iki örneği varsa ve bunlardan biri tamamen veya kısmen başarısız olursa, sistem hatanın üstesinden gelmek pahasına olabilir. çalışan bir kopyaya geçiş.
Anahtarlama otomatik olarak gerçekleşebilir veya manuel müdahale gerektirebilir.

Hizmet yedekliliğinin bir diğer önemli rolü, paylaşımsız mimari... Bu mimariyle, her düğüm bağımsız olarak ve ayrıca durumları kontrol eden veya diğer düğümlerin eylemlerini koordine eden merkezi bir "beynin" yokluğunda çalışabilir. Yeni düğümler eklemek özel koşullar veya bilgi gerektirmediğinden ölçeklenebilirliği destekler. En önemlisi, bu sistemlerde kritik bir arıza noktası yoktur, bu da onları arızaya karşı çok daha dirençli hale getirir.

Örneğin, görüntü sunucusu uygulamamızda, tüm görüntülerin donanımda başka bir yerde yedek kopyaları olacaktır (deprem veya veri merkezi yangını gibi bir felaket durumunda ideal olarak farklı bir coğrafi konumla) ve görüntü erişim hizmetleri yedekli olacaktır. , hepsi potansiyel olarak isteklere hizmet ediyor. (Santimetre. .)
İleriye baktığımızda, yük dengeleyiciler bunu mümkün kılmak için harika bir yoldur, ancak daha fazlası aşağıdadır.


Şekil 1.3: Yedekli Resim Barındırma Uygulaması

segmentasyon

Veri kümeleri, tek bir sunucuda barındırılamayacak kadar büyük olabilir. Ayrıca, hesaplama işlemlerinin çok fazla bilgisayar kaynağı tüketmesi, performansı düşürmesi ve güç artışı gerektirmesi de olabilir. Her durumda, iki seçeneğiniz vardır: dikey veya yatay ölçekleme.

Ölçek büyütmek, tek bir sunucuya daha fazla kaynak eklemek anlamına gelir. Bu nedenle, çok büyük bir veri kümesi için bu, daha fazla (veya daha fazla) sabit sürücü eklemek anlamına gelir ve böylece tüm veri kümesi tek bir sunucuya sığabilir. Hesaplamalı işlemler söz konusu olduğunda, bu, hesaplamanın daha hızlı CPU veya daha fazla belleğe sahip daha büyük bir sunucuya taşınması anlamına gelir. Her durumda, bilgi işlem sisteminin ayrı bir kaynağını ek veri işleme yeteneğine sahip kılmak için dikey ölçeklendirme gerçekleştirilir.

Yatay ölçeklendirme ise daha fazla düğüm eklemeyi içerir. Büyük bir veri kümesi durumunda, bu, tüm veri hacminin bir kısmını depolamak için ikinci bir sunucu eklemek anlamına gelir ve bir hesaplama kaynağı için bu, işi bölmek veya bazı ek düğümler aracılığıyla yükleme yapmak anlamına gelir. Ölçek büyütme potansiyelinden tam olarak yararlanmak için, şu şekilde gerçekleştirilmelidir: iç ilke sistem mimarisi geliştirme. Aksi takdirde, yatay ölçekleme için gereken bağlamın değiştirilmesi ve vurgulanması sorunlu olabilir.

Ölçeklendirmenin en yaygın yöntemi, hizmetleri parçalara veya modüllere bölmektir. Her bir mantıksal işlevsellik kümesi ayrı ayrı çalışacak şekilde dağıtılabilirler. Bu, coğrafi sınırlar veya ödeme yapan ve ödemeyen kullanıcılar gibi diğer kriterlerle yapılabilir. Bu şemaların avantajı, gelişmiş işlevselliğe sahip bir hizmet veya veri deposu sağlamalarıdır.

Örnek görüntü sunucumuzda, görüntüyü depolamak için kullanılan tek dosya sunucusunun, her biri kendi benzersiz görüntü kümesini içeren birden çok dosya sunucusuyla değiştirilmesi mümkündür. (Bkz.) Bu mimari, sistemin her dosya sunucusunu görüntülerle doldurmasına ve disk alanı doldukça ek sunucular eklemesine olanak tanır. Tasarım, görüntü dosyasının adını içeren sunucuyla ilişkilendiren bir adlandırma şeması gerektirecektir. Görüntü adı, sunucularla ilişkili tutarlı bir karma şemadan oluşturulabilir. Veya alternatif olarak, her görüntünün artımlı bir kimliği olabilir; bu, dağıtım hizmetinin bir görüntü talep ederken yalnızca her sunucuyla (bir dizin olarak) ilişkili kimlik aralığını işlemesine olanak tanır.


Şekil 1.4: Yedekli ve parçalanmış görüntü barındırma uygulaması

Elbette, birden çok sunucu arasında veri veya işlevsellik dağıtma konusunda zorluklar vardır. Anahtar sorulardan biri - veri konumu; dağıtık sistemlerde, veriler işlemlerin yerine veya hesaplama noktasına ne kadar yakınsa, sistemin performansı o kadar iyi olur. Sonuç olarak, verilerin birden fazla sunucu arasında dağıtılması potansiyel olarak sorunludur, çünkü veriye ihtiyaç duyulduğunda, talep yerinde bulunmama riski vardır, sunucunun gerekli bilgilerin ağ üzerinden maliyetli bir şekilde örneklenmesini gerçekleştirmesi gerekecektir. .

Formda başka bir potansiyel sorun ortaya çıkıyor
tutarsızlık (tutarsızlık).Çeşitli hizmetler paylaşılan bir kaynağa, potansiyel olarak başka bir hizmete veya veri deposuna okuyup yazdığında, yarış koşulları olasılığı vardır - burada bazı verilerin mevcut durumuna güncellendiği düşünülür, ancak gerçekte güncellenmeden önce okunur - bu durumda veriler tutarsızdır. Örneğin, bir resim barındırma senaryosunda, bir müşteri köpeğin resmini güncellemek için bir istek gönderirse, başka bir müşteri resmi okurken "Köpek" başlığını "Gizmo" olarak değiştirirse bir yarış durumu meydana gelebilir. Böyle bir durumda, ikinci müşteri tarafından hangi "Köpek" veya "Gizmo" unvanının alınacağı açık değildir.

Elbette, verileri parçalamayla ilgili bazı engeller vardır, ancak parçalama, sorunların her birini diğerlerinden ayırmanıza olanak tanır: veri, yük, kullanım kalıpları vb. kontrollü bloklar halinde Bu, ölçeklenebilirlik ve yönetilebilirlik konusunda yardımcı olabilir, ancak risk hala oradadır. Riski azaltmanın ve kesintileri ele almanın birçok yolu vardır; ancak, kısa olması açısından bunlar bu bölümde ele alınmamıştır. Bu konu hakkında daha fazla bilgi istiyorsanız, hata toleransı ve izleme blog gönderisine bir göz atmalısınız.

1.3. Hızlı ve ölçeklenebilir veri erişiminin yapısal bileşenleri

Dağıtılmış sistemlerin tasarımındaki bazı temel ilkeleri ele aldıktan sonra, şimdi daha zor bir noktaya geçelim - veri erişimini ölçeklendirme.

LAMP yığın uygulamaları gibi çoğu temel web uygulaması, içindeki görüntüye benzer.


Şekil 1.5: Basit Web Uygulamaları

Bir uygulama büyüdükçe iki büyük zorluk ortaya çıkar: uygulama sunucusuna ve veritabanına erişimi ölçeklendirmek. Yüksek düzeyde ölçeklenebilir bir uygulama tasarımında, bir web sunucusu veya uygulama sunucusu genellikle simge durumuna küçültülür ve çoğu zaman kaynakları paylaşmayan bir mimari uygular. Bu, sistemin uygulama sunucusu katmanını genişletir. Bu tasarımın bir sonucu olarak, sıkı çalışma, yığından aşağıya veritabanı sunucusuna ve destekleyici hizmetlere taşınacaktır; Gerçek ölçekleme ve performans sorunlarının devreye girdiği yer burasıdır.

Bu bölümün geri kalanı, verilere hızlı erişim sağlayarak bu tür hizmetler için performansı ve ölçeklenebilirliği geliştirmeye yönelik en yaygın strateji ve tekniklerden bazılarına odaklanmaktadır.


Şekil 1.6: Basitleştirilmiş Web Uygulaması

Çoğu sistem bir şemaya göre basitleştirilebilir,
Bu, düşünmeye başlamak için iyi bir başlangıç ​​noktasıdır. Çok fazla veriye sahipseniz, masanızın üst çekmecesindeki şeker kutusu kadar kolay ve hızlı erişmesini istediğinizi varsayabilirsiniz. Bu karşılaştırma aşırı basitleştirilmiş olsa da iki karmaşık konuya işaret ediyor: veri ambarı ölçeklenebilirliği ve hızlı veri erişimi.

Bu bölüm için, çok fazla terabayt (TB) veriniz olduğunu ve kullanıcıların bu verilerin küçük parçalarına belirli bir sırayla erişmesine izin verdiğinizi varsayalım. (Santimetre. .)
Benzer bir görev, örnek görüntü barındırma uygulamasında görüntü dosyasını dosya sunucusunda bir yere yerleştirmektir.


Şekil 1.7: Belirli verilere erişme

Bu özellikle zordur çünkü belleğe terabaytlarca veri yüklemek çok pahalı olabilir ve disk G/Ç işlemlerinin sayısını doğrudan etkiler. Bir diskten okuma hızı, RAM'den okuma hızından birkaç kat daha düşüktür - belleğe erişimin Chuck Norris kadar hızlı olduğunu, diske erişimin ise klinikteki kuyruktan daha yavaş olduğunu söyleyebiliriz. Hızdaki bu fark, özellikle büyük veri kümeleri için fark edilir; kuru sayılarda, bellek erişimi, sıralı okumalar için disk okumalarından 6 kat ve rastgele okumalar için 100.000 kat daha hızlıdır (bkz. ). Üstelik, hatta benzersiz tanımlayıcılar Küçük bir veri yığınını bulma problemini çözmek, çikolata dolu son şekeri yüzlerce başka şeker kutusundan bakmadan çıkarmak kadar zor olabilir.

Neyse ki, en önemli dördü önbellekler, proxy'ler, dizinler ve yük dengeleyiciler olan şeyleri basitleştirmek için uygulayabileceğiniz birçok yaklaşım var. Bu bölümün geri kalanı, bu kavramların her birinin veri erişimini çok daha hızlı hale getirmek için nasıl kullanılabileceğini tartışıyor.

önbellekler

Önbelleğe alma, yakın zamanda istenen verilere yeniden ihtiyaç duyulabilecek bir temel ilkeden yararlanır. Önbellekler, neredeyse her bilgi işlem katmanında kullanılır: donanım, işletim sistemleri, web tarayıcıları, web uygulamaları ve daha fazlası. Önbellek kısa süreli bellek gibidir: boyut olarak sınırlıdır, ancak orijinal veri kaynağından daha hızlıdır ve son erişilen öğeleri içerir. Önbellekler mimarinin her düzeyinde bulunabilir, ancak genellikle ön uca en yakın düzeydedir ve önemli arka uç yükü olmadan verileri hızlı bir şekilde döndürmek için uygulanır.

Peki örnek API'mizde veri erişimini hızlandırmak için önbellek nasıl kullanılabilir? Bu durumda, birkaç uygun önbellek konumu vardır. Olası yerleştirme seçeneklerinden biri olarak, sorgu düzeyinde düğümleri aşağıda gösterildiği gibi seçebilirsiniz.
.


Şekil 1.8: Sorgu Düzeyi Düğümüne Önbellek Yerleştirme

Önbelleğin doğrudan istek düzeyi düğümüne yerleştirilmesi, yanıt verilerinin yerel olarak depolanmasına olanak tanır. Her hizmet isteği yapıldığında, ana bilgisayar varsa yerel, önbelleğe alınmış verileri hızlı bir şekilde döndürür. Önbellekte değilse, istek düğümü diskten veri ister. İstek düzeyindeki tek bir düğümdeki önbellek, hem bellekte (çok hızlıdır) hem de düğümün yerel diskinde (NAS'a erişmeye çalışmaktan daha hızlı) bulunabilir.


Şekil 1.9: Önbellek sistemleri

Önbelleğe almayı birden çok düğüme yaydığınızda ne olur? Gördüğünüz gibi, sorgu katmanı çok sayıda düğüm içerecekse, muhtemelen her düğümün kendi önbelleği olacaktır. Ancak, yük dengeleyiciniz istekleri düğümler arasında rastgele dağıtırsa, aynı istek farklı düğümlere gidecek ve böylece önbellek hatalarını artıracaktır. Küresel ve dağıtılmış önbellekler, bu engeli aşmanın iki yoludur.

Genel önbellek

Global önbelleğin anlamı adından da bellidir: tüm düğümler tek bir önbellek alanı kullanır. Bu durumda, orijinal deponuzdan daha hızlı olan ve sorgu düzeyindeki tüm düğümler tarafından kullanılabilecek bir tür sunucu veya dosya deposu eklenir. İstek düğümlerinin her biri, önbelleği yerelmiş gibi ister. İstemci ve istek sayısı arttıkça tek bir önbelleği aşırı yüklemek çok kolay olduğundan, bu tür bir önbelleğe alma şeması biraz karışıklığa neden olabilir. Aynı zamanda, böyle bir şema belirli mimariler için çok etkilidir (özellikle bu küresel önbelleği çok hızlı yapan veya önbelleğe alınması gereken sabit bir veri kümesine sahip özel donanım söz konusu olduğunda).

Diyagramlarda gösterilen iki standart küresel önbellek biçimi vardır. Durum, önbellekte önbelleğe alınmış bir yanıt bulunmadığında tasvir edilir, önbelleğin kendisi, temel depolamadan eksik veri parçasını almaktan sorumlu olur. Önbellekte bulunmayan herhangi bir veriyi almak için istek düğümlerinin sorumluluğunu gösterir.


Şekil 1.10: Önbelleğin getirmekten sorumlu olduğu Genel Önbellek


Şekil 1.11: İstek düğümlerinin getirmekten sorumlu olduğu genel önbellek

Çoğu küresel önbellek sağlamlaştırma uygulaması, istemcilerin aynı veriler için isteklerin taşmasını önlemek için verileri geçersiz kılma ve getirme işlemlerini önbelleğin kendisinin yönettiği ilk türü kullanma eğilimindedir. Ancak, ikinci uygulamanın daha anlamlı olduğu bazı durumlar vardır. Örneğin, önbellek çok büyük dosyalar için kullanılıyorsa, düşük bir önbellek isabet oranı, önbellek hatalarıyla arabellek önbelleğini aşırı yükleyecektir; bu durumda, toplam veri kümesinin (veya etkin veri kümesinin) büyük bir yüzdesinin önbellekte bulunmasına yardımcı olur. Başka bir örnek, önbellekte depolanan dosyaların statik olduğu ve silinmemesi gereken bir mimaridir. (Bu, bu gecikmenin altında yatan performans özelliklerinden kaynaklanıyor olabilir - uygulama mantığı değiştirme stratejisini veya sıcak noktaları önbellekten daha iyi anladığında, büyük veri kümeleri için belirli veri parçalarının çok hızlı olması gerekebilir.)

Dağıtılmış önbellek

Bu dizinler genellikle bellekte veya gelen istemci isteğine çok yakın bir yerde saklanır. Sıralı listelerde veri depolamak için yaygın olarak kullanılan Berkeley DB (BDB) ve ağaç veri yapıları, indeksli erişim için idealdir.

Genellikle, istediğiniz veri parçasını elde edene kadar sizi bir konumdan diğerine taşıyan ve bu şekilde devam eden bir harita işlevi gören birçok dizin düzeyi vardır. (Santimetre. )


Şekil 1.17: Çok düzeyli dizinler

İndeksler, aynı verinin birkaç başka görünümünü oluşturmak için de kullanılabilir. Büyük veri kümeleri için bu, verilerin birçok ek kopyasını oluşturmak zorunda kalmadan farklı filtreler ve görünümler tanımlamanın harika bir yoludur.

Örneğin, yukarıda bahsedilen resim barındırma sisteminin aslında kitap sayfalarının resimlerini barındırdığını ve hizmetin, tıpkı arama motorlarının HTML'yi aramanıza izin vermesi gibi, belirli bir konudaki tüm metin içeriğini arayarak bu resimlerdeki metin üzerinde istemci sorgulamalarına olanak tanıdığını varsayalım. içerik. Bu durumda, tüm bu kitap resimleri dosyaları depolamak için çok sayıda sunucu kullanır ve kullanıcıya sunacak bir sayfa bulmak oldukça zor olabilir. Başlangıçta, rastgele sözcükleri ve sözcük kümelerini sorgulamak için ters dizinler hazır olmalıdır; o zaman o kitaptaki tam sayfaya ve konuma gitme ve arama sonuçları için doğru görüntüyü çıkarma zorluğu vardır. Böylece, bu durumda, ters çevrilmiş dizin bir konuma (örneğin B kitabı) eşlenir ve ardından B, tüm sözcükleri, konumları ve her bölümdeki oluşum sayısını içeren bir dizin içerebilir.

İndeks1'in yukarıdaki şemada görüntüleyebileceği ters çevrilmiş indeks şuna benzer: Her kelime veya kelime grubu, onları içeren kitaplar için bir indeks görevi görür.

Ara dizin benzer görünecek, ancak yalnızca Kitap B için sözcükleri, konumu ve bilgileri içerecektir. Bu çok katmanlı mimari, dizinlerin her birinin, tüm bu bilgilerin büyük bir ters çevrilmiş dizin içinde saklanmasından daha az yer kaplamasına izin verir. .

Ve bu, büyük ölçekli sistemlerde önemli bir noktadır, çünkü sıkıştırıldıklarında bile, bu dizinler oldukça büyük ve saklanması pahalı olabilir. Diyelim ki bu sistemde dünyanın her yerinden birçok kitabımız var - 100,000,000 ("Google Kitapların İçinde" adlı blog yazısına bakın) - ve her kitap sadece 10 sayfa (hesaplamaları basitleştirmek için) ve her sayfada 250 kelime: Bu bize bir toplam 250 milyar kelime. Bir kelimedeki ortalama karakter sayısını 5 olarak alırsak ve her karakteri 8 bit (veya bazı karakterler aslında 2 bayt alsa da 1 bayt) olarak kodlarsak, böylece kelime başına 5 bayt harcarsak, o zaman sadece her kelimeyi içeren dizin bir kez 1 terabayttan fazla depolama alanı gerektirir. Böylece kelime kümeleri, veri konumları ve kullanım sayıları gibi diğer bilgileri içeren dizinlerin hacminin çok hızlı büyüyebileceğini görebilirsiniz.

Bu ara dizinleri oluşturmak ve verileri daha küçük parçalar halinde sunmak, büyük veri sorununu çözmeyi kolaylaştırır. Veriler birden fazla sunucuya dağıtılabilir ve aynı zamanda hızlı bir şekilde kullanılabilir. İndeksler, bilgi erişiminin temel taşıdır ve günümüzün modern arama motorları... Elbette, bu bölüm yalnızca dizin oluşturma konusunda geneldir ve dizinlerin nasıl daha küçük, daha hızlı, daha fazla bilgi (ilgililik gibi) içermesi ve sorunsuz bir şekilde güncellenmesi konusunda birçok araştırma yapılmıştır. (Özellikle alaka düzeyi veya puanlama söz konusu olduğunda, rekabet eden terimlerin yönetilebilirliği ve yeni veri eklemek veya mevcut verileri değiştirmek için gereken güncelleme sayısı ile ilgili bazı sorunlar vardır.)

Verilerinizi hızlı ve kolay bir şekilde bulabilmek çok önemlidir ve dizinler bunu başarmak için en basit ve en etkili araçtır.

Yük dengeleyiciler

Son olarak, herhangi bir dağıtılmış sistemin bir diğer kritik parçası da yük dengeleyicidir. Yük dengeleyiciler, görevleri isteklere hizmet etmekten sorumlu düğümler arasında yükü dağıtmak olduğundan, herhangi bir mimarinin önemli bir parçasıdır. Bu, birden fazla düğümün sistemde aynı işlevi şeffaf bir şekilde sunmasına izin verir. (Bkz.) Ana amaçları, birçok eşzamanlı bağlantıyı yönetmek ve bu bağlantıları istenen düğümlerden birine yönlendirerek, daha fazla istek sunmak için yalnızca düğümler ekleyerek sistemin ölçeğini genişletmesine izin vermektir.


Şekil 1.18: Yük Dengeleyici

Rastgele düğüm seçimi, döngüsel deneme ve hatta CPU veya RAM kullanımı gibi belirli kriterlere dayalı düğüm seçimi dahil olmak üzere istekleri sunmak için birçok farklı algoritma vardır. Yük dengeleyiciler, donanım aygıtları veya yazılım olarak uygulanabilir. HAProxy, en yaygın olarak kullanılan açık kaynaklı yük dengeleyicidir.

Dağıtılmış bir sistemde, yük dengeleyiciler genellikle sistemin ön ucunda bulunur, böylece gelen tüm talepler doğrudan onlardan geçer. Karmaşık bir dağıtılmış sistemde, talebin aşağıdaki şekilde gösterildiği gibi birkaç yük dengeleyiciden geçmesi gerekmesi çok muhtemeldir.
.


Şekil 1.19: Çoklu Yük Dengeleyici

Proxy'ler gibi, bazı yük dengeleyiciler de isteklerin türüne bağlı olarak istekleri farklı şekilde yönlendirebilir. Ters proxy olarak da bilinirler.

Belirli bir kullanıcı oturumuna özgü verileri yönetmek, yük dengeleyicileri kullanırken karşılaşılan zorluklardan biridir. Bir e-ticaret sitesinde, yalnızca bir müşteriniz olduğunda, kullanıcıların sepetlerine bir şeyler koyması ve ziyaretler arasında içeriğini kaydetmesi çok kolaydır (bu önemlidir, çünkü bir ürünün satılma olasılığı, aşağıdaki durumlarda önemli ölçüde artar). kullanıcı siteye döner, ürün hala sepetindedir). Ancak, bir kullanıcı ilk oturum için bir siteye ve ardından bir sonraki ziyaretinde başka bir siteye yönlendirilirse, yeni sitede o kullanıcının alışveriş sepetinin içeriğiyle ilgili veriler bulunmayabileceğinden tutarsızlıklar ortaya çıkabilir. (Sepetinize bir paket Mountain Dew koyarsanız ve geri döndüğünüzde orada olmayacaksa üzülmez miydiniz?) Bir çözüm, kullanıcının her zaman yönlendirileceği şekilde oturumları “yapışkan” hale getirmek olabilir. aynı düğüm. Ancak, otomatik yük devretme gibi bazı güvenilirlik özelliklerinden yararlanmak önemli ölçüde zor olacaktır. Bu durumda, kullanıcının sepeti her zaman içeriğe sahip olacaktır, ancak yapışkan düğümü kullanılamaz hale gelirse özel bir yaklaşıma ihtiyaç duyulacak ve alışveriş sepetinin içeriğiyle ilgili varsayım artık doğru olmayacaktır (umarım bu varsayım doğru olmayacaktır). uygulamada yerleşik). Elbette bu sorun, hizmetler ve diğerleri (tarayıcı önbellekleri, tanımlama bilgileri ve URL yeniden yazma gibi) gibi bu bölümde açıklanan diğer stratejiler ve araçlarla çözülebilir.

Sistemde yalnızca birkaç düğüm varsa, o zaman DNS carousel gibi tekniklerin, pahalı olabilen ve sistemin karmaşıklığına gereksiz katman ekleyebilen yük dengeleyicilerden daha pratik olması daha olasıdır. Elbette, büyük sistemler, rastgele seçim veya karusel algoritmaları gibi basit olanlar da dahil olmak üzere her türlü farklı zamanlama ve yük dengeleme algoritmalarına ve ayrıca sistemin kullanım modellerinin performans özelliklerini hesaba katan daha karmaşık mekanizmalara sahiptir. Bu algoritmaların tümü, trafiği ve istekleri dağıtır ve otomatik yük devretme veya hasarlı bir düğümün otomatik olarak kaldırılması (örneğin, yanıt vermediğinde) gibi yararlı güvenilirlik araçları sağlayabilir. Ancak, bu gelişmiş özellikler, sorunları teşhis etmeyi zahmetli hale getirebilir. Örneğin, yüksek yük durumlarında, yük dengeleyiciler yavaş olabilen veya zaman aşımına uğrayabilecek (bir talep dalgası nedeniyle) düğümleri kaldıracak ve bu da diğer düğümler için durumu daha da kötüleştirecektir. Bu durumlarda kapsamlı kontrol önemlidir, çünkü genel sistem trafiği ve yükü azalıyor gibi görünse bile (düğümler daha az istek sunduğundan), bireysel düğümler aşırı yüklenebilir.

Yük dengeleyiciler, sisteminize kapasite eklemenin kolay bir yoludur. Bu makalede açıklanan diğer teknikler gibi, dağıtılmış bir sistemin mimarisinde önemli bir rol oynar. Yük dengeleyiciler ayrıca düğümlerin sağlığını doğrulamak için kritik bir işlev sağlar. Böyle bir kontrol sonucunda bir düğüm yanıt vermiyorsa veya aşırı yüklenirse, istek işleme havuzundan kaldırılabilir ve sisteminizin fazlalığı nedeniyle yük, kalan çalışan düğümler arasında yeniden dağıtılacaktır. .

Kuyruklar

Şimdiye kadar, verileri hızlı bir şekilde okumanın birçok yolunu inceledik. Aynı zamanda, verimli kayıt yönetimi, veri katmanını ölçeklendirmenin bir diğer önemli parçasıdır. Sistemler, minimum işlem yükü ve küçük veritabanları ile basit olduğunda, yazma işlemleri tahmin edilebilir şekilde hızlı olabilir. Ancak daha karmaşık sistemlerde bu işlem süresiz olarak uzun sürebilir. Bu nedenle, örneğin, verilerin farklı sunucular veya dizinler üzerindeki birden çok konuma yazılması gerekebilir veya sistem yalnızca ağır yük altında olabilir. Yazma işlemlerinin ve hatta herhangi bir görevin uzun sürdüğü durumlarda, performans ve kullanılabilirlik elde etmek, sistemde uyumsuzluk oluşturmayı gerektirir. Bunu yapmanın yaygın bir yolu, istekleri sıraya almaktır.


Şekil 1.20: Senkron istek

Her müşterinin bir uzak servis görevi talep ettiği bir sistem hayal edin. Bu istemcilerin her biri, isteklerini mümkün olan en kısa sürede görevleri tamamlayan ve sonuçlarını uygun istemcilere döndüren sunucuya gönderir. Tek bir sunucunun (veya mantıksal hizmetin) gelen istemcilere geldikleri anda hizmet verebildiği küçük sistemlerde, bu tür bir durum iyi çalışmalıdır. Ancak, sunucu işleyebileceğinden daha fazla istek aldığında, her istemci kendi isteğine bir yanıt üretilmeden önce diğer istemcilerin işlemeyi tamamlamasını beklemek zorunda kalır. Bu, içinde gösterilen senkronize bir istek örneğidir.

Bu tür eşzamanlı davranış, istemci performansını önemli ölçüde düşürebilir; aslında boşta, müşteri, talebe bir yanıt alana kadar beklemek zorunda kalıyor. Sistem yüküyle başa çıkmak için ek sunucular eklemek aslında sorunu çözmez; etkin yük dengeleme uygulanmış olsa bile, müşteri verimliliğini en üst düzeye çıkarmak için gereken eşit ve adil yük dağılımını sağlamak son derece zordur. Ayrıca, sunucu bu isteği işlemek için uygun değilse (veya başarısız olursa), ona bağlı istemci de çalışmayı durduracaktır. Bu soruna etkili bir çözüm, müşterinin talebi ile ona hizmet etmek için yapılan fiili iş arasında bir soyutlama gerektirir.


Şekil 1.21: İstekleri yönetmek için kuyrukları kullanma

Giriş sıraları. Kuyruğun mekanizması çok basittir: bir görev gelir, kuyruğa girer ve ardından “işçiler” bir sonraki görevi işleme fırsatı bulur bulmaz kabul ederler. (Bkz.) Bu görevler, bir veritabanına yazmak kadar basit veya bir belge için bir önizleme görüntüsü oluşturmak kadar karmaşık olabilir. Bir istemci, görevleri sıraya almak için istek gönderdiğinde, artık yürütme sonuçlarını beklemesi gerekmez; bunun yerine, isteklerin yalnızca usulüne uygun olarak kabul edilmesi gerekir. Bu onay daha sonra müşteri talep ettiğinde çalışmanın sonuçlarına bir referans olarak hizmet edebilir.

Kuyruklar, bir müşterinin isteği ve yanıtı için stratejik bir soyutlama sağlayarak müşterilerin eşzamansız bir şekilde çalışmasına olanak tanır. Öte yandan, senkron bir sistemde istek ve yanıt arasında bir ayrım yoktur ve bu nedenle ayrı ayrı kontrol edilemez. Asenkron bir sistemde, istemci bir görev ayarlar, hizmet görevin alındığını onaylayan bir mesajla yanıt verir ve ardından istemci görevin durumunu periyodik olarak kontrol edebilir, yalnızca tamamlanır tamamlanmaz sonucu talep edebilir. İstemci asenkron bir istekte bulunurken, başka işler yapmakta ve hatta diğer hizmetlere asenkron isteklerde bulunmak serbesttir. İkincisi, dağıtılmış sistemlerde kuyrukların ve mesajların nasıl çalıştığına bir örnektir.

Kuyruklar ayrıca hizmet kesintilerine ve reddedilmelere karşı bir miktar koruma sağlar. Örneğin, geçici sunucu kesintileri nedeniyle çalışmayı durduran hizmet isteklerini tekrarlayabilen çok kalıcı bir kuyruk oluşturmak oldukça kolaydır. QoS garantilerini zorlamak için bir kuyruk kullanmak, istemcileri karmaşık ve genellikle tutarsız istemci tarafı hata işleme gerektiren geçici hizmet kesintilerine maruz bırakmaktan daha tercih edilir.

1.4. Çözüm

Büyük miktarda veriye hızlı erişim sağlayan verimli sistemler tasarlamak çok ilginç bir konudur ve her türlü yeni uygulamayı uyarlamaya izin veren önemli sayıda iyi araç hala bulunmaktadır. Bu bölüm sadece birkaç örneğe değindi, ancak gerçekte çok daha fazlası var - ve bu alanda yeni yeniliklerin yaratılması sadece devam edecek.

Bu çalışma, değiştirilmemiş Creative Commons Atıf 3.0 lisansı altında dağıtılmaktadır. Ayrıntıları şurada görün:

  • Tercüme

Paket çift geçiş süresi ile çıktı darboğazlarının ölçümü

Tüm hesaplara göre, bugünün interneti verileri olması gerektiği kadar hızlı taşıyamıyor. Çoğu kullanıcı hücresel dünya birkaç saniyeden birkaç dakikaya kadar gecikmeler yaşıyor: havaalanlarındaki ve konferanslardaki halka açık WiFi noktaları daha da kötü. Fizikçiler ve klimatologların dünyanın dört bir yanındaki meslektaşlarıyla petabaytlarca veri alışverişi yapmaları gerekiyor, ancak ayrıntılı çoklu gigabit altyapılarının kıtalararası bağlantılarda genellikle saniyede yalnızca birkaç megabit ittiğini görüyorlar.

Bu sorunlar, 80'lerde TCP tıkanıklık kontrolünün oluşturulması sırasında yapılan mimari seçiminden kaynaklandı - daha sonra paket kaybının "tıkanma" olarak yorumlanmasına karar verildi. Bu kavramların eşdeğerliği o zaman için doğruydu, ancak tanım gereği değil, yalnızca teknolojinin sınırlamaları nedeniyle. NIC'ler (ağ arabirimi denetleyicileri) megabitten gigabit'e ve bellek yongaları kilobayttan gigabayta yükseltildiğinde, paket kaybı ve tıkanıklık arasındaki ilişki daha az belirgin hale geldi.

Modern TCP'de, paket kaybı tıkanıklığı kontrolü - türünün en gelişmiş teknolojisi olan CUBIC'de bile - bu sorunların temel nedenidir. Darboğaz arabellekleri çok büyükse, paket kaybı tıkanıklık kontrolü onları dolu tutarak gereksiz ağ arabelleğine neden olur. Arabellekler çok küçükse, paket kaybı tıkanıklık kontrolü, paket kaybını bir tıkanıklık sinyali olarak yanlış yorumlayarak verimin düşmesine neden olur. Bu sorunları çözmek, paket kaybı kısmaya bir alternatif gerektirir. Bu alternatifi bulmak için tıkanıklığın nerede ve nasıl oluştuğunu anlamanız gerekir.

Tıkanıklık ve darboğaz

Herhangi bir zamanda (tam çift yönlü) bir TCP bağlantısında yalnızca bir en yavaş bağlantı vardır veya darboğaz her yöne. Darboğaz aşağıdaki nedenlerden dolayı önemlidir:
  • Bağlantıdaki maksimum veri aktarım hızını belirler. Bu, sıkıştırılmamış bir veri akışının ana özelliğidir (örneğin, bir kaza yolun küçük bir bölümünün sadece bir şeritle sınırlı kalmasına neden olursa, yoğun saatlerde altı şeritli bir otoyol düşünün. o şeritte trafikten daha hızlı hareket etmeyin.
  • Burası sürekli kuyrukların oluştuğu yerdir. Yalnızca darboğazdan çıkan akışın yoğunluğu, gelen akışın yoğunluğunu aşarsa azalırlar. En yüksek bit hızında çalışan bağlantılar için, darboğaza giden tüm giden akışlar her zaman daha yüksek bir giden hıza sahiptir, bu nedenle kuyruklar darboğaza geçer.
Bağlantıda kaç bağlantı olduğuna ve bireysel hızlarının ne olduğuna bakılmaksızın, TCP açısından, keyfi olarak karmaşık bir yol, aynı RTT ile tek bir bağlantı olarak temsil edilir (bir paketin çift geçiş süresi, yani, gidiş-dönüş süresi) ve bant genişliği darboğaz... İki fiziksel sınırlama RTprop(gidiş-dönüş yayılma süresi) ve BtlBw(darboğaz bant genişliği) iletim performansını etkiler. (Ağ yolu bir malzeme borusu olsaydı, RTprop borunun uzunluğu ve BtlBw çapı olurdu).

Şekil 1, veri hacmi ile RTT ve bit hızının çeşitli kombinasyonlarını göstermektedir. uçuşta, yani uçak içi (veriler gönderildi, ancak teslimat onayı olmadan). Mavi çizgiler RTprop sınırını, yeşil çizgiler BtlBw sınırını ve kırmızı çizgiler darboğaz arabelleğini gösterir. Gri alanlardaki işlemler, en az bir kısıtlamayla çeliştiği için mümkün değildir. Kısıtlamalar arasındaki geçişler, niteliksel olarak farklı davranışlara sahip üç bölgenin (uygulama sınırlı, bant genişliği sınırlı ve arabellek sınırlı) oluşumuna yol açtı.

Resim 1

Uçuşta boruyu doldurmak için yeterli veri olmadığında, RTprop davranışı belirler; aksi takdirde, BtlBw hakimdir. Sınırlayıcı çizgiler, aynı zamanda BDP borusu olan noktada kesişir (bant genişliği-gecikme ürünü, bant genişliği ve gecikmenin türevi). Bu noktadan sonra boru dolduğundan, fazlalık darboğaz için bir kuyruk oluşturur ve bu da RTT ile üstteki grafikte gösterilen uçuş verileri arasında doğrusal bir ilişki ile sonuçlanır. Fazlalık tampon kapasitesini aştığında paketler atılır. tıkanıklık BDP hattının sağında sadece sürekli bir konumdur ve tıkanıklık kontrolü- BDP hattının ortalama olarak ne kadar sağında veri aktarımının gerçekleştiğine dair bir sınır belirlemek için bir tür şema.

Kayıp tıkanıklık kontrolü, bant genişliği sınırlı alanın sağ kenarında çalışır ve yüksek gecikme ve sık paket kaybı pahasına tam darboğaz bant genişliği sağlar. Belleğin pahalı olduğu günlerde, arabellek boyutları BDP'den yalnızca biraz daha büyüktü ve bu da kayıplı tıkanıklık denetiminin aşırı gecikmesini en aza indirdi. Sonraki bellek fiyat indirimleri, ağ arabelleğe alma işleminin artmasına ve RTT'nin milisaniyeler yerine saniyelere yükselmesine neden oldu.

Kapasite sınırlı alanın sol kenarında, sağdan daha iyi koşullara sahip bir çalışma noktası vardır. 1979'da Leonard Kleinrock, bu çalışma noktasının optimal olduğunu, hem bireysel bağlantılar hem de bir bütün olarak ağ için gecikmeyi ve kaybı en aza indirirken gerçek verimi en üst düzeye çıkardığını gösterdi. Ne yazık ki, aynı zamanlarda, Jeffrey Yaffe, bu çalışma noktasında yakınsayan dağıtılmış bir algoritma yaratmanın imkansız olduğunu kanıtladı. Bu bulgu araştırmanın yönünü değiştirdi. En uygun Kleinrock çalışma noktasını arayan dağıtılmış bir algoritma aramak yerine, araştırmacılar tıkanıklık kontrolüne alternatif yaklaşımlar keşfetmeye başladılar.

Google'daki grubumuz, her gün, dünyanın her yerinden gelen TCP paket başlıklarının ele geçirildiği günlükleri incelemek, anormallikleri ve davranış patolojilerini anlamak için saatler harcıyor. Genellikle aradığımız ilk şey, rotanın temel özellikleri olan RTprop ve BtlBw'dir. Ağ izlerinden elde edilebilmeleri, Jaffe'nin vardığı sonucun bir zamanlar göründüğü kadar basit olmayabileceğini gösteriyor. Vardığı sonuç, temel ölçüm belirsizliğine dayanır (örneğin, RTT'deki ölçülen artışın yol uzunluğundaki bir değişiklikten mi, darboğaz çıktısındaki bir düşüşten mi yoksa başka bir bağlantıdan gelen trafik nedeniyle kuyruk gecikmesindeki bir artıştan mı kaynaklandığı). Her belirli ölçümün belirsizliğini ortadan kaldırmak imkansız olsa da, bileşiğin zaman içindeki davranışı, belirsizliği ortadan kaldırmak için tasarlanmış ölçüm stratejilerinin uygulanması olasılığını öne sürerek daha net bir resim sağlar.

Bu ölçümleri güvenilir bir izleme döngüsü ile birleştirerek ve kontrol sistemlerindeki en son gelişmeleri uygulayarak, paket kaybı veya kısa kuyruk gecikmeleri yerine gerçek tıkanıklığa yanıt veren dağıtılmış bir tıkanıklık kontrol protokolü geliştirmeyi umuyoruz. Ve optimal Kleinrock çalışma noktasında yüksek bir olasılıkla yakınsayacaktır. Böylece, bir rotayı karakterize eden iki parametrenin ölçülmesine dayalı bir tıkanıklık yönetim sistemi geliştirmeye yönelik üç yıllık projemiz başladı: darboğaz çıktısı ve paket çift geçiş süresi veya BBR.

Darboğaz özelliği

Paketlerin darboğaza ulaşma oranı (hız dengesi) BtlBw ve (tam kanal) uçuştaki toplam veri miktarı BDP'ye () eşit olduğunda bağlantı maksimum bant genişliği ve minimum gecikme ile çalışır.

Birinci koşul, darboğazın %100 kullanılmasını sağlar. İkincisi, basit bir darboğazı önlemek için yeterli veriye sahip olmamızı, ancak kanalın taşmamasını sağlar. Hız dengesi koşulunun kendisi Olumsuz sıra olmadığını, yalnızca boyutunun değişmediğini garanti eder (örneğin, bir bağlantı beş paketli bir BDP'ye 10 paketlik bir İlk Pencere göndererek başlarsa, daha sonra tam olarak aynı darboğaz hızında çalışırsa, ardından on ilk paketten beşi kanalı dolduracak ve fazlalık, çözülemeyen dar bir yerde duran bir kuyruk oluşturacaktır). Aynı şekilde, tam kanal koşulu hiçbir kuyruk olmadığını garanti etmez (örneğin, bir bağlantı BDP / 2 üzerinden patlamalar halinde BDP gönderir ve darboğazdan tamamen yararlanır, ancak ortalama kuyruk BDP / 4'tür). Darboğazdaki ve tüm kanaldaki kuyruğu en aza indirmenin tek yolu, her iki koşulu aynı anda karşılamaktır.

BtlBw ve RTprop değerleri bağlantının ömrü boyunca değişir, bu nedenle sürekli olarak değerlendirilmeleri gerekir. Şu anda TCP, RTT'yi (bir veri paketinin teslim edildiği mesaja gönderilmesi arasındaki zaman aralığı) izler, çünkü kaybı belirlemek için gereklidir. Herhangi bir zamanda,


rota boyunca kuyruklardan gelen "gürültü" nerede, alıcının alındı ​​gecikmesi, alındı ​​birikimi vb. ile stratejisi. RTprop, bağlantının fiziksel bir özelliğidir ve yalnızca kanalın kendisi değiştiğinde değişir. Kanal değişiklikleri bir zaman ölçeğinde gerçekleştiğinden RTprop, o zaman tarafsız ve etkili bir zaman değerlendirmesi yapılacaktır.
diğer bir deyişle, bir zaman penceresinde (genellikle onlarca saniye ila dakikalar arasında) başlatın.

RTT'den farklı olarak, TCP spesifikasyonlarındaki hiçbir şey, darboğaz çıktısını izlemek için bir uygulama gerektirmez, ancak teslimat hızının izlenmesinden bunun iyi bir tahmini elde edilebilir. Bir paketin teslim edildiğinin onayı göndericiye geri döndüğünde, paketin RTT'sini gösterir ve paket ayrıldığında uçuşta verinin teslim edildiğini duyurur. Bir paketin gönderilmesi ile bir alındının alınması arasındaki ortalama teslim hızı, teslim edilen verinin geçen süreye oranıdır:. Bu hız, darboğazın veriminden küçük veya ona eşit olmalıdır (varıştaki miktar tam olarak bilinir, bu nedenle mevcut varış aralığından daha büyük veya ona eşit olması gereken tüm belirsizlik yatmaktadır; bu nedenle, oran daha küçük olmalıdır) kuyruğunda, darboğaz kapasitesi ile yukarıdan sınırlanan gerçek teslimat hızından daha büyük veya ona eşit). Bu nedenle, maksimum teslim oranı penceresi, BtlBw'nin verimli, özel olmayan bir tahminidir:


burada zaman penceresi genellikle altı ila on RTT'dir.

TCP, RTT'yi hesaplamak için her paketin gönderme süresini kaydetmelidir. BBR, bu kayıtları teslim edilen toplam veri miktarıyla tamamlar, böylece her bir alındının gelişi hem RTT'yi hem de filtrelerin RTprop ve BtlBw tahminlerine dönüştürdüğü teslimat oranı ölçümünü bildirir.

Bu değerlerin tamamen bağımsız olduğunu unutmayın: RTprop değişebilir (örneğin, rota değiştirildiğinde), ancak aynı darboğaza sahiptir veya BtlBw, rotayı değiştirmeden değişebilir (örneğin, kablosuz bant genişliği değiştiğinde). (Her iki kısıtlamanın bağımsızlığı, sevkiyat davranışını teslimat rotası ile ilişkilendirmek için bilinmesinin gerekliliğinin nedenidir). RTprop, BDP'nin yalnızca sol tarafında ve BtlBw ise Şekil 1'de yalnızca sağ tarafta göründüğünden, belirsizlik ilkesine uyarlar: ikisinden biri ölçülebilirken diğeri ölçülemez. Sezgisel olarak, bu şu şekilde anlaşılabilir: Bir kanalın kapasitesini belirlemek için aşırı doldurulması gerekir, bu da kanalın uzunluğunu ölçmeyi mümkün kılmayan bir kuyruk oluşturur. Örneğin, istek/yanıt protokolüne sahip bir uygulama, kanalı doldurmak ve BtlBw'yi gözlemlemek için hiçbir zaman yeterli veri gönderemez. Saatlerce büyük miktarda veri aktarımı, tüm zamanını sınırlı bant genişliğine sahip bir alanda geçirebilir ve ilk paketten RTT'den yalnızca tek bir RTprop örneği alabilir. Doğal belirsizlik ilkesi, iki rota parametresinin yeniden yapılandırılmasına yönelik tahminlere ek olarak, aynı anda izlenen durumların ve mevcut çalışma noktasında nelerin öğrenilebileceğinin ve bilgi tazeliğini kaybettiğinden, işletime nasıl gidileceğinin olması gerektiği anlamına gelir. elde edilebileceği nokta. daha yeni veriler.

Bir paket akışını bir teslimat yoluna eşleme

Ana BBR algoritmasının iki bölümü vardır:

Onay aldığımızda (onay)

Her onay, RTprop ve BtlBw tahminlerini güncelleyen yeni bir RTT ve ortalama teslimat oranı ölçümleri sağlar:

OnAck (paket) işlevi rtt = şimdi - paket.sendtime update_min_filter (RTpropFilter, rtt) teslim edildi + = paket.boyutu teslim_zamanı = şimdi teslimOranı = (teslim edildi - paket.teslim edildi) / (teslim edilen_zaman - paket.teslim edilen_zaman) if (deliveryRate> BtlBwFilter currentMax ||! package.app_limited) update_max_filter (BtlBwFilter, DeliveryRate) if (app_limited_until> 0) app_limited_until = app_limited_until - package.size
Son paragrafta tartışılan belirsizlik sorunu nedeniyle if kontrolü gereklidir: gönderenler uygulama kısıtlamalı olabilir, yani uygulamada ağı dolduracak veri kalmayabilir. Bu, istek/yanıt trafiği nedeniyle oldukça yaygın bir durumdur. Gönderme fırsatı olduğunda, ancak veri gönderilmediğinde, BBR ilgili bant genişliği örneklerini "uygulama sınırlı", yani app_limited olarak işaretler (gönderme () sözde koduna bakın). Bu kod, bant genişliği modeline hangi kalıpların dahil edileceğini belirler, dolayısıyla uygulama sınırlarını değil ağ sınırlarını yansıtır. BtlBw, teslimat hızında kesin bir üst sınırdır, bu nedenle, mevcut BtlBw tahmininden daha yüksek bir ölçülen iletim hızı, numunenin uygulama kısıtlı olup olmadığına bakılmaksızın, BtlBw'nin eksik tahmini anlamına gelmelidir. Aksi takdirde, uygulama kısıtlamalı desenler atılır. (Şekil 1, DeliveryRate uygulama kısıtlamasının olduğu bölgede BtlBw parametresinin olduğundan az tahmin edildiğini göstermektedir). Bu kontroller, BtlBw filtresinin, veri gönderilmesini yavaşlatabilecek, hafife alınan değerlerle dolmasını engeller.

Veri gönderildiğinde

Paketlerin varış hızı ile darboğazdan ayrılma hızı arasında ilişki kurmak için BBR, her bir veri paketini izler. (BBR eşleşmelidir oran darboğaz: Bu, izlemenin mimarinin ayrılmaz bir parçası ve işin temel bir parçası olduğu anlamına gelir - bu nedenle pacing_rate ana kontrol parametresidir. yardımcı parametre cwnd_gain bağlanır uçak içi tipik ağ ve alıcı patolojilerini ele almak için küçük bir BDP seti ile (aşağıdaki gecikmeli ve genişletilmiş bildirimler bölümüne bakın). Kavramsal olarak, bir TCP gönderme prosedürü aşağıdaki koda benzer. (Linux'ta veri göndermek, BBR'ye çoklu gigabit bağlantılarda tek bir bağlantının doğrusal performansını veren ve ihmal edilebilir CPU ek yükü ile binlerce daha yavaş bağlantıyı yöneten verimli FQ / ilerleme hızı kuyruğunu kullanır.)

fonksiyon send (paket) bdp = BtlBwFilter.currentMax × RTpropFilter.currentMin if (inflight> = cwnd_gain × bdp) // onay veya yeniden iletim zaman aşımı dönüşü için bekleyin if (now> = nextSendTime) paket = nextPacketToSend () if (! Packet) app_limited_ = uçuş içi dönüş paketi.app_limited = (app_limited_until> 0) paket.sendtime = şimdi paket.delivered = teslim edilen paket.delivered_time = teslim edilen_zaman gemi (paket) nextSendTime = şimdi + paket.size / (pacing_gain × BtlBwFilter.currentMax) timerCallbackAt ( sonrakiGönderZamanı)
Kararlı durum davranışı

BBR üzerinden gönderilen verinin hızı ve miktarı yalnızca BtlBw ve RTprop'a bağlıdır, bu nedenle filtreler yalnızca darboğaz kısıtlaması tahminlerini değil, aynı zamanda uygulamalarını da kontrol eder. Bu, 10Mbit 40ms'lik bir akış için RTT (mavi), uçuş içi (yeşil) ve 700ms'nin üzerindeki iletim hızını (kırmızı) gösteren, Şekil 2'de gösterilen özel kontrol döngüsünü oluşturur. Teslimat oranının üzerindeki kalın gri çizgi, BtlBw max filtresinin durumudur. BtlBw'deki artışı belirlemek için BBR'de pacing_gain katsayısının döngüsel olarak uygulanmasıyla üçgen şekiller elde edilir. Döngünün her bir bölümündeki kazanç, etkilediği verilerle zaman hizalaması içinde gösterilir. Bu faktör, veriler gönderildiğinde daha önce RTT'de çalıştı. Bu, sol taraftaki olaylar dizisinin açıklamasındaki yatay düzensizlikler ile gösterilir.


Resim 2

BBR, gecikmeyi en aza indirir çünkü çoğu zaman aynı BDP çalışırken geçer. Bundan dolayı darboğaz gönderene doğru hareket eder, böylece BtlBw'deki artış görünmez olur. Bu nedenle, BBR periyodik olarak pacing_gain> 1'de RTprop aralığını harcar, bu da gönderme hızını ve teslimat onayı (uçuş içi) olmadan gönderilen veri miktarını artırır. BtlBw değişmezse, kuyruk, darboğazın önünde oluşturulur ve RTT'yi artırarak teslimatRate değerini sabit tutar. (Kuyruk, telafi edici pacing_gain değeriyle veri gönderilerek ortadan kaldırılabilir.< 1 для следующего RTprop). Если BtlBw увеличивается, то скорость deliveryRate тоже увеличивается, а новое максимальное значение фильтра немедленно увеличивает базовую скорость отслеживания (pacing_rate). Bu nedenle BBR, yeni darboğaz boyutuna katlanarak hızlı bir şekilde uyum sağlar. Şekil 3, BtlBw'nin 20 saniyelik sabit çalışmadan sonra (grafiğin sol tarafında) aniden 20 Mbps'ye yükselen, ardından 20 saniyelik sabit çalışmadan sonra 10 Mbps'ye düşen 10 Mbps 40 ms'lik bir akış üzerindeki bu etkiyi göstermektedir. 20 Mbps (grafiğin sağ tarafı).


Figür 3

(Temel olarak, BBR "max-plus" kontrol sisteminin basit bir örneğidir, standart olmayan max-plus cebire dayalı kontrol sistemlerine yeni bir yaklaşımdır. Bu yaklaşım hız adaptasyonuna olanak tanır [dişli oranı tarafından kontrol edilir maksimum] kuyruğun büyümesine bakılmaksızın [iletim oranı tarafından kontrol edilir ortalama]. Problemimize uygulandığında, fiziksel kısıtlamalardaki değişikliklere adaptasyonun bu kısıtlamaları ifade eden filtreleri değiştirerek otomatik olarak gerçekleştirildiği basit, koşulsuz bir kontrol döngüsüne gelir. Geleneksel bir sistem, bu sonucu elde etmek için karmaşık bir durum makinesinde birleştirilmiş birçok kontrol döngüsünün oluşturulmasını gerektirir.)

Tek bir BBR akışı başlatırken davranış

Modern uygulamalar, çok sayıda kod satırı içeren "olay" algoritmalarıyla başlatma, kapatma ve kayıp kurtarma gibi olayları ele alır. BBR, her şey için yukarıdaki kodu kullanır (önceki "Paket akışını teslimat yolu ile eşleştirme" bölümünde). Olaylar, bir "durumlar" dizisinden geçerek işlenir. "Durumların" kendileri, bir veya daha fazla sabit katsayı değeri ve çıkış kriteri içeren bir tablo ile tanımlanır. Zamanın çoğu, Kararlı Durum Davranışı bölümünde açıklanan ProbeBW durumunda geçirilir. Başlangıç ​​ve Boşaltma durumları, bağlantı başlatılırken kullanılır (Şekil 4). Verimin 12 büyüklük sırası arttığı bir bağlantıyı işlemek için Başlangıç ​​durumu, iletim hızı arttığında iletim hızını iki katına çıkarmak için bir iletim faktörü kullanan BtlBw için bir ikili arama algoritması uygular. Bu, RTT'de BtlBw'yi tanımlar, ancak aynı zamanda daha önce gereksiz bir kuyruk oluşturur. Startup, BtlBw'yi bulur bulmaz, BBR sistemi, aşırı kuyruktan kurtulmak için Startup'ın ters dişli oranlarını kullanan Drain durumuna ve ardından uçuş BDP hattına iner inmez ProbeBW durumuna geçer.


Şekil 4

Şekil 4, 10Mbit 40ms BBR akışının ilk saniyesini göstermektedir. En üstteki grafik, olayların zamanını ve sırasını ve ayrıca gönderenin (yeşil) ve alıcının (mavi) ilerlemesini gösterir: gönderilen ve alınan veri miktarı. Kırmızı çizgi, gönderenin aynı koşullar altında CUBIC teknolojisini kullanan performansını gösterir. Dikey gri çizgiler, BBR durumları arasındaki geçiş sürelerini gösterir. Alttaki grafik, her iki bağlantının gidiş-dönüş süresindeki (RTT) değişikliği gösterir. Lütfen bu programın zaman çizelgesinin, varış onayının (ack) alındığı zamana karşılık geldiğini unutmayın. Bu nedenle grafikler zamanla kaymış gibi görünebilir ama aslında aşağıdaki olaylar BBR sisteminin bu olayları öğrendiği ve tepki verdiği anlara tekabül etmektedir.

Şekil 4'teki alt grafik, BBR ve CUBIC'i karşılaştırır. İlk başta davranışları hemen hemen aynıdır, ancak BBR bağlantının başlangıcında oluşan kuyruğu tamamen boşaltır ve CUBIC bunu yapamaz. Gönderilen verinin ne kadarının gereksiz olduğunu size söyleyecek bir izleme modeli yoktur. Bu nedenle, CUBIC, teslimat onayı olmadan veri iletimini daha az agresif bir şekilde artırır, ancak bu büyüme, darboğaz arabelleği taşana ve paketleri düşürmeye başlayana kadar veya alıcı onaysız gönderilen veri sınırına ulaşana kadar (TCP alma penceresi) devam eder.

Şekil 5, önceki Şekil 4'te gösterilen bağlantının ilk sekiz saniyesindeki RTT davranışını gösterir. CUBIC teknolojisi (kırmızı) tüm kullanılabilir tamponu doldurur, ardından birkaç saniyede bir %70 ila %100 dolum arasında döner. Bağlantı başlatıldığında, BBR (yeşil) çok az veya hiç sıra beklemeden çalışır.


Şekil 5

Birden çok BBR akışı bir darboğazda buluştuğunda davranış

Şekil 6, birden fazla BBR akışının veriminin 100 megabit / 10 milisaniyelik bir darboğazın dürüst bir bölümünde nasıl birleştiğini göstermektedir. Aşağıya bakan üçgen yapılar, kendi kendine senkronizasyonun son yakınsamayı hızlandırdığı ProbeRTT bağlantılarının durumlarıdır.


Şekil 6

ProbeBW kazanç döngüleri (Şekil 2), daha küçük akışlara bant genişliği sağlamak için daha büyük akışları uyarır, bunun sonucunda her akış kendi dürüst durumunu anlar. Bu oldukça hızlı bir şekilde gerçekleşir (birkaç ProbeBW döngüsü), ancak yeniden dağıtımın başlangıcındaki iş parçacıkları RTprop'u olduğundan fazla tahmin ederse, adaletsizlik devam edebilir, çünkü daha önce başlayan iş parçacıkları (geçici olarak) bir kuyruk oluşturur.

Gerçek RTProp'u bulmak için akış, ProbeRTT durumunu kullanarak BDP satırının soluna hareket eder: RTProp tahmini birçok saniye boyunca güncellenmezse (yani, daha küçük bir RTT'yi ölçerek), BBR, ProbeRTT durumuna girer. , en az bir çift geçiş için gönderilen (uçuş içi) veri miktarını dört pakete düşürür ve ardından önceki duruma döner. Büyük iş parçacıkları ProbeRTT durumuna girdiğinde, birçok paket kuyruktan kaldırılır, böylece birkaç iş parçacığı aynı anda yeni RTprop değerini (yeni minimum RTT) görür. Bu nedenle, RTprop tahminleri aynı anda sıfırlanır, böylece hepsi birlikte ProbeRTT durumuna girerler - ve kuyruk daha da azalır, bunun sonucunda daha da fazla iş parçacığı yeni RTprop değerini görür, vb. . Bu dağıtılmış koordinasyon, hem adil bant genişliği hem de istikrarın anahtarıdır.

BBR, bir darboğazda boş bir kuyruk olan istenen olay etrafındaki iş parçacıklarını senkronize eder. Bu yaklaşımın aksine, paket kaybı tıkanıklığı azaltma, akışları periyodik kuyruk büyümesi ve arabellek taşmaları gibi istenmeyen olaylar etrafında senkronize ederek gecikmeyi ve paket kaybını artırır.

Google'da B4 WAN Uygulaması Deneyimi

Google'ın B4, geleneksel, düşük maliyetli anahtarlar üzerine kurulu yüksek hızlı bir WAN'dır (geniş alan ağı). Bu sığ arabellek anahtarlarındaki kayıplar, esas olarak küçük trafik patlamalarındaki ara sıra artıştan kaynaklanmaktadır. 2015 yılında Google, iş trafiğini CUBIC'ten BBR'ye kaydırmaya başladı. Herhangi bir sorun veya gerileme bildirilmemiştir ve 2016'dan beri tüm B4 TCP trafiği BBR'yi kullanır. Şekil 7 bunun bir nedenini göstermektedir: BBR'nin çıktısı sürekli olarak CUBIC'in 2-25 katıdır. Daha da büyük bir gelişme gördük, ancak BBR bağlantılarının %75'inin çekirdekteki TCP alma arabelleği tarafından sınırlandığını ve ağ operasyon personelinin CUBIC'in ağı megabaytlarca aşırı trafikle doldurmasını önlemek için kasıtlı olarak düşük bir değere (8MB) ayarladığını gördük. teslimat onayı olmadan (8 MB'yi 200 ms'lik kıtalararası RTT'ye bölerseniz, maksimum 335 Mbps alırsınız). ABD'den Avrupa'ya tek bir rotada alma arabelleğinin manuel olarak arttırılması, BBR veri hızlarını anında 2 Gbps'ye yükseltirken, CUBIC 15 Mbps'de kaldı - 1997'de Matis ve diğerleri tarafından tahmin edilen verimde 133 kat nispi artış.


Şekil 7

Şekil 7, CUBIC'e göre BBR'deki nispi gelişmeyi gösterir; Kenar çubuğu, çıktı için kümülatif dağıtım işlevlerini (CDF'ler) gösterir. Ölçümler, uzak veri merkezlerine kalıcı BBR ve CUBIC bağlantıları açan ve ardından her dakika 8 MB veri aktaran aktif algılama hizmeti kullanılarak alındı. Sondalar, Kuzey Amerika, Avrupa ve Asya arasındaki birçok B4 rotasını araştırıyor.

Büyük gelişme, BBR'nin doğrudan bir sonucudur Olumsuz tıkanıklık göstergesi olarak paket kaybını kullanır. Tam bant genişliği elde etmek için mevcut yöntemler Paket kaybı tıkanıklık denetimi, kayıp oranının BDP'nin ters karesinden daha az olmasını gerektirir (örneğin, 10 Gbps / 100 ms bağlantı için 30 milyon paket başına birden az kayıp). Şekil 8, çeşitli paket kaybı seviyelerinde ölçülen kullanılabilir çıktıyı karşılaştırır. CUBIC'de paket kaybı toleransı, algoritmanın yapısal bir özelliğidir ve BBR'de bir konfigürasyon parametresidir. BBR'deki kayıp, ProbeBW'nin maksimum kazancına yaklaştıkça, gerçek BtlBw'nin iletim hızını ölçme olasılığı keskin bir şekilde düşer, bu da filtre max.


Şekil 8

Şekil 8, BBR ve CUBIC'in kullanılabilir bant genişliğini, %0,001 ila %50 arasında değişen rastgele kayıplarla 100 Mb/s'lik bir bağlantıda 60 saniyelik bir akışta ve 100 ms'lik bir akışta karşılaştırır. CUBIC'in verimi, %0,1'lik bir kayıpla 10 kat azalır ve %1'den fazla bir oranda tamamen durur. Maksimum bant genişliği, bant genişliği eksi paket kaybının kesridir (). BBR bu seviyede %5 kayıp seviyesinde tutuyor ve %15'e kadar yakın.

YouTube Edge uygulama deneyimi

BBR, YouTube ve Google.com video sunucularına dağıtılır. Google, küçük bir kullanıcı yüzdesinin yanlışlıkla BBR veya CUBIC'e aktarıldığı küçük bir deney yürütüyor. BBR video oynatma, hizmet kalitesine ilişkin tüm kullanıcı derecelendirmelerinde önemli bir gelişme gösterir. Belki de BBR'nin davranışı daha tutarlı ve öngörülebilir olduğu için. BBR, bağlantının bant genişliğini yalnızca biraz artırır çünkü YouTube, gereksiz ağ arabelleğe almayı ve yeniden arabelleğe almayı en aza indirmek için akış hızını BtlBw'nin oldukça altına ayarlıyor. Ancak burada bile BBR, medyan RTT ortalamasını küresel olarak %53 ve gelişmekte olan ülkelerde %80'den fazla düşürür.

Şekil 9, bir hafta boyunca beş kıtada ölçülen 200 milyon YouTube video görüntülemesinin BBR ve CUBIC'e göre RTT'deki ortalama gelişimini göstermektedir. Dünyanın 7 milyar mobil bağlantısının yarısından fazlası, arabellekleri taşma eğiliminde olan paket kaybı tıkanıklığı kontrol teknikleriyle ilgili iyi belgelenmiş sorunlarla birlikte, 8Kbps ila 114Kbps'de 2.5G'dir. Bu sistemlerdeki darboğaz genellikle SGSN (Serving GPRS Support Node) ile mobil cihaz arasındadır. SGSN yazılımı, genellikle internet ve mobil cihaz arasında megabaytlarca arabellek bulunan, yeterli RAM'e sahip standart bir PC platformunda çalışır. Şekil 10, BBR ve CUBIC için internet ve mobil arasındaki (öykünülmüş) SGSN gecikmesini karşılaştırır. Yatay çizgiler, en ciddi sonuçlardan birini işaretler: İşletim sistemine bağlı olarak sabit bir zaman aşımına sahip olan bağlantıyı başlatan SYN paketi dışında, TCP uzun RTT gecikmelerine uyum sağlar. Bir mobil cihaz büyük bir arabellek SGSN aracılığıyla büyük miktarda veri (örneğin, otomatik yazılım güncellemelerinden) aldığında, cihaz kuyruk boş olana kadar İnternet üzerinde herhangi bir bağlantı kuramaz (SYN ACK, sabit SYN'den daha uzun geciktirilir) zaman aşımı) ...


Şekil 9

Şekil 10, sekiz BBR (yeşil) veya CUBIC (kırmızı) akışla 128Kbps ve 40ms bağlantıda sabit durumda ve arabellek boyutuna karşı medyan RTT değişikliklerini gösterir. BBR, darboğaz arabelleğinin boyutundan ve etkin iş parçacıklarının sayısından bağımsız olarak kuyruğu minimum değerlerde tutar. CUBIC akışları her zaman arabelleği doldurur, bu nedenle gecikme, arabellek boyutuyla doğrusal olarak artar.


Şekil 10

Mobil hücreselde uyarlanabilir bant

Hücresel sistemler, her kullanıcı için bant genişliğini kısmen, o kullanıcı için tasarlanan paket kuyruğunu hesaba katan talep tahminine göre uyarlar. Erken sürümler BBR'ler çok küçük kuyruklar oluşturacak şekilde ayarlandı ve bağlantıların düşük hızlarda takılmasına neden oldu. ProbeBW için en yüksek pacing_gain'i artırmak ve kuyrukları artırmak, daha az duraklamış bağlantıyla sonuçlandı. Bu, bazı ağlar için büyük bir uyarlanabilirlik gösterir. Mevcut tepe kazanç değeriyle, CUBIC ile karşılaştırıldığında hiçbir ağda bozulma olmaz.

Gecikmeli ve uzatılmış ack paketleri

Hücresel, WiFi ve geniş bant ağları genellikle onay paketlerini geciktirir ve biriktirir. Uçak içi uçuş bir BDP ile sınırlandırıldığında, bant genişliğini azaltarak duraklamalara neden olur. ProbeBW'nin cwnd_gain faktörünün ikiye çıkarılması, onay paketleri bir RTT kadar gecikse bile, düzgün iletimin öngörülen teslimat hızında devam etmesine izin verdi. Bu, arızaları büyük ölçüde önler.

Mevcut Paket Sınırlayıcılar

BBR'nin YouTube'a ilk sunumu, dünyadaki ISP'lerin çoğunun mevcut paket oranı sınırlayıcılarıyla trafiği çarpıttığını gösterdi. Paket genellikle bağlantının başlangıcında doludur, bu nedenle BBR, temel alınan ağ için BtlBw parametresini tanır. Ancak kova boşalır boşalmaz, kova doldurma hızından daha hızlı (BtlBw'den çok daha düşük) gönderilen tüm paketler atılır. BBR sonunda bu yeni dağıtım oranını öğrenir, ancak ProbeBW kazancını döngüye almak, sürekli orta düzeyde kayıplara neden olur. Yukarı akış bant genişliği kaybını ve bu kayıptan kaynaklanan uygulama gecikmesindeki artışı en aza indirmek için, BBR'ye özel bir kesme dedektörü ve açık bir kesme modeli ekledik. Ayrıca hız sınırlayıcıların verdiği zararı ortadan kaldırmanın en iyi yollarını aktif olarak araştırıyoruz.

Paket kaybı tıkanıklık kontrol yöntemleri ile rekabet

BBR, diğer BBR akışlarıyla veya paket kaybı tıkanıklık kontrol teknikleri tarafından yönlendirilen akışlarla rekabet halinde olsun, bir darboğazın bant genişliğini dürüstçe paylaşmaya indirgenir. İkincisi mevcut arabelleği doldursa bile, ProbeBW BtlBw tahminini adil bölmeye doğru güvenilir bir şekilde saptırır ve ProbeRTT, RTProp tahminini kısa ve adil bölme için baştankara yakınsamaya yetecek kadar yüksek olarak değerlendirir. Bununla birlikte, bazı BDP'leri aşan yönetilmeyen yönlendirici arabellekleri, eski tıkanıklık kontrolü rakiplerini kuyruğu şişirmeye ve adil paylarından daha fazlasını almaya zorluyor. Bunu ortadan kaldırmak, başka bir aktif araştırma alanıdır.

Çözüm

Tıkanıklık yönetimini yeniden düşünmek büyük bir faydadır. BBR, tıkanıklık ile yalnızca zayıf bir şekilde ilişkili olan arabellek kaybı veya arabellek ele geçirme gibi olayları kullanmak yerine, Kleinrock'un resmi tıkanıklık modeli ve ilişkili optimal çalışma noktası ile başlar. Kritik gecikmeyi ve bant genişliğini aynı anda belirlemenin "imkansız" olduğu şeklindeki can sıkıcı sonuç, bunların aynı anda tahmin edilebildiği gözlemlenerek atlanır. Kontrol sistemleri ve tahmin teorisindeki en son gelişmeler daha sonra, küçük bir sırayı korurken ağdan tam olarak yararlanarak optimuma yaklaşan basit bir dağıtılmış kontrol döngüsü oluşturmak için uygulanır. Google'ın BBR uygulaması, açık kaynaklı Linux çekirdeğinde mevcuttur ve bu makalenin ekinde ayrıntılı olarak açıklanmıştır.

Google B4 omurgasında kullanılan BBR teknolojisi, bant genişliğini CUBIC'e göre kat kat artırıyor. Ayrıca, Google ve YouTube web sunucularına dağıtılarak, gelişmekte olan ülkelere güçlü bir şekilde odaklanarak, şimdiye kadar test edilen beş kıtanın tamamında gecikmeyi önemli ölçüde azalttı. BBR teknolojisi yalnızca gönderici tarafında çalışır ve protokolde, alıcıda veya ağda değişiklik gerektirmez, bu da aşamalı olarak konuşlandırılmasına izin verir. Yalnızca RTT ve paket teslim bildirimlerine bağlıdır, bu nedenle İnternet aktarım protokollerinin çoğunda kullanılabilir.

Teşekkür

Yazarlar, tıkanıklığın nasıl düzgün bir şekilde ele alınacağına dair rehberlik için Len Kleinrock'a minnettardır. BBR'nin birçok unsurunu öngören Vegas ve New Vegas tıkanıklık kontrol sistemleri üzerindeki öncü çalışmaları ve BBR'nin geliştirilmesinin ilk günlerinde verdiği tavsiye ve rehberlik için Larry Brakmo'ya müteşekkiriz. Ayrıca, paha biçilmez yardımları ve destekleri için Eric Dumazet, Nandita Dukkipati, Jana Iyengar, Ian Swett, M. Fitz Nowlan, David Wetherall, Leonid Leonidas Kontothanassis, Amin Vahdat ve Google BwE ve YouTube Altyapı ekibine teşekkür ederiz.

Ek - ayrıntılı açıklama

Sıralı problama için durum makinesi

pacing_gain, BtlBw'ye göre paketlerin ne kadar hızlı gönderildiğini kontrol eder ve bu, akıllı BBR özelliğinin anahtarıdır. pacing_gain birden büyük olduğunda, uçuş artar ve paketler arasındaki boşluk azalır, bu da bağlantıyı Şekil 1'de sağ tarafa taşır.

BBR, daha fazla bant genişliği için test etme ve daha az çift geçiş süresi için test etme arasında geçiş yapan basit bir sıralı durum algılama makinesini uygulamak için pacing_gain'i kullanır. (Daha düşük bir bant genişliğini test etmek gerekli değildir, çünkü BtlBw msx filtresi tarafından otomatik olarak işlenir: yeni ölçümler düşüşü yansıtır, bu nedenle BtlBw, zaman aşımı ile filtreden son eski değişiklikler kaldırılır kaldırılmaz kendini düzeltecektir. RTprop min filtresi, teslimat yolundaki artışı aynı şekilde ele alır) ...

Darboğazın bant genişliği artarsa, BBR bunu tespit etmek için verileri daha hızlı göndermelidir. Benzer şekilde, paketin gerçek çift geçiş süresi değişirse, bu BDP'yi değiştirir ve bu nedenle BDP'nin yeni RTprop'u ölçmek için uçuşu BDP'nin altında tutmak için verileri daha yavaş göndermesi gerekir. Bu nedenle, bu değişiklikleri algılamanın tek yolu, BtlBw'deki artışı kontrol etmek için daha hızlı göndererek veya RTprop'ta bir düşüş olup olmadığını kontrol etmek için daha yavaş göndererek deneme yapmaktır. Bu deneylerin sıklığı, kapsamı, süresi ve yapısı, neyin önceden bilindiğine (bağlantı başlangıcı veya kararlı durum) ve veri gönderen uygulamanın davranışına (aralıklı veya kalıcı) bağlı olarak farklılık gösterir.

Kararlı hal

BBR akışları, zamanlarının çoğunu ProbeBW durumunda geçirirler ve bisiklet kazanmak Bu, BBR akışlarının yüksek verim, düşük kuyruk gecikmesi ve adil paylaşım yakınsaması elde etmesine yardımcı olur. kullanma bisiklet kazanmak BBR, kazanç için döngüsel olarak bir dizi değeri dener pacing_gain... Aşağıdaki değerlerle sekiz döngü fazı kullanılır: 5/4, 3/4, 1, 1, 1, 1, 1, 1. Her faz genellikle tahmin edilen RTprop için sürer. Bu tasarım, katsayı döngüsünün önce bir değere sahip daha yüksek bir bant genişliği için kanalı araştırmasına izin verir. pacing_gain 1.0'dan büyük ve ardından ortaya çıkan herhangi bir kuyruğu pacing_gain aynı miktarda 1.0'dan daha az ve daha sonra tam olarak 1.0'lık kısa bir katsayı patlaması ile seyir hızında hareket edin. Tüm fazlar için ortalama kazanç 1.0'dır, çünkü ProbeBW ortalama olarak kullanılabilir bant genişliğini eşitleme eğilimindedir ve bu nedenle kuyruğu artırmadan yüksek bant genişliği kullanımını korur. Oranın döngüleri değişse de pacing_gain ama değer cwnd_gain her zaman ikiye eşit kalır, çünkü gecikmeli ve uzatılmış onay paketleri herhangi bir zamanda görünebilir (gecikmeli ve uzatılmış onay paketleri bölümüne bakın).

Ayrıca, akış karıştırmayı ve adil bant genişliği ayırmayı iyileştirmek ve birden fazla BBR bir darboğaz paylaştığında sıraya girmeyi azaltmak için BBR, ProbeBW döngüsünün fazlarını rastgele olarak 3/4 dışındaki ilk fazı seçerek değiştirir. Döngü neden 3/4'te başlamıyor? Bu oran değerinin temel amacı, kanal zaten doluyken 5/4 oranının uygulanması sırasında oluşabilecek herhangi bir kuyruğu dağıtmaktır. Bir proses Drain veya ProbeRTT durumundan çıkıp ProbeBW'ye girdiğinde kuyruk yoktur, bu nedenle 3/4 faktörü işini yapmamaktadır. 3/4'ün böyle bir bağlamda kullanılması sadece olumsuz bir etkiye sahiptir: bu aşamada kanalın doldurulması 1 değil 3/4 olacaktır. Bu nedenle, döngünün 3/4'ten başlaması sadece olumsuz bir etkiye sahiptir, ancak olumlu bir etkisi yoktur ve ProbeBW durumuna giriş herhangi bir bağlantının başlangıcında yeterince uzun sürdüğü için BBR bu küçük optimizasyonu kullanır.

BBR iş parçacıkları, ProbeRTT adlı bir durumu kullanarak darboğaz kuyruğunu düzenli aralıklarla boşaltmak için birlikte çalışır. ProbeRTT'nin kendisi dışındaki herhangi bir durumda, RTProp tahmini 10 saniyeden fazla güncellenmediyse (örneğin, daha düşük bir RTT'yi ölçerek), BBR ProbeRTT durumuna girer ve cwnd'yi çok küçük bir değere düşürür (dört paket) . Bu tür minimum uçuş içi paket sayısını en az 200 ms ve bir çoğuşma çift geçiş süresi için tutarak, BBR ProbeRTT durumundan çıkar ve kanalın zaten dolu olup olmadığına bağlı olarak Başlangıç ​​veya ProbeBW'ye girer.

BBR, bir dizi ödünleşime dayalı olarak çoğu zaman (yaklaşık %98) ProbeBW durumunda ve zamanın geri kalanında ProbeRTT'de çalışacak şekilde tasarlanmıştır. ProbeRTT durumu, farklı RTT'lere sahip akışların eşzamanlı ProbeRTT durumlarına sahip olmasına izin verecek kadar uzun (en az 200 ms) sürer, ancak aynı zamanda performans düşüşünü yaklaşık yüzde iki (200 ms / 10 saniye) ile sınırlamak için yeterince kısa sürer. RTprop filtre penceresi (10 saniye), trafik seviyelerindeki veya yeniden yönlendirmedeki değişiklikleri hızla karşılamak için yeterince küçüktür, ancak etkileşimli uygulamalar için yeterince büyüktür. Bu tür uygulamalar (örneğin, web sayfaları, uzaktan prosedür çağrıları, video klipler) genellikle bu pencerenin pencerelerinde doğal sessizlik dönemleri veya düşük etkinlik sergiler; burada akış hızı, kuyruğu bir darboğazda dağıtmak için yeterince yavaş veya yeterince uzundur. RTprop filtresi daha sonra bu RTprop ölçümlerini fırsatçı olarak ayarlar ve RTProp, ProbeRTT kullanmaya gerek kalmadan güncellenir. Bu nedenle, birden fazla akış tüm bir RTProp penceresi boyunca kanalı bol miktarda dolduruyorsa akışların tipik olarak yalnızca bant genişliğinin %2'sini feda etmesi gerekir.

Başlangıç ​​Davranışı

Bir BBR iş parçacığı başladığında, ilk (ve en hızlı) sıralı kuyruk araştırma/boşaltma işlemini gerçekleştirir. Ağ bant genişliği 10 12 - birkaç bitten saniyede 100 gigabit'e kadar değişir. Böyle büyük bir aralık değişikliği için BtlBw'nin değerini bulmak için, BBR hız uzayında ikili bir arama yapar. Çok hızlı bir şekilde BtlBw'yi (paketlerin çift geçişi) bulur, ancak aramanın son aşamasında 2BDP'de bir kuyruk oluşturma pahasına. Arama, BBR'de Başlangıç ​​durumunda gerçekleştirilir ve oluşturulan kuyruğun boşaltılması, Boşaltma durumunda gerçekleştirilir.

İlk olarak, Başlangıç, veri gönderme hızını her turda ikiye katlayarak katlanarak artırır. Bu hızlı algılamayı en rahat şekilde gerçekleştirmek için kazanç değerlerine başlarken pacing_gain ve cwnd_gain her tur için yükleme hızını iki katına çıkarmanıza izin veren minimum değere ayarlanır. Kanal dolduğunda, katsayı cwnd_gain kuyruğun boyutunu bir değerle sınırlar.

Bağlantının başlangıç ​​durumunda, BBR, BtlBw tahmininde bir plato arayarak kanalın dolu olup olmadığına karar verir. Teslimat hızını ikiye katlama girişimlerinin gerçekten hızda büyük bir artış sağlamadığı (%25'ten az) birkaç (üç) tur geçtiği tespit edilirse, BtlBw'ye ulaştığını düşünür ve bu nedenle Başlangıç'tan çıkar. durumu ve Boşaltma durumuna girer. BBR, gönderenin gözlemlenen teslim oranı platosunun alma penceresinden dolayı geçici bir etki olmadığına dair ikna edici kanıt elde etmek için üç tur bekler. Üç tur beklemek, otomatik ayar alıcı tarafında, alma penceresini açmak ve böylece BBR aracılığıyla göndericinin BtlBw'yi artırma ihtiyacını algılaması için: ilk turda, alma penceresini otomatik olarak ayarlamak için kullanılan algoritma alma penceresini arttırır; ikinci turda, gönderici genişletilmiş alım penceresini doldurur; üçüncü turda, gönderici, artan teslimat hızına sahip numuneler alır. Bu üç aşamalı sınır, YouTube uygulamasında kendini kanıtlamıştır.

Boşaltma durumunda, BBR algoritması, bağlantı başlangıç ​​durumunda oluşan kuyruğu hızlı bir şekilde boşaltmaya çalışır. pacing_gain Başlangıç ​​durumunda kullanılanlardan zıt değerlerle. Uçuş sırasındaki paket sayısı BDP tahminiyle eşleştiğinde, bu, BBR'nin kuyruğu tamamen boş olarak kabul ettiği, ancak kanalın hala dolu olduğu anlamına gelir. Ardından BBR, Boşaltma durumundan çıkar ve ProbeBW'ye girer.

Bir BBR bağlantısı başlatmanın ve yavaş başlayan bir CUBIC'nin her ikisinin de darboğaz verimini katlanarak öğrendiğini ve her turda gönderme hızını ikiye katladığını unutmayın. Ancak, temelde farklıdırlar. İlk olarak, BBR, paket kaybı veya (CUBIC'in Hystart'ı gibi) gecikme artışı durumunda aramayı durdurmadığından, kullanılabilir bant genişliğini belirlemede daha güvenilirdir. İkinci olarak, BBR gönderme hızını kademeli olarak artırırken, CUBIC her turda (hızlı hızda bile) bir paket patlamasına ve ardından bir sessizlik süresine sahiptir. Şekil 4, uçuş halindeki paketlerin sayısını gösterir ve BBR ve CUBIC'den gelen her alındı ​​mesajı için RTT'yi gözlemler.

Geçici durumlara yanıt verme

Ağ yolu ve üzerindeki trafik akışı ani dramatik değişiklikler yaşayabilir. Bunlara sorunsuz ve güvenilir bir şekilde uyum sağlamak ve bu durumlarda paket kaybını azaltmak için BBR, temel modelini uygulamak için bir dizi strateji kullanır. İlk olarak, BBR mevcut cwnd aşağıdan temkinli yaklaşarak, artan cwnd her seferinde teslimat onayının alındığı veri miktarından daha fazla değil. İkincisi, gönderenin uçuş halindeki tüm paketlerin kaybolduğunu düşündüğü anlamına gelen bir yeniden iletim zaman aşımı ile, BBR ihtiyatlı bir şekilde azaltır cwnd bir pakete kadar gönderir ve tek bir paket gönderir (tıpkı CUBIC gibi paket kaybı tıkanıklık kontrol algoritmaları gibi). Sonuçta, gönderici bir paketin kaybolduğunu fark ettiğinde, ancak hala uçuşta olan paketler olduğunda, kayıp kurtarma sürecinin ilk adımında, BBR gönderme hızını geçici olarak mevcut teslimat hızı düzeyine düşürür; ikinci ve sonraki kayıp kurtarma turlarında, gönderme oranının mevcut teslimat oranını hiçbir zaman iki katından fazla aşmadığını doğrular. Bu, BBR hız sınırlayıcılarla karşılaştığında veya BDP boyutundaki bir arabellekteki diğer akışlarla rekabet ettiğinde geçici kaybı önemli ölçüde azaltır.

Bağlantılar

1. Abrahamsson, M. 2015. TCP ACK bastırma. IETF AQM Posta Listesi;

Birim dönüştürücüyü kullanmak için lütfen Javascript'i etkinleştirin

›› Birim dönüştürücüden daha fazla bilgi

1 metreküp/dakikada kaç cfm var? Cevap 35.314666212661'dir.
arasında dönüşüm yaptığınızı varsayıyoruz fit küp / dakika ve metreküp / dakika.
Her bir ölçüm birimi hakkında daha fazla ayrıntı görüntüleyebilirsiniz:
cfm veya metreküp / dakika
için SI türetilmiş birim hacim akış hızı metreküp / saniyedir.
1 metreküp / saniye, 2118.8799727597 cfm'ye veya 60 metreküp / dakikaya eşittir.
Yuvarlama hatalarının oluşabileceğini unutmayın, bu nedenle sonuçları her zaman kontrol edin.
Fit küp / dakika ve metreküp / dakika arasında nasıl dönüştürme yapacağınızı öğrenmek için bu sayfayı kullanın.
Birimleri dönüştürmek için forma kendi numaralarınızı yazın!

›› Cfm'nin metreküp / dakikaya hızlı dönüşüm tablosu

1 cfm - metreküp / dakika = 0.02832 metreküp / dakika

10 cfm - metreküp / dakika = 0.28317 metreküp / dakika

20 cfm - metreküp / dakika = 0,56634 metreküp / dakika

30 cfm - metreküp / dakika = 0.84951 metreküp / dakika

40 cfm - metreküp / dakika = 1.13267 metreküp / dakika

50 cfm - metreküp / dakika = 1.41584 metreküp / dakika

100 cfm - metreküp / dakika = 2.83168 metreküp / dakika

200 cfm - metreküp / dakika = 5.66337 metreküp / dakika

›› Diğer birimleri mi istiyorsunuz?

›› Tanım: Kübik fit / dakika

Dakikada fit küp (CFM), Endüstriyel hijyen ve havalandırma mühendisliğinde kullanılan bir ölçüdür. Bir gazın veya hava hacminin bir boşluk içine veya dışına akış hızını tanımlar.

Sabit bir noktadan bir dakikada kaç fit küp hava geçtiğini gösteren standart bir hava akışı ölçümü. Sayı ne kadar yüksek olursa, sistemden o kadar fazla hava zorlanır. Dakikada fit küp cinsinden bir sıvı veya gazın hacimsel akış hızı. 1 CFM saniyede yaklaşık 0,47 litreye eşittir.

›› Metrik dönüşümleri ve daha fazlası

alan her tür ölçüm birimi için çevrimiçi bir dönüştürme hesaplayıcısı sağlar. SI birimleri için metrik dönüşüm tablolarının yanı sıra İngiliz birimleri, para birimi ve diğer verileri bulabilirsiniz. Uzunluk, alan, kütle, basınç ve diğer türler için birim sembolleri, kısaltmalar veya tam adlar yazın. Örnekler arasında mm, inç, 100 kg, US sıvı ons, 6 "3", 10 taş 4, cm küp, metre kare, gram, mol, fit/saniye ve çok daha fazlası yer alır!