Architettura di Software è Disegnu di Sistemi: A Big Picture è Guida di Risorse

Salutami i culleghi.

Oghje offremu per a vostra considerazione una traduzzione di un articulu di Tugberk Ugurlu, chì s'impegna à delineà in un voluminu relativamente chjucu i principii di cuncepimentu di sistemi di software muderni. Eccu ciò chì l'autore dice di ellu stessu in riassuntu:

Architettura di Software è Disegnu di Sistemi: A Big Picture è Guida di Risorse
Siccomu hè assulutamente impussibile di copre in un articulu di un habro un tema cusì colossale cum'è mudelli architectural + mudelli di design da 2019, ricumandemu micca solu u testu di u sgiò Uruglu stessu, ma ancu i numerosi ligami chì hà amablemente inclusi in questu. Se ti piace, pubblicheremu un testu più altamente specializatu nantu à u disignu di sistemi distribuiti.

Architettura di Software è Disegnu di Sistemi: A Big Picture è Guida di Risorse

Istantanea Isaac Smith da Unsplash

Se ùn avete mai avutu affruntà tali sfide cum'è u disignu di un sistema di software da zero, allora quandu si cumincianu un tali travagliu, qualchì volta ùn hè ancu chjaru da induve principià. Credu chì prima avete bisognu di disegnà e fruntiere in modu chì avete una idea più o menu sicura di ciò chì esattamente avete da cuncepisce, è poi arricciate e maniche è travaglià in questi limiti. Comu puntu di partenza, pudete piglià un pruduttu o serviziu (idealmente quellu chì ti piace veramente) è capisce cumu implementà. Puderete esse maravigliatu di quantu simplice stu pruduttu pare, è quantu cumplessità cuntene veramente. Ùn vi scurdate: simplice - di solitu cumplessu, è hè bè.

Pensu chì u megliu cunsigliu chì possu dà à quellu chì principia à cuncepisce un sistema hè questu: ùn fate micca supposizioni! Da u principiu, avete bisognu di specificà i fatti cunnisciuti nantu à stu sistema è l'aspettattivi assuciati cù questu. Eccu alcuni boni dumande da dumandà per aiutà à inizià cù u vostru disignu:

  • Chì ghjè u prublema chì avemu da risolve ?
  • Chì ghjè u piccu numeru di utilizatori chì interagisce cù u nostru sistema?
  • Chì mudelli di scrittura è lettura di dati useremu?
  • Chì sò i casi di fallimentu previsti, cumu avemu da trattà?
  • Chì sò l'aspettattivi per a cunsistenza è a dispunibilità di u sistema?
  • Avete da piglià in contu ogni esigenza ligata à a verificazione esterna è a regulazione quandu u travagliu?
  • Chì tipi di dati sensittivi andemu à almacenà?

Quessi sò solu uni pochi di dumande chì sò stati utili à mè è à e squadre in quale aghju participatu annantu à l'anni di attività prufessiunale. Se sapete e risposte à queste dumande (è qualsiasi altre chì sò pertinenti à u cuntestu in u quale duvete travaglià), pudete sfondate gradualmente in i dettagli tecnichi di u prublema.

Stabbilisce u livellu iniziale

Chì vogliu dì per "baseline" quì? In realtà, in i nostri tempi, a maiò parte di i prublemi in l'industria di u software "pò esse" risolti cù metudi è tecnulugia esistenti. In cunsiquenza, navigendu in stu paisaghju, avete un certu principiu di capu quandu si face à prublemi chì qualchissia altru avia da risolve prima di voi. Ùn vi scurdate chì i prugrammi sò scritti per risolve i prublemi di l'imprese è di l'utilizatori, cusì ci sforzemu di risolve u prublema in u modu più simplice è simplice (da u puntu di vista di l'utilizatori). Perchè hè questu impurtante di ricurdà? Forsi in u vostru sistema di coordenate ti piace à circà suluzioni uniche per tutti i prublemi, perchè pensate, "chì tipu di programatore sò se aghju seguitu mudelli in ogni locu"? In fattu, l'arti quì hè di piglià decisioni nantu à induve è chì fà. Di sicuru, ognunu di noi hà da trattà cù prublemi unichi da u tempu à u tempu, ognunu di i quali hè una vera sfida. In ogni casu, se u nostru livellu iniziale hè chjaramente definitu, allora sapemu ciò chì spende a nostra energia: circà l'opzioni pronti per risolve u prublema chì ci hè davanti, o studià più è acquistà una cunniscenza più profonda.

Pensu ch'e aghju pussutu cunvince chì se un specialista capisce cun fiducia ciò chì hè u cumpunente architettonicu di certi sistemi di software maravigliosu, allora sta cunniscenza serà indispensabile per maestru di l'arti di un architettu è sviluppà una basa solida in questu campu.

Va bè, allora da induve principià? U Donna Martina Ci hè un repository in GitHub chjamatu system-design-primer, da quale pudete amparà cumu cuncepisce sistemi à grande scala, è ancu preparà per entrevista nantu à questu tema. U repositoriu hà una sezione cù esempi architetture veri, induve, in particulare, hè cunsideratu cumu si avvicinanu à u disignu di i so sistemi alcune cumpagnie famoseper esempiu, Twitter, Uber, etc.

In ogni casu, prima di passà à stu materiale, fighjemu un ochju più vicinu à e sfide architettoniche più impurtanti chì facemu in a pratica. Questu hè impurtante perchè avete a specificà MULTI aspetti di un prublema stubborn è multi-faceted, è poi risolve in u quadru di e regule in vigore in un sistema determinatu. Jackson Gabbard, un anzianu impiegatu di Facebook, hà scrittu Video di 50 minuti nantu à l'entrevista di cuncepimentu di sistemi, induve hà sparte a so propria sperienza di screening centinaie di candidati. Mentre chì u video si focalizeghja assai nantu à u grande disignu di u sistema è i criterii di successu chì sò impurtanti quandu cercanu un candidatu per una tale pusizioni, ancu serve cum'è una risorsa cumpleta nantu à ciò chì e cose sò più impurtanti quandu cuncepisce sistemi. Suggeriu ancu riassuntu stu video.

Custruisce cunniscenze nantu à l'almacenamiento è a ricuperazione di dati

Di genere, a vostra decisione nantu à cumu guardate è ricuperate i vostri dati à longu andà hà un impattu criticu nantu à u rendiment di u sistema. Dunque, prima deve capisce e caratteristiche di scrittura è lettura previste di u vostru sistema. Allora avete bisognu di pudè valutà questi indicatori è fà scelte basate nantu à e valutazioni fatte. Tuttavia, pudete affruntà in modu efficace stu travagliu solu s'ellu capisce i mudelli di almacenamiento di dati esistenti. In principiu, questu implica una cunniscenza solida ligata à selezzione di basa di dati.

E basa di dati ponu esse pensate cum'è strutture di dati chì sò estremamente scalabili è durable. Dunque, a cunniscenza di e strutture di dati deve esse assai utile per voi quandu sceglite una basa di dati particulari. Per esempiu, Redis hè un servitore di struttura di dati chì sustene diversi tipi di valori. Permette di travaglià cù strutture di dati cum'è listi è setti, è leghje dati cù algoritmi ben cunnisciuti, per esempiu, LRU, urganizà tali travagliu in un stilu durable è assai accessibile.

Architettura di Software è Disegnu di Sistemi: A Big Picture è Guida di Risorse

Istantanea Samuel Zeller da Unsplash

Una volta avete una capiscitura abbastanza di i diversi mudelli di almacenamiento di dati, andate à studià a cunsistenza è a dispunibilità di dati. Prima di tuttu, avete bisognu di capiscenu Teorema CAP almenu in termini ginirali, è poi pulizziari sta cunniscenza pigghiannu un ochju più vicinu à mudelli stabilitu cuerenza и accessibilità. In questu modu, diventerete più sapè in questa zona è capisce chì i dati di lettura è scrittura sò in realtà dui prublemi assai diffirenti, ognunu cù e so sfide uniche. Armatu cù uni pochi di mudelli di coerenza è dispunibilità, pudete aumentà significativamente u rendiment di u sistema mentre assicurendu un flussu di dati fluidu à e vostre applicazioni.

Infine, cuncludendu a cunversazione nantu à i prublemi di almacenamiento di dati, duvemu ancu mintuvà a caching. Duverebbe eseguisce simultaneamente nantu à u cliente è u servitore? Chì dati seranu in u vostru cache? E perchè ? Cumu urganizà l'invalidazione di a cache? Serà fattu regularmente, à certi intervalli ? Sì sì, quantu spessu? Vi cunsigliu di cumincià à studià questi temi cun sezione dopu u primu di cuncepimentu di u sistema sopra citatu.

Modelli di cumunicazione

I sistemi sò custituiti da diversi cumpunenti; Quessi puderianu esse prucessi diffirenti in esecuzione in u stessu nodu fisicu, o diverse macchine chì funzionanu in diverse parti di a vostra reta. Certi di sti risorse in a vostra reta pò esse privati, ma altri anu da esse publicu è aperti à i cunsumatori chì accedenu da fora.

Hè necessariu di assicurà a cumunicazione di sti risorse cù l'altri, è ancu u scambiu d'infurmazioni trà u sistema sanu è u mondu esternu. In u cuntestu di u disignu di i sistemi, quì di novu avemu affruntatu un inseme di sfide novi è unichi. Videmu cumu ponu esse utili flussi di compiti asincroni, è chì pUna varietà di mudelli di cumunicazione sò dispunibili.

Architettura di Software è Disegnu di Sistemi: A Big Picture è Guida di Risorse

Istantanea Tony Stoddard da Unsplash

Quandu urganizeghja a cumunicazione cù u mondu esternu, hè sempre assai impurtante sicurità, a prestazione di quale deve ancu esse presa in seriu è attivamente perseguita.

Distribuzione di cunnessione

Ùn sò micca sicuru chì mette stu tema in una sezione separata parerà ghjustificata à tutti. Tuttavia, vi prisintà stu cuncettu in detail quì, è crede chì u materiale in questa sezione hè più precisamente descritta da u terminu "distribuzione di cunnessione".

I sistemi sò furmati da cunnetta bè parechji cumpunenti, è a so cumunicazione cù l'altri hè spessu urganizata nantu à a basa di protokolli stabiliti, per esempiu, TCP è UDP. Tuttavia, sti protokolli cum'è tali sò spessu insufficenti per risponde à tutti i bisogni di i sistemi muderni, chì sò spessu operati sottu una carica alta è sò ancu assai dipindenti di i bisogni di l'utilizatori. Hè spessu necessariu di truvà modi per distribuisce e cunnessione per affruntà tali carichi elevati in u sistema.

Sta distribuzione hè basatu annantu à u cunnisciuta sistema di nomi di duminiu (DNS). Un tali sistema permette trasfurmazioni di nomi di duminiu cum'è round robin ponderatu è metudi basati in latenza per aiutà à distribuisce a carica.

Equilibratu di carica hè fundamentalmente impurtante, è quasi ogni grande sistema Internet chì avemu trattatu oghje hè situatu daretu à unu o più load balancers. I equilibratori di carica aiutanu à distribuisce e richieste di i clienti in parechje istanze dispunibili. I equilibratori di carica venenu in hardware è software, in ogni modu, in pratica, più spessu avete da trattà cun software, per esempiu. HAProxy и ELB. Proxy inverse conceptualmente ancu assai simili à i balancers di carica, ancu s'ellu ci hè un intervallu trà u primu è u sicondu diffirenzi distinti. Queste differenze deve esse cunsiderate quandu u disignu di un sistema basatu nantu à i vostri bisogni.

Duvete ancu sapè rete di distribuzione di cuntenutu (CDN). Un CDN hè una reta globale distribuita di servitori proxy chì furnisce infurmazioni da i nodi chì sò geograficamente situati più vicinu à un utilizatore specificu. I CDN sò preferibili à utilizà si travagliate cù schedarii statici scritti in JavaScript, CSS è HTML. Inoltre, i servizii di nuvola chì furnisce i gestori di trafficu sò cumuni oghje, per esempiu, Azure Traffic Manager, dendu una distribuzione globale è una latenza ridutta quandu travagliate cun cuntenutu dinamicu. Tuttavia, tali servizii sò generalmente utili in i casi induve avete da travaglià cù servizii web senza statu.

Parlemu di a logica cummerciale. Strutturazione di logica cummerciale, flussi di attività è cumpunenti

Dunque, avemu riisciutu à discutiri diversi aspetti infrastrutturali di u sistema. Hè assai prubabile, l'utilizatore ùn pensa mancu à tutti questi elementi di u vostru sistema è, francamente, ùn li importa micca. L'utilizatore hè interessatu in ciò chì hè cum'è per interagisce cù u vostru sistema, ciò chì pò esse ottinutu fendu questu, è ancu cumu u sistema eseguisce cumandamenti di l'utilizatori, ciò chì è cumu si faci cù i dati di l'utilizatori.

Cum'è u titulu di questu articulu suggerisce, andava à parlà di l'architettura di u software è u disignu di u sistema. Per quessa, ùn aghju micca pensatu à copre i mudelli di cuncepimentu di software chì descrizanu cumu si creanu i cumpunenti di u software. In ogni casu, più ci pensu, più mi pare chì a linea trà i mudelli di cuncepimentu di software è i mudelli architettonici hè assai sfocata, è i dui cuncetti sò strettamente ligati. Pighemu per esempiu iscrizzione di l'avvenimentu (event sourcing). Una volta aduttatu stu mudellu architetturale, affettarà quasi ogni aspettu di u vostru sistema: almacenamentu longu di dati, u livellu di cunsistenza aduttatu in u vostru sistema, a forma di i cumpunenti in questu, etc., etc. Per quessa, aghju decisu di mintuvà qualchi mudelli architecturali chì liganu direttamente à a logica cummerciale. Ancu s'è questu articulu hà da esse limitatu à una lista simplice, vi incuraghjemu à cunnosce cun ellu è pensate à l'idee assuciate cù questi mudelli. Eccuti quì:

Approcci di cullaburazione

Hè assai improbabile chì vi truverete in un prughjettu cum'è u participante chì hè solu rispunsevule per u prucessu di cuncepimentu di u sistema. À u cuntrariu, probabilmente avete da interagisce cù i culleghi chì travaglianu sia in u vostru compitu sia fora. In questu casu, pudete avè bisognu di evaluà e suluzioni tecnulugiche selezziunate cù i culleghi, identificà i bisogni di l'affari è capisce u megliu per parallelizà i travaglii.

Architettura di Software è Disegnu di Sistemi: A Big Picture è Guida di Risorse

Istantanea Kaleidico da Unsplash

U primu passu hè di sviluppà una cunniscenza precisa è cumunu di ciò chì l'ughjettu di l'affari chì cercate di ghjunghje è di quali parti in muvimentu avete da trattà. Tecniche di mudellu di gruppu, in particulare avvenimenti di tempesta (event storming) aiutanu à accelerà significativamente stu prucessu è aumentà e vostre chance di successu. Stu travagliu pò esse fattu prima o dopu à u vostru contu limiti di i vostri servizii, è poi approfondisce quandu u pruduttu matura. Basatu nantu à u livellu di coherenza chì serà ottenuta quì, pudete ancu formulà lingua cumuna per u cuntestu limitatu in quale travagliate. Quandu avete bisognu di parlà di l'architettura di u vostru sistema, pudete truvà utile mudellu C4, prupostu Simon Brown, soprattuttu quandu avete bisognu di capisce quantu duverete entre in i dettagli di u prublema, visualizendu e cose chì vulete cumunicà.

Ci hè prubabilmente una altra tecnulugia matura nantu à questu tema chì ùn hè micca menu utile ch'è u Design Driven di Domain. In ogni modu, avemu torna in qualchì manera à capisce u sughjettu, cusì cunniscenze è sperienza in u campu Disegnu guidatu da u duminiu duveria esse utile per voi.

Source: www.habr.com

Add a comment