{"id":36518,"date":"2019-10-31T22:12:07","date_gmt":"2019-10-31T19:12:07","guid":{"rendered":"https:\/\/prohoster.info\/blog\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\/"},"modified":"2019-10-31T22:12:07","modified_gmt":"2019-10-31T19:12:07","slug":"programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","title":{"rendered":"Programvaruarkitektur och systemdesign: en \u00f6versikt och resursguide.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej kollegor.<\/p>\n<p>Idag presenterar vi en \u00f6vers\u00e4ttning av artikeln av Tugberk Ugurlu, som har tagit sig an att kortfattat beskriva principerna f\u00f6r design av moderna mjukvarusystem. S\u00e5 h\u00e4r beskriver f\u00f6rfattaren sig sj\u00e4lv i sin konklusion:<\/p>\n<p><img decoding=\"async\" alt=\"Programvaruarkitektur och systemdesign: en \u00f6versikt och resursguide.\" src=\"\/wp-content\/uploads\/2019\/07\/30de77ffad15171ce493ce5003c99360.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEftersom det \u00e4r n\u00e4stintill om\u00f6jligt att t\u00e4cka ett s\u00e5 kolossalt \u00e4mne som arkitekturm\u00f6nster + designm\u00f6nster enligt status 2019, rekommenderar vi inte bara texten av herr Ugurlu, utan ocks\u00e5 de m\u00e5nga l\u00e4nkar han v\u00e4nligt har inkluderat. Om ni gillar det, publicerar vi \u00e4ven en mer specialiserad text om design av distribuerade system.<\/p>\n<p><img decoding=\"async\" alt=\"Programvaruarkitektur och systemdesign: en \u00f6versikt och resursguide.\" src=\"\/wp-content\/uploads\/2019\/07\/4ccec9506aedb91bb601ebc32b6762be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<i>Bild <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/6EnTPvPPL6I?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Isaac Smith<\/a><\/noindex> fr\u00e5n Unsplash<\/i><\/p>\n<p>Om du aldrig har st\u00f6tt p\u00e5 utmaningar som att designa ett mjukvarusystem fr\u00e5n grunden, kan det ibland vara oklart var man ska b\u00f6rja n\u00e4r man p\u00e5b\u00f6rjar ett s\u00e5dant arbete. Jag anser att det f\u00f6rst och fr\u00e4mst \u00e4r n\u00f6dv\u00e4ndigt att definiera gr\u00e4nser f\u00f6r att mer eller mindre s\u00e4kert kunna f\u00f6rst\u00e5 vad du faktiskt ska designa, och sedan \u2013 att s\u00e4tta ig\u00e5ng och arbeta inom dessa gr\u00e4nser. En bra utg\u00e5ngspunkt kan vara att ta en produkt eller tj\u00e4nst (idealiskt n\u00e5got du verkligen gillar) och analysera dess implementation. Du kanske blir f\u00f6rv\u00e5nad \u00f6ver hur enkelt denna produkt verkar, och vilken enorm komplexitet som faktiskt d\u00f6ljer sig i den. Kom ih\u00e5g: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=k9Zbuuo51go\">det enkla \u00e4r oftast komplext<\/a><\/noindex>, och det \u00e4r okej.<\/p>\n<p>Jag tror att det b\u00e4sta r\u00e5det jag kan ge till dem som b\u00f6rjar designa ett system \u00e4r: g\u00f6r inga antaganden! Fr\u00e5n b\u00f6rjan m\u00e5ste du specificera de fakta som \u00e4r k\u00e4nda om detta system och de f\u00f6rv\u00e4ntningar som \u00e4r kopplade till det. H\u00e4r \u00e4r n\u00e5gra bra fr\u00e5gor vars svar kan hj\u00e4lpa dig att b\u00f6rja designa:<\/p>\n<ul>\n<li>Vad \u00e4r problemet vi f\u00f6rs\u00f6ker l\u00f6sa? <\/li>\n<li>Vad \u00e4r det maximala antalet anv\u00e4ndare som kommer att interagera med v\u00e5rt system?<\/li>\n<li>Vilka m\u00f6nster f\u00f6r skrivning och l\u00e4sning av data kommer vi att anv\u00e4nda? <\/li>\n<li>Vad \u00e4r de f\u00f6rv\u00e4ntade felen, hur planerar vi att hantera dem?<\/li>\n<li>Vilka f\u00f6rv\u00e4ntningar finns det betr\u00e4ffande systemets konsistens och tillg\u00e4nglighet? <\/li>\n<li>M\u00e5ste vi ta h\u00e4nsyn till n\u00e5gra krav relaterade till extern granskning och reglering?<\/li>\n<li>Vilka typer av konfidentiella data planerar vi att lagra?<\/li>\n<\/ul>\n<p>\nDetta \u00e4r bara n\u00e5gra fr\u00e5gor som har varit anv\u00e4ndbara b\u00e5de f\u00f6r mig och f\u00f6r de team jag har deltagit i under mina yrkes\u00e5r. Om du k\u00e4nner till svar p\u00e5 dessa fr\u00e5gor (och andra relevanta fr\u00e5gor i den kontext d\u00e4r du arbetar), kan du gradvis f\u00f6rdjupa dig i de tekniska detaljerna av uppgiften.<\/p>\n<p><b>Vi definierar en utg\u00e5ngsniv\u00e5<\/b><\/p>\n<p>Vad menar jag h\u00e4r med \"utg\u00e5ngsniv\u00e5\" (baseline)? I v\u00e5ra tider kan egentligen de flesta problem inom mjukvaruindustrin \"l\u00f6sas\" med hj\u00e4lp av redan existerande metoder och teknologier. D\u00e4rf\u00f6r, n\u00e4r du orienterar dig i detta landskap, f\u00e5r du ett visst f\u00f6rspr\u00e5ng n\u00e4r du st\u00e4lls inf\u00f6r problem som n\u00e5gon annan har l\u00f6st innan dig. Kom ih\u00e5g att program skrivs f\u00f6r att l\u00f6sa aff\u00e4rs- och anv\u00e4ndarproblem, d\u00e4rf\u00f6r str\u00e4var vi efter att l\u00f6sa uppgiften p\u00e5 det mest direkta och enkla s\u00e4ttet (sett ur anv\u00e4ndarens perspektiv). Varf\u00f6r \u00e4r det viktigt att komma ih\u00e5g? Kanske gillar du i ditt koordinatsystem att leta efter unika l\u00f6sningar p\u00e5 alla uppgifter, eftersom du anser att \" vilken programmerare \u00e4r jag om jag alltid f\u00f6ljer m\u00f6nster\"? Faktum \u00e4r att <b>konsten h\u00e4r ligger i att fatta beslut om var och vad som ska g\u00f6ras.<\/b>Sj\u00e4lvklart m\u00e5ste vi alla regelbundet m\u00f6ta unika problem, var och en av dem \u00e4r en verklig utmaning. Men om v\u00e5r utg\u00e5ngsniv\u00e5 \u00e4r tydligt definierad, vet vi vad vi ska l\u00e4gga energi p\u00e5: att s\u00f6ka f\u00e4rdiga l\u00f6sningar p\u00e5 den uppgift vi har f\u00e5tt, eller att studera den ytterligare f\u00f6r att skapa en djupare f\u00f6rst\u00e5else.<\/p>\n<p>Jag tror att jag har lyckats \u00f6vertyga dig om att om en specialist verkligen f\u00f6rst\u00e5r arkitekturkomponenten i vissa fantastiska mjukvarusystem, kommer dessa kunskaper att vara ov\u00e4rderliga f\u00f6r att bem\u00e4stra arkitektkonsten och bygga en solid grund inom detta omr\u00e5de.<\/p>\n<p>Bra, s\u00e5 var ska vi b\u00f6rja? Vid <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\">Donna Martin<\/a><\/noindex> har en repository p\u00e5 GitHub som heter <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\">system-design-primer<\/a><\/noindex>, d\u00e4r du kan l\u00e4ra dig att designa storskaliga system, samt f\u00f6rbereda dig f\u00f6r intervjuer inom detta \u00e4mne. I repositorn finns en sektion med exempel p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/tree\/1144b8ef4c441af73f7cbfd51f56b8eb62350a66#real-world-architectures\">verkliga arkitekturer.<\/a><\/noindex>, d\u00e4r det bland annat diskuteras hur man n\u00e4rmar sig designen av sina system <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/tree\/1144b8ef4c441af73f7cbfd51f56b8eb62350a66#company-architectures\">n\u00e5gra v\u00e4lk\u00e4nda f\u00f6retag<\/a><\/noindex>, till exempel Twitter, Uber, osv.<\/p>\n<p>Men innan vi g\u00e5r vidare till detta material, l\u00e5t oss ta en n\u00e4rmare titt p\u00e5 de viktigaste arkitektoniska utmaningar som praktiken st\u00e4lls inf\u00f6r. Detta \u00e4r viktigt eftersom det inneb\u00e4r att man m\u00e5ste specificera M\u00c5NGA aspekter av ett komplext och m\u00e5ngfacetterat problem, och sedan l\u00f6sa det inom de regelverk som g\u00e4ller f\u00f6r detta system. <noindex><a rel=\"nofollow\" href=\"https:\/\/jg.gg\/\">Jackson Gabbard<\/a><\/noindex>, tidigare anst\u00e4lld p\u00e5 Facebook, spelade in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=ZgdS0EUmn70\">ett 50-minutersvideo om intervjuer kring systemdesign<\/a><\/noindex>, d\u00e4r han delade med sig av sina egna erfarenheter fr\u00e5n att ha granskat hundratals kandidater. Trots att videon tydligt handlar om design av stora system och kriterier f\u00f6r framg\u00e5ng, som \u00e4r viktiga vid rekrytering f\u00f6r en s\u00e5dan tj\u00e4nst, kommer den \u00e4nd\u00e5 att fungera som en fullst\u00e4ndig resurs om vad som \u00e4r mest betydelsefullt vid systemdesign. Jag f\u00f6resl\u00e5r \u00e4ven <noindex><a rel=\"nofollow\" href=\"https:\/\/jg.gg\/2016\/07\/31\/architecture-and-systems-design-interview\/\">en sammanfattning<\/a><\/noindex> av denna video.<\/p>\n<p><b>Bygg upp kunskaper om datalagring och -h\u00e4mtning<\/b> <\/p>\n<p>I allm\u00e4nhet p\u00e5verkar ditt beslut om hur du l\u00e5ngsiktigt kommer att lagra och leverera dina data kritiskt systemets prestanda. D\u00e4rf\u00f6r m\u00e5ste du framf\u00f6r allt f\u00f6rst\u00e5 de f\u00f6rv\u00e4ntade egenskaperna f\u00f6r skrivning och l\u00e4sning av data i ditt system. Sedan m\u00e5ste du kunna utv\u00e4rdera dessa parametrar och g\u00f6ra val baserat p\u00e5 dessa uppskattningar. Men f\u00f6r att kunna hantera detta arbete effektivt m\u00e5ste du ha kunskap om befintliga datalagringsm\u00f6nster. I princip f\u00f6ruts\u00e4tter detta gedigna kunskaper relaterade till <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#database\">val av databas<\/a><\/noindex>. <\/p>\n<p>Databaser kan betraktas som datatyper med exceptionell skalbarhet och h\u00e5llbarhet. D\u00e4rf\u00f6r kommer kunskap om datatyper att vara mycket anv\u00e4ndbar f\u00f6r dig \u00e4ven vid valet av en viss databas. Till exempel <noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/topics\/data-types-intro\">Redis<\/a><\/noindex> \u2013 \u00e4r en databasserver som st\u00f6der olika typer av v\u00e4rden. Den m\u00f6jligg\u00f6r arbete med datatyper som listor och m\u00e4ngder, samt l\u00e4sning av data med hj\u00e4lp av v\u00e4lk\u00e4nda algoritmer, s\u00e5som <noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/topics\/lru-cache\">LRU<\/a><\/noindex>, organiserar detta arbete p\u00e5 ett h\u00e5llbart och h\u00f6g- tillg\u00e4ngligt s\u00e4tt. <\/p>\n<p><img decoding=\"async\" alt=\"Programvaruarkitektur och systemdesign: en \u00f6versikt och resursguide.\" src=\"\/wp-content\/uploads\/2019\/07\/8e30da0e8edd592609466f3c6c6f66d1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Bild <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/JuFcQxgCXwA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Samuel Zeller<\/a><\/noindex> fr\u00e5n Unsplash<\/i><\/p>\n<p>N\u00e4r du har tillr\u00e4ckligt med kunskap om olika datalagringsm\u00f6nster \u2013 g\u00e5 vidare till att studera konsistens och tillg\u00e4nglighet av data. F\u00f6rst och fr\u00e4mst beh\u00f6ver du f\u00f6rst\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#cap-theorem\">CAP-teoremet<\/a><\/noindex> \u00e5tminstone i grova drag, och sedan finslipa dessa kunskaper genom att noggrant unders\u00f6ka etablerade m\u00f6nster <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#consistency-patterns\">konsistens<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#availability-patterns\">tillg\u00e4nglighet<\/a><\/noindex>. P\u00e5 s\u00e5 s\u00e4tt kommer du att bredda din horisont inom detta omr\u00e5de och f\u00f6rst\u00e5 att l\u00e4sning och skrivning av data i sj\u00e4lva verket \u00e4r tv\u00e5 mycket olika problem, och var och en av dem har sina egna s\u00e4rskilda utmaningar. Bev\u00e4pnad med n\u00e5gra m\u00f6nster f\u00f6r att s\u00e4kerst\u00e4lla konsistens och tillg\u00e4nglighet kommer du att kunna avsev\u00e4rt \u00f6ka systemets prestanda, samtidigt som du garanterar en oavbruten tillg\u00e5ng till data f\u00f6r dina applikationer.<\/p>\n<p>Slutligen, n\u00e4r vi avslutar diskussionen om datalagringsfr\u00e5gor, b\u00f6r vi ocks\u00e5 n\u00e4mna cachelagring. Ska den utf\u00f6ras samtidigt p\u00e5 klienten och servern? Vilka data kommer att finnas i din cache? Och varf\u00f6r? Hur organiserar du cache-invalidering? Kommer det att utf\u00f6ras regelbundet, med vissa intervall? Om ja \u2013 hur ofta? Jag rekommenderar att du b\u00f6rjar behandlingen av dessa \u00e4mnen med <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#cache\">n\u00e4sta avsnitt<\/a><\/noindex> den ovan n\u00e4mnda handboken om systemdesign. <\/p>\n<p><b>Kommunikationsm\u00f6nster<\/b><\/p>\n<p>System best\u00e5r av olika komponenter; dessa kan vara b\u00e5de olika processer som arbetar inom samma fysiska enhet och olika maskiner som agerar i olika delar av ditt n\u00e4tverk. Vissa av dessa resurser inom ditt n\u00e4tverk kan vara privata, men andra m\u00e5ste vara offentliga och \u00f6ppna f\u00f6r konsumenter som kontaktar dem utifr\u00e5n.<\/p>\n<p>Det \u00e4r n\u00f6dv\u00e4ndigt att s\u00e4kerst\u00e4lla kommunikationen mellan dessa resurser och \u00e4ven informationsutbytet mellan hela systemet och omv\u00e4rlden. I sammanhanget av systemdesign st\u00e5r vi h\u00e4r \u00e5terigen inf\u00f6r en upps\u00e4ttning nya unika utmaningar. Vi unders\u00f6ker hur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#asynchronism\">asynkrona uppgiftsfl\u00f6den<\/a><\/noindex>, samt vilka olika<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#communication\">kommunikationsm\u00f6nster som finns tillg\u00e4ngliga<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Programvaruarkitektur och systemdesign: en \u00f6versikt och resursguide.\" src=\"\/wp-content\/uploads\/2019\/07\/e4dc98256b755acf931097d218f8b0dd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Bild <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/DgZxBnZeQo8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Tony Stoddard<\/a><\/noindex> fr\u00e5n Unsplash<\/i><\/p>\n<p>Vid organiseringen av kommunikationen med omv\u00e4rlden \u00e4r det alltid mycket viktigt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#security\">s\u00e4kerhet<\/a><\/noindex>, vilket ocks\u00e5 m\u00e5ste n\u00e4rmas med st\u00f6rsta allvar och aktivt sk\u00f6tas. <\/p>\n<p><b>F\u00f6rdelning av anslutningar<\/b><\/p>\n<p>Jag \u00e4r inte s\u00e4ker p\u00e5 att det \u00e4r motiverat att lyfta fram detta \u00e4mne i en separat sektion. \u00c4nd\u00e5 kommer jag h\u00e4r att utf\u00f6rligt redog\u00f6ra f\u00f6r denna koncept, och jag anser att materialet i denna sektion b\u00e4st beskriver termen \"anslutningsf\u00f6rdelning\" (connection distribution).<\/p>\n<p>System bildas genom att korrekt koppla samman m\u00e5nga komponenter, och deras kommunikation med varandra organiseras ofta p\u00e5 grundval av etablerade protokoll, som till exempel TCP och UDP. Men dessa protokoll \u00e4r ofta otillr\u00e4ckliga f\u00f6r att tillfredsst\u00e4lla alla behov hos moderna system som ofta k\u00f6rs under h\u00f6g belastning och som dessutom \u00e4r starkt beroende av anv\u00e4ndarnas behov. Det kan ofta vara n\u00f6dv\u00e4ndigt att hitta s\u00e4tt att f\u00f6rdela anslutningar f\u00f6r att hantera s\u00e5dana h\u00f6g belastningar i systemet.<\/p>\n<p>Grunden f\u00f6r s\u00e5dan f\u00f6rdelning ligger i det v\u00e4lk\u00e4nda <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DNS\">dom\u00e4nnamnssystemet<\/a><\/noindex> (DNS). Detta system m\u00f6jligg\u00f6r omvandling av dom\u00e4nnamn, till exempel viktscyklisk algoritm (weighted round robin) och metoder baserade p\u00e5 latens, som hj\u00e4lper till att f\u00f6rdela belastningen. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8\">Lastbalansering<\/a><\/noindex> \u00e4r grundl\u00e4ggande och praktiskt taget varje stort system p\u00e5 Internet, som vi har att g\u00f6ra med idag, ligger bakom en eller flera belastningsbalanserare. Belastningsbalanserare hj\u00e4lper till att f\u00f6rdela klientf\u00f6rfr\u00e5gningar mellan flera tillg\u00e4ngliga instanser. Belastningsbalanserare kan vara b\u00e5de h\u00e5rdvarubaserade och mjukvarubaserade, men i praktiken handlar vi oftast med mjukvarubaserade, som till exempel <noindex><a rel=\"nofollow\" href=\"http:\/\/www.haproxy.org\/\">HAProxy<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/elasticloadbalancing\/\">ELB<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer#reverse-proxy-web-server\">Omv\u00e4nda proxyservrar<\/a><\/noindex> \u00e4r i princip ocks\u00e5 mycket likartade belastningsbalanserare, \u00e4ven om det finns en rad <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer#load-balancer-vs-reverse-proxy\">tydliga skillnader<\/a><\/noindex>. Dessa skillnader m\u00e5ste beaktas n\u00e4r man designar ett system utifr\u00e5n dina behov.<\/p>\n<p>Det \u00e4r ocks\u00e5 viktigt att f\u00f6rst\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Content_Delivery_Network\">inneh\u00e5llsleveransn\u00e4tverk<\/a><\/noindex> (CDN). CDN \u00e4r ett globalt distribuerat n\u00e4tverk av proxyservrar som levererar information fr\u00e5n de noder som geografiskt ligger n\u00e4rmast en specifik anv\u00e4ndare. CDN-n\u00e4tverk \u00e4r att f\u00f6redra n\u00e4r du arbetar med statiska filer skrivna i JavaScript, CSS och HTML. Dessutom \u00e4r det idag vanligt med s\u00e5dana molntj\u00e4nster d\u00e4r trafikhanterare erbjuds, till exempel <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/traffic-manager\/traffic-manager-overview?ranMID=24542&amp;ranEAID=je6NUbpObpQ&amp;ranSiteID=je6NUbpObpQ-9vzliSFGJdQqkHaqdUFnUQ&amp;epi=je6NUbpObpQ-9vzliSFGJdQqkHaqdUFnUQ&amp;irgwc=1&amp;OCID=AID2000142_aff_7593_1243925&amp;tduid=(ir__ntizratyeckfrlt1kk0sohz30m2xjibo1hl6incq00)(7593)(1243925)(je6NUbpObpQ-9vzliSFGJdQqkHaqdUFnUQ)()&amp;irclickid=_ntizratyeckfrlt1kk0sohz30m2xjibo1hl6incq00\">Azure Traffic Manager<\/a><\/noindex>, som ger dig global distribution och minskad f\u00f6rdr\u00f6jning vid arbete med dynamiskt inneh\u00e5ll. Men s\u00e5dana tj\u00e4nster \u00e4r vanligtvis anv\u00e4ndbara i situationer d\u00e4r man arbetar med tillst\u00e5ndsl\u00f6sa webbservices. <\/p>\n<p><b>L\u00e5t oss prata om aff\u00e4rslogik. Strukturerande aff\u00e4rslogik, arbetsfl\u00f6den och komponenter<\/b><\/p>\n<p>S\u00e5, vi har hunnit diskutera olika infrastrukturaspekter av systemet. Anv\u00e4ndaren t\u00e4nker troligen inte ens p\u00e5 alla dessa element i ditt system och, \u00e4rligt talat, bryr de sig \u00f6verhuvudtaget inte om dem. Anv\u00e4ndarna \u00e4r intresserade av hur det \u00e4r att interagera med ditt system, vad man kan uppn\u00e5 genom att agera p\u00e5 detta s\u00e4tt, samt hur systemet utf\u00f6r anv\u00e4ndarens kommandon, vad som g\u00f6rs med anv\u00e4ndardata.<\/p>\n<p>Som titeln p\u00e5 denna artikel antyder, t\u00e4nkte jag ber\u00e4tta om mjukvaruarkitektur och systemdesign. D\u00e4rf\u00f6r planerade jag inte att g\u00e5 in p\u00e5 designm\u00f6nster f\u00f6r mjukvara, vilka beskriver hur programkomponenter skapas. Men ju mer jag funderar p\u00e5 det, desto mer k\u00e4nns det som att gr\u00e4nsen mellan designm\u00f6nster f\u00f6r mjukvara och arkitektoniska m\u00f6nster \u00e4r mycket otydlig, och dessa tv\u00e5 begrepp \u00e4r t\u00e4tt sammanl\u00e4nkade. L\u00e5t oss till exempel ta <noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\">event sourcing.<\/a><\/noindex> S\u00e5 snart du till\u00e4mpar detta arkitektoniska m\u00f6nster \u2013 kommer det att p\u00e5verka n\u00e4stan alla aspekter av ditt system: l\u00e5ngsiktig datalagring, niv\u00e5n av konsistens som accepteras i ditt system, konturerna av komponenterna i den, osv. D\u00e4rf\u00f6r har jag beslutat att n\u00e4mna n\u00e5gra arkitektoniska m\u00f6nster som direkt r\u00f6r aff\u00e4rslogik. \u00c4ven om denna artikel kanske tvingas begr\u00e4nsa sig till en enkel lista, rekommenderar jag att du bekantar dig med den och reflekterar \u00f6ver id\u00e9erna som r\u00f6r dessa m\u00f6nster. H\u00e4r \u00e4r den:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">SOLID-principerna<\/a><\/noindex> <\/li>\n<li>Begreppen <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u00c4mnesorienterad design<\/a><\/noindex>, s\u00e4rskilt <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/ingeniouslysimple\/aggregates-in-domain-driven-design-5aab3ef9901d\">aggregat<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/ingeniouslysimple\/command-vs-event-in-domain-driven-design-be6c45be52a9\">kommandon och h\u00e4ndelser<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/267125\/\">Hexagonal arkitektur<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/CQRS.html\">Separering av ansvar mellan kommandon och fr\u00e5gor (CQRS)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\">Event sourcing<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/doc.akka.io\/docs\/akka\/2.5\/guide\/actors-intro.html\">Akt\u00f6rsmodell<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/215605\/\">Designm\u00f6nster som MVC, MVVM och MVP<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<b>Kollaborativa metoder<\/b><\/p>\n<p>Det \u00e4r mycket osannolikt att du kommer att vara den enda personen ansvarig f\u00f6r designprocessen av systemet i projektet. Snarare kommer du troligen att beh\u00f6va samarbeta med kollegor som arbetar b\u00e5de inom och utanf\u00f6r din uppgift. I detta fall kan det bli n\u00f6dv\u00e4ndigt att utv\u00e4rdera de valda teknologiska l\u00f6sningarna tillsammans med kollegor, identifiera aff\u00e4rsbehov och f\u00f6rst\u00e5 hur man b\u00e4st kan parallellisera uppgifter.<\/p>\n<p><img decoding=\"async\" alt=\"Programvaruarkitektur och systemdesign: en \u00f6versikt och resursguide.\" src=\"\/wp-content\/uploads\/2019\/07\/ad39e031dcac8e69fafb637603043bfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Bild <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/3V8xo5Gbusk?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Kaleidico<\/a><\/noindex> fr\u00e5n Unsplash<\/i><\/p>\n<p>F\u00f6rst och fr\u00e4mst m\u00e5ste ett exakt och allm\u00e4nt accepterat begrepp utvecklas om vilket aff\u00e4rsm\u00e5l du f\u00f6rs\u00f6ker n\u00e5 och vilka r\u00f6rliga delar du kommer att beh\u00f6va hantera. Metoder f\u00f6r gruppmodellering, s\u00e4rskilt <noindex><a rel=\"nofollow\" href=\"https:\/\/techbeacon.com\/devops\/introduction-event-storming-easy-way-achieve-domain-driven-design\">event storming<\/a><\/noindex> hj\u00e4lper avsev\u00e4rt att snabba upp denna process och \u00f6kar dina chanser till framg\u00e5ng. Detta arbete kan utf\u00f6ras innan eller efter att du har skisserat <noindex><a rel=\"nofollow\" href=\"https:\/\/www.infoq.com\/news\/2015\/02\/service-boundaries-healthcare\/\">gr\u00e4nserna f\u00f6r dina tj\u00e4nster<\/a><\/noindex>, och sedan f\u00f6rdjupa det i takt med att produkten mognar. Baserat p\u00e5 den niv\u00e5 av enighet som uppn\u00e5s h\u00e4r kan du ocks\u00e5 formulera <noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/UbiquitousLanguage.html\">ett gemensamt spr\u00e5k<\/a><\/noindex> f\u00f6r det begr\u00e4nsade sammanhang d\u00e4r du arbetar. N\u00e4r det \u00e4r dags att prata om arkitekturen f\u00f6r ditt system kan en <noindex><a rel=\"nofollow\" href=\"https:\/\/c4model.com\/\">C4-modell<\/a><\/noindex>, f\u00f6reslagen av <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/simonbrown\">Simon Brown<\/a><\/noindex>, vara till stor hj\u00e4lp, s\u00e4rskilt n\u00e4r det handlar om att f\u00f6rst\u00e5 hur mycket du beh\u00f6ver g\u00e5 in p\u00e5 detaljer n\u00e4r du visualiserar de saker du vill kommunicera.<\/p>\n<p>Det finns f\u00f6rmodligen ocks\u00e5 annan mogen teknik inom detta \u00e4mne som \u00e4r lika anv\u00e4ndbar som dom\u00e4norienterad design. Men vi \u00e5terkommer hur som helst till f\u00f6rst\u00e5elsen av \u00e4mnesomr\u00e5det, s\u00e5 kunskap och erfarenhet inom <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">dom\u00e4norienterad design<\/a><\/noindex> kommer att vara till nytta f\u00f6r dig.<br \/>\n<br \/>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/461283\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0412\u043e\u0442 \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0441\u0435\u0431\u0435 \u0432 \u0441\u0443\u0445\u043e\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0435: \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432 \u0445\u0430\u0431\u0440\u043e\u0441\u0442\u0430\u0442\u044c\u0435 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u043c\u0443, \u043a\u0430\u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b + \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043d\u0430 2019 \u0433\u043e\u0434, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27331,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c: \u043e\u0431\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0438 \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:12:07+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:12:07+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Mjukvaruarkitektur och systemdesign: en \u00f6versikt och resursguide | ProHoster","description":"Hej kollegor. Idag presenteras en \u00f6vers\u00e4ttning av artikeln av Tugberk Ugurlu, som har tagit sig an att beskriva principerna f\u00f6r design av moderna mjukvaror i en relativt liten omfattning.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c: \u043e\u0431\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0438 \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c | ProHoster","og:description":"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:12:07+00:00","article:modified_time":"2019-10-31T19:12:07+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36518","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 03:40:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:43:33","updated":"2026-01-22 03:40:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/36518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=36518"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/36518\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/27331"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=36518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=36518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=36518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}