{"id":30785,"date":"2019-10-31T21:37:25","date_gmt":"2019-10-31T18:37:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\/"},"modified":"2019-10-31T21:37:25","modified_gmt":"2019-10-31T18:37:25","slug":"stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","title":{"rendered":"Blocuri de construc\u021bie pentru aplica\u021bii distribuite. Aproximare zero","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Blocuri de construc\u021bie pentru aplica\u021bii distribuite. Aproximare zero\" src=\"\/wp-content\/uploads\/2019\/04\/88d4e363538bdfc67690c8339dca790b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lumea nu st\u0103 pe loc. Progresul creeaz\u0103 noi provoc\u0103ri tehnologice. \u00cen conformitate cu cerin\u021bele care s-au schimbat, arhitectura sistemelor informa\u021bionale trebuie s\u0103 evolueze. Ast\u0103zi, vom vorbi despre arhitectura orientat\u0103 pe evenimente, concuren\u021b\u0103, paralelism, asincronitate \u0219i despre cum putem coexista cu toate acestea \u00een Erlang.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"vvedenie\">Introducere<\/h2>\n<p><\/p>\n<p>\u00cen func\u021bie de dimensiunile sistemului proiectat \u0219i de cerin\u021bele acestuia, noi, dezvoltatorii, alegem modalitatea de schimb de informa\u021bii din sistem. \u00cen cea mai mare parte, pentru a organiza interac\u021biunea serviciilor, varianta de lucru poate fi un schema cu broker, de exemplu, bazat\u0103 pe RabbitMQ sau Kafka. Dar uneori fluxul de evenimente, SLA \u0219i nivelul de control asupra sistemului sunt astfel \u00eenc\u00e2t solu\u021bia de messaging existent\u0103 nu este potrivit\u0103. Bine\u00een\u021beles, putem complica pu\u021bin sistemul, asum\u00e2ndu-ne responsabilitatea pentru nivelul de transport \u0219i formarea clusterului, de exemplu folosind ZeroMQ sau nanomsg. Dar dac\u0103 sistemului \u00eei ajunge capacitatea de procesare \u0219i func\u021bionalit\u0103\u021bile clusterului Erlang standard, atunci introducerea unei entit\u0103\u021bi suplimentare necesit\u0103 o analiz\u0103 detaliat\u0103 \u0219i o justificare economic\u0103.<\/p>\n<p><\/p>\n<p>Tema aplica\u021biilor distribuite reactiv este destul de ampl\u0103. Pentru a ne \u00eencadra \u00een formatul articolului, subiectul discu\u021biei de ast\u0103zi va fi doar mediile omogene, construite pe baza Erlang\/Elixir. Ecosistemul Erlang\/OTP permite implementarea unei arhitecturi reactive cu costuri de munc\u0103 minime. Dar, \u00een orice caz, va fi necesar un strat de schimb de mesaje. <\/p>\n<p><\/p>\n<h2 id=\"teoreticheskiy-bazis\">Baza teoretic\u0103<\/h2>\n<p><\/p>\n<p>Proiectarea \u00eencepe cu definirea obiectivelor \u0219i constr\u00e2ngerilor. Obiectivul principal nu se afl\u0103 \u00een domeniul dezvolt\u0103rii doar de dragul dezvolt\u0103rii. Trebuie s\u0103 ob\u021binem un instrument sigur \u0219i scalabil, pe baza c\u0103ruia s\u0103 putem crea, \u0219i, cel mai important, s\u0103 dezvolt\u0103m aplica\u021bii moderne de diferite niveluri: de la aplica\u021bii pe un singur server, care deservesc o audien\u021b\u0103 mic\u0103, ce pot evolua ulterior \u00een clustere de p\u00e2n\u0103 la 50-60 de noduri, p\u00e2n\u0103 la federa\u021bii de clustere. Astfel, obiectivul principal este maximizarea profitului prin reducerea costurilor de dezvoltare \u0219i de\u021binere a sistemului final.<\/p>\n<p><\/p>\n<p>S\u0103 eviden\u021biem 4 cerin\u021be principale pentru sistemul final:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Cu<\/strong>orientarea pe evenimente.<br \/>\nSistemul este \u00eentotdeauna preg\u0103tit s\u0103 permit\u0103 trecerea unui flux de evenimente \u0219i s\u0103 efectueze ac\u021biunile necesare;<\/li>\n<li><strong>M<\/strong>scalabilitate.<br \/>\nModulele separate pot fi scalate at\u00e2t vertical, c\u00e2t \u0219i orizontal. \u00centreaga sistem\u0103 trebuie s\u0103 aib\u0103 capacitatea de a cre\u0219te orizontal nelimitat;<\/li>\n<li><strong>O<\/strong>furan\u021b\u0103.<br \/>\nToate nivelurile \u0219i toate serviciile trebuie s\u0103 aib\u0103 capacitatea de a se recupera automat \u00een caz de e\u0219ecuri;<\/li>\n<li><strong>G<\/strong>aran\u021bie a timpului de r\u0103spuns.<br \/>\nTimpul este pre\u021bios, iar utilizatorii nu ar trebui s\u0103 a\u0219tepte prea mult.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u021aine\u021bi minte vechea poveste despre \u201eThe little engine that could\u201d, cunoscut \u0219i ca \u201eP\u0103c\u0103liciul care a reu\u0219it\u201d? Pentru ca sistemul proiectat s\u0103 ias\u0103 cu succes din faza de prototip \u0219i s\u0103 fie progresiv, funda\u021bia sa trebuie s\u0103 \u00eendeplineasc\u0103 cerin\u021bele minime <strong>A REU\u0218IT<\/strong>.<\/p>\n<p><\/p>\n<p>\u00cen mesajele ca instrumente de infrastructur\u0103 \u0219i funda\u021bie pentru toate serviciile, se adaug\u0103 \u00eenc\u0103 un punct: u\u0219urin\u021ba de utilizare pentru programatori.<\/p>\n<p><\/p>\n<h3 id=\"orientirovannost-na-sobytiya\">Orientarea pe evenimente<\/h3>\n<p><\/p>\n<p>Pentru ca aplica\u021bia s\u0103 poat\u0103 cre\u0219te de la una <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/ro\/server\/dts-los-angeles\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3480\">server<\/a> la un cluster, arhitectura sa trebuie s\u0103 asigure o slab\u0103 leg\u0103tur\u0103. Aceast\u0103 cerin\u021b\u0103 este abordat\u0103 de modelul asincron. \u00cen acesta, expeditorul \u0219i destinatarii se ocup\u0103 de sarcina informativ\u0103 a mesajului \u0219i nu se \u00eengrijesc de transmiterea \u0219i rutarea \u00een cadrul sistemului.<\/p>\n<p><\/p>\n<h3 id=\"masshtabiruemost\">Scalabilitate<\/h3>\n<p><\/p>\n<p>Scalabilitatea \u0219i eficien\u021ba sistemului merg m\u00e2n\u0103 \u00een m\u00e2n\u0103. Componentele aplica\u021biei trebuie s\u0103 fie capabile s\u0103 utilizeze toate resursele disponibile. Cu c\u00e2t reu\u0219im s\u0103 utiliz\u0103m mai eficient capacit\u0103\u021bile \u0219i metodele noastre de procesare sunt mai optime, cu at\u00e2t cheltuim mai pu\u021bini bani pe echipamente. <\/p>\n<p><\/p>\n<p>\u00cen cadrul unei singure ma\u0219ini, Erlang creeaz\u0103 un mediu foarte concuren\u021bial. Echilibrul \u00eentre concuren\u021b\u0103 \u0219i paralelism poate fi stabilit prin alegerea num\u0103rului de firuri de execu\u021bie disponibile pentru Erlang VM \u0219i num\u0103rului de planificatori care utilizeaz\u0103 aceste firuri.<br \/>\nProcesele Erlang nu au un stadiu comun \u0219i func\u021bioneaz\u0103 \u00een mod neblocat. Acest lucru asigur\u0103 o laten\u021b\u0103 relativ sc\u0103zut\u0103 \u0219i o l\u0103\u021bime de band\u0103 mai mare dec\u00e2t aplica\u021biile tradi\u021bionale bazate pe sincronizarea blocant\u0103. Planificatorul Erlang se ocup\u0103 de distribu\u021bia corect\u0103 a CPU \u0219i IO, iar lipsa blocajelor permite aplica\u021biei s\u0103 r\u0103spund\u0103 chiar \u0219i \u00een timpul sarcinilor de v\u00e2rf sau \u00een caz de e\u0219ecuri. <\/p>\n<p><\/p>\n<p>La nivel de cluster, exist\u0103 \u0219i o problem\u0103 cu utilizarea resurselor. Este important ca toate ma\u0219inile din cluster s\u0103 fie \u00eenc\u0103rcate uniform, iar re\u021beaua s\u0103 nu fie suprasolicitat\u0103. S\u0103 imagin\u0103m o situa\u021bie: traficul utilizatorilor aterizeaz\u0103 pe balansoarele de \u00eenc\u0103rcare (haproxy, nginx, etc.), care distribuie solicitarile c\u00e2t mai uniform \u00eentre setul de backend-uri disponibile. \u00cen cadrul infrastructurii aplica\u021biei, serviciul care realizeaz\u0103 interfa\u021ba necesar\u0103 este doar ultimul segment, \u0219i va trebui s\u0103 solicite o serie de alte servicii pentru a r\u0103spunde la solicitarea ini\u021bial\u0103. Solicit\u0103rile interne necesit\u0103, de asemenea, rutare \u0219i echilibrare.<br \/>\nPentru a gestiona eficient fluxurile de date, sistemul de mesagerie trebuie s\u0103 ofere dezvoltatorilor o interfa\u021b\u0103 pentru gestionarea rut\u0103rii \u0219i distribu\u021biei sarcinii. Gra\u021bie acestui fapt, dezvoltatorii vor putea, utiliz\u00e2nd modele de microservicii (aggregator, proxy, chain, branch, etc.), s\u0103 rezolve at\u00e2t sarcinile standard, c\u00e2t \u0219i pe cele rare. <\/p>\n<p><\/p>\n<p>Din perspectiva afacerii, scalabilitatea este un instrument de gestionare a riscurilor. Este esen\u021bial s\u0103 satisfacem cerin\u021bele clien\u021bilor, utiliz\u00e2nd optim echipamentele:<\/p>\n<p><\/p>\n<ul>\n<li>Pe m\u0103sur\u0103 ce puterea echipamentului cre\u0219te datorit\u0103 progresului tehnologic, acesta nu va sta nefolosit din cauza imperfec\u021biunilor software-ului. Erlang se scaleaz\u0103 excelent vertical \u0219i va putea \u00eentotdeauna s\u0103 utilizeze toate nucleele CPU \u0219i memoria disponibil\u0103;<\/li>\n<li>\u00cen medii cloud, putem gestiona cantitatea de echipamente \u00een func\u021bie de sarcina actual\u0103 sau preconizat\u0103 \u0219i putem garanta SLA.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"otkazoustoychivost\">Redundan\u021b\u0103<\/h3>\n<p><\/p>\n<p>S\u0103 lu\u0103m \u00een considerare dou\u0103 axiome: \u201eDefectele sunt inacceptabile\u201d \u0219i \u201eDefectele se vor \u00eent\u00e2mpla \u00eentotdeauna\u201d. Pentru afaceri, e\u0219ecul software-ului \u00eenseamn\u0103 pierdere de bani \u0219i, ceea ce este \u0219i mai r\u0103u, pierderea reputa\u021biei. Balans\u00e2nd \u00eentre pierderile posibile \u0219i costul dezvolt\u0103rii unui software rezistent la defecte, se poate g\u0103si adesea un compromis.<\/p>\n<p><\/p>\n<p>Pe termen scurt, o arhitectur\u0103 \u00een care este realizat\u0103 rezisten\u021ba la defecte economise\u0219te bani prin achizi\u021bionarea de solu\u021bii gata f\u0103cute pentru clusterizare. Acestea sunt scumpe \u0219i au erori.<br \/>\nPe termen lung, o arhitectur\u0103 rezistent\u0103 la defecte \u00ee\u0219i recupereaz\u0103 costurile de aplicare de mai multe ori \u00een toate etapele de dezvoltare.<br \/>\nMesajele din cadrul codului surs\u0103 sunt \u00eenc\u0103 \u00een dezvoltare, ceea ce permite detalierea interac\u021biunilor componentelor din sistem. Aceasta simplific\u0103 sarcina de reac\u021bie \u0219i gestionare a erorilor, deoarece toate componentele responsabile gestioneaz\u0103 defec\u021biunile, iar sistemul final \u0219tie cum s\u0103 revin\u0103 automat la starea normal\u0103 dup\u0103 o defec\u021biune, prin design.<\/p>\n<p><\/p>\n<h3 id=\"otzyvchivost\">Reactivitate<\/h3>\n<p><\/p>\n<p>Indiferent de erori, aplica\u021bia trebuie s\u0103 r\u0103spund\u0103 la cereri \u0219i s\u0103 respecte SLA. Realitatea este c\u0103 oamenii nu doresc s\u0103 a\u0219tepte, astfel c\u0103 afacerea trebuie s\u0103 se adapteze. Din ce \u00een ce mai multe aplica\u021bii sunt a\u0219teptate s\u0103 ofere o reac\u021bie rapid\u0103.<br \/>\nAplica\u021biile reactive func\u021bioneaz\u0103 \u00eentr-un mod aproape \u00een timp real. Erlang VM opereaz\u0103 \u00een modul de timp real moale. Pentru anumite domenii, cum ar fi tranzac\u021biile bursiere, medicina sau gestionarea echipamentelor industriale, este important un mod de timp real strict.<br \/>\nSistemele reactive \u00eembun\u0103t\u0103\u021besc UX-ul \u0219i sunt utile pentru afaceri.<\/p>\n<p><\/p>\n<h2 id=\"predvaritelnyy-itog\">Rezumat preliminar<\/h2>\n<p><\/p>\n<p>\u00cen planificarea acestui articol, am dorit s\u0103 \u00eemp\u0103rt\u0103\u0219esc experien\u021ba de a crea un broker de mesaje \u0219i de a construi sisteme complexe pe baza acestuia. Dar partea teoretic\u0103 \u0219i motiva\u021bional\u0103 a devenit destul de ampl\u0103.<br \/>\n\u00cen a doua parte a articolului, voi vorbi despre nuan\u021bele implement\u0103rii punctelor de schimb, \u0219abloanele de schimb de mesaje \u0219i aplicarea acestora.<br \/>\n\u00cen a treia parte, vom analiza \u00eentreb\u0103rile generale legate de organizarea serviciilor, rutare \u0219i balansare. Vom discuta despre aspectele practice ale scalabilit\u0103\u021bii \u0219i rezilien\u021bei sistemelor.<\/p>\n<p><\/p>\n<p>Sf\u00e2r\u0219itul primei p\u0103r\u021bi.<\/p>\n<p><\/p>\n<p>Fotografie <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/SRjZtxsK3Os\">@lucabravo<\/a><\/noindex>.<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446028\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0438\u0440 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b. \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u043c\u0438\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0434\u043e\u043b\u0436\u043d\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432 Erlang \u043c\u043e\u0436\u043d\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0436\u0438\u0442\u044c \u043c\u0438\u0440\u043d\u043e. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u043d\u0435\u0439, \u043c\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22770,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30785","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.2.1 - aioseo.com -->\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\/ro\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie\" \/>\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-31T18:37:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:25+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\udd47Componentele aplica\u021biilor distribuite. Aproximare zero | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041d\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435 | ProHoster","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/stroitelnye-bloki-raspredelennyh-prilozhenij-nulevoe-priblizhenie","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-31T18:37:25+00:00","article:modified_time":"2019-10-31T18:37:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30785","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-02-22 15:31:13","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:29:56","updated":"2026-02-22 15:31:13","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/30785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=30785"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/30785\/revisions"}],"predecessor-version":[{"id":162006,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/30785\/revisions\/162006"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/22770"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=30785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=30785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=30785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}