Softwarearchitektur a Systemdesign: De Big Picture a Ressource Guide

Moien Kollegen.

Haut proposéiere mir Iech eng Iwwersetzung vun engem Artikel vum Tugberk Ugurlu, deen sech verpflicht huet, an engem relativ klenge Volumen d'Prinzipien vum Design vun modernen Softwaresystemer ze skizzéieren. Hei ass wat den Auteur iwwer sech selwer seet am Resumé:

Softwarearchitektur a Systemdesign: De Big Picture a Ressource Guide
Well et absolut onméiglech ass an engem Habro Artikel esou e kolossalen Thema wéi architektonesch Musteren + Designmuster ab 2019 ze decken, empfehle mir net nëmmen den Text vum Här Uruglu selwer, awer och déi vill Linken, déi hien frëndlech dran abegraff huet. Wann Dir et gär hutt, publizéieren mir e méi héich spezialiséierten Text iwwer den Design vu verdeelte Systemer.

Softwarearchitektur a Systemdesign: De Big Picture a Ressource Guide

Schnappschëss Isaac Schmitz vun Unsplash

Wann Dir nach ni esou Erausfuerderunge konfrontéiert hutt wéi e Softwaresystem vun Null ze designen, dann wann Dir esou Aarbecht ufänkt, heiansdo ass et net emol kloer wou ufänken. Ech gleewen datt Dir fir d'éischt Grenze musst zéien fir datt Dir eng méi oder manner zouversiichtlech Iddi hutt wat Dir genee wäert designen, an dann Är Ärmelen oprollen a bannent dëse Grenzen schaffen. Als Ausgangspunkt kënnt Dir e Produkt oder Service huelen (am Idealfall een deen Dir wierklech gär hutt) an erausfannen wéi Dir et ëmsetzt. Dir kënnt iwwerrascht sinn wéi einfach dëst Produkt ausgesäit, a wéi vill Komplexitéit et tatsächlech enthält. Vergiess net: einfach - normalerweis komplex, an dat ass an der Rei.

Ech mengen de beschte Rot, deen ech jidderengem ginn, deen ufänkt e System ze designen ass dëst: maacht keng Viraussetzungen! Vun Ufank un, musst Dir d'Fakten, déi iwwer dëse System bekannt sinn, an d'Erwaardungen, déi mat him verbonne sinn, spezifizéieren. Hei sinn e puer gutt Froen ze stellen fir Iech ze hëllefen mat Ärem Design unzefänken:

  • Wat ass de Problem dee mir probéieren ze léisen?
  • Wat ass d'Héichzuel vun de Benotzer déi mat eisem System interagéieren?
  • Wéi eng Mustere fir Daten ze schreiwen an ze liesen wäerte mir benotzen?
  • Wat sinn déi erwaart Echec Fäll, wéi wäerte mir se handhaben?
  • Wat sinn d'Erwaardunge fir Systemkonsistenz an Disponibilitéit?
  • Muss Dir all Ufuerderunge berücksichtegen, déi mat externer Verifizéierung a Regulatioun verbonne sinn, wann Dir schafft?
  • Wéi eng Aarte vu sensiblen Donnéeë wäerte mir späicheren?

Dëst sinn nëmmen e puer Froen, déi souwuel fir mech wéi och fir d'Equipen, un deenen ech iwwer d'Jore vun der professioneller Aktivitéit deelgeholl hunn, nëtzlech waren. Wann Dir d'Äntwerten op dës Froen kennt (an all aner, déi relevant sinn fir de Kontext an deem Dir schaffe musst), da kënnt Dir lues a lues an d'technesch Detailer vum Problem verdéiwen.

Setzt den initialen Niveau

Wat mengen ech hei mat "Baseline"? Eigentlech, an eiser Zäit, kënnen déi meescht Probleemer an der Softwareindustrie mat existéierende Methoden an Technologien geléist ginn. Deementspriechend, andeems Dir dës Landschaft navigéiert, kritt Dir e gewësse Virsprong wann Dir mat Probleemer konfrontéiert sidd, déi een aneren virun Iech huet misse léisen. Vergiesst net datt Programmer geschriwwe gi fir Geschäfts- a Benotzerproblemer ze léisen, dofir beméie mir eis de Problem op déi einfachst an einfachst (aus der Siicht vum Benotzer) Manéier ze léisen. Firwat ass dëst wichteg ze erënneren? Vläicht sicht Dir gär an Ärem Koordinatesystem no eenzegaartege Léisunge fir all Probleemer, well Dir denkt, "wat fir Programméierer sinn ech wann ech iwwerall Mustere verfollegen"? Tatsächlech, d'Konscht hei ass Entscheedungen iwwer wou a wat ze maachen. Natierlech muss jidderee vun eis vun Zäit zu Zäit mat eenzegaartege Probleemer këmmeren, déi all eng richteg Erausfuerderung ass. Wéi och ëmmer, wann eisen initialen Niveau kloer definéiert ass, da wësse mer op wat mir eis Energie verbréngen: no fäerdege Méiglechkeete sichen fir de Problem ze léisen, deen eis virgestallt gëtt, oder et weider studéieren an e méi déif Verständnis kréien.

Ech mengen ech konnt Iech iwwerzeegen datt wann e Spezialist zouversiichtlech versteet wat den architektonesche Bestanddeel vun e puer wonnerbar Software Systemer ass, da wäert dëst Wëssen onverzichtbar sinn fir d'Konscht vun engem Architekt ze beherrschen an eng zolidd Basis an dësem Beräich z'entwéckelen.

Okay, also wou ufänken? U Donna Martina Et gëtt e Repository op GitHub genannt system-design-primer, aus deem Dir léiere kënnt wéi Dir grouss Systemer entwéckelt, wéi och fir Interviewen iwwer dëst Thema virbereeden. De Repository huet eng Sektioun mat Beispiller richteg Architekturen, wou virun allem betruecht gëtt, wéi se un den Design vun hire Systemer ugoen e puer bekannte FirmenzB Twitter, Uber, etc.

Wéi och ëmmer, ier mer op dëst Material weidergoen, kucke mer déi wichtegst architektonesch Erausfuerderunge méi no un, déi mir an der Praxis stellen. Dëst ass wichteg, well Dir musst VILL Aspekter vun engem haartnäckege a villsäitege Problem spezifizéieren, an et dann am Kader vun de Reglementer, déi an engem bestëmmte System a Kraaft sinn, léisen. Jackson Gabbard, e fréiere Facebook-Mataarbechter, schreift 50-Minute Video iwwer Systemdesign Interviewen, wou hien seng eegen Erfahrung vun Duerchmusterung honnerte vun Bewerberinnen gedeelt. Wärend de Video sech staark op grousse Systemdesign konzentréiert an d'Erfollegskriterien déi wichteg sinn wann Dir no engem Kandidat fir sou eng Positioun sicht, wäert et nach ëmmer als ëmfaassend Ressource déngen iwwer wat Saachen am wichtegsten sinn wann Dir Systemer designt. Ech proposéieren och summary dësem Video.

Baut Wëssen iwwer d'Späicheren an d'Erhuelung vun Daten

Normalerweis huet Är Entscheedung iwwer wéi Dir Är Donnéeën op laang Dauer späichert an zréckhëlt e kriteschen Impakt op d'Systemleistung. Dofir musst Dir als éischt d'erwaart Schreif- a Liescharakteristike vun Ärem System verstoen. Da musst Dir fäeg sinn dës Indikatoren ze evaluéieren a Choixen ze maachen op Basis vun de Bewäertunge gemaach. Wéi och ëmmer, Dir kënnt effektiv mat dëser Aarbecht nëmmen eens wann Dir existent Datelagerungsmuster versteet. Prinzipiell implizéiert dat zolidd Wëssen am Zesummenhang mat Datebank Auswiel.

Datebanke kënnen als Datestrukture geduecht ginn, déi extrem skalierbar an haltbar sinn. Dofir sollt d'Wëssen iwwer Datestrukture ganz nëtzlech sinn fir Iech wann Dir eng bestëmmte Datebank wielt. Zum Beispill, Redis ass en Datestrukturserver deen verschidden Aarte vu Wäerter ënnerstëtzt. Et erlaabt Iech mat Datenstrukturen wéi Lëschten a Sets ze schaffen, an Daten mat bekannten Algorithmen ze liesen, zum Beispill, LRU, organiséieren esou Aarbecht an engem haltbaren an héich zougänglechen Stil.

Softwarearchitektur a Systemdesign: De Big Picture a Ressource Guide

Schnappschëss Samuel Zeller vun Unsplash

Wann Dir e genuch Verständnis vun de verschiddenen Datelagerungsmuster hutt, fuert weider fir d'Datekonsistenz an d'Disponibilitéit ze studéieren. Als éischt musst Dir verstoen CAP-Theorem op d'mannst am allgemenge Begrëffer, an dann poléieren dëst Wëssen duerch eng méi genee Bléck op etabléiert Mustere Konsistenz и Accessibilitéit. Op dës Manéier wäert Dir e Verständnis vum Feld entwéckelen a verstoen datt d'Liesen a Schreiwen vun Daten tatsächlech zwee ganz verschidde Probleemer sinn, jidderee mat sengen eegenen Erausfuerderungen. Bewaffnet mat e puer Konsistenz- an Disponibilitéitsmuster, kënnt Dir d'Systemleistung wesentlech erhéijen wärend Dir e glaten Datefloss op Är Uwendungen garantéiert.

Schlussendlech, fir d'Gespréich iwwer Datelagerungsprobleemer ofzeschléissen, sollte mir och Caching ernimmen. Sollt et gläichzäiteg um Client a Server lafen? Wéi eng Donnéeë wäerten an Ärem Cache sinn? A firwat? Wéi organiséiert Dir Cache Invalidatioun? Gëtt et regelméisseg gemaach, a bestëmmten Intervalle? Wann jo, wéi dacks? Ech recommandéieren ufänken dës Themen ze studéieren mat nächst Rubrik déi genannte System Design Primer.

Kommunikatiounsmuster

Systemer besteet aus verschiddene Komponenten; dës kënne verschidde Prozesser sinn, déi am selwechte kierperlechen Node lafen, oder verschidde Maschinnen, déi op verschidden Deeler vun Ärem Netz lafen. E puer vun dëse Ressourcen an Ärem Netz kënne privat sinn, awer anerer sollten ëffentlech sinn an op fir Konsumenten, déi se vu baussen zougräifen.

Et ass néideg fir d'Kommunikatioun vun dëse Ressourcen mateneen ze garantéieren, souwéi den Austausch vun Informatioun tëscht dem ganze System an der Äussewelt. Am Kontext vum Systemdesign si mir hei erëm mat enger Rei vun neien an eenzegaartegen Erausfuerderunge konfrontéiert. Loosst eis kucken wéi se nëtzlech kënne sinn asynchrone Aufgab fléissta wat pEng Vielfalt vu Kommunikatiounsmuster sinn verfügbar.

Softwarearchitektur a Systemdesign: De Big Picture a Ressource Guide

Schnappschëss Tony Stoddard vun Unsplash

Wann Dir Kommunikatioun mat der Äussewelt organiséiert, ass et ëmmer ganz wichteg Sécherheet, déi zur Verfügung gestallt muss och eescht geholl an aktiv verfollegt ginn.

Verbindung Verdeelung

Ech sinn net sécher datt dëst Thema an eng separat Sektioun gesat gëtt fir jiddereen gerechtfäerdegt schéngen. Trotzdem wäert ech dëst Konzept hei am Detail presentéieren, an ech gleewen datt d'Material an dëser Rubrik am meeschte präzis mam Begrëff "Verbindungsverdeelung" beschriwwe gëtt.

Systemer gi geformt duerch richteg Verbindung vu ville Komponenten, an hir Kommunikatioun mateneen ass oft op der Basis vun etabléierte Protokoller organiséiert, zum Beispill TCP an UDP. Wéi och ëmmer, dës Protokoller als solch sinn dacks net genuch fir all d'Bedierfnesser vun de modernen Systemer z'erreechen, déi dacks ënner héijer Belaaschtung bedriwwe ginn an och héich ofhängeg vun de Benotzerbedürfnisser sinn. Et ass oft néideg Weeër ze fannen fir Verbindungen ze verdeelen fir mat esou héije Lasten op de System ze këmmeren.

Dës Verdeelung baséiert op de bekannte Domain Numm System (DNS). Sou e System erlaabt Domain Numm Transformatiounen wéi gewiichtte Round Robin a latency-baséiert Methoden fir ze hëllefen d'Laascht ze verdeelen.

Last Equiliber ass grondsätzlech wichteg, a quasi all groussen Internet System, mat deem mir haut beschäftegen, läit hannert engem oder méi Lastbalancer. Load Balancer hëllefen Client Ufroen iwwer verschidde verfügbare Fäll ze verdeelen. Load Balancers kommen souwuel a Hardware wéi Software, awer an der Praxis musst Dir méi dacks mat Software ze këmmeren, zum Beispill HAProxy и ELB. Reverse Proxyen konzeptuell och ganz ähnlech zu Lastbalancer, obwuel et eng Rei tëscht dem éischten an der zweeter ass ënnerscheeden Differenzen. Dës Differenzen musse berücksichtegt ginn wann Dir e System designt baséiert op Äre Besoinen.

Dir sollt och wëssen iwwer Inhalt Liwwerung Netzwierker (CDN). En CDN ass e globalt verdeelt Netzwierk vu Proxy-Server dat Informatioun liwwert vun deenen Noden déi geographesch méi no bei engem spezifesche Benotzer lokaliséiert sinn. CDNs si léiwer ze benotzen wann Dir mat statesche Dateien schafft geschriwwen a JavaScript, CSS an HTML. Zousätzlech sinn Cloud-Servicer, déi Trafficmanager ubidden, haut heefeg, z.B. Azure Traffic Manager, gëtt Iech global Verdeelung a reduzéiert latency wann Dir mat dynamesche Inhalter schafft. Wéi och ëmmer, sou Servicer sinn normalerweis nëtzlech a Fäll wou Dir mat stateless Webservicer muss schaffen.

Loosst eis iwwer d'Geschäftslogik schwätzen. Strukturéiere vun der Geschäftslogik, Taskflow a Komponenten

Also hu mir et fäerdeg bruecht verschidde infrastrukturell Aspekter vum System ze diskutéieren. Wahrscheinlech denkt de Benotzer net emol un all dës Elementer vun Ärem System an, éierlech, ass et guer net egal. De Benotzer interesséiert sech fir wéi et ass mat Ärem System ze interagéieren, wat kann duerch dëst erreecht ginn, an och wéi de System Benotzerbefehle ausféiert, wat a wéi et mat Benotzerdaten mécht.

Wéi den Titel vun dësem Artikel et seet, wollt ech iwwer Softwarearchitektur a Systemdesign schwätzen. Deementspriechend hunn ech net geplangt Software Design Musteren ze decken déi beschreiwen wéi Software Komponente erstallt ginn. Wéi och ëmmer, wat ech méi doriwwer denken, dest méi schéngt et mir datt d'Linn tëscht Software Design Musteren an architektonesche Mustere ganz verschwonn ass, an déi zwee Konzepter sinn enk verbonnen. Loosst eis zum Beispill huelen Event Aschreiwung (Event sourcing). Wann Dir dëst architektonescht Muster adoptéiert, wäert et bal all Aspekt vun Ärem System beaflossen: laangfristeg Späichere vun Daten, den Niveau vun der Konsistenz, déi an Ärem System ugeholl gëtt, d'Form vun de Komponenten dran, asw., etc. Dofir hunn ech beschloss e puer architektonesch Musteren ze ernimmen déi direkt mat der Geschäftslogik bezéien. Och wann dësen Artikel sech op eng einfach Lëscht muss limitéieren, encouragéieren ech Iech domat kennen ze léieren an iwwer d'Iddien ze denken, déi mat dëse Mustere verbonne sinn. Hei bass du:

Zesummenaarbecht Approche

Et ass extrem onwahrscheinlech datt Dir Iech op engem Projet fannt als de Participant deen eleng verantwortlech ass fir de Systemdesignprozess. Am Géigendeel, Dir musst héchstwahrscheinlech mat Kollegen interagéieren, déi souwuel bannent wéi ausserhalb vun Ärer Aufgab schaffen. An dësem Fall musst Dir eventuell déi gewielte Technologieléisungen mat Kollegen evaluéieren, Geschäftsbedürfnisser z'identifizéieren a verstoen wéi Dir am Beschten Aufgaben paralleliséiere kënnt.

Softwarearchitektur a Systemdesign: De Big Picture a Ressource Guide

Schnappschëss Kaleidico vun Unsplash

Den éischte Schrëtt ass en präzis a gemeinsame Verständnis z'entwéckelen wat d'Geschäftsziel déi Dir probéiert ze erreechen ass a mat wéi enge bewegt Deeler Dir musst këmmeren. Gruppemodelléierungstechniken, besonnesch gestiermt Evenementer (Event Stuerm) hëlleft dëse Prozess wesentlech ze beschleunegen an Är Chancen op Erfolleg ze erhéijen. Dës Aarbecht kann virum oder no Dir Kontur gemaach ginn Grenze vun Äre Servicer, an dann verdéift et wéi d'Produkt reift. Baséierend op den Niveau vun der Konsequenz, déi hei erreecht gëtt, kënnt Dir och formuléieren gemeinsam Sprooch fir de limitéierten Kontext an deem Dir schafft. Wann Dir braucht iwwer d'Architektur vun Ärem System ze schwätzen, kënnt Dir et nëtzlech fannen Modell C4, proposéiert Simon Braun, besonnesch wann Dir musst verstoen wéi vill Dir musst an d'Detailer vum Problem goen, d'Saachen visualiséieren déi Dir wëllt kommunizéieren.

Et gëtt méiglecherweis eng aner reife Technologie iwwer dëst Thema déi net manner nëtzlech ass wéi Domain Driven Design. Wéi och ëmmer, mir kommen iergendwéi zréck an d'Themaberäich ze verstoen, also Wëssen an Erfahrung am Beräich Domain-Undriff Design soll fir Iech nëtzlech ginn.

Source: will.com

Setzt e Commentaire