{"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\/pl\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","title":{"rendered":"Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny zarys i przewodnik po zasobach","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Witajcie, koledzy.<\/p>\n<p>Dzi\u015b przedk\u0142adamy t\u0142umaczenie artyku\u0142u Tugberka Ugurlu, kt\u00f3ry postanowi\u0142 w stosunkowo niewielkiej obj\u0119to\u015bci przedstawi\u0107 zasady projektowania nowoczesnych system\u00f3w programowych. Oto, co autor m\u00f3wi o sobie w zwi\u0119z\u0142ej formie:<\/p>\n<p><img decoding=\"async\" alt=\"Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny zarys i przewodnik po zasobach\" src=\"\/wp-content\/uploads\/2019\/07\/30de77ffad15171ce493ce5003c99360.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPoniewa\u017c stwierdzenie, \u017ce nie jest mo\u017cliwe uchwycenie w pojedynczym artykule tak ogromnego tematu, jak wzorce architektoniczne i projektowe na rok 2019, zdecydowanie prawdziwe, zalecamy nie tylko sam tekst pana Ugurlu, ale r\u00f3wnie\u017c liczne linki, kt\u00f3re on w nim uprzejmie zamie\u015bci\u0142. Je\u015bli si\u0119 spodoba, opublikujemy r\u00f3wnie\u017c bardziej specjalistyczny tekst dotycz\u0105cy projektowania system\u00f3w rozproszonych.<\/p>\n<p><img decoding=\"async\" alt=\"Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny zarys i przewodnik po zasobach\" 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>Zdj\u0119cie <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/6EnTPvPPL6I?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Izaka Smitha<\/a><\/noindex> ze strony Unsplash<\/i><\/p>\n<p>Je\u015bli nigdy nie mia\u0142e\u015b do czynienia z takimi wyzwaniami, jak projektowanie systemu oprogramowania od podstaw, to przyst\u0119puj\u0105c do takiej pracy, czasami trudno jest nawet okre\u015bli\u0107, od czego zacz\u0105\u0107. Uwa\u017cam, \u017ce najpierw nale\u017cy wyznaczy\u0107 granice, aby w miar\u0119 pewnie wiedzie\u0107, co dok\u0142adnie zamierzasz zaprojektowa\u0107, a nast\u0119pnie zabra\u0107 si\u0119 do pracy, nie wychodz\u0105c poza te granice. Jako punkt wyj\u015bcia mo\u017cesz wzi\u0105\u0107 jaki\u015b produkt lub us\u0142ug\u0119 (najlepiej tak\u0105, kt\u00f3r\u0105 bardzo lubisz) i przyjrze\u0107 si\u0119 jej realizacji. Mo\u017cesz si\u0119 zdziwi\u0107, jak prosty wydaje si\u0119 dany produkt, a jak ogromna z\u0142o\u017cono\u015b\u0107 si\u0119 za nim kryje. Nie zapominaj: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=k9Zbuuo51go\">to, co proste, zazwyczaj jest z\u0142o\u017cone<\/a><\/noindex>, i to jest w porz\u0105dku.<\/p>\n<p>My\u015bl\u0119, \u017ce najlepsza rada, jak\u0105 mog\u0119 da\u0107 tym, kt\u00f3rzy przyst\u0119puj\u0105 do projektowania systemu, brzmi: nie r\u00f3b \u017cadnych za\u0142o\u017ce\u0144! Od samego pocz\u0105tku nale\u017cy konkretyzowa\u0107 znane fakty dotycz\u0105ce tego systemu oraz zwi\u0105zane z nim oczekiwania. Oto kilka dobrych pyta\u0144, na kt\u00f3re odpowiedzi pomog\u0105 Ci rozpocz\u0105\u0107 projektowanie:<\/p>\n<ul>\n<li>Jakie jest zagadnienie, kt\u00f3re pr\u00f3bujemy rozwi\u0105za\u0107? <\/li>\n<li>Jakie jest szczytowe obci\u0105\u017cenie u\u017cytkownik\u00f3w, kt\u00f3rzy b\u0119d\u0105 korzysta\u0107 z naszego systemu?<\/li>\n<li>Jakie wzorce zapisu i odczytu danych b\u0119d\u0105 u nas stosowane? <\/li>\n<li>Jakie s\u0105 przewidywane przypadki awarii i jak zamierzamy sobie z nimi radzi\u0107?<\/li>\n<li>Jakie s\u0105 oczekiwania dotycz\u0105ce sp\u00f3jno\u015bci i dost\u0119pno\u015bci systemu? <\/li>\n<li>Czy musimy w pracy uwzgl\u0119dnia\u0107 jakie\u015b wymagania zwi\u0105zane z zewn\u0119trzn\u0105 kontrol\u0105 i regulacjami?<\/li>\n<li>Jakie rodzaje poufnych danych zamierzamy przechowywa\u0107?<\/li>\n<\/ul>\n<p>\nTo tylko kilka pyta\u0144, kt\u00f3re by\u0142y przydatne zar\u00f3wno dla mnie, jak i dla zespo\u0142\u00f3w, w kt\u00f3rych mia\u0142em okazj\u0119 uczestniczy\u0107 przez lata mojej kariery zawodowej. Je\u015bli znasz odpowiedzi na te pytania (i na wszelkie inne, istotne w kontek\u015bcie, w kt\u00f3rym pracujesz), to mo\u017cna stopniowo zag\u0142\u0119bia\u0107 si\u0119 w techniczne szczeg\u00f3\u0142y zadania.<\/p>\n<p><b>Ustalamy poziom bazowy<\/b><\/p>\n<p>Co rozumiem tutaj przez \u201epoziom bazowy\u201d (baseline)? W dzisiejszych czasach wi\u0119kszo\u015b\u0107 problem\u00f3w w bran\u017cy oprogramowania mo\u017cna rozwi\u0105za\u0107 przy u\u017cyciu istniej\u0105cych metod i technologii. Odpowiednio, orientuj\u0105c si\u0119 w tym krajobrazie, otrzymujesz pewn\u0105 przewag\u0119, staj\u0105c w obliczu zada\u0144, kt\u00f3re kto\u015b ju\u017c przed tob\u0105 musia\u0142 rozwi\u0105za\u0107. Nie zapominajmy, \u017ce programy s\u0105 pisane w celu rozwi\u0105zywania problem\u00f3w firm i u\u017cytkownik\u00f3w, dlatego staramy si\u0119 rozwi\u0105za\u0107 problem w jak najprostszy spos\u00f3b (z perspektywy u\u017cytkownika). Dlaczego to wa\u017cne? By\u0107 mo\u017ce w swoim systemie koordynat\u00f3w lubisz znajdowa\u0107 unikalne rozwi\u0105zania dla wszystkich zada\u0144, poniewa\u017c uwa\u017casz, \u017ce \u201ejakim jestem programist\u0105, je\u015bli wsz\u0119dzie stosuj\u0119 wzorce\u201d? Tak naprawd\u0119 <b>sztuka polega tutaj na podejmowaniu decyzji, gdzie i co robi\u0107<\/b>. Oczywi\u015bcie ka\u017cdy z nas czasami musi stawi\u0107 czo\u0142a unikalnym problemom, z kt\u00f3rych ka\u017cdy jest prawdziwym wyzwaniem. Je\u015bli jednak nasz poziom bazowy jest jasno okre\u015blony, wiemy, na co po\u015bwi\u0119ca\u0107 si\u0142y: na poszukiwanie gotowych rozwi\u0105za\u0144 dla zadania, kt\u00f3re przed nami stoi, lub na dalsze jego badanie i g\u0142\u0119bsze zrozumienie.<\/p>\n<p>My\u015bl\u0119, \u017ce uda\u0142o mi si\u0119 przekona\u0107 ci\u0119, \u017ce je\u015bli specjalista pewnie rozumie, jaka jest architektoniczna struktura niekt\u00f3rych niezwyk\u0142ych system\u00f3w oprogramowania, to ta wiedza b\u0119dzie nieoceniona w opanowaniu sztuki architekta oraz wypracowaniu solidnego fundamentu w tej dziedzinie.<\/p>\n<p>Dobrze, od czego wi\u0119c zacz\u0105\u0107? U <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\">Donny Martin<\/a><\/noindex> jest repozytorium na GitHubie o nazwie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\">system-design-primer<\/a><\/noindex>, z materia\u0142ami, dzi\u0119ki kt\u00f3rym mo\u017cesz nauczy\u0107 si\u0119 projektowania rozbudowanych system\u00f3w, a tak\u017ce przygotowa\u0107 si\u0119 do rozm\u00f3w rekrutacyjnych na ten temat. Repozytorium zawiera sekcj\u0119 z przyk\u0142adami <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/tree\/1144b8ef4c441af73f7cbfd51f56b8eb62350a66#real-world-architectures\">rzeczywistych architektur<\/a><\/noindex>, gdzie dok\u0142adnie om\u00f3wiono, jak podchodz\u0105 do projektowania swoich system\u00f3w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/tree\/1144b8ef4c441af73f7cbfd51f56b8eb62350a66#company-architectures\">niekt\u00f3re dobrze znane firmy<\/a><\/noindex>, na przyk\u0142ad Twitter, Uber itd.<\/p>\n<p>Jednak zanim przejdziemy do tego materia\u0142u, przyjrzyjmy si\u0119 dok\u0142adniej najwa\u017cniejszym wyzwaniom architektonicznym, z kt\u00f3rymi spotykaj\u0105 si\u0119 w praktyce. Ma to znaczenie, poniewa\u017c konieczne jest precyzowanie WIELU aspekt\u00f3w trudnego i wieloaspektowego problemu, a nast\u0119pnie jego rozwi\u0105zywanie w ramach regulacji obowi\u0105zuj\u0105cej w danym systemie. <noindex><a rel=\"nofollow\" href=\"https:\/\/jg.gg\/\">Jackson Hubbard<\/a><\/noindex>, by\u0142y pracownik Facebooka, nagra\u0142 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=ZgdS0EUmn70\">50-minutowe wideo dotycz\u0105ce rozm\u00f3w kwalifikacyjnych dotycz\u0105cych projektowania system\u00f3w<\/a><\/noindex>, gdzie podzieli\u0142 si\u0119 w\u0142asnym do\u015bwiadczeniem z analizowania setek kandydat\u00f3w. Mimo \u017ce wideo wyra\u017anie dotyczy projektowania du\u017cych system\u00f3w i kryteri\u00f3w sukcesu, kt\u00f3re s\u0105 wa\u017cne przy wyborze kandydata na takie stanowisko, mimo to, b\u0119dzie to nieocenione \u017ar\u00f3d\u0142o informacji na temat tego, co jest najwa\u017cniejsze przy projektowaniu system\u00f3w. Prosz\u0119 r\u00f3wnie\u017c o <noindex><a rel=\"nofollow\" href=\"https:\/\/jg.gg\/2016\/07\/31\/architecture-and-systems-design-interview\/\">kr\u00f3tkie podsumowanie<\/a><\/noindex> tego wideo.<\/p>\n<p><b>Zdob\u0105d\u017a wiedz\u0119 na temat przechowywania i wydobywania danych<\/b> <\/p>\n<p>Zazwyczaj twoje decyzje dotycz\u0105ce d\u0142ugoterminowego przechowywania i wydawania danych maj\u0105 kluczowy wp\u0142yw na wydajno\u015b\u0107 systemu. Dlatego musisz przede wszystkim rozumie\u0107 oczekiwane charakterystyki zapisu i odczytu danych w swoim systemie. Nast\u0119pnie musisz by\u0107 w stanie oceni\u0107 te wska\u017aniki i podejmowa\u0107 decyzje na ich podstawie. Jednak efektywnie zajmiesz si\u0119 tym tylko wtedy, gdy rozumiesz istniej\u0105ce wzorce przechowywania danych. W zasadzie oznacza to pewn\u0105 wiedz\u0119 dotycz\u0105c\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#database\">wyboru bazy danych<\/a><\/noindex>. <\/p>\n<p>Bazy danych mo\u017cna uzna\u0107 za struktury danych, kt\u00f3re charakteryzuj\u0105 si\u0119 wyj\u0105tkow\u0105 skalowalno\u015bci\u0105 i trwa\u0142o\u015bci\u0105. Dlatego znajomo\u015b\u0107 struktur danych b\u0119dzie bardzo przydatna r\u00f3wnie\u017c przy wyborze konkretnej bazy danych. Na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/topics\/data-types-intro\">Redis<\/a><\/noindex> \u2013 to serwer struktur danych, kt\u00f3ry obs\u0142uguje r\u00f3\u017cne typy warto\u015bci. Umo\u017cliwia prac\u0119 z takimi strukturami danych jak listy i zbiory, odczytywanie danych za pomoc\u0105 znanych algorytm\u00f3w, takich jak <noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/topics\/lru-cache\">LRU<\/a><\/noindex>, organizuj\u0105c t\u0119 prac\u0119 w stylu trwa\u0142ym i wysoko dost\u0119pnym. <\/p>\n<p><img decoding=\"async\" alt=\"Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny zarys i przewodnik po zasobach\" src=\"\/wp-content\/uploads\/2019\/07\/8e30da0e8edd592609466f3c6c6f66d1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Zdj\u0119cie <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> ze strony Unsplash<\/i><\/p>\n<p>Kiedy opanujesz r\u00f3\u017cne wzorce przechowywania danych, przejd\u017a do nauki o sp\u00f3jno\u015bci i dost\u0119pno\u015bci danych. Najpierw musisz przyswoi\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#cap-theorem\">teori\u0119 CAP<\/a><\/noindex> przynajmniej w og\u00f3lnych zarysach, a nast\u0119pnie doskonali\u0107 t\u0119 wiedz\u0119, dok\u0142adniej badaj\u0105c ustalone wzorce <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#consistency-patterns\">sp\u00f3jno\u015bci<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#availability-patterns\">dost\u0119pno\u015bci<\/a><\/noindex>. Dzi\u0119ki temu poszerzysz swoje horyzonty w tej dziedzinie i zrozumiesz, \u017ce odczyt i zapis danych to w rzeczywisto\u015bci dwa bardzo r\u00f3\u017cne problemy, z kt\u00f3rymi wi\u0105\u017c\u0105 si\u0119 w\u0142asne specyficzne wyzwania. Dysponuj\u0105c kilkoma wzorcami zapewniaj\u0105cymi sp\u00f3jno\u015b\u0107 i dost\u0119pno\u015b\u0107, mo\u017cesz znacznie zwi\u0119kszy\u0107 wydajno\u015b\u0107 systemu, jednocze\u015bnie gwarantuj\u0105c nieprzerwan\u0105 dostaw\u0119 danych do swoich aplikacji.<\/p>\n<p>Na koniec, ko\u0144cz\u0105c rozmow\u0119 o kwestiach przechowywania danych, warto wspomnie\u0107 r\u00f3wnie\u017c o cachowaniu. Czy powinno by\u0107 realizowane jednocze\u015bnie na kliencie i na serwerze? Jakie dane b\u0119d\u0105 przechowywane w twoim cache? I dlaczego? Jak zorganizujesz invalidacj\u0119 cache? Czy b\u0119dzie ona realizowana regularnie, co pewien czas? Je\u015bli tak, to jak cz\u0119sto? Tematy te polecam zacz\u0105\u0107 od <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#cache\">nast\u0119pnej sekcji<\/a><\/noindex> wy\u017cej wspomnianego podr\u0119cznika projektowania system\u00f3w. <\/p>\n<p><b>Wzorce komunikacyjne<\/b><\/p>\n<p>Systemy sk\u0142adaj\u0105 si\u0119 z r\u00f3\u017cnych komponent\u00f3w; mog\u0105 to by\u0107 zar\u00f3wno r\u00f3\u017cne procesy dzia\u0142aj\u0105ce w ramach jednego fizycznego w\u0119z\u0142a, jak i r\u00f3\u017cne maszyny dzia\u0142aj\u0105ce w r\u00f3\u017cnych cz\u0119\u015bciach twojej sieci. Niekt\u00f3re z tych zasob\u00f3w w twojej sieci mog\u0105 by\u0107 prywatne, ale inne musz\u0105 by\u0107 publiczne i otwarte dla konsument\u00f3w, kt\u00f3rzy si\u0119 do nich odwo\u0142uj\u0105 z zewn\u0105trz.<\/p>\n<p>Nale\u017cy zapewni\u0107 komunikacj\u0119 tych zasob\u00f3w mi\u0119dzy sob\u0105, a tak\u017ce wymian\u0119 informacji mi\u0119dzy ca\u0142ym systemem a \u015bwiatem zewn\u0119trznym. W kontek\u015bcie projektowania system\u00f3w stajemy w obliczu nowego zestawu unikalnych wyzwa\u0144. Zastan\u00f3wmy si\u0119, w jaki spos\u00f3b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#asynchronism\">asynchroniczne strumienie zada\u0144<\/a><\/noindex>, oraz jakie s\u0105 dost\u0119pne r\u00f3\u017cnorodne wzorce komunikacji<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#communication\">Tony Stoddard<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny zarys i przewodnik po zasobach\" src=\"\/wp-content\/uploads\/2019\/07\/e4dc98256b755acf931097d218f8b0dd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Zdj\u0119cie <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/DgZxBnZeQo8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Przy organizowaniu komunikacji ze \u015bwiatem zewn\u0119trznym zawsze bardzo wa\u017cna jest<\/a><\/noindex> ze strony Unsplash<\/i><\/p>\n<p>, do kt\u00f3rej r\u00f3wnie\u017c nale\u017cy podchodzi\u0107 z pe\u0142n\u0105 powag\u0105 i aktywnie si\u0119 ni\u0105 zajmowa\u0107. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#security\">bezpiecze\u0144stwo<\/a><\/noindex>Rozdzielanie po\u0142\u0105cze\u0144 <\/p>\n<p><b>Rozdzielanie po\u0142\u0105cze\u0144<\/b><\/p>\n<p>Nie jestem pewien, czy wydzielenie tego tematu do osobnej sekcji b\u0119dzie dla wszystkich uzasadnione. Niemniej jednak, szczeg\u00f3\u0142owo przedstawi\u0119 tutaj t\u0119 koncepcj\u0119, uwa\u017caj\u0105c, \u017ce materia\u0142 tej sekcji najlepiej opisuje termin \u201erozdzia\u0142 po\u0142\u0105cze\u0144\u201d (connection distribution).<\/p>\n<p>Systemy s\u0105 budowane poprzez prawid\u0142owe \u0142\u0105czenie wielu komponent\u00f3w, a ich komunikacja ze sob\u0105 cz\u0119sto jest organizowana na bazie ustalonych protoko\u0142\u00f3w, na przyk\u0142ad TCP i UDP. Jednak\u017ce te protoko\u0142y cz\u0119sto bywaj\u0105 niewystarczaj\u0105ce dla zaspokojenia wszystkich potrzeb nowoczesnych system\u00f3w, kt\u00f3re cz\u0119sto dzia\u0142aj\u0105 pod du\u017cym obci\u0105\u017ceniem, a tak\u017ce silnie zale\u017c\u0105 od potrzeb u\u017cytkownik\u00f3w. Cz\u0119sto konieczne jest poszukiwanie sposob\u00f3w na rozdzielanie po\u0142\u0105cze\u0144, aby poradzi\u0107 sobie z takimi du\u017cymi obci\u0105\u017ceniami w systemie.<\/p>\n<p>Na podstawie takiego rozdzielenia le\u017cy dobrze znany <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DNS\">system nazw domenowych<\/a><\/noindex> (DNS). Taki system umo\u017cliwia przekszta\u0142cenie nazwy domeny, na przyk\u0142ad, algorytmu wa\u017c\u0105cego podej\u015bcie (weighted round robin) oraz metod opartych na op\u00f3\u017anieniach, kt\u00f3re pomagaj\u0105 rozdziela\u0107 obci\u0105\u017cenie. <\/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\">Rozk\u0142ad obci\u0105\u017cenia<\/a><\/noindex> jest zasadniczo kluczowy i prawie ka\u017cdy wi\u0119kszy system w Internecie, z kt\u00f3rym mamy dzisiaj do czynienia, znajduje si\u0119 za jednym lub wieloma balansuj\u0105cymi obci\u0105\u017cenie. Balansuj\u0105ce obci\u0105\u017cenie pomagaj\u0105 rozdziela\u0107 \u017c\u0105dania klient\u00f3w mi\u0119dzy wiele dost\u0119pnych instancji. Balansuj\u0105ce obci\u0105\u017cenie mog\u0105 by\u0107 zar\u00f3wno sprz\u0119towe, jak i programowe, jednak w praktyce cz\u0119\u015bciej spotyka si\u0119 te programowe, na przyk\u0142ad z <noindex><a rel=\"nofollow\" href=\"http:\/\/www.haproxy.org\/\">HAProxy<\/a><\/noindex> i <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\">Proxy odwrotne<\/a><\/noindex> konceptualnie r\u00f3wnie\u017c s\u0105 bardzo podobne do balansuj\u0105cych obci\u0105\u017cenie, chocia\u017c pomi\u0119dzy nimi a tymi drugimi istnieje szereg <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer#load-balancer-vs-reverse-proxy\">wyra\u017anych r\u00f3\u017cnic<\/a><\/noindex>. R\u00f3\u017cnice te nale\u017cy koniecznie uwzgl\u0119dni\u0107 przy projektowaniu systemu z uwzgl\u0119dnieniem Twoich potrzeb.<\/p>\n<p>Nale\u017cy te\u017c pami\u0119ta\u0107 o <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Content_Delivery_Network\">sieciach dostarczania tre\u015bci<\/a><\/noindex> (CDN). CDN to globalna sie\u0107 rozproszonych serwer\u00f3w proxy, dostarczaj\u0105cych informacje z w\u0119z\u0142\u00f3w, kt\u00f3re s\u0105 geograficznie bli\u017cej konkretnego u\u017cytkownika. Sieci CDN s\u0105 preferowane, je\u015bli pracujesz z plikami statycznymi, napisanymi w JavaScript, CSS i HTML. Ponadto obecnie popularne s\u0105 takie us\u0142ugi chmurowe, w ramach kt\u00f3rych udost\u0119pniane s\u0105 mened\u017cery ruchu, na przyk\u0142ad, <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>, zapewniaj\u0105ce globalne rozprzestrzenienie i obni\u017cone op\u00f3\u017anienia podczas pracy z dynamiczn\u0105 tre\u015bci\u0105. Jednak takie us\u0142ugi s\u0105 zazwyczaj przydatne w sytuacjach, gdy trzeba pracowa\u0107 z us\u0142ugami sieciowymi bez przechowywania stanu. <\/p>\n<p><b>Porozmawiajmy o logice biznesowej. Strukturyzowanie logiki biznesowej, przep\u0142yw\u00f3w zada\u0144 i komponent\u00f3w<\/b><\/p>\n<p>Zatem uda\u0142o nam si\u0119 om\u00f3wi\u0107 r\u00f3\u017cne aspekty infrastrukturalne systemu. Prawdopodobnie u\u017cytkownik nawet nie my\u015bli o wszystkich tych elementach twojego systemu i, szczerze m\u00f3wi\u0105c, zupe\u0142nie nie martwi si\u0119 tym. U\u017cytkownika interesuje, jak wygl\u0105da interakcja z twoim systemem, co mo\u017cna osi\u0105gn\u0105\u0107, dzia\u0142aj\u0105c w ten spos\u00f3b, a tak\u017ce jak system wykonuje polecenia u\u017cytkownika, co i jak robi z danymi u\u017cytkownika.<\/p>\n<p>Jak wynika z tytu\u0142u tego artyku\u0142u, zamierza\u0142em om\u00f3wi\u0107 w nim architektur\u0119 oprogramowania i projektowanie system\u00f3w. Odpowiednio, nie planowa\u0142em porusza\u0107 wzorc\u00f3w projektowania oprogramowania, kt\u00f3re opisuj\u0105, jak tworzone s\u0105 komponenty programowe. Jednak im wi\u0119cej o tym my\u015bl\u0119, tym bardziej wydaje mi si\u0119, \u017ce granica mi\u0119dzy wzorcami projektowania oprogramowania a wzorcami architektonicznymi jest bardzo rozmyta, a te dwa poj\u0119cia s\u0105 ze sob\u0105 \u015bci\u015ble powi\u0105zane. We\u017amy na przyk\u0142ad <noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\">rejestrowanie zdarze\u0144<\/a><\/noindex> (event sourcing). Je\u015bli przyjmiesz ten wzorzec architektoniczny - wp\u0142ynie on praktycznie na wszystkie aspekty twojego systemu: d\u0142ugoterminowe przechowywanie danych, poziom sp\u00f3jno\u015bci przyj\u0119ty w twoim systemie, kontury komponent\u00f3w w nim itp. Dlatego postanowi\u0142em wspomnie\u0107 o kilku wzorcach architektonicznych bezpo\u015brednio zwi\u0105zanych z logik\u0105 biznesow\u0105. Nawet je\u015bli w tym artykule musz\u0119 ograniczy\u0107 si\u0119 do prostego wykazu, zach\u0119cam ci\u0119 do zapoznania si\u0119 z nim i przemy\u015blenia idei zwi\u0105zanych z tymi wzorcami. Oto, prosz\u0119:<\/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)\">Zasady SOLID<\/a><\/noindex> <\/li>\n<li>Koncepcje <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\">Projektowania zorientowanego na przedmiot<\/a><\/noindex>, w szczeg\u00f3lno\u015bci, <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/ingeniouslysimple\/aggregates-in-domain-driven-design-5aab3ef9901d\">agregaty<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/ingeniouslysimple\/command-vs-event-in-domain-driven-design-be6c45be52a9\">komendy i zdarzenia<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/267125\/\">Architektura heksagonalna<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/CQRS.html\">Podzia\u0142 odpowiedzialno\u015bci na komendy i zapytania (CQRS)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\">Rejestrowanie zdarze\u0144<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/doc.akka.io\/docs\/akka\/2.5\/guide\/actors-intro.html\">Model aktora<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/215605\/\">Wzorce projektowania MVC, MVVM i MVP<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<b>Podej\u015bcia kooperacyjne<\/b><\/p>\n<p>Wysoce nieprawdopodobne jest, \u017ce b\u0119dziesz na projekcie osob\u0105, kt\u00f3ra odpowiada za ca\u0142y proces projektowania systemu. Wr\u0119cz przeciwnie, najprawdopodobniej b\u0119dziesz musia\u0142 wsp\u00f3\u0142pracowa\u0107 z kolegami, kt\u00f3rzy pracuj\u0105 zar\u00f3wno w ramach twojego zadania, jak i poza nim. W takim przypadku mo\u017ce by\u0107 konieczne wsp\u00f3lne ocenianie wybranych rozwi\u0105za\u0144 technologicznych, wydobywanie potrzeb biznesowych i zrozumienie, jak najlepiej rozdziela\u0107 zadania.<\/p>\n<p><img decoding=\"async\" alt=\"Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny zarys i przewodnik po zasobach\" src=\"\/wp-content\/uploads\/2019\/07\/ad39e031dcac8e69fafb637603043bfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Zdj\u0119cie <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/3V8xo5Gbusk?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Kaleidico<\/a><\/noindex> ze strony Unsplash<\/i><\/p>\n<p>W pierwszej kolejno\u015bci nale\u017cy wypracowa\u0107 dok\u0142adne i powszechnie uznawane zrozumienie celu biznesowego, kt\u00f3ry pr\u00f3bujesz osi\u0105gn\u0105\u0107, oraz z jakimi zmiennymi elementami b\u0119dziesz musia\u0142 si\u0119 zmierzy\u0107. Techniki modelowania grupowego, szczeg\u00f3lnie <noindex><a rel=\"nofollow\" href=\"https:\/\/techbeacon.com\/devops\/introduction-event-storming-easy-way-achieve-domain-driven-design\">burza pomys\u0142\u00f3w<\/a><\/noindex> (event storming) mog\u0105 znacznie przyspieszy\u0107 ten proces i zwi\u0119kszy\u0107 twoje szanse na sukces. Mo\u017cesz si\u0119 tym zaj\u0105\u0107 przed lub po nakre\u015bleniu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.infoq.com\/news\/2015\/02\/service-boundaries-healthcare\/\">granic twoich us\u0142ug<\/a><\/noindex>, a nast\u0119pnie pog\u0142\u0119bia\u0107 ten temat w miar\u0119 dojrzewania produktu. W oparciu o poziom zgody, kt\u00f3ry zostanie tutaj osi\u0105gni\u0119ty, mo\u017cesz tak\u017ce sformu\u0142owa\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/UbiquitousLanguage.html\">jednolity j\u0119zyk<\/a><\/noindex> dla ograniczonego kontekstu, w kt\u00f3rym pracujesz. Kiedy b\u0119dziesz musia\u0142 m\u00f3wi\u0107 o architekturze swojego systemu, przyda ci si\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/c4model.com\/\">model C4<\/a><\/noindex>, zaproponowany przez <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/simonbrown\">Simona Browna<\/a><\/noindex>, szczeg\u00f3lnie gdy trzeba b\u0119dzie zrozumie\u0107, jak g\u0142\u0119boko trzeba wdro\u017cy\u0107 szczeg\u00f3\u0142y problemu, wizualizuj\u0105c rzeczy, kt\u00f3re chcesz przekaza\u0107.<\/p>\n<p>Prawdopodobnie w tej dziedzinie znajdzie si\u0119 inna dojrza\u0142a technologia, r\u00f3wnie u\u017cyteczna jak projektowanie oparte na domenie. Niemniej jednak, wracamy do zrozumienia obszaru tematycznego, wi\u0119c wiedza i do\u015bwiadczenie w zakresie <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\">projektowania opartego na domenie<\/a><\/noindex> b\u0119d\u0105 dla ciebie przydatne.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Architektura oprogramowania i projektowanie system\u00f3w: og\u00f3lny obraz i przewodnik po zasobach | ProHoster","description":"Cze\u015b\u0107, koledzy. Dzi\u015b na wasz\u0105 ocen\u0119 proponujemy t\u0142umaczenie artyku\u0142u Tugberka Ugurlu, kt\u00f3ry podj\u0105\u0142 si\u0119 w stosunkowo niewielkim zakresie przedstawienia zasad projektowania nowoczesnego oprogramowania.","canonical_url":"https:\/\/prohoster.info\/pl\/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":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/36518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=36518"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/36518\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/27331"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=36518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=36518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=36518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}