Blocchi di costruzione di applicazioni distribuite. Approssimazione zero

Blocchi di costruzione di applicazioni distribuite. Approssimazione zero

U mondu ùn si ferma. U prugressu crea novi sfidi tecnologichi. In cunfurmità cù i bisogni cambianti, l'architettura di i sistemi di l'infurmazione deve evoluzione. Oghje parlemu di l'architettura guidata da l'avvenimenti, a cuncurrenza, a cuncurrenza, l'asincronia, è cumu pudete campà in pace cù tuttu questu in Erlang.

Introduzione

Sicondu a dimensione di u sistema cuncepitu è ​​i requisiti per questu, noi, i sviluppatori, sceglite u metudu di scambià infurmazioni in u sistema. In a maiò parte di i casi, per urganizà l'interazzione di servizii, una opzione di travagliu pò esse un schema cù un broker, per esempiu, basatu in RabbitMQ o kafka. Ma qualchì volta u flussu di l'avvenimenti, SLA è u nivellu di cuntrollu di u sistema sò tali chì a messageria pronta ùn hè micca adattatu per noi. Di sicuru, pudete complicà u sistema un pocu per piglià a rispunsabilità di a capa di trasportu è a furmazione di cluster, per esempiu utilizendu ZeroMQ o nanomsg. Ma s'ellu u sistema hà abbastanza throughput è capacità di un cluster Erlang standard, allora u prublema di introduzione di una entità addiziale richiede un studiu detallatu è una justificazione ecunomica.

U tema di l'applicazioni distribuite reattive hè abbastanza largu. Per mantene in u formatu di l'articulu, u sughjettu di a discussione d'oghje seranu solu ambienti omogenei custruiti nantu à Erlang/Elixir. L'ecosistema Erlang / OTP permette di implementà una architettura reattiva cù u minimu sforzu. Ma in ogni casu, avemu bisognu di una strata di messageria.

Basi teorica

U disignu principia cù a definizione di scopi è limitazioni. U scopu principale ùn hè micca in l'area di u sviluppu per u scopu di u sviluppu. Avemu bisognu di ottene una strumenta sicura è scalabile nantu à a basa di quale pudemu creà è, più impurtante, sviluppà applicazioni muderne di diversi livelli: partendu da l'applicazioni di un servitore unicu chì serve un picculu publicu, chì poi si pò sviluppà in clusters sin'à 50. -60 nodes, chì finiscinu cù federazioni di cluster. Cusì, u scopu principale hè di maximizà i prufitti riducendu u costu di sviluppu è a pruprietà di u sistema finali.

Fighjemu 4 esigenze principali per u sistema finali:

  • Сorientatu à l'avvenimentu.
    U sistema hè sempre prontu à passà per u flussu di l'avvenimenti è eseguisce l'azzioni necessarii;
  • Мscalabilità.
    I blocchi individuali ponu esse scalati verticalmente è orizontali. Tuttu u sistema deve esse capace di crescita horizontale infinita;
  • Оtolleranza à i difetti.
    Tutti i livelli è tutti i servizii anu da pudè ritruvà automaticamente da i fallimenti;
  • Гtempu di risposta garantitu.
    U tempu hè preziosu è l'utilizatori ùn deve micca aspittà troppu longu.

Ricurdativi di u vechju conte di fata nantu à "U picculu mutore chì puderia"? Per chì u sistema cuncepitu possa esce da u stadiu prototipu è esse progressiva, a so fundazione deve risponde à i requisiti minimi. SMOG.

Un puntu più hè aghjuntu à a messageria cum'è strumentu d'infrastruttura è a basa per tutti i servizii: facilità d'utilizazione per i programatori.

Orientatu à l'avvenimentu

Per chì una applicazione cresce da un servitore unicu à un cluster, a so architettura deve sustene l'accoppiamentu loose. U mudellu asincronu risponde à stu requisitu. In questu, u mittente è u destinatariu cura di a carica di l'infurmazioni di u missaghju è ùn si preoccupa micca di a trasmissione è di u routing in u sistema.

Scalabilità

A scalabilità è l'efficienza di u sistema sò vicinu à l'altru. I cumpunenti di l'applicazione devenu esse capaci di utilizà tutte e risorse dispunibili. Quantu più efficaci pudemu usà a capacità è più ottimali i nostri metudi di trasfurmazioni, menu soldi spendemu in l'equipaggiu.

Dentru una sola macchina, Erlang crea un ambiente altamente cumpetitivu. L'equilibriu trà a cuncurrenza è u parallelismu pò esse stabilitu scegliendu u nùmeru di filamenti di u sistema operatore dispunibuli per l'Erlang VM è u numeru di pianificatori chì utilizanu sti fili.
I prucessi Erlang ùn sparte micca u statu è operanu in modu senza bloccu. Questu furnisce una latenza relativamente bassa è un rendimentu più altu ch'è l'applicazioni tradiziunali basate in u bloccu. U pianificatore di Erlang assicura l'allocazione ghjusta di CPU è IO, è l'absenza di bloccu permette à l'applicazione di risponde ancu durante carichi di punta o fallimenti.

À u nivellu di cluster, u prublema cù a dispusizione esiste ancu. Hè impurtante chì tutti i machini in u cluster sò carchi uniformi è chì a reta ùn hè micca sopracargata. Imaginemu una situazione: u trafficu di l'utilizatori sbarca nantu à i balancers entranti (haproxy, nginx, etc.), distribuiscenu e dumande di trasfurmazioni u più uniforme pussibule trà u settore di backends dispunibili. In l'infrastruttura di l'applicazione, u serviziu chì implementa l'interfaccia necessaria hè solu l'ultima milla è duverà dumandà una quantità di altri servizii per risponde à a dumanda iniziale. E dumande interne necessitanu ancu di routing è equilibriu.
Per gestisce in modu efficace i flussi di dati, a messageria deve furnisce à i sviluppatori una interfaccia per gestisce u routing è l'equilibriu di carica. Grazie à questu, i sviluppatori puderanu, utilizendu mudelli di microserviziu (aggregatore, proxy, catena, ramu, etc.), per risolve i prublemi standard è quelli chì raramente si presentanu.

Da un puntu di vista cummerciale, a scalabilità hè unu di l'arnesi di gestione di risichi. A cosa principal hè di suddisfà e richieste di i clienti utilizendu in modu ottimale l'equipaggiu:

  • Quandu u putere di l'equipaggiu aumenta in u risultatu di u prugressu. Ùn serà micca inattivu per via di u software imperfettu. Erlang scala verticalmente bè è serà sempre capaci di utilizà tutti i core di CPU è a memoria dispunibule;
  • In ambienti di nuvola, pudemu gestisce a quantità di l'equipaggiu secondu a carica attuale o prevista è guarantisci SLA.

tolleranza à i difetti

Cunsideremu dui assiomi: "I fallimenti sò inaccettabili" è "Ci sarà sempre fallimenti". Per un affari, u fallimentu di u software significa a perdita di soldi, è ciò chì hè peghju, a perdita di reputazione. Equilibratu trà e pussibuli pèrdite è u costu di sviluppà un software tolerante à i difetti, un cumprumissu pò esse spessu truvatu.

À u cortu termini, una architettura chì incorpora a tolleranza à i difetti risparmia soldi in l'acquistu di soluzioni di clustering off-the-shelf. Sò caru è anu ancu bug.
À longu andà, una architettura tolerante à i difetti si paga assai volte in tutte e tappe di sviluppu.
A messageria in a basa di codice permette di travaglià in dettagliu l'interazzione di cumpunenti in u sistema in u stadiu di sviluppu. Questu simplifica u compitu di risponde è di gestisce i fallimenti, postu chì tutti i cumpunenti critichi manighjanu i fallimenti, è u sistema risultatu sapi cumu per vultà automaticamente à a normale dopu un fallimentu da u disignu.

Rispunsibilità

Indipendentemente da i fallimenti, l'applicazione deve risponde à e dumande è risponde à u SLA. A realità hè chì a ghjente ùn vole micca aspittà, cusì l'imprese devenu adattà in cunseguenza. Sempre più applicazioni sò previste per esse altamente responsive.
L'applicazioni responsive operanu quasi in tempu reale. Erlang VM opera in modu soft in tempu reale. Per certi spazii, cum'è u cummerciu di scorte, a medicina è u cuntrollu di l'equipaggiu industriale, u modu duru in tempu reale hè impurtante.
I sistemi responsive migliurà UX è benefiziu l'affari.

Riassuntu preliminariu

Quandu hà pianificatu stu articulu, vulia sparte a mo sperienza di creà un broker di messageria è di custruisce sistemi cumplessi basati nantu à questu. Ma a parte teorica è motivazionale hè stata abbastanza larga.
In a seconda parte di l'articulu, parraraghju di e sfumature di implementazione di punti di scambiu, mudelli di messageria è a so applicazione.
In a terza parte, avemu da cunsiderà prublemi generali di urganizazione di servizii, routing è equilibriu. Parlemu di u latu praticu di a scalabilità è a tolleranza di difetti di i sistemi.

Fine di a prima parte.

Photo @lucabravo.

Source: www.habr.com

Add a comment