Detaliu iremediabil CFM. Sistemul BBR: Regulamentul de congestie direct de cifra de afaceri

    Vedeți lauda ... Dicționarul sinonimelor ruse și expresii similare în ceea ce privește semnificația. sub. ed. N. Abramova, M.: Dicționarele rusești, 1999. Board Bane, Dicționar Boaster of Sinonime rusești ... Dicționar sinonim.

    Fiert, mă împing; rotor. (vorbi.). Bord, laudă. P. haine noi. Dicționarul explicativ al Ozhegov. SI. Ozhegov, N.Yu. Swedov. 1949 1992 ... Dicționarul explicativ al Ozhegov

    Nesov. . 1. Vorbește despre el însuși sau despre unul comercial cu lauda Lui; a fierbe. 2. Promite brand ceva de făcut. Dicționar explicativ Efremova. T. F. Efremova. 2000 ... Dicționarul explicativ modern al limbii rusești

    Barca, lauda, \u200b\u200blauda, \u200b\u200blauda, \u200b\u200bse lauda, \u200b\u200bse lauda, \u200b\u200blauda, \u200b\u200boferind, oferind, laudă, pradă, laudă, laudă, ... Formulare de cuvinte

    bord - Lăudați-l pe Jay, mă duc, este ... Dicționar de ortografie rusă.

    bord - (i), laudă / yus, la / mânca, la / SUA ... Dicționarul orfografic al limbii rusești

    Vedeți laudă ... Enciclopedice dicționar

    bord - A se vedea lauda; I / y, eu / mananca; NSV; . Laudă / mănâncă în fața celuilalt. Laudă cu forța ta ... Dicționar de multe expresii

    bord - SHA / CVV / Y / T / SIA ... Morphemno-Spell dicționar

    Rasa (nodală) este de a se lăuda de originea sa nobilă a orașului. Rasa noastră a servit la împărați. Cf. Și trăim cu ea, doar certătoare da, ne lăudăm. Inele. Fiecare talan. A se vedea omul rus fără rude nu trăiește. Vedeți prin zbor ... ... Mikhelson's Big gros-frazologic dicționar

Cărți

  • A doua carte a Deluziilor Universale, John Lloyd, John Mitchinson. Prima "carte de concepție greșită universală" din Anglia a fost publicată în 2006. Și de atunci, în 30 de țări, ea a devenit o carte de birou pentru cei care doresc adevărul. Poate că ați schimbat asta ...
  • Poezie din cartea "Pământ verde", Evgeny Klyuev. Apariția în literatura de astăzi numită după Evgeny Klyov îmi amintește de un basm despre grădinar. HARDWORKING și SOTELY Master timp de mulți ani cultivate grădina cu pereți: flori neliniștite, fragile ...

Echipamentele turistice ultra-ușor devine din ce în ce mai complicată. Această tendință este cea mai evidentă într-o categorie în continuă evoluție a adăposturilor individuale, una mai cunoscută intitulată pungi bivane. ("Bivi").

Dacă nu sunteți familiarizat cu varietatea existentă de opțiuni Bivuakov, este timpul să o rezolvăm. Veți fi uimiți de o varietate de alegeri și designuri atente la dispoziția unui călător independent care încearcă să reducă greutatea echipamentelor portabile.

Cine folosește pungi de belling? Oamenii care:

  • Adesea călătoresc singur;
  • Faceți o urcare mare care necesită mai mult de o zi să treacă;
  • Frecvente biciclete fac adesea;
  • Luați în considerare fiecare gram de încărcătură portabilă;
  • Nu vă deranjează să dormiți în spațiul apropiat.

Bazele

Pungi bivane. Ei au fost inventați pentru a satisface nevoile alpinisilor care au nevoie de protecție pentru saci de dormit de vreme rea în timpul ascensiilor care ocupă câteva zile, în special pe pereții mari (pereți mari).

Sacii de belling timpurie au fost doar un caz de nylon impermeabil pentru saci de dormit - bine efectuat funcția de protejare a sacului de dormit de ploaie și cu capabilități de ventilație mediocră.

Astăzi, designul pungilor de belling include două straturi de țesătură. Nivelul inferior constă, de obicei, dintr-un derivat de nylon durabil (de obicei taffeta (taffeta), uneori Oxford), care sunt acoperite cu uretan pentru a da impermeabilitate. Același material este utilizat de majoritatea producătorilor în producția de corturi de podea.

Tierul de sus este de obicei realizat dintr-o nailon de ripstop (o cârpă mai ușoară) și prelucrată cu laminat impermeabil / respirabil, cum ar fi Gore-Tex®, Tegraltex sau Rei Elements®.

În timp, bivouake originală a dat naștere unui produs asociat cu caracteristici similare cu un adăpost de tip BIVI ( adăpost bivy.). Fiind un pic mai greu, acest tip de adăpost are două particularități care sunt absente în Bivia tradițională - o zonă extinsă de spațiu liber protejat și protecție completă împotriva condițiilor meteorologice nefavorabile și a insectelor. Datorită acestor caracteristici, popularitatea acestui tip de adăpost are popularitatea consumatorilor care se bucură de drumeții, în special în luminile de călătorie (miniere).

În plus, există o categorie de tip bivial de corturi cu două straturi. Greutatea medie a unor astfel de corturi (aproximativ 1,8 kg) este mai mare decât greutatea standardului BIVI (900 g și mai puțin), dar oferă un spațiu mai intern împreună cu o masă modestă - un argument reconfortant pentru solistii care au nevoie de oportunitatea de a lua o poziție sedentară în adăpostul lor, dar este important să călătoriți lumina. Exemple: Rei Sololite; Kelty Clark; Walrus Micro Swift; Sierra desenează lanterna clip.

Pungi bivane.

Chiar și fiind concepute cu utilizarea țesuturilor moderne, o pungă tradițională de clopot este destinată, în primul rând, pentru alpiniști sau minimaliști ideologici - oameni care găuriau găuri în linguri pentru a salva mai multe grame.

O geantă obișnuită de belling efectuează două funcții de bază.: Protejează o geantă de dormit din umiditate și mărește indicatorii de temperatură aproximativ 5 ° C.

Bivi. Are o zonă deschisă pentru cap. Când plouă, o umiditate poate intra într-o gaură neprotejată pentru cap. Pentru a minimiza umezeala în interior, ar trebui să fie strâns să strângeți dantelul, situat în jurul acestei găuri. Desigur, astfel, gaura capului se va transforma într-o gaură nazală, care pentru unii oameni va fi inacceptabilă. Dar acesta este un mic compromis pentru un turist, preferând să călătorească cu echipamente ultralight, care apreciază în mod deosebit pungile bivare pentru greutatea minimă.

Alte considerente

Unele modele vă permit să creați o geantă bivană, permițându-vă să sortați echipamente sau să gătiți alimente, în timp ce sunt calde și protejate de vreme rea.
Fulgerul pentru întreaga lungime a BIVI va fi util, oferind mai multe opțiuni pentru ventilație.
Acordați atenție campingului fabricii de cusături, mărcile avansate oferă de obicei această caracteristică utilă.
Unele modele sunt echipate cu curele care contribuie la păstrarea pe site-ul covorului.
În condiții calde, uneori, oamenii nu folosesc deloc o pungă de dormit, ci pur și simplu dormi direct în sacul de clopotniță.

Reprezentanți tipici ai pungilor de belling: Adăpostul personal Moonstone; Bivy standard din cercetarea în aer liber; Rei ciclops.

Adăposturile BIVI

Evoluția pungilor de belling a produs o nouă categorie de cort scăzut, cunoscută sub numele de adăposturi Bivy (adăposturi Bivy). Aceste modele au inserții din grila situată în zona găurilor pentru cap, precum și sisteme de suspensie mici (PEGS, ARC), care țin țesătura pe fața turistului. În adăpostul tipului de bivi, se poate obține o izolare completă de la insecte și ploaie. Acest lucru poate necesita o anumită ingeniozitate pentru a asigura ventilația în timpul unui duș, dar acest lucru este foarte posibil de realizat.

Mulți turiști care călătoresc pentru o lungă perioadă de timp și ușor, adăpostul tipului de Bivia, cu consolidarea suplimentară în formă de pene în zona capului, este capabilă să ofere un nivel suficient de confort. În zonele cu ploi permanente, adăposturile BIVI își pierd atractivitatea; Va fi dificil să supraviețuiască unei furtuni în adăpost, în care este imposibil să se ia o poziție sedentară. Cu toate acestea, utilizarea adăposturilor bivine are sens cu condiții meteorologice favorabile, cum ar fi Sierra Nevada (Sierra Nevada). Exemple: desenele integrale neishelter; Sacul avansat Bivy din cercetarea în aer liber.

Alte considerente

Biblia prea îngustă pentru tine? Inițial, puteți gândi așa. Dar nu aruncați imediat această opțiune de adăpost. Desigur, cortul oferă turiștilor refugiu spațios și sigur, cu acoperișul deasupra capului. Cu toate acestea, BIVI o face mai puternică pentru a "îmbina" cu natura. Este aproape ca un vis sub stele. În același timp, aveți suficientă protecție împotriva ploii și a insectelor, care are și o greutate redusă. Cu toate acestea, dacă găsiți într-un spațiu limitat, vă provoacă anxietatea, cel mai probabil nu veți fi confortabil să vă simțiți în BIVI, în special în vreme rea. În acest caz, luați în considerare opțiunea de a cumpăra un cort.

Cum circulă aerul în interiorul bivi? Laminate respirabile / impermeabile, cum ar fi Gore-Tex, permite umiditatea să se evapore prin țesătură. Fără a permite, în același timp, ploaia scade pentru a se scurge prin cârpă. Bagurile bivice respirabile / impermeabile vor fi cele mai bine prezentate în situațiile în care corpul cald și transpirat al turist se sprijină în condiții reci și uscate. În condiții ploioase, în ciuda faptului că bovi-ul modern este proiectat cu un număr suficient de material suprapus și fermoare, cu greu puteți fi complet fixat. Ventilația manuală ajută la menținerea unui nivel acceptabil de umiditate în interiorul sacului de clopotniță.

Este posibil să se formeze condens în interiorul bivi? Potențial, da. În esență, BIVI este un cort cu un singur strat. Evaporarea caldă emană din corpul și plămânii, ridicarea, orientarea aerului rece. Când aburul intră în contact cu laminatul sacului de clopot, aerul nu mai poate transporta toată umiditatea, astfel încât o parte din cantitatea sa este asamblată pe interiorul țesutului în considerare. Într-un cort cu două straturi, această umiditate trece printr-o copertină internă respirabilă și se stabilește în exterior. În cazul BIVI, acesta poate duce la un grup de o cantitate mică de umiditate pe partea interioară. În condiții reci, poate duce la formarea unei cruste de gheață în interior.

Există o geantă de dormit într-o pungă bivană? În condițiile meteorologice ploioase (umede), țesătura Gore-Tex, uneori, pot produce senzații la rece și umede atunci când contactați cu pielea, dar acesta este doar un sentiment, nu un țesut suflat. Ventilația bună ajută la minimizarea acestui sentiment.

Rezultatele scurte

Bivar Bags: Va fi o alegere bună pentru alpiniști și călătorii minimaliști care merg la drumeții scurte (single și de două zile). Necesită gândirea, care se adaptează bine la condițiile spartane.

Adăposturile BIVI: populare în rândurile călătorilor cu ultrasunete care călătoresc pe distanțe lungi de la ciclism. O alegere bună pentru turiștii care călătoresc în zone cu o cantitate mică de precipitații. Spațiul suplimentar și protecția completă le fac o opțiune acceptabilă pentru turiștii care sunt capabili să se adapteze psihologic să petreacă noaptea într-un spațiu limitat. Îngust, dar lumină.

Corturi mici: unele modele în intervalul de 2 kg oferă o combinație de spațiu și greutate modestă; În multe cazuri, va fi o alegere preferată pentru turistul mediu.

  • Transfer

Măsurarea lățimii de bandă a blocajelor pentru pachetul de timp dual pasaj

În toți parametrii, Internetul de astăzi nu poate mișca datele cât de repede ar trebui. Majoritatea utilizatorilor de comunicare celulară din lume au întârzierile de la câteva secunde până la câteva minute: Punctele publice de acces la aeroporturi și conferințe sunt chiar mai rele. Fizicienii și climatologii trebuie să fie schimbați de petabytes de date cu colegii din întreaga lume, dar se confruntă cu faptul că infrastructura multi-igată de gândire cu atenție emite adesea doar câteva megabiții pe secundă pe liniile transcontinentale.

Aceste probleme au apărut din cauza alegerii arhitecturii, care a fost făcută la crearea unui sistem de control al congestionării TCP în anii 80 - atunci pierderea de pachete a decis să interpreteze ca un "gem". Echivalența acestor concepte a fost corectă pentru acel moment, dar numai din cauza restricțiilor tehnologiei și nu prin definiție. Când NIC (Controlere de interfață de rețea) a fost modernizat de la megait la viteze de gigabit și chips-uri de memorie - cu kilobyte la un gigabit, la relația dintre pierderea pachetelor și lovituri au devenit mai puțin evidente.

În TCP modern, reglementarea congestiei pentru pierderea pachetelor - chiar și în cea mai avansată tehnologie a acestui Cubic - principalul motiv pentru aceste probleme. Dacă tampoanele de blocaj sunt prea mari, sistemul de control pentru pierderea pachetelor le menține completă, provocând tamponarea excesivă de rețea. Dacă tampoanele sunt prea mici, atunci sistemul de control pentru pierderea pachetelor va interpreta incorect pierderea ambalajului ca semnal al congestiei, ceea ce duce la o reducere a lățimii de bandă. Soluția la aceste probleme necesită o alternativă la reglarea congestiei pentru pachete. Pentru a găsi această alternativă, ar trebui să fie sortate în cazul în care apare congestia.

Atingeți și locul îngust

În orice moment în conexiunea TCP (Full-Duplex) există doar una mai lentă sau mai lentă bottlenking. În fiecare direcție. Un blocaj este important din următoarele motive:
  • Acesta definește rata maximă de transfer de date prin conexiune. Aceasta este principala proprietate a unui flux de date necomprimate (de exemplu, imaginați o autostradă cu șase benzi pe oră de vârf, dacă, din cauza unui accident, o mică parte a drumului este limitată la o singură bandă. Traficul înainte de trafic Accidentul nu se va mișca mai repede decât traficul prin această bandă.
  • Acesta este locul în care sunt formate constant cozile. Acestea scad numai dacă intensitatea fluxului de ieșire din "gâtul sticlei" va depăși intensitatea fluxului de intrare. Pentru compușii care funcționează la viteza maximă de transmisie, toate fluxurile de ieșire într-un loc îngust au întotdeauna o intensitate mai mare a fluxului de ieșire, astfel încât cozile să se deplaseze la "gâtul sticlei".
Indiferent cât de multe legături în legătură și care viteze sunt separat, din punct de vedere TCP, există o cale complexă în ceea ce privește TCP ca o singură conexiune cu același RTT (dublu timp de trecere a pachetului, adică timpul de trecere în ambele capete) și lățimea de bandă a blocajelor. Două limitări fizice RTPROP. (Timp de propagare a călătoriei rotunde, timp dublu de trecere) și BTLBW. (Lățime de bandă de blocare, capacitate de blocare) afectează performanța transferului. (Dacă calea de rețea a fost o țeavă de material, RTPROP ar fi o conductă lungă, iar BTLBW este diametrul său).

În ilustrație 1 prezintă o varietate de combinații de RTT și rate de transmisie cu volumul datelor. În zbor, Adică inflamoare (date trimise, dar fără confirmarea livrării). Liniile albastre arată limita RTPROP, linii verzi - limită BTLBW și linii roșii - un tampon de sticlă. Operațiunile în zonele gri sunt imposibile deoarece acestea contrazic cel puțin o limitare. Tranzițiile dintre constrângeri au condus la formarea a trei zone (App-Limited, Bandwidth-Limited și Buffer-Limited) cu un comportament de înaltă calitate.

Imaginea 1.

Când în zbor nu este suficientă date pentru a umple conducta, RTPROP determină comportamentul; În caz contrar, BTLBW domină. Liniile limită se intersectează la punct, este o țeavă BDP (produs de lățime de bandă, lățime de bandă derivată și întârziere). Deoarece conducta este completă după acest punct, excedentul creează o coadă într-un loc îngust, ceea ce duce la dependența liniară a RTT din datele de inflamație afișate pe diagrama superioară. Pachetele sunt aruncate atunci când excedentul depășește capacitatea tamponului. Congestionare - este doar o constatare continuă în partea dreaptă a liniei BDP și reglementarea congestiei - Un anumit schemă de stabilire a unei limite în ceea ce privește dreptul liniei BDP, în medie, datele sunt transmise.

Reglementarea congestionării de către lucrările de pierdere la frontiera dreaptă a zonei limitate de lățimea de bandă a canalului (bandwidth-limitat), oferind lărgimea de bandă completă a unui blocaj din cauza unor întârzieri mari și pierderea frecventă a pachetelor. În acele zile, când memoria era drumul, mărimea tamponului a fost doar puțin depășită BDP, care a minimizat întârzierea redundantă în reglementarea reglementărilor prin pierderi. Reducerea ulterioară a prețurilor memoriei a condus la o creștere a tamponării excesive de rețea și creșterea RTT până la secunde în loc de milisecunde.

Pe marginea din stânga a zonei delimitată de lățimea de bandă a canalului, există un punct de lucru cu cele mai bune condiții decât dreptul. În 1979, Leonard Kleinock a arătat că acest punct de operare este optim, maximizează lățimea de bandă reală cu minimizarea întârzierilor și a pierderilor, atât pentru compușii individuali, cât și pentru rețea ca întreg. Din păcate, la aproximativ același timp, Jeffrey Jaffa a demonstrat că este imposibil să se creeze un algoritm distribuit care converge în acest punct de funcționare. Această concluzie a schimbat direcția de cercetare. În loc să caute un algoritm distribuit, care caută punctul optim de lucru al puiului și cercetătorii au început să studieze abordări alternative pentru reglementarea congestiei.

Grupul nostru din Google se petrece ore pe jurnalele de învățare cu interceptarea anteturilor de pachete TCP din întreaga lume, înțelegerea anomaliei și patologiei comportamentului. De obicei, găsim mai întâi caracteristicile cheie ale traseului, RTPROP și BTLBW. Ceea ce poate fi derivat din tăvile de rețea sugerează că încheierea lui Jaffe nu putea fi atât de neechivocă așa cum părea. Concluzia sa se bazează pe incertitudinea fundamentală de măsurare (de exemplu, dacă o creștere măsurată a RTT este cauzată de o schimbare a lungimii căii, o reducere a lățimii de bandă a unui blocaj sau o creștere a întârzierii în coadă datorată traficului de la o altă conexiune). Deși este imposibil să se elimine incertitudinea fiecărei măsurători specifice, dar comportamentul conexiunii în timp oferă o imagine mai clară, sugerând posibilitatea aplicării strategiilor de măsurare create pentru a elimina incertitudinea.

Prin combinarea acestor măsurători cu un contur de urmărire fiabil prin aplicarea celor mai recente realizări în sistemele de management, puteți spera pentru dezvoltarea unui protocol distribuit pentru reglementarea congestiei, ceea ce răspunde la un complot valabil și nu pentru a pierde pachetele sau întârzierea pe termen scurt coada. Și va fi foarte probabil să se convertească în punctul optim de lucru al puii. Astfel, proiectul nostru de trei ani privind dezvoltarea sistemului de control se va baza pe măsurarea a doi parametri, care caracterizează ruta: lățimea de bandă a blocajului și timpul de trecere dublă a pachetului sau Bbr.

Caracteristică unui loc îngust

Conexiunea funcționează cu lățime de bandă maximă și întârzierea minimă atunci când (balans de viteză) Rata de sosire a pachetelor într-un loc îngustă este BTLBW și (canalul complet), cantitatea totală de date din zbor este BDP ().

Prima condiție asigură că un loc îngust este utilizat 100%. Al doilea garantează că avem suficiente date pentru a preveni un blocaj simplu, dar nu depășiți canalul. Starea de echilibrare a vitezei în sine nu Garantează lipsa de coadă, doar dimensiunea constantă (de exemplu, dacă conexiunea începe cu trimiterea unei ferestre inițiale de 10 lot la un BDP cu cinci parcări, apoi operează exact la aceeași viteză a unui blocaj, apoi cinci din zece pachete inițiale va umple canalul, iar excesul va forma o coadă în picioare într-un loc îngust, care nu va fi capabil să fie rapid). În același mod, starea completă a canalului nu garantează lipsa de coadă (de exemplu, conexiunea trimite explozii BDP la BDP / 2 și utilizează pe deplin un loc îngust, dar coada medie este BDP / 4). Singura modalitate de a minimiza coada într-un blocaj și în întregul canal este să îndeplinească ambele condiții în același timp.

Valorile BTLBW și RTPROP sunt modificate pe durata de viață a conexiunii, astfel încât acestea să fie evaluate constant. În prezent, TCP urmărește RTT (intervalul de timp între trimiterea unui pachet de date la un mesaj despre livrarea acestuia), deoarece este necesar să se determine pierderea. Oricand


În cazul în care reprezintă "zgomotul" din cozile de-a lungul traseului, strategia beneficiarului cu întârzierea confirmării, acumularea de confirmări etc. RTPROP este caracteristicile fizice ale conexiunii și se schimbă numai la schimbarea canalului în sine. Deoarece modificările canalului apar în timpul unei scări de timp RTPROP.atunci va fi o estimare imparțială și eficientă
Aceasta este, lansarea în fereastra de timp (care este de obicei de la zeci de secunde până la minute).

Spre deosebire de RTT, nimic din specificațiile TCP nu necesită implementare pentru a urmări lățimea de bandă a unui blocaj, dar o bună evaluare a acestui lucru poate fi obținută de la urmărirea vitezei de livrare. Când confirmarea serviciului unui pachet este returnată expeditorului, acesta arată pachetul RTT și anunță livrarea de date în zbor atunci când pachetul pleacă. Rata medie de expediere între trimiterea unui pachet și primirea confirmării este atitudinea datelor livrate de trecut :. Această viteză trebuie să fie mai mică sau egală cu lățimea de bandă a unui loc îngust (suma la sosire este exact cunoscută, astfel încât toate incertitudinile să se situeze, care ar trebui să fie mai mari sau egale cu intervalul de sosire actual; prin urmare, atitudinea trebuie să fie Mai puțin sau egal cu rata de livrare prezentă, care, în propria sa coadă, este limitată pe o capacitate de acoperire a blocării). În consecință, fereastra maximă de viteză de livrare este o estimare eficientă, BTLBW neplătibilă:


unde fereastra de timp este de obicei de la șase la zece RTT.

TCP trebuie să înregistreze timpul de trimitere pentru fiecare pachet pentru a calcula RTT. BBR completează aceste înregistrări cu un total de date livrate, astfel încât sosirea fiecărei rapoarte de confirmare simultan și RTT și rezultatul măsurării vitezei de livrare, pe care filtrele sunt transformate în Estimări RTPROP și BTLBW.

Rețineți că aceste valori sunt complet independente: RTPROP se poate schimba (de exemplu, atunci când se schimbă traseul), dar are același blocaj sau BTLBW poate varia (de exemplu, când se schimbă lățimea de bandă a canalelor fără fir) fără a schimba traseul. (Independența ambelor factori de restricții este motivul pentru care acestea ar trebui să fie cunoscute pentru a asocia comportamentul atunci când transportul cu traseul de livrare). Din moment ce RTPROP este vizibil numai pe partea stângă a BDP, iar BTLBW se află numai pe partea dreaptă din figura 1, apoi se supun principiului incertitudinii: ori de câte ori unul dintre cei doi poate fi măsurat, este imposibil de al doilea. Este intuitiv că acest lucru poate fi înțeles după cum urmează: Pentru a determina capacitatea canalului, trebuie să fie copleșită, ceea ce creează o coadă care nu permite lungimea canalului. De exemplu, o aplicație cu protocol de interogare / răspuns nu poate trimite niciodată suficiente date pentru a umple canalul și observarea BTLBW. O transmisie de date mare a unei game mari de date își poate petrece tot timpul într-o zonă cu lățime de bandă limitată și poate obține numai singura probă RTTT de la primul pachet. Principiul inerent al incertitudinii înseamnă că, pe lângă estimările pentru restabilirea celor doi parametri ai traseului, trebuie să existe astfel de state care sunt monitorizate în același timp și ceea ce se găsește în punctul de operare actual și, ca informație Pierde prospețimea, cum să mergeți la punctul de operare unde puteți obține date mai recente.

Cartografierea fluxului pachetului cu livrare

Principalul algoritm BBR este alcătuit din două părți:

Când primim confirmare (ACK)

Fiecare confirmare oferă un nou RTT și măsurarea vitezei medii de livrare, care actualizează ratingurile RTPROP și BTLBW:

Funcție ONACK (pachet) RTT \u003d acum - pachet.sendtime update_min_filter (RTPROPFILTER, RTT) Livrat + \u003d pachet.Size livrat_Time \u003d acum Livrare \u003d (livrat - pachet.delivered) / (livrat_time - pachet.delivered_time) Dacă (Livrare\u003e BTLBWFILTER. CurrentMax ||! Packet.app_limited) Update_Max_FILTER (BTLBWFILTER, LILDERARE) IF (App_limited_until\u003e 0) App_limited_until \u003d App_limited_until - Packet.Size
Dacă este necesar datorită problemei incertitudinii, care a fost menționată în ultimul paragraf: expeditorii pot fi limitați la aplicație, adică aplicațiile pot încheia date pentru a completa rețeaua. Aceasta este o situație destul de tipică din cauza solicitării / răspunsului de trafic. Când este posibil să se trimită, dar nu sunt trimise date, BBR marchează eșantioanele de lățime de bandă adecvate ca fiind "limitate de aplicație", adică App_limitate (vezi pseudo-cod Trimite ()). Acest cod determină care eșantioane includ în modelul lățimii de bandă, astfel încât acesta să reflecte restricțiile de rețea și nu limitele aplicației. BTLBW este o limită de viteză superioară superioară, astfel încât viteza de livrare obținută prin rezultatele măsurătorilor este mare decât estimarea actuală a BTLBW, ar trebui să însemne un rating BTLBW afectat, indiferent dacă eșantionul a fost limitat la aplicație sau nu. În caz contrar, eșantioanele cu limitarea aplicației sunt aruncate. (Figura 1 arată că în regiune cu restricția aplicației de administrare, parametrul BTLBW este subestimat). Astfel de verificări împiedică filtrul BTLBW care umple valorile datorită datelor de trimitere a datelor poate încetini.

Când sunt trimise datele

Pentru a relaționa rata de sosire a pachetelor cu o viteză de plecare de la un blocaj de BBR, urmărește fiecare pachet de date. (BBR trebuie să se potrivească rată. Buttograma: înseamnă că urmărirea este o parte integrantă a arhitecturii și partea fundamentală a lucrării - prin urmare pacing_rate. Este parametrul principal de control. Parametrul auxiliar cwnd_bain. Legături inflângere Cu o multitudine mică de BDP pentru procesarea patologiilor de rețea tipice și a destinatarului (a se vedea sub capitolul de deținuți și confirmarea întinsă). Conceptual, procedura de trimitere în TCP arată ca următorul cod. (În Linux, trimiterea datelor utilizează o procedură eficientă de întreținere de masă FQ / Pacing, care oferă o performanță liniară BBR a unei singure conexiuni pe canale multi-higabit și procesează mii de conexiuni la o viteză mai mică, cu o ușoară CPU WerIal).

Funcție Trimiterea (pachetul) BDP \u003d BTLBWFILTER.CURRENTMAX × RTPROPFILTER.Currentmin Dacă (Inflight\u003e \u003d Cwnd_ain × BDP) // Așteptați returnarea ACK sau Retransmission IF (acum\u003e \u003d NextSendTime) Packet \u003d NextPackettoSend () dacă (! Pachet) app_limited_until \u003d Inflight Return Packet.App_limited \u003d (app_limited_until\u003e 0) Packet.Sendtime \u003d acum pachet.delivered \u003d pachet livrat.delivered_time \u003d livrat_time navă (pachet) Nextsendtime \u003d acum + pachet.Size / (pacing_gain × btlbwfilter.currentmax) TimerCallbackat (trimiteți, NextSendtime)
Comportament durabil

Viteza și cantitatea de date trimise de BBR depinde doar de BTLBW și RTPROP, astfel încât filtrele să controleze nu numai estimările limitărilor unui loc îngust, ci și utilizarea lor. Acest lucru creează o buclă de control non-standard descrisă în figura 2, care arată RTT (albastru), inflamator (verde) și viteza de livrare (roșu) timp de 700 milisecunde pentru un flux de 40 de milisecunde de 10 megoabi. Fat Grey Line peste viteza de livrare este starea filtrului MAX BTLBW. Formele triunghiulare sunt obținute din utilizarea ciclică a coeficientului de pacing_gain în BBR pentru a determina creșterea BTLBW. Coeficientul de transmisie din fiecare parte a ciclului este arătat aliniat cu datele la care a afectat. Acest coeficient a lucrat la RTT mai devreme când datele au fost trimise. Acest lucru este arătat prin nereguli orizontale în descrierea secvenței de evenimente din partea stângă.


Figura 2.

BBR minimizează întârzierea, deoarece cea mai mare parte a timpului trece cu același BDP în acțiune. Datorită acestui fapt, un strangulare se deplasează la expeditor, astfel încât o creștere a BTLBW să devină invizibilă. În consecință, BBR Periodic petrece periodic intervalul RTPROP la valoarea Pacing_Gain\u003e 1, care mărește viteza de trimitere și volumul datelor trimise fără a confirma livrarea (Influminat). Dacă BTLBW nu se schimbă, atunci coada este creată înainte de un loc îngust, creșterea RTT, care salvează administrarea constantă. (Coada poate fi eliminată prin trimiterea de date cu o valoare compensatorie a Pacing_Gain< 1 для следующего RTprop). Если BtlBw увеличивается, то скорость deliveryRate тоже увеличивается, а новое максимальное значение фильтра немедленно увеличивает базовую скорость отслеживания (pacing_rate.). Din acest motiv, BRR se adaptează la noua dimensiune a unui loc îngust rapid rapid. Figura 3 prezintă acest efect asupra unui flux de 10 megabit-40-milisecunde, pe care BTLBW crește brusc la 20 Mbps după 20 de secunde de funcționare stabilă (în partea stângă a graficului), apoi se adâncește până la 10 Mbps după încă 20 de secunde de la încă 20 de secunde Funcționare constantă la 20 Mbit / s (partea dreaptă a graficului).


Figura 3.

(În esență, BBR este un exemplu simplu al sistemului de control MAX-PLUS, o nouă abordare a sistemelor de control bazate pe algebra max-plus non-standard. Această abordare vă permite să adaptați viteza [controlată de coeficientul de transmisie max.] Indiferent de creșterea coadă [controlată de coeficientul de transmisie in medie.]. Aplicată la sarcina noastră, se reduce la o buclă de control simplă, necondiționată, în care adaptarea la modificările constrângerilor fizice este efectuată automat prin schimbarea filtrelor care exprimă aceste limitări. Sistemul tradițional ar necesita crearea unei pluralități de circuite de control combinate într-o mașină finită complexă pentru a obține un astfel de rezultat).

Comportament la pornirea unui singur flux Bbr

Implementările moderne se ocupă de evenimente precum pornirea (pornirea), închiderea (oprirea) și compensarea pierderii (redresarea pierderilor) utilizând algoritmi care răspund la "evenimente" cu un număr mare de linii de cod. BBR utilizează codul de mai sus (în capitolul precedent "Maparea unui flux de pachete cu livrare"), pentru tot. Procesarea evenimentelor are loc prin trecerea prin secvența "state". "Statele" în sine sunt definite de un tabel cu una sau mai multe valori fixe ale coeficienților și criteriilor de ieșire. Timpul principal este petrecut în starea probebw, care este descris în capitolul "Comportament într-o stare de echilibru". Starea de pornire și scurgere sunt utilizate atunci când conexiunea este pornită (Figura 4). Pentru a procesa o conexiune în care lățimea de bandă crește cu 12 comenzi, în starea de pornire este implementată de algoritmul de căutare binar pentru BTLBW, unde coeficientul de transmisie este utilizat pentru o creștere de două ori a ratei de transfer atunci când viteza de livrare crește. Acesta este modul în care BTLBW este determinat în RTT, dar în același timp creează o coadă excesivă înainte. De îndată ce startupul găsește un BTLBW, sistemul BBR comută la starea de scurgere care utilizează coeficienții de pornire inversă pentru a scăpa de o coadă excesivă și apoi la starea probebw de îndată ce inflamanul este redus la linia BDP.


Figura 4.

Figura 4 prezintă prima secundă a fluxului de 40 de milisecunde de 10 megabiți de BBR. În topul superior, timpul și secvența evenimentelor sunt amânate, precum și progresul expeditorului (verde) și al beneficiarului (albastru): volumul datelor transmise și primite. Linia roșie prezintă indicatorii expeditorului utilizând tehnologia cubică în aceleași condiții. Linii gri verticale înseamnă momente de tranziție între statele BBR. În diagrama inferioară - schimbați timpul de trecere dublă a pachetelor (RTT) a ambelor conexiuni. Rețineți că scala de timp pentru acest program se potrivește cu timpul de confirmare a sosirii (ACK). Prin urmare, se pare că graficele par a fi deplasate în timp, dar, de fapt, evenimentele din partea de jos corespund momentelor în care sistemul BBR învață despre aceste evenimente și reacționează.

Diagrama inferioară din figura 4 compară BBR și Cubic. În primul rând, comportamentul lor este aproape la fel, dar Bbr complet golite coada formată când conexiunea este pornită, iar cubicul nu poate face acest lucru. Nu are nici un model de traseu care să raporteze câte date trimise sunt excesive. Prin urmare, Cubic este mai puțin în creștere a transmisiei de date fără confirmarea livrării, dar această creștere continuă până când tamponul de sticlă nu este suprasolicitat și nu începe să renunțe la pachete sau înainte de a ajunge la limita la datele trimise fără confirmare (fereastra de primire a TCP ).

Figura 5 prezintă comportamentul RTT în primele opt secunde ale conexiunii descrise în Figura precedentă 4. Tehnologia cubică (roșu) umple întregul tampon accesibil, apoi se rotește între 70% și 100% se umple la fiecare câteva secunde. După pornirea conexiunii BBR, funcționează aproape fără a crea o coadă.


Figura 5.

Comportament atunci când mai multe fluxuri Bbr se găsesc într-un loc îngust

Figura 6 arată modul în care lățimea de bandă a mai multor fluxuri BBR converge într-o secțiune onestă a canalului cu o sticlă de 100 megobit / 10 milisecunde. Vizionarea structurilor triunghiulare - starea compușilor probertt în care auto-sincronizarea accelerează convergența finală.


Figura 6.

Câștigul de probebw înclinat (Figura 2) stimulează fluxuri mai mari pentru a renunța la bandă la fluxurile mai mici, ca rezultat al căruia fiecare flux înțelege starea cinstită. Acest lucru se întâmplă destul de repede (mai multe cicluri de probebw), deși nedreptatea poate fi menținută dacă fluxurile care au întârziat pentru începutul fluxurilor reevaluează RTPROP datorită faptului că fluxurile au început mai devreme (temporar) creează o coadă.

Pentru a afla REAL RTPROP, firul se mișcă lăsați din linia BDP utilizând starea Probertt: Dacă ratingul RTPROP nu este actualizat (adică prin măsurarea RTT mai mic) timp de mai multe secunde, BBR intră în starea PROBERTT, reducând suma de date trimise (Inflight) la patru pachete cel puțin pentru o singură trecere, apoi se întoarce la starea anterioară. Atunci când fluxurile mari sunt incluse în starea Probertt, o mulțime de pachete sunt acoperite din coadă, astfel încât imediat mai multe fire văd noua valoare RTPROP (Noua RTT minim). Datorită acestui fapt, estimările lor de RTPROP sunt resetate în același timp, astfel încât acestea să intre în statul Probertt - iar coada scade și mai mult, rezultând chiar și mai multe fluxuri, vezi noua valoare RTPROP și așa mai departe. O astfel de coordonare distribuită este un factor cheie în același timp pentru distribuirea cinstită a benzii și a stabilității.

BBR sincronizează fluxurile în jurul evenimentului dorit, care este o linie goală într-un loc îngust. Spre deosebire de o astfel de abordare, reglementarea trecerii pentru pierderea pachetelor sincronizează fluxurile din jurul unor evenimente nedorite, cum ar fi creșterea periodică a coadă și a suprapunerii tamponului, ceea ce mărește întârzierea și pierderea pachetelor.

Experiența de implementare B4 WAN în Google

Rețeaua B4 din Google este o rețea WAN de mare viteză (rețea cu suprafață largă), construită pe comutatoare ieftine obișnuite. Pierderile pe aceste comutatoare cu tampoane mici apar în principal datorită afluxului accidental de stropi mici de trafic. În 2015, Google a început să traducă traficul de muncă cu Cubic pe BBR. Nu au fost înregistrate probleme sau regresii, iar din 2016, toate traficul B4 TCP utilizează BBR. Figura 7 ilustrează un motiv pe care sa făcut: lățimea de bandă BBR este în mod constant de 2-25 ori mai mare decât cea a cubului. Am văzut și mai multe îmbunătățiri, dar am constatat că 75% din conexiunile BBR sunt limitate la tamponul de recepție TCP în nucleu, pe care angajații din departamentul de operațiuni de rețea instalat în mod deliberat la o valoare redusă (8 MB), astfel încât să nu dea dosarul cubic O rețea de trafic excesiv fără a confirma livrarea (dacă este împărțită 8 MB pe 200 ms intercontinental RTT, apoi se oprește 335 Mbps cu maxim). Creșterea manuală a tamponului de primire pe o rută a SUA-Europe a crescut instantaneu rata de transfer de date a BBR la 2 Gbps, în timp ce Cubic a rămas 15 Mbps - aceasta este o creștere relativă de 133 de ori a lățimii de bandă a fost prezisă Matis cu colegii în lucrul științific 1997 .


Figura 7.

Figura 7 prezintă îmbunătățirea relativă a BBR comparativ cu cubul; În funcțiile de distribuție integrate de inserție (funcții de distribuție cumulative, CDF) pentru lățimea de bandă. Măsurătorile se fac utilizând serviciul de detectare activă, care deschide conexiunile BBR și conexiunile cubice la centrele de date la distanță, apoi transmite 8 MB în fiecare minut. Sondele explorează multe rute B4 între America de Nord, Europa și Asia.

Îmbunătățirea imensă este o consecință directă a faptului că BBR nu Utilizează pierderea de pachete ca indicator de bloc. Pentru a obține o lățime de bandă completă, sunt necesare metode existente pentru reglementarea pierderii de pachete de pachete, ca nivelul de pierdere să fie mai mic decât Piața Reverse BDP (de exemplu, mai puțin de o pierdere de 30 de milioane de pachete pentru compușarea a 10 GB / s și 100 ms). Figura 8 compară lățimea de bandă utilă măsurată la diferite niveluri de pierdere de pachete. În algoritmul cubic, toleranța la pierderea pachetelor este proprietatea structurală a algoritmului și în BBR este un parametru de configurare. Pe măsură ce nivelul de pierdere BBR se apropie de creșterea maximă a câștigurilor, probabilitatea de măsurare a vitezei de livrare a Real BTLBW se cade brusc, ceea ce duce la subestimarea de la filtrul MAX.


Figura 8.

Figura 8 compară lățimea de bandă utilă BBR și Cubic într-un flux de 60 de secunde pe un compus 100 Mbps și 100 ms cu pierderi aleatorii de la 0,001% la 50%. Lățimea de bandă cubică scade de 10 ori cu pierderi de 0,1% și complet stand la mai mult de 1%. Lățimea maximă de bandă este partea de pierdere a pachetelor de bandă minus (). BBR se află la acest nivel la un nivel de pierdere de 5% și aproape de el până la 15%.

Experiența de implementare a marginilor YouTube

BBR este nelegat pe serverele video YouTube și Google.com. Google conduce un mic experiment, în care procentul mic de utilizatori este transferat accidental la BBR sau cubic. Redarea video BRB arată o îmbunătățire semnificativă a tuturor estimărilor utilizatorilor de calitate a utilizatorilor. Poate că comportamentul BBR este mai consistent și mai previzibil. BBR îmbunătățește ușor lățimea de bandă a conexiunii, deoarece YouTube și astfel se adaptează debitul la nivelul este mult mai mic decât BTLBW pentru a minimiza tamponarea excesivă a rețelei și re-tamponarea. Dar chiar și aici BBR reduce RTT median mediu cu 53% în lume și mai mult de 80% în țările în curs de dezvoltare.

Figura 9 prezintă îmbunătățirea mediană a RTT în comparație cu Bbr și Cubic în conformitate cu statisticile mai mult de 200 de milioane de vizualizări Video YouTube pe YouTube, măsurate pe cinci continente în timpul săptămânii. Mai mult de jumătate din toate cele 7 miliarde de conexiuni mobile din lume sunt conectate la 2,5 g la o viteză de 8 până la 114 kbps, care se confruntă cu probleme bine documentate datorită faptului că metodele de reglementare a pierderii pachetelor sunt înclinate pentru a depăși tampoanele . O blocaj în aceste sisteme este de obicei între SGSN (servirea nodului de suport GPRS) și un dispozitiv mobil. Software-ul SGSN funcționează și o platformă standard PC cu o cantitate abundentă de memorie RAM, unde sunt adesea megabyte tampon între Internet și un dispozitiv mobil. Figura 10 compară întârzierea (emulată) SGSN între Internet și un dispozitiv mobil pentru BBR și Cubic. Liniile orizontale marchează câteva dintre cele mai grave consecințe: TCP se adaptează la întârzieri RTT prelungite, cu excepția pachetului SYN, care inițiază conexiunea care are un timeout fix, în funcție de sistemul de operare. Când dispozitivul mobil primește o matrice de date mare (de exemplu, de la actualizarea automată a software-ului) prin SGSN cu un tampon mare, dispozitivul nu poate instala nicio conexiune pe Internet, până când coada este gratuită (confirmarea pachetului SYN ACK este întârziată pentru mai mult timp decât timeout-ul fixat).


Figura 9.

Figura 10 prezintă modificări medii la RTT într-o stare compusă stabilă și dependență de dimensiunea tamponului pe o conexiune de 128 kbps și 40 ms cu opt fluxuri Bbr (verde) sau cubice (roșu). BBR deține coada de coadă în valori minime, indiferent de dimensiunea tamponului blocajului și numărul de fluxuri active. Fluxurile cubice umple întotdeauna tamponul, astfel încât întârzierea crește liniar cu o dimensiune tampon.


Figura 10.

Strip adaptabil în comunicarea celulară mobilă

Sistemele celulare adaptează lățimea de bandă pentru fiecare utilizator parțial în funcție de prognoza interogării în care este luată în considerare coada de pachete pentru acest utilizator. Versiunile timpurii ale BBR au fost configurate în așa fel încât să creeze cozi foarte mici, din cauza cărora compușii s-au oprit la viteze reduse. Creșterea valorii maxime a Pacing_Gain pentru probebw și cozile crescătoare au condus la o scădere a compușilor umpluți. Aceasta arată posibilitatea unei adaptări excelente pentru unele rețele. Cu valoarea curentă a factorului de vârf, nu se manifestă nici o degradare în nici o rețea, comparativ cu cubul.

Ambalajele ACK reținute și întinse

Rețeaua celulară, rețeaua Wi-Fi și bandă largă sunt adesea întârziate și acumulate pachete ACK. Când Influminarea este limitată la un BDP, acesta duce la defecțiuni care reduc lățimea de bandă. Creșterea coeficientului de probebw cwnd_gain la două permise pentru a continua să fie transmis fără probleme pe viteza de livrare previzionată, chiar și atunci când pachetele ACK au fost amânate la o valoare într-o singură RTT. Previne destul de mult defectele.

Limitatori ai găleții curente

Implementarea inițială a Bbr pe YouTube a arătat că majoritatea furnizorilor de Internet din lume distorsionează traficul folosind limitatoare de viteză pe algoritmul curentului curentului. Cupa este de obicei pe deplin la începutul conexiunii, astfel încât BBR învață parametrul BTLBW pentru rețeaua subiacentă. Dar, de îndată ce găleata este golită, toate pachetele trimise mai repede decât (mult mai puțin decât btlbw) viteza de umplere a găurilor sunt aruncate. BRR va recunoaște în cele din urmă această nouă rată de livrare, dar schimbarea ciclică a câștigului probebw duce la pierderi moderate constante. Pentru a minimiza pierderea trupei din amonte și creșterea întârzierilor aplicației din aceste pierderi, am adăugat un detector de limitator special și un model explicit de limitare în BBR. De asemenea, studiem în mod activ cele mai bune modalități de a elimina detrimentul limitatoarelor de viteză.

Concurență cu metode de reglementare a congestionării pe pierderea pachetelor

Bbr se reduce la diviziunea cinstită a lățimii de bandă a unui blocaj, fie în competiție cu alte fluxuri Bbr sau cu fluxuri care rulează metodele de reglementare a congestionării prin pierderea pachetelor. Chiar și atunci când Ultimul umple un tampon accesibil, ProBebw schimbă în mod fiabil estimarea BTLBW în partea laterală a fluxului onest al fluxurilor, iar PROBERTT consideră că ratingul RTPROP este destul de ridicat pentru convergența "OCO UE" la separarea echitabilă. Cu toate acestea, tampoanele de router neangajate care depășesc unele BDP sunt forțate concurenți depășite cu reglementarea congestiei privind pierderea pachetelor pentru a umfla coada și pentru a captura mai mult decât este cinstit. Eliminarea acestui lucru este o altă zonă a cercetării active.

Concluzie

Regândirea metodelor de reglementare a congestionării aduce beneficii mari. În loc să folosească evenimente, cum ar fi pierderi sau o ocupație tampon, care doar se corelează slab cu opusul, BBR începe cu un model formal de răcire și punct de funcționare optim asociat. O concluzie enervantă cu privire la "incapacitatea" determinării simultană a parametrilor importanți importanți ai întârzierii și a lățimii de bandă este prin ajutorul observării că pot fi prezise simultan. Cele mai recente realizări din gestionarea și teoria sistemelor de estimare sunt apoi aplicate pentru a crea un circuit de control simplu distribuit, care se apropie de optim, folosind complet rețeaua, menținând o coadă mică. Implementarea BBR Google este disponibilă în kernelul Linux open source și este descris în detaliu în anexa la prezentul articol.

Tehnologia BBR este utilizată pe Google B4 Binemarks, îmbunătățind lățimea de bandă în comparație cu cubul. De asemenea, se desfășoară pe serverele Web Google și YouTube, reducând în mod semnificativ întârzierea pe toate cele cinci continente testate până în prezent și, în special, în țările în curs de dezvoltare. Tehnologia BBR funcționează exclusiv pe partea expeditorului și nu necesită modificări ale protocolului, la destinatar sau în rețea, ceea ce îi permite să o desfășoare treptat. Depinde doar de notificările de livrare a RTT și pachete, astfel încât pot fi aplicate în majoritatea protocoalelor de transport pe Internet.

Exprimarea aprecierii

Autorii sunt recunoscători lui Lena Kleinoku pentru direcția modului de a ajusta în mod corespunzător congestia. Suntem îndatorați la căsătoria Larry (Larry Brakmo) pentru lucrări inovatoare privind sistemele de reglementare ale Vegas și New Vegas, care au anticipat numeroasele elemente BBR, precum și pentru sfaturile și ghidul său la stadiul inițial al dezvoltării BBR. De asemenea, dorim să mulțumim lui Eric Dukipati, Nandita Dukkipati, Jana Ayengar (Ian SweTt), Yana Svetta (Ian Swett), Noulan Fitza (M. Fitz Nowlan), David Wethetharan), Leonidas Contohanassis (Leonidas Konttohanassis), Amin Vakhatata (Amin Vahdat ) și grupurile de dezvoltare Google BWE și infrastructura YouTube pentru ajutorul și sprijinul lor neprețuit.

Anexă - Descriere detaliată

Mașină de stare pentru detectarea serială

Factorul de câștig Pacing_Gain controlează modul în care pachetele relativ la BTLBW sunt trimise rapid și aceasta este cheia funcției inteligente BBR. Când Pacing_Gain, mai mult decât unitatea crește și scade spațiul dintre încasările pachetelor, care deplasează conexiunea la partea dreaptă din figura 1. Când Pacing_Gain este mai mic decât o unitate, conexiunea are loc, conexiunea se deplasează la stânga.

BBR utilizează Pacing_Gain pentru a implementa o mașină simplă de detectare, care se alternează între testarea pe o bandă mai mare și testarea pentru un timp mai mic al pachetului dublu. (Nu este necesar să se testeze la o bandă mai mică, deoarece este procesată automat cu filtrul MSX BTLBW: Dimensiunile noi reflectă căderea, astfel încât BTLBW se va regla imediat ce ultimele modificări vechi vor fi scoase din filtrul de timp. Filtrul RTPROP MIN este în același mod mânerează livrarea calea de livrare).

Dacă lățimea de bandă a gâtului sticlei crește, BBR trebuie să trimită date mai repede pentru ao detecta. În același mod, dacă timpul real al trecerii duble a pachetului se schimbă, acesta modifică BDP-ul și, prin urmare, BDP trebuie să trimită datele mai lent pentru a menține inflamarea sub BDP pentru a măsura noul RTPROP. Prin urmare, singura modalitate de a detecta aceste schimbări este de a efectua experimente, trimiterea mai rapidă pentru a verifica creșterea BTLBW sau trimiterea mai lentă pentru a verifica reducerea RTPROP. Frecvența, scala, durata și structura acestor experimente diferă în funcție de ceea ce este deja cunoscut (lansarea unei conexiuni sau a unei stări stabile) și din comportamentul aplicației care trimite date (intermitente sau permanente).

Stare echilibrată

Fluxurile BBR petrec cea mai mare parte a timpului în starea ProBebW, cercetarea benzii utilizând metoda numită câștiga ciclismAcest lucru ajută la fluxurile BBR să obțină o lățime de bandă mare, o întârziere scăzută în coada și convergența în secțiunea echitabilă a benzii. Folosind. câștiga ciclism, Bbr încearcă ciclic o serie de valori pentru câștig. pacing_gain.. Cele opt faze ale ciclului sunt utilizate cu următoarele valori: 5/4, 3/4, 1, 1, 1, 1, 1, 1, 1. Fiecare fază merge, de obicei, în timpul RTPROP proiectat. Un astfel de design permite ciclul coeficientului să cerceteze mai întâi canalul la lățimea de bandă mai mare cu valoarea pacing_gain. mai mult de 1,0, apoi dispersați orice coadă formată cu pacing_gain. Pe aceeași valoare mai mică de 1,0 și apoi treceți la viteza de croazieră cu o coadă scurtă de coeficienți Rivne 1.0. Federația medie de câștig pentru toate fazele este de 1,0, deoarece ProBebW tinde să egalizeze lățimea de bandă disponibilă și, prin urmare, să mențină un grad ridicat de lățime de bandă fără a crește coada. Rețineți că, deși ciclurile modificărilor schimbărilor coeficienților pacing_gain.Dar valoarea cwnd_bain. Rămâne invariabil la două, deoarece deținuții și pachetele de confirmare întinse pot apărea în orice moment (a se vedea capitolul de pe deținuți și pachetele întinse ACK).

Mai mult, pentru a îmbunătăți amestecarea firelor și a separării echitabile a benzii și pentru a reduce cozile, atunci când numeroasele fluxuri BRB împărtășesc un blocaj, BBR schimbă în mod aleatoriu fazele ciclului probebw, alegând accidental prima fază între toate valorile 3/4. De ce nu începe ciclul cu 3/4? Sarcina principală a acestei valori coeficientului este dispersată orice coadă care poate fi formată în timpul aplicării coeficientului de 5/4 atunci când canalul este deja complet. Când procesul părăsește starea de scurgere sau probertt și intră în probebw, atunci coada lipsește, astfel încât coeficientul de 3/4 nu își îndeplinește sarcina. Aplicația 3/4 în acest context, doar un efect negativ: umplerea canalului în această fază va fi de 3/4, iar nu 1. Astfel, începutul ciclului cu 3/4 are doar un efect negativ, dar nu are Un pozitiv și de la intrarea în statul probebw apare la începutul oricărei conexiuni suficient de lungă, BBR utilizează această mică optimizare.

Streamurile BBR acționează împreună pentru a goli periodic coada într-un loc îngust, cu un stat numit Probertt. În orice altă condiție decât Probertt în sine, dacă raportul RTPROP nu este actualizat (de exemplu, prin măsurarea RTT mai mic) mai mult de 10 secunde, BBR intră în starea PROBERTT și reduce CWEN la o valoare foarte mică (patru pachete). Salvând un astfel de număr minim de pachete "în zbor" cel puțin 200 de ms și pentru o singură dată a pasajului de trecere dublă, BBR-ul iese din starea Probertt și intră sau în pornire sau în PROBEBW, în funcție de evaluare, indiferent dacă canalul a fost deja umplut.

BBR este creat pentru a lucra ca majoritatea timpului (aproximativ 98%) în starea ProBebW și restul timpului - în Protertt, pe baza setului de compromisuri. Starea PRBERTT continuă suficient de lungă (cel puțin 200 ms) pentru a permite fluxurilor cu RTT diferite să aibă state paralele probertt, dar în același timp continuă o perioadă destul de scurtă de timp pentru a limita reducerea performanței de aproximativ două procente (200 ms / 10 secunde). Fereastra Filtru RTPROP (10 secunde) este suficient de mică pentru a regla rapid nivelul de trafic sau pentru a schimba traseul, dar este destul de mare pentru aplicații interactive. Aplicațiile astfel (de exemplu, pagini web, apeluri pentru proceduri la distanță, fragmente video) demonstrează adesea perioadele naturale de tăcere sau activitate mică în cancerul acestei ferestre, unde debitul este destul de scăzut sau destul de lung pentru a dispersa coada un loc îngust. Filtrul RTPROP este apoi selectat selectiv aceste măsurători ale RTPROP, iar RTPROP este actualizată fără a fi nevoie să utilizați PROBERTT. Astfel, firele sunt de obicei necesare doar pentru a sacrifica 2% din bandă dacă numeroasele fluxuri sunt umplut abundent canalul pe întreaga fereastră RTPROP.

Comportament la pornire

Când începe fluxul BBR, acesta efectuează primul său (și cel mai rapid) proces secvențial de detectare / golire a coadăzii. Lățimea de bandă de rețea variază în intervalul 10 12 - de la mai mulți biți la 100 de gigabiți pe secundă. Pentru a afla valoarea BTLBW cu o astfel de schimbare giganică, BBR oferă o căutare binară în spațiul de viteză. Acesta găsește rapid BTLBW (pasaje cu pachete duble), dar prin crearea unei coadă în 2BDP în ultima etapă a căutării. Căutarea este efectuată în starea de pornire din BBR, iar golirea coadălor create este în starea de scurgere.

În primul rând, pornirea expune exponențial viteza de trimitere a datelor prin dublarea pe fiecare rundă. Pentru a obține o astfel de senzație rapidă în cel mai calm, la pornirea valorii coeficienților de câștig pacing_gain. și cwnd_bain. Instalat pe, într-o valoare minimă care vă permite să dublați viteza de trimitere a datelor în fiecare rundă. Odată ce canalul este umplut, coeficient cwnd_bain. Limitează dimensiunea valorii coadă.

La începutul conexiunii BBR, se estimează dacă canalul este umplut cu o căutare a platoului în evaluarea BTLBW. Dacă se constată că mai multe (trei) runde au trecut, în cazul în care încercările de a dubla viteza de livrare într-adevăr nu oferă un câștig mare de viteză (mai puțin de 25%), atunci crede că a ajuns la BTLBW, așa că iese din pornire stau și intră în starea de scurgere. BBR așteaptă trei runde pentru a obține dovezi convingătoare că expeditorul vitezei de livrare nu este efect temporar sub influența ferestrei de recepție. Așteptarea a trei runde oferă suficient timp pentru a se configura automat pe partea destinatarului pentru a deschide fereastra de recepție și că expeditorul pentru BBR a descoperit necesitatea creșterii BTLBW: În prima rundă, algoritmul automat de tuning al ferestrei recepției crește recepția fereastră; În a doua rundă, expeditorul umple fereastra crescută a recepției; În cea de-a treia rundă, expeditorul primește eșantioane cu o rată extinsă de livrare. O astfel de limită de trei runde sa dovedit în funcție de rezultatele introducerii pe YouTube.

În starea de scurgere, algoritmul BBR încearcă să golească rapid coada care a fost formată în starea de conectare prin transformarea în modul pacing_gain. Cu configurații decât cele utilizate în starea de pornire. Când numărul de pachete din zbor corespunde scorului BDP, aceasta înseamnă că BBR estimează că coada este complet goală, dar canalul este încă umplut. Apoi BBR iese din starea de scurgere și intră în probebw.

Rețineți că lansarea conexiunii BBR și a cubicului lent începe atât să studieze lățimea de bandă a blocajelor exponențial, dublează viteza de trimitere pe fiecare rundă. Cu toate acestea, ele diferă dramatic. În primul rând, BBR determină mai fiabil lățimea de bandă disponibilă, deoarece nu oprește căutarea în cazul unei pierderi de pachete sau (ca Hystart la Cubic) să mărească întârzierea. În al doilea rând, BBR crește fără probleme viteza de trimitere, în timp ce cubul pe fiecare rundă (chiar și cu stimularea) are o stropire de pachete și apoi perioada de tăcere. Figura 4 prezintă numărul de pachete în zbor și respectați timpul RTT pentru fiecare mesaj de confirmare la BBR și Cubic.

Reacționarea la situațiile de tranziție

Calea de rețea și transmiterea traficului poate avea schimbări dramatice bruște. Pentru a se adapta fără probleme și în mod fiabil la acestea, precum și reducerea pierderilor de pachete în aceste situații, BBR utilizează o serie de strategii pentru a-și implementa modelul de bază. În primul rând, BBR privește obiectivul la care actualul curent cwnd. Apropiindu-se cu atenție fundul, în creștere cwnd. De fiecare dată nu mai mult decât cantitatea de date pentru care a venit confirmarea livrării. În al doilea rând, cu un termen de transmisie de re-transmisie, ceea ce înseamnă că expeditorul ia în considerare toate pachetele în zbor, BBR conservator reduce cwnd. La un pachet și trimite singurul pachet (exact ca algoritmi pentru reglementarea congestionării pentru pierderea pachetelor, cum ar fi cubic). În cele din urmă, când expeditorul observă pierderea pachetului, dar în zbor există încă pachete, în prima etapă a procesului de recuperare, pierderea BRB reduce temporar viteza de trimitere la nivelul vitezei de livrare curente; Pe cele două și ulterioare runde de restaurare a pierderilor, verifică dacă viteza de trimitere nu depășește niciodată viteza de livrare curentă de mai mult de două ori. Acest lucru reduce semnificativ pierderile de tranziție atunci când BBR se confruntă cu limitatoare de viteză sau concurează cu alte fire din tampon comparabil cu dimensiunea BDP.

Link-uri

1. Abrahamsson, M. 2015. Suprimarea TCP ack. Lista de corespondență poștală IETF AQM;

Software-ul public a devenit principalul element structural atunci când creați unele dintre cele mai mari site-uri web. Odată cu creșterea acestor site-uri web, au apărut metode practice avansate și liniile directoare ale arhitecturii lor. Acest capitol urmărește să acopere câteva întrebări-cheie care ar trebui luate în considerare la proiectarea unor site-uri mari, precum și unele componente de bază utilizate pentru atingerea acestor obiective.

Se pune accentul pe acest capitol al analizei sistemelor web, deși o parte a materialului poate fi extrapolată la alte sisteme distribuite.

1.1 Principii pentru construirea sistemelor web distribuite

Ce anume crearea și gestionarea unui site web scalabil sau a unei cereri? La nivel primitiv, aceasta este pur și simplu o conexiune a utilizatorilor cu resurse la distanță prin Internet. Și resursele sau accesul la aceste resurse, care sunt dispersate pe mai multe servere și sunt o legătură care asigură scalabilitatea site-ului web.

Ca majoritatea lucrurilor din viață, timpul petrecut în avans pe planificarea serviciului web poate ajuta în viitor; Înțelegerea unor considerații și compromisuri în spatele site-urilor mari pot aduce fructe sub formă de soluții mai inteligente atunci când creează site-uri mai mici. Sub unele principii-cheie care afectează proiectarea sistemelor web la scară largă:

  • Disponibilitate: Durata stării funcționale a site-ului este critică în raport cu reputația și funcționalitatea multor companii. Pentru unele magazine de vânzare cu amănuntul online mai mari, inaccesibilitatea chiar și pentru câteva minute poate duce la mii sau milioane de dolari din venituri pierdute. Astfel, dezvoltarea lor în mod constant accesibilă și elastică la eșecul sistemelor este atât o afacere fundamentală, cât și o cerință tehnologică. Disponibilitatea ridicată în sistemele distribuite necesită o analiză atentă a redundanței pentru componentele cheie, recuperarea rapidă după eșecurile parțiale ale sistemului și abrevierile netezite atunci când apar probleme.
  • Performanţă: Performanța site-ului a devenit un indicator important pentru majoritatea site-urilor. Viteza site-ului afectează satisfacția muncii și a utilizatorilor, precum și clasamentul motorului de căutare - un factor care afectează în mod direct exploatația publicului și a veniturilor. Ca rezultat, cheia este crearea unui sistem optimizat pentru răspunsuri rapide și întârzieri scăzute.
  • Fiabilitate: Sistemul trebuie să fie fiabil, astfel încât o anumită cerere de achiziții de date returnate uniform anumite date. În cazul schimbării sau actualizării datelor, aceeași interogare trebuie să returneze date noi. Utilizatorii ar trebui să știe dacă ceva este înregistrat în sistem sau stocat în acesta, atunci puteți fi sigur că va rămâne în locul său pentru a extrage eventual date ulterior.
  • Scalabilitate: Când vine vorba de orice sistem distribuit mare, mărimea se dovedește a fi doar un punct din întreaga listă care trebuie luată în considerare. Nu există eforturi mai puțin importante pentru creșterea lățimii de bandă pentru prelucrarea volumelor mari de încărcare, care este de obicei menționată ca scalabilitate a sistemului. Scalabilitatea se poate referi la diferitele parametri de sistem: numărul de trafic suplimentar cu care poate face față cât de ușor este de a crește capacitatea dispozitivului de stocare sau cât de mult decât alte tranzacții pot fi procesate.
  • Controlabilitate: Proiectarea unui sistem ușor de operat un alt factor important. Controlul sistemului este egal cu scalabilitatea operațiunilor de "întreținere" și "actualizări". Pentru a asigura gestionabilitatea, este necesar să se ia în considerare problemele de simplitate a diagnosticului și înțelegerea problemelor emergente, ușurința actualizărilor sau modificării, capricioasă a sistemului în funcționare. (adică dacă funcționează fără eșecuri sau excepții?)
  • Cost: Costul este un factor important. Evident, poate include costul hardware și software, dar este, de asemenea, important să se ia în considerare și alte aspecte necesare pentru desfășurarea și menținerea sistemului. Cantitatea de timp a dezvoltatorilor necesară pentru construirea unui sistem, domeniul de aplicare al eforturilor operaționale necesare pentru lansarea sistemului și chiar și un nivel suficient de instruire - totul trebuie furnizat. Costul este costul total al proprietății.

Fiecare dintre aceste principii este baza pentru luarea deciziilor în proiectarea unei arhitecturi web distribuite. Cu toate acestea, ele pot fi, de asemenea, în contradicție între ele, deoarece realizarea obiectivelor de a avea loc din cauza nerespectării de către alții. Un exemplu simplu: Selectarea unei adăugări simple de servere multiple ca soluție de performanță (scalabilitate) poate crește costurile de controlitate (trebuie să utilizați un server suplimentar) și achiziționarea de servere.

La dezvoltarea oricărui tip de aplicație web, este important să se ia în considerare aceste principii-cheie, chiar dacă trebuie să confirme că proiectul poate dona unul sau mai multe dintre ele.

1.2 Bazele de bază

La examinarea arhitecturii sistemului, există mai multe întrebări care trebuie să fie iluminate, de exemplu: care componente ar trebui utilizate, deoarece se combină unul cu celălalt și ce compromisuri puteți merge. Investirea banilor în scalare fără necesitatea evidentă pentru aceasta nu poate fi considerată o decizie de afaceri rezonabilă. Cu toate acestea, unele prudență în planificare pot economisi în mod semnificativ timp și resurse în viitor.

Această secțiune este dedicată unor factori de bază care sunt esențiali pentru aproape toate aplicațiile web mari: servicii,
redundanţă, segmentare, I. eșecul de prelucrare. Fiecare dintre acești factori implică alegerea și compromisurile, în special în contextul principiilor descrise în secțiunea anterioară. Pentru explicații, dăm un exemplu.

Exemplu: aplicația de găzduire a imaginilor

Probabil ați plasat deja imagini în rețea. Pentru site-urile mari care oferă stocarea și livrarea mai multor imagini, există probleme în crearea unei arhitecturi eficiente din punct de vedere al costurilor, care se caracterizează prin întârzieri reduse de răspuns (extracție rapidă).

Imaginați-vă sistemul în care utilizatorii au capacitatea de a-și încărca imaginile pe serverul central și, în același timp, imaginile pot fi solicitate printr-un link către site sau API, similar cu Flickr sau Picasa. Pentru a simplifica descrierea, să presupunem că această aplicație are două sarcini principale: capacitatea de a încărca (scrie) imagini pe server și de a solicita imagini. Desigur, descărcarea eficientă este un criteriu important, cu toate acestea, prioritatea va fi livrarea rapidă la cererea utilizatorilor (de exemplu, imaginile pot fi solicitate să afișeze pe o pagină web sau la o altă aplicație). Această funcționalitate este similară cu cea pe care un server Web poate oferi un server web sau un server de rețea de livrare a conținutului de frontieră (rețea de livrare a conținutului, CDN). Serverul CDN stochează în mod obișnuit obiecte de date în multe locații, prin urmare, plasarea lor geografică / fizică este mai aproape de utilizatori, ceea ce duce la o creștere a performanței.

Alte aspecte importante ale sistemului:

  • Numărul de imagini stocate poate fi nelimitat, astfel, scalabilitatea depozitării trebuie luată în considerare din acest punct de vedere.
  • Trebuie să existe o întârziere scăzută pentru cererile de descărcare / imagine.
  • Dacă utilizatorul încărcați imaginea pe server, atunci datele sale ar trebui să rămână întotdeauna holistice și accesibile.
  • Sistemul ar trebui să fie ușor de întreținut (manipularea).
  • Deoarece gazduirea imaginii nu aduce profituri mari, sistemul ar trebui să fie rentabil.

O altă problemă potențială cu acest design este că serverul web, cum ar fi Apache sau LighttPD, de obicei există o limită de top a numărului de conexiuni simultane, pe care le este în stare de servire (valoare implicită - aproximativ 500, dar poate fi mult mai mare), iar cu trafic ridicat, înregistrarea poate petrece rapid această limită. Deoarece citirile pot fi asincrone sau utilizează o altă optimizare a performanței ca compresie sau transmisie gzip cu diviziune pe o porțiune, un server web poate comuta mai repede și comutat între clienți, care servește mult mai multe cereri decât numărul maxim de conexiuni (cu Apache și Numărul maxim de conexiuni instalate în 500, este destul de realist pentru a servi câteva mii de solicitări de citire pe secundă). Intrările, pe de altă parte, tind să mențină o conexiune deschisă pe tot parcursul timpului de descărcare. Astfel, transferul unui fișier cu o dimensiune de 1 MB la server ar putea dura mai mult de 1 secundă în majoritatea rețelelor de domiciliu, ca rezultat, serverul web va putea procesa doar 500 de astfel de înregistrări simultane.


Figura 1.2: Divizia de citire și scriere

Prezența unei astfel de probleme potențiale indică necesitatea de a împărți citirea și scrierea imaginilor la serviciile independente prezentate de. Acest lucru nu numai că va scala fiecare dintre ele individual (deoarece probabil că vom face întotdeauna mai multe citiri decât înregistrări), dar, de asemenea, să fiți conștienți de ceea ce se întâmplă în fiecare serviciu. În cele din urmă, va distinge problemele capabile să apară în viitor, ceea ce va simplifica diagnosticul și evaluarea problemei lecturii lente.

Avantajul acestei abordări este că suntem capabili să rezolvăm problemele independent de celălalt - în timp ce nu trebuie să ne gândim la necesitatea înregistrării și obținerii de imagini noi într-un context. Ambele servicii utilizează în continuare cazul imaginii globale, dar atunci când se utilizează metodele serviciului specific corespunzător, aceștia sunt capabili să-și optimizeze propria performanță (de exemplu, plasarea cererilor de coadă sau caching imagini populare - mai multe despre acest lucru va fi discutat mai departe). Atât din punct de vedere al serviciului, cât și din cost, fiecare serviciu poate fi scalat independent după cum este necesar. Și acesta este un factor pozitiv, deoarece asocierea și amestecarea lor ar putea fi influențate din greșeală de performanța lor, ca în scriptul descris mai sus.

Bineînțeles, activitatea modelului menționat mai sus va fi optimă, în cazul prezenței a două puncte finale diferite (de fapt, este foarte asemănător cu mai multe implementări ale furnizorilor de rețele de depozitare "cloud"). Există multe modalități de a rezolva astfel de probleme și, în fiecare caz, puteți găsi un compromis.

De exemplu, Flickr rezolvă această problemă de citire, distribuind utilizatori între diferite module, astfel încât fiecare modul poate servi doar un număr limitat de anumiți utilizatori, iar atunci când numărul utilizatorilor sunt în creștere, mai multe module sunt adăugate la cluster (vezi scalarea Flickr prezentare,
http://mysqldba.blogspot.com/2008/04/mysql-uc-2007-presentation-file.html). În primul exemplu, este mai ușor să scalați hardware-ul bazat pe utilizarea efectivă a utilizării (numărul de citiri și înregistrări în tot sistemul), în timp ce scalarea Flickr se bazează pe baza de utilizatori (cu toate acestea, este utilizată aici pentru uniformă Utilizarea de la diferiți utilizatori, astfel încât puterea trebuie să fie planificată din rezervă). În trecut, inaccesibilitate sau o problemă cu una dintre serviciile, funcționalitatea unui întreg sistem a fost inoperabilă (de exemplu, nimeni nu poate scrie fișiere), atunci inaccesibilitatea unuia dintre module Flickr va afecta numai utilizatorii referitoare la acesta. În primul exemplu, este mai ușor să efectuați operațiuni cu un set de date de date întreg - de exemplu, actualizând serviciul de înregistrare pentru a activa noua metadate sau pentru a efectua o căutare pe toate imaginile metadate - în timp ce cu arhitectura Flickr fiecare modul a fost actualizat sau Căutarea (sau serviciul de căutare ar trebui să fie create pentru a sorta acele metadate care sunt de fapt destinate acestui lucru).

În ceea ce privește aceste sisteme - nu există nici un panaceu, dar ar trebui să continue întotdeauna de la principiile descrise la începutul acestui capitol: să identifice nevoile sistemului (încărcătura de citire sau "scriere" sau oricine imediat, nivelul paralelismului, Solicitări pentru seturi de date, intervale, sortimente etc.), efectuează testarea comparativă de referință a diferitelor alternative, înțeleg condițiile de eșec potențial al sistemului și să dezvolte un plan integrat pentru apariția eșecului.

Redundanţă

Pentru a face față elegant cu refuzul, arhitectura web ar trebui să aibă redundanță serviciile și datele sale. De exemplu, în cazul unei singure exemplare a fișierului stocat pe un singur server, pierderea acestui server va însemna pierderi și fișiere. Este puțin probabil ca o astfel de situație să poată fi caracterizată pozitiv și, de obicei, poate fi evitată prin crearea de copii multiple sau de rezervă.

Același principiu este aplicabil serviciilor. Din eșecul singurul nod, puteți proteja dacă este posibil să oferiți o parte integrantă a funcționalității aplicației care garantează funcționarea simultană a mai multor copii sau versiuni.

Crearea redundanței în sistem vă permite să scăpați de punctele slabe și să furnizați o funcționalitate de rezervă sau redundantă în cazul unei situații anormale. De exemplu, în cazul prezenței a două copii ale aceluiași serviciu care operează în "producția" și unul dintre aceștia nu reușește într-o poziție integrală sau parțial, sistemul poate depăși refuzul datorită Trecerea la o instanță utilă.
Comutarea poate apărea automat sau necesită intervenție manuală.

Un alt rol-cheie al redundanței serviciilor - crearea arhitectura care nu furnizează separarea resurselor. Cu această arhitectură, fiecare nod este capabil să lucreze independent și, în plus, în absența unui "creier" central, gestionarea stărilor sau acțiunea de coordonare a altor noduri. Contribuie la scalabilitate, deoarece adăugarea de noduri noi nu necesită condiții speciale sau cunoștințe. Și, cel mai important, în aceste sisteme nu există un punct vulnerabil critic de refuz, ceea ce le face mult mai elastic la eșec.

De exemplu, în aplicația noastră de server de aplicații, toate imaginile ar avea copii redundante undeva într-o altă parte a hardware-ului (ideal - cu o altă locație geografică în cazul unei astfel de catastrofe, cum ar fi un cutremur sau foc în centrul de date) și Serviciile de acces la imagine vor fi redundante, în ciuda faptului că toți vor servi cu potențial cereri. (Cm. .)
Așteaptă cu nerăbdare, echilibrarea încărcăturii este o modalitate excelentă de a face posibil, dar mai multe despre el mai jos.


Figura 1.3: O aplicație de găzduire a aplicației cu redundanță

Segmentare

Seturile de date pot fi atât de mari încât nu pot fi plasate pe un singur server. Se poate întâmpla, de asemenea, că operațiunile de calcul vor necesita resurse de computere prea mari, reducând productivitatea și necesită creșterea puterii. În orice caz, aveți două opțiuni: scalare verticală sau orizontală.

Scalarea verticală implică adăugarea mai multor resurse către un server separat. Deci, pentru un set foarte mare de date, acest lucru ar însemna adăugarea mai multor (sau mai multe) unități hard disk și, astfel, întregul set de date ar putea fi amplasat pe același server. În cazul operațiunilor computaționale, acest lucru ar însemna mișcarea calculelor într-un server mai mare, cu o CPU mai rapidă sau o cantitate mare de memorie. În orice caz, scalarea verticală este efectuată pentru a face o resursă separată a sistemului de calcul capabil de prelucrare suplimentară a datelor.

Scalarea orizontală, pe de altă parte, furnizează adăugarea unui număr mai mare de noduri. În cazul unui set de date mare, acest lucru ar însemna adăugarea unui al doilea server pentru a stoca o parte din întreaga cantitate de date și pentru o resursă de calcul, ar însemna separarea muncii sau descărcarea prin unele noduri suplimentare. Pentru a profita din plin de potențialul scalării orizontale, acesta trebuie implementat ca un principiu intern al dezvoltării arhitecturii sistemului. În caz contrar, schimbarea și alocarea contextului necesar pentru scalarea orizontală pot fi problematice.

Cea mai obișnuită metodă de scalare orizontală este separarea serviciilor pentru segmente sau module. Acestea pot fi distribuite astfel încât fiecare set logic de funcționalitate să funcționeze separat. Acest lucru se poate face prin frontierele geografice sau alte criterii, cum ar fi plata și nu plătiți utilizatorilor. Avantajul acestor scheme este acela că oferă un depozit de servicii sau de date cu funcționalitate extinsă.

În exemplul serverului nostru de imagini, este posibil ca singurul server de fișiere utilizat pentru stocarea imaginii să poată fi înlocuit cu o multitudine de servere de fișiere, iar fiecare dintre ele va conține propriul set unic de imagini. (Vezi.) O astfel de arhitectură va permite sistemului să umple fiecare server de fișiere cu imagini prin adăugarea de servere suplimentare pe măsură ce spațiul pe disc este umplut. Designul va necesita o schemă de numire care va conecta numele fișierului imagine cu serverul său. Numele imaginii poate fi format dintr-un circuit de consistență al hashing legat de servere. Sau alternativ, fiecare imagine poate avea un identificator incremental, care va permite serviciului de livrare când a determinat imaginea să proceseze numai gama de identificatori atașați la fiecare server (ca index).


Figura 1.4: Aplicarea de găzduire cu redundanță și segmentare

Desigur, există dificultăți în distribuția de date sau funcționalități la multe servere. Una dintre întrebările-cheie - locația datelor.; În sistemele distribuite, cu atât mai bine datele către locul de funcționare sau la punctul de calcul, cu atât performanța sistemului este mai bună. În consecință, distribuția datelor în mai multe servere este potențial problematică, deoarece în orice moment când aceste date pot fi necesare, riscul ca acesta să nu fie la locul de revendicare, serverul va trebui să efectueze eșantionul costisitor al informațiilor necesare în rețea.

O altă problemă potențială apare în formular
inconsecvențe (non-contestație). Atunci când diversele servicii au citit și scrie pe resursa partajată, potențial alt serviciu sau magazin de date, există posibilitatea de a "concursa" condiții - în cazul în care unele date sunt considerate actualizate în starea actuală, dar în realitate, citirea lor are loc până la Momentul de actualizare - și în acest caz, datele sunt neconforme. De exemplu, în scenariul de găzduire a imaginilor, starea concursului ar putea apărea dacă un client a trimis o cerere de a actualiza imaginea unui câine cu o schimbare a antetului "Dog" pe "Gizmo", în momentul în care un alt client citit imaginea. Într-o astfel de situație, nu este clar ce fel de titlu, "câine" sau "gizmo" ar fi primit de al doilea client ..

Există, bineînțeles, unele obstacole asociate cu segmentarea datelor, dar segmentarea vă permite să alocați fiecare dintre problemele de la alții: în funcție de date, pe încărcare, în funcție de eșantioanele de utilizare etc. În blocurile gestionate. Poate ajuta la scalabilitate și manipulare, dar riscul este încă prezent. Există multe modalități de reducere a riscului și prelucrarea eșecurilor; Cu toate acestea, în interesul coinței, ele nu sunt acoperite în acest capitol. Dacă doriți mai multe informații despre acest subiect, ar trebui să vă uitați la postul de blog privind toleranța și monitorizarea erorilor.

1.3 Componente structurale ale accesului rapid și scalabil al datelor

După ce au luat în considerare unele principii de bază în dezvoltarea sistemelor distribuite, permiteți-ne să trecem acum la un moment mai complex - scalarea accesului la date.

Cele mai simple aplicații web, cum ar fi aplicațiile de stivă lampa, sunt similare cu imaginea.


Figura 1.5: Aplicații web simple

Cu o aplicare în creștere, există două dificultăți principale: scalarea accesului la serverul de aplicații și la baza de date. Într-un design bine scalabil al aplicațiilor, un server web sau un server de aplicații este de obicei minimizat și adesea întruchipează o arhitectură care nu prevede separarea resurselor comune. Acest lucru face nivelul serverului de aplicații de sistem pe orizontal scalabil. Ca urmare a utilizării unui astfel de design, munca grea va depune în jos stiva către serverul de baze de date și serviciile subsidiare; Este pe acest strat că problemele reale ale scalării și productivității vin în joc.

Restul acestui capitol este dedicat unor strategii și metode de îmbunătățire a productivității și asigură scalabilitatea unor astfel de tipuri de servicii prin furnizarea de acces rapid la date.


Figura 1.6: Aplicație web simplificată

Majoritatea sistemelor pot fi simplificate înainte de schema,
Care este un bun punct de plecare pentru a începe luarea în considerare. Dacă aveți o mulțime de date, se poate presupune că doriți să aveți același acces ușor și acces rapid, ca o cutie cu lollipopuri în sertarul de sus al biroului dvs. Deși această comparație este excesiv simplificată, aceasta indică două probleme complexe: scalabilitatea depozitului de date și accesul rapid la date.

Pentru a lua în considerare această secțiune, să presupunem că aveți o mulțime de date Terabytes (TB) și permiteți utilizatorilor să acceseze mici părți ale acestor date în orice ordine. (Cm. .)
O sarcină similară este de a determina locația fișierului imagine undeva pe serverul de fișiere din exemplul aplicației de găzduire a imaginilor.


Figura 1.7: Accesul la date specifice

Acest lucru este deosebit de dificil, deoarece încărcarea terabytelor de date în memorie poate fi foarte nevalidă și afectează direct numărul de operații de disc I / O. Viteza citirii de pe disc este de mai multe ori mai mică decât viteza de citire de la RAM - se poate spune că accesul la memorie cu același lucru ca și Chuck Norris, în timp ce accesează discul este mai lent decât coada de coadă din clinică. Această diferență de viteză este deosebit de tangibilă pentru seturile de date mari; În numerele uscate, accesul la memorie este de 6 ori mai rapid decât citirea de pe un disc pentru operațiile de citire succesive și de 100.000 de ori - pentru citirile în ordine aleatorie (vezi "Patologia datelor mari", http://queue.acm.org/detail . Cfm? Id \u003d 1563874).). În plus, chiar și cu identificatori unici, rezolvarea problemei de a găsi locația unei mici părți de date poate fi aceeași sarcină dificilă ca o încercare fără a căuta să scoată ultima bomboană cu o umplutură de ciocolată din cutie cu o sută de alte bomboane .

Din fericire, există numeroase abordări care pot fi aplicate pentru a simplifica, dintre care cele patru abordări cele mai importante sunt utilizarea cache-urilor, proxy-urilor și a balanțelor de încărcare. Restul acestei secțiuni discută modul în care fiecare dintre aceste concepte poate fi utilizat pentru a face accesul la date mult mai rapid.

Cache-uri

Caching-ul oferă beneficii din cauza caracteristicilor caracteristice a principiului de bază: datele recent solicitate sunt destul de susceptibile de a fi necesare din nou. Cazanile sunt utilizate aproape la fiecare nivel de calcul: hardware, sisteme de operare, browsere web, aplicații web și nu numai. Cache-ul este ca o memorie pe termen scurt: limitată de volum, dar mai rapidă decât sursa de date sursă și conținând elemente la care accesul recent primit. Kashi poate exista la toate nivelurile în arhitectură, dar adesea se află la cel mai apropiat nivel față de Frontland, unde sunt implementate pentru a returna rapid datele fără o încărcătură semnificativă de backend.

În ce mod cache poate fi folosit pentru a accelera accesul la date în exemplul nostru API? În acest caz, există mai multe locuri de plasare potrivită cache. Ca una dintre posibilele opțiuni de plasare, puteți selecta noduri la nivel de solicitare, după cum se arată în
.


Figura 1.8: Plasarea cache-ului pe nodul de nivel de interogare

Locația cache-ului direct pe nodul de nivel de interogare permite depozitarea locală a datelor de răspuns. De fiecare dată când va fi executată o cerere de serviciu, nodul va returna rapid datele locale, cache, dacă există. Dacă nu este în memoria cache, nodul de solicitare va solicita date de pe disc. Cache-ul de la un nod de solicitare ar putea fi, de asemenea, amplasat atât în \u200b\u200bmemorie (care este foarte rapid), cât și pe discul local al nodului (mai rapid decât încercarea de a apela la stocarea rețelei).


Figura 1.9: Sisteme de cache

Ce se întâmplă când distribuiți cache-ul pe o varietate de noduri? După cum vedeți, dacă nivelul interogării va include o multitudine de noduri, este probabil ca fiecare nod să fie, de asemenea, propria lor cache. Cu toate acestea, dacă încărcătura dvs. Balanter în ordine aleatorie distribuie cererile între noduri, aceeași interogare va trece la diferite noduri, crescând astfel apelurile nereușite la cache. În două moduri de a depăși acest obstacol sunt cache-urile globale și distribuite.

Numerar global

Semnificația cache-ului global este clară din titlu: toate nodurile folosesc un singur spațiu cache. În acest caz, se adaugă un server sau un depozit de fișiere de un fel, care este mai rapid decât stocarea inițială și, care va fi disponibilă pentru toate nodurile de nivel de solicitare. Fiecare dintre nodurile de solicitare solicită cache-ul în același mod ca și cum ar fi fost local. Acest tip de schemă de cache poate provoca unele dificultăți, deoarece singura cache este foarte ușor de supraîncărcare dacă numărul de clienți și cereri va crește. În același timp, o astfel de schemă este foarte eficientă la o anumită arhitectură (în special cu hardware-ul specializat, care face ca această cache globală să fie foarte rapidă sau care au un set de date fix, care ar trebui să fie cache).

Există două forme standard de cache-uri globale descrise în scheme. Situația este descrisă atunci când răspunsul cache nu este găsit în memoria cache, cache-ul însuși devine responsabil pentru obținerea părții lipsă a datelor din spațiul de stocare de bază. Responsabilitatea nodurilor de solicitare este ilustrată pentru a obține orice date care nu se găsesc în memoria cache.


Figura 1.10: cache globală, unde cache-ul este responsabil pentru extragerea


Figura 1.11: cache globală, în cazul în care nodurile de solicitare sunt responsabile pentru extragerea

Majoritatea aplicațiilor care îmbunătățesc cache-urile globale tind să utilizeze primul tip în care memoria cache gestionează substituția și datele de eșantionare pentru a preveni avalanșa cererilor pentru aceleași date de la clienți. Cu toate acestea, există câteva cazuri în care a doua implementare are mai mult sens. De exemplu, dacă memoria cache este utilizată pentru fișiere foarte mari, un procent scăzut de conversie reușită în memoria cache va duce la o supraîncărcare a cache-ului fără succes a cache-ului la cache; În această situație, contribuie la obținerea unui procent mare dintr-un set comun de date (sau set de date fierbinți) în memoria cache. Un alt exemplu este o arhitectură în care fișierele stocate în memoria cache sunt statice și nu trebuie șterse. (Acest lucru poate apărea datorită principalelor caracteristici operaționale cu privire la o astfel de întârziere a datelor - poate anumite părți ale datelor ar trebui să fie foarte rapide pentru seturi de date mari - când logica aplicației înțelege strategia de substituție sau punctele fierbinți este mai bună decât memoria cache.)

Numerar distribuit

Acești indici sunt adesea stocați în memorie sau undeva foarte locali în ceea ce privește solicitarea de intrare a clientului. Berkeley DB (BDB) și structurile de date de copac care sunt utilizate în mod obișnuit pentru stocarea datelor în listele comandate sunt ideale pentru accesul cu un index.

Adesea, există multe niveluri de indici care servesc ca o hartă prin mutarea dvs. de la o locație la alta etc., până când primiți acea parte a datelor de care aveți nevoie. (Cm. )


Figura 1.17: Indicii de nivel multi-nivel

Indicii pot fi, de asemenea, utilizați pentru a crea alte câteva prezentări ale acelorași date. Pentru seturile de date mari, aceasta este o modalitate excelentă de a identifica diferite filtre și specii fără a recurge la crearea multor copii suplimentare ale datelor.

De exemplu, să presupunem că sistemul de găzduire a imaginilor menționată mai sus plasează imagini de pagini de carte, iar serviciul oferă cereri de client pentru text în aceste imagini, căutând toate conținutul de text pe un anumit subiect, precum și motoarele de căutare vă permit să căutați după HTML Conţinut. În acest caz, toate aceste imagini de carte utilizează o mulțime de servere pentru stocarea fișierelor și găsirea unei pagini pentru a reprezenta utilizatorul poate fi destul de complicată. Indiciile inverse inverse pentru cererea cuvintelor arbitrare și seturi de cuvinte ar trebui să fie ușor accesibile; Apoi, există o sarcină de a se deplasa la pagina exactă și de a loc în această carte și de a prelua imaginea corectă pentru rezultatele căutării. Astfel, în acest caz, indicele inversat ar fi afișat pe locație (cum ar fi cartea B) și apoi B poate conține un index cu toate cuvintele, locațiile și numărul de apariții din fiecare parte.

Indexul inversat, care poate afișa index1 în circuitul de mai sus, va arăta așa ceva: fiecare cuvânt sau set de cuvinte servesc ca un indice pentru acele cărți care le conțin.

Indicele intermediar va arăta, dar va conține doar cuvinte, locație și informații pentru cartea B. Aceasta care conține mai multe niveluri arhitectură permite fiecăruia dintre indici să ocupe mai puțin spațiu decât dacă toate aceste informații au fost stocate într-un indice inversat mare.

Și acesta este punctul cheie al sistemelor la scară largă, deoarece chiar fiind comprimat, acești indici pot fi destul de mari și costisitoare pentru depozitare. Să presupunem că avem o mulțime de cărți din întreaga lume în acest sistem - 100.000.000 (vezi înregistrarea unui blog "în interiorul cărților Google") - și că fiecare carte constă doar din 10 pagini (pentru a simplifica calculele) cu 250 de cuvinte pe o singură pagină : Acest total ne oferă 250 de miliarde de cuvinte. Dacă acceptăm numărul mediu de caractere în cuvânt timp de 5 ani și fiecare simbol codifică 8 biți (sau 1 octet, chiar dacă unele caractere ocupă de fapt 2 octeți), în timp ce petrec 5 octeți la cuvânt, apoi indicele care conține fiecare cuvânt O singură dată va necesita o capacitate de stocare mai mare de 1 Terabyte. Astfel, vedeți că indicii în care alte informații, cum ar fi seturi de cuvinte, locația datelor și cantitatea de utilizare, pot crește foarte repede în volume.

Crearea unor astfel de indici intermediari și prezentarea datelor prin porțiuni mai mici fac problema "datelor mari" mai ușoară în soluție. Datele pot fi distribuite pe mai multe servere și, în același timp, să fie accesibile rapid. Indicii sunt piatra de temelie a căutării de informații și a bazei pentru motoarele de căutare moderne de astăzi. Bineînțeles, această secțiune se referă numai la subiectul indexării, iar multe studii au fost efectuate cu privire la modul de a face indicii mai puțin, mai rapid, conținând mai multe informații (de exemplu, relevanță) și actualizate fără probleme. (Există unele probleme cu gestionarea condițiilor concurente, precum și cu numărul de actualizări necesare pentru a adăuga date noi sau modificări ale datelor existente, în special atunci când relevanța sau evaluarea) sunt implicate.

Este foarte important să găsiți rapid și ușor datele dvs., iar indexurile sunt instrumentul cel mai simplu și mai eficient pentru a atinge acest obiectiv.

Bilanțurile se încarcă

În cele din urmă, o altă parte critică a oricărui sistem distribuit este o echilibrare a sarcinii. Balanțarea încărcării este partea principală a oricărei arhitecturi, deoarece rolul acestora este de a distribui sarcina între nodurile responsabile pentru cererile de întreținere. Acest lucru permite ca nodurile multiple să servească transparent aceeași funcție în sistem. (Vezi.) Scopul lor principal este de a gestiona mai multe conexiuni simultane și de a direcționa aceste conexiuni la unul dintre nodurile solicitate, permițând sistemului la scară, adăugând pur și simplu noduri pentru a servi mai multe interogări.


Figura 1.18: Load Balanger

Există mulți algoritmi diferiți pentru servirea cererilor, inclusiv selectarea unui nod aleator, algoritm ciclic sau chiar selecția unui nod bazat pe anumite criterii, cum ar fi utilizarea unui procesor central sau a RAM. Balanțarea încărcării poate fi implementată ca hardware sau software. Printre echilibrarea încărcăturii pe software-ul open source, Haproxy a primit cea mai răspândită cea mai răspândită.

În sistemul distribuit, balanțele de încărcare sunt adesea situate pe "marginea frontală" a sistemului, astfel încât toate cererile primite să treacă direct prin ele. Este foarte probabil ca într-un sistem complex distribuit, cererea va trebui să treacă prin mai multe balansare, după cum se arată în
.


Figura 1.19: Echilibrarea multiplă a sarcinii

Ca un proxy, unele echilibrare de încărcare poate trimite, de asemenea, cereri în moduri diferite, în funcție de tipul de solicitare. Ele sunt, de asemenea, cunoscute ca proxy-uri reversibile (inverse).

Gestionarea datelor specifice pentru o anumită sesiune de utilizator este una dintre problemele atunci când utilizați balanțele de încărcare. Pe site-ul web al comerțului electronic, atunci când aveți un singur client, este foarte ușor să permiteți utilizatorilor să pună lucrurile în coșul lor și să-și mențină conținutul între vizite (acest lucru este important, deoarece probabilitatea vânzării de bunuri crește semnificativ dacă este pe utilizator Reveniți la site, produsul este încă amplasat în coșul său). Cu toate acestea, dacă utilizatorul este direcționat către un nod pentru prima sesiune, iar apoi la un alt nod în timpul următoarei sale vizite, pot exista inconsecvențe, deoarece noul nod nu poate avea date cu privire la conținutul coșului acestui utilizator. (Nu vă supărați dacă plasați pachetul de băuturi de munte în coșul dvs. și când îl veți întoarce, acesta nu va fi acolo?) Una dintre soluțiile poate fi de a face sesiuni "lipicioase", astfel încât utilizatorul să fie întotdeauna îndreptate spre același nod. Cu toate acestea, utilizarea anumitor funcții de fiabilitate, cum ar fi falsificarea automată, va fi semnificativ dificilă. În acest caz, coșul utilizatorului va avea întotdeauna conținut, dar dacă nodul lor lipicios devine inaccesibil, va fi necesară o abordare specială, iar ipoteza despre conținutul coșului nu va fi mai corectă (deși este în valoare de sperând că această ipoteză nu va fi integrată în anexă). Desigur, această problemă poate fi rezolvată folosind alte strategii și instrumente descrise în acest capitol, cum ar fi serviciile și multe altele (ca cache-uri de browser, cookie-uri și adrese URL de rescriere).

Dacă sistemul are doar câteva noduri, atunci astfel de tehnici precum caruselul DNS sunt cel mai probabil mai practice decât încărcarea echilibrării care pot fi costisitoare și pot crește complexitatea sistemului prin adăugarea unui nivel inutil. Desigur, în sisteme mari, există toate tipurile de diverși algoritmi pentru planificarea și nivelarea încărcăturii, inclusiv simple, cum ar fi o alegere aleatorie, fie un algoritm de carusel și mecanisme mai complexe care iau în considerare performanța modelului de utilizare a sistemului. Toți acești algoritmi permit distribuirea traficului și a cererilor și pot furniza instrumente de fiabilitate utile, cum ar fi falsificarea automată sau îndepărtarea automată a unui nod deteriorat (de exemplu, atunci când se oprește să răspundă la cereri). Cu toate acestea, aceste funcții extinse pot face diagnosticarea problemelor cu voluminoase. De exemplu, în situații de încărcare ridicată, echilibrarea încărcăturii va șterge nodurile care pot funcționa încet sau depășește timpul de așteptare (datorită interogărilor de crackle), care va agrava numai situația pentru alte noduri. În aceste cazuri, controlul extins este important deoarece, chiar dacă se pare că traficul complet al sistemului și sarcina sunt reduse (deoarece nodurile servesc mai puține interogări) - nodurile individuale pot fi încărcate la limită.

Balanțarea încărcăturii este o modalitate ușoară de a crește puterea sistemului. Ca și celelalte metode descrise în acest articol, aceasta joacă un rol semnificativ în arhitectura sistemului distribuit. Balanțarea încărcăturii asigură, de asemenea, funcția critică de a verifica performanța nodurilor. Dacă, în funcție de rezultatele acestui test, nodul nu răspunde sau supraîncărcat, acesta poate fi eliminat din piscina de procesare a cererilor și, datorită redundanței sistemului dvs., sarcina va fi redistribuită între nodurile de lucru rămase.

Cozi

Până în prezent, am considerat multe modalități de a citi rapid datele. În același timp, o altă parte importantă a scalării la nivel de date este de a gestiona eficient înregistrările. Atunci când sistemele sunt simple și sunt caracterizate de încărcături minime de procesare și de baze de date mici, înregistrarea poate fi prezisă rapid. Cu toate acestea, în sisteme mai complexe, acest proces poate ocupa o perioadă nedeterminată pentru o lungă perioadă de timp. Deci, de exemplu, datele ar trebui să fie înregistrate în mai multe locuri pe diferite servere sau indexuri sau sistemul poate fi pur și simplu sub sarcină mare. În cazurile în care înregistrarea sau chiar orice sarcină ocupă mult timp, realizarea productivității și disponibilității necesită încorporarea asincronismului în sistem. O modalitate comună de a face acest lucru este de a organiza coada de interogare.


Figura 1.20: Cerere sincronă

Imaginați-vă un sistem în care fiecare client solicită o sarcină de serviciu la distanță. Fiecare dintre acești clienți trimite solicitarea la serverul care îndeplinește sarcini cât mai repede posibil și își returnează rezultatele către clienții relevanți. În sistemele mici, în cazul în care un server (sau serviciu logic) poate servi clienților primiți cât de repede ajung, astfel de situații ar trebui să funcționeze în mod normal. Cu toate acestea, atunci când serverul primește mai multe cereri decât acesta poate procesa, fiecare client este obligat să se aștepte la finalizarea prelucrării cererilor de la alți clienți înainte de a răspunde la cererea proprie. Acesta este un exemplu de solicitare sincronă prezentată.

Acest tip de comportament sincron poate agrava semnificativ capacitatea clientului; De fapt, în picioare, clientul este forțat să se aștepte până când primește un răspuns la cerere. Adăugând servere suplimentare pentru a face față sarcinii sistemului, de fapt, nu rezolvă problema; Chiar și cu nivelarea eficientă a sarcinii, este extrem de dificil să se asigure o distribuție uniformă și echitabilă a sarcinii necesare pentru a maximiza productivitatea clientului. Mai mult, dacă serverul pentru procesarea acestei solicitări nu este disponibil (sau a eșuat), atunci clientul conectat la acesta va opri și de lucru. O soluție eficientă la această problemă necesită abstractizare între cererea clientului și munca reală efectuată pentru serviciul său.


Figura 1.21: Utilizarea cozi pentru a gestiona cererile

Cozi de intrare. Mecanismul de operare al coadă-ului este foarte simplu: sarcina vine, este în coada de așteptare, iar apoi "muncitorii" iau următoarea sarcină de îndată ce par să o proceseze. (Vezi.) Aceste sarcini pot fi intrări simple la baza de date sau ceva complex ca generarea imaginii de previzualizare pentru document. Atunci când clientul trimite cereri de obiective într-o coadă, nu mai este necesar să se aștepte rezultatele executării; În schimb, solicitările au nevoie doar de confirmarea faptului de primire corespunzătoare. Această confirmare poate servi mai târziu ca o referire la rezultate atunci când clientul le pretinde.

Cozile permit clienților să lucreze asincronă, oferind abstractizarea strategică a unui client și un răspuns la acesta. Pe de altă parte, în sistemul sincron, nu există nicio diferențiere între interogare și răspuns și, prin urmare, nu poate fi gestionată separat. În sistemul asincron, clientul stabilește sarcina, serviciul corespunde mesajului, confirmând că sarcina a fost obținută și apoi clientul poate verifica periodic starea sarcinii, solicitând doar rezultatul imediat ce sa încheiat. În timp ce clientul efectuează o cerere asincronă, este liber să se angajeze în alte lucrări și chiar să efectueze cereri asincrone pentru alte servicii. Acesta din urmă este un exemplu în ceea ce privește modul în care locurile și mesajele funcționează în sistemele distribuite.

Cozile oferă, de asemenea, o anumită protecție împotriva suspensiilor și eșecurilor serviciilor. De exemplu, este destul de simplu să creați o coadă foarte stabilă, care să poată repeta cererile de serviciu care au încetat să lucreze din cauza eșecurilor serverului pe termen scurt. Este mai preferabil să utilizați coada de așteptare pentru a implementa garanțiile de asigurare a calității decât pentru a arăta clienților întreruperi temporare în serviciu, necesitând o manipulare complexă și adesea contradictorie a erorilor pe partea clientului.

1.4. Concluzie

Dezvoltarea sistemelor eficiente cu acces rapid la o cantitate mare de date este un subiect foarte interesant și există încă un număr semnificativ de instrumente bune care vă permit să adaptați tot felul de noi aplicații. Acest capitol a atins doar câteva exemple, dar în realitate există mult mai multe dintre ele - și crearea de noi inovații în acest domeniu va continua doar.

Această lucrare se extinde sub licența Creative Commons Attribution 3.0. Vedeți detalii în