{"id":53442,"date":"2019-12-02T00:00:00","date_gmt":"2019-12-01T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/legacy-servisy-v-vashej-infrastrukture"},"modified":"2020-02-18T14:01:20","modified_gmt":"2020-02-18T11:01:20","slug":"legacy-servisy-v-vashej-infrastrukture","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture","title":{"rendered":"Servizi legacy nella tua infrastruttura","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao! Mi chiamo Pasha Chernyak, sono uno sviluppatore senior presso QIWI, e oggi voglio parlare dell'inevitabile. Di Legacy.<\/p>\n<p>Iniziamo con una domanda: cosa si intende per servizio Legacy? Un servizio Legacy \u00e8 un servizio che lo sviluppatore non ha toccato per una settimana\/mese\/anno? O \u00e8 un servizio scritto da un programmatore meno esperto, ad esempio, specificamente da te, ma un anno fa? E ora sei certamente pi\u00f9 bravo e esperto. Oppure, un servizio Legacy \u00e8 un servizio che hai deciso di non committare mai pi\u00f9 e stai lentamente preparando una sostituzione? In ogni caso, lasciare un servizio del genere senza supervisione e non aggiornarlo \u00e8 una bomba a orologeria che potrebbe esplodere in seguito.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/477682\/\"><img decoding=\"async\" alt=\"Servizi legacy nella tua infrastruttura\" src=\"\/wp-content\/uploads\/2019\/12\/d33a4a7983d1c440570bc0ff8da0f1d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Prima di passare a come lavoriamo con i nostri servizi Legacy in QIWI, vi racconter\u00f2 come abbiamo messo ordine nei servizi del Wallet. Da due anni mi occupo della sua funzionalit\u00e0. Se c'\u00e8 un problema, la prima persona a cui telefonano sono sempre io. Di solito non ho il coraggio di chiamare qualcun altro alle 11 di sera, quindi ho dovuto sedermi e occupami di tutti i servizi del nostro dominio. <\/p>\n<p>Ma io, come ogni persona, amo dormire di notte, quindi ho cercato di capire la situazione: \"Ragazzi, perch\u00e9 chiamate me?\". E ho ricevuto una risposta piuttosto concisa del tipo \"E a chi altro?\". Perch\u00e9 io riparo i servizi, e inoltre i ragazzi semplicemente non sanno a chi telefonare.<\/p>\n<p>Pertanto, durante una delle retrospettive del team backend del Wallet, abbiamo deciso di creare un elenco con i nostri servizi, microservizi e monoliti del wallet, e le persone responsabili di ciascuno di essi. Le tabelle sono sempre utili, nei limiti del ragionevole.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nOltre alle informazioni su chi \u00e8 responsabile di cosa, c'erano risposte a domande: chi \u00e8 il proprietario del servizio, chi si occupa del suo sviluppo, dell'architettura e del ciclo di vita. Le persone responsabili di questo servizio sono quelle in grado di ripararlo se necessario. Il proprietario del servizio ha il diritto di lasciare +2 nei commit, anche le persone responsabili devono necessariamente essere presenti alla revisione prima che questo servizio accetti un nuovo commit.<\/p>\n<p>Il tempo passava, iniziavano a essere applicate nuove pratiche, come la migrazione in Kubernetes, vari checkstyle, spotbugs, ktlint, la presenza di log in Kibana, autodiscovery dei servizi anzich\u00e9 indicare direttamente gli indirizzi e altre utilit\u00e0. E ovunque la nostra tabella ci permetteva di mantenere attuale lo stato dei nostri servizi. Per noi \u00e8 una sorta di checklist che indica cosa questo servizio pu\u00f2 fare e cosa no. Ma ci siamo spinti oltre, rendendoci conto che ci mancavano informazioni sui nostri servizi che monitoriamo, dove si trovano i sorgenti del servizio, dove vengono eseguiti i task di build in TeamCity, come vengono deploiati, dove si trovano i sorgenti dei test end2end, foto sui grooming riguardo l'architettura e le decisioni prese. Idealmente, volevamo che tutte queste informazioni fossero sempre disponibili quando necessario. Cos\u00ec il nostro foglio \u00e8 diventato un punto di partenza per la ricerca delle informazioni.<\/p>\n<p>Ma QIWI, pur mantenendo lo spirito di startup, \u00e8 una grande azienda. Abbiamo gi\u00e0 12 anni, e i team cambiano: le persone se ne vanno, altre arrivano, si formano nuovi gruppi. E abbiamo scoperto nel nostro dominio diversi servizi ereditati. Qualcosa \u00e8 arrivato con gli sviluppatori di altri team, qualcosa era in qualche modo collegato a Wallet, quindi ora il servizio \u00e8 nel nostro bilancio. Perch\u00e9 complicarsi con il funzionamento dei servizi? Funzionano, e abbiamo delle funzionalit\u00e0 di prodotto che dobbiamo assolutamente implementare.<\/p>\n<h2>Come spesso accade<\/h2>\n<p>\nMa a un certo punto ci accorgiamo che il servizio smette di svolgere la sua funzione, qualcosa si \u00e8 rotto \u2014 come comportarsi in questa situazione? Il servizio ha semplicemente smesso di funzionare. Del tutto. E lo abbiamo scoperto, prima di tutto, per caso, e in secondo luogo, dopo sei mesi. Pu\u00f2 succedere. L'unica cosa che sapevamo era su quali macchine virtuali era attivato il servizio, dove si trovano i suoi sorgenti, e basta. Facciamo un git clone e ci immergiamo nei pensieri della persona che ha scritto questo alcuni anni fa, ma cosa vediamo? Nessun Spring Boot familiare, sebbene ci siamo abituati a tutto, essendo full stack e tutto il resto. Forse c\u2019\u00e8 Spring Framework? E invece no.<\/p>\n<p>Il ragazzo che ha scritto tutto questo era severo e scriveva tutto in puro Java. Non ci sono strumenti familiari per lo sviluppatore, e nasce l'idea: sarebbe opportuno riscrivere tutto. Abbiamo dei microservizi, e da ogni tostapane arriva il consueto \"Ragazzi, i microservizi sono ci\u00f2 che vi serve!\". Se qualcosa non va, potrete tranquillamente prendere un linguaggio a scelta e andr\u00e0 tutto bene.<\/p>\n<p>Il punto \u00e8 che ora non abbiamo un committente responsabile di questo servizio. Quali erano le sue esigenze di business, cosa dovrebbe fare questo servizio? E il servizio \u00e8 strettamente integrato nei vostri processi aziendali. <\/p>\n<p>E ora ditemi, quanto \u00e8 facile riscrivere un servizio senza conoscere le sue esigenze di business? Non \u00e8 chiaro come viene effettuato il logging del servizio, se ci sono metriche \u2014 non lo sappiamo. Quali siano, se ci sono \u2014 ancor meno lo sappiamo. E nel servizio ci sono un gran numero di classi con una logica aziendale poco chiara. Qualcosa entra in un qualche database, di cui per ora non sappiamo nulla. <\/p>\n<h2>Da dove iniziare?<\/h2>\n<p>\nDal pi\u00f9 logico \u2014 dalla presenza di test. Di solito l\u00ec \u00e8 scritta almeno un po' di logica e si possono trarre conclusioni su ci\u00f2 che sta accadendo. Ora va di moda il TDD, ma vediamo che anche 5 anni fa era praticamente tutto come adesso: quasi niente test unitari, e comunque non ci diranno nulla di significativo. A meno che non sia qualche verifica su come venga firmato un qualche xml con un certificato personalizzato.<\/p>\n<p>Non siamo riusciti a capire nulla dal codice e abbiamo deciso di guardare cosa c'era sulla virtual machine. Abbiamo aperto i log del servizio e trovato un errore del client http, il certificato autofirmato che era integrato nelle risorse dell'applicazione era gi\u00e0 scaduto. Abbiamo contattato i nostri analisti che hanno richiesto un nuovo certificato, ci \u00e8 stato rilasciato e il servizio ha ricominciato a funzionare. Sembrerebbe che tutto sia finito qui. O no? Tuttavia, il servizio funziona, esegue una funzione che \u00e8 necessaria per il nostro business. Abbiamo degli standard di sviluppo delle applicazioni, che probabilmente avete anche voi. Ad esempio, non conservare i log sulla node in una cartella, ma conservarli in qualche tipo di archiviazione, tipo Elastic, e verificarli in Kibana. Possiamo anche ricordare le metriche d'oro. Cio\u00e8, il carico sul servizio, il numero di richieste al servizio, se \u00e8 attivo o meno, come passa il suo HealthCheck. Almeno queste metriche aiuteranno a capire quando \u00e8 possibile ritirarlo dall'uso in tutta tranquillit\u00e0 e dimenticarlo come un brutto sogno.<\/p>\n<h2>Cosa fare<\/h2>\n<p>\nPerci\u00f2 aggiungiamo questo vecchio servizio nella tabella e poi andiamo a cercare tra gli sviluppatori volontari che si occupino del servizio e lo sistemino: scrivano almeno qualche informazione sul servizio, aggiungano collegamenti ai dashboard in Grafana, alle task di costruzione, capiscano come distribuire l'applicazione, non \u00e8 certo possibile caricare file tramite ftp a mano. <\/p>\n<p>La cosa principale \u00e8: quanto tempo richieder\u00e0 tutta questa utile attivit\u00e0 volontaria? Un sprint per uno sviluppatore pi\u00f9 o meno esperto, ad esempio, durante il 20% del debito tecnico. E quanto tempo \u00e8 necessario per comprendere tutta la logica radicata nella comunicazione con un certo sistema governativo e portarlo su tecnologie pi\u00f9 moderne? Di questo non mi prendo responsabilit\u00e0, potrebbe richiedere un mese, o forse due, con il lavoro del team. Parlo per esperienza di integrazione attuale con qualche nuovo servizio.<\/p>\n<p>Tuttavia, non ci sono risultati di valore per il business. Affidare il servizio al supporto e spendere un po' di tempo per questo \u00e8 normale. Ma dopo le nostre danze standard con il servizio, lo abbiamo aggiunto alla tabella, abbiamo aggiunto informazioni su di esso e, forse, un giorno lo riscriveremo. Ma attualmente soddisfa i nostri standard di funzionamento dei servizi.<\/p>\n<p>Come risultato, vorrei arrivare a un certo piano su cosa fare con i servizi Legacy. <\/p>\n<p><b>Riscrivere il legacy da zero \u00e8 una cattiva idea<\/b><br \/>\nSeriamente, non c'\u00e8 nemmeno bisogno di pensarci. \u00c8 chiaro che ci sarebbe piaciuto, e ci sono dei vantaggi, ma di solito non serve a nessuno, nemmeno a voi stessi.<\/p>\n<p><b>Riferimento<\/b><br \/>\nScava nei codici sorgente delle tue applicazioni, crea un riferimento in cui sia indicato cosa c'\u00e8 e dove si trova e come funziona, inserisci anche una descrizione del progetto (una sorta di readme.md), in modo da capire rapidamente dove si trovano i log e le metriche. Lo sviluppatore che si occuper\u00e0 di questo dopo di te ti ringrazier\u00e0.<\/p>\n<p><b>Comprendi il dominio<\/b><br \/>\nSe possiedi un dominio, cerca di tenere sotto controllo la situazione. Suona banale, s\u00ec, ma non tutti si assicurano che i servizi seguano un unico standard. E lavorare in un unico standard \u00e8 davvero molto pi\u00f9 semplice.<\/p>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Cosa fai con il tuo legacy?<\/h2>\n<ul class=\"poll-result\">\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">31.5%<\/strong>Lo riscrivo da zero, \u00e8 pi\u00f9 corretto12<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent  poll-result__data-percent_winner\">52.6%<\/strong>Quasi la stessa cosa che fai tu20<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">10.5%<\/strong>Non abbiamo legacy, siamo bravi4<\/p>\n<\/li>\n<li class=\"poll-result__item\">\n<p>                <strong class=\"poll-result__data-percent\">5.2%<\/strong>Scriver\u00f2 nei commenti2<\/p>\n<\/li>\n<\/ul>\n<p>    Hanno votato 38 utenti. Hanno votato contro 20 utenti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/qiwi\/blog\/477682\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441? Legacy-\u0441\u0435\u0440\u0432\u0438\u0441 \u2014 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0435 \u043a\u0430\u0441\u0430\u043b\u0441\u044f \u0443\u0436\u0435 \u043d\u0435\u0434\u0435\u043b\u044e\/\u043c\u0435\u0441\u044f\u0446\/\u0433\u043e\u0434? \u0418\u043b\u0438 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043c\u0435\u043d\u0435\u0435 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432\u0430\u043c\u0438, \u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434? \u0410 \u0442\u0435\u043f\u0435\u0440\u044c-\u0442\u043e \u0432\u044b \u043a\u0440\u0443\u0447\u0435 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":53443,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53442","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=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441?\" \/>\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\/it\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\udd47Legacy-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441?\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture\" \/>\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-12-01T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:20+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\udd47Servizi Legacy nella tua infrastruttura | ProHoster","description":"Ciao! Mi chiamo Pasha Chernyak, sono uno sviluppatore principale in QIWI e oggi voglio parlare dell'inevitabile. Del Legacy. Iniziamo con la domanda: cos'\u00e8 un servizio Legacy?","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\udd47Legacy-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0448\u0430 \u0427\u0435\u0440\u043d\u044f\u043a, \u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 QIWI, \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u043c. \u041e Legacy. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Legacy-\u0441\u0435\u0440\u0432\u0438\u0441?","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/legacy-servisy-v-vashej-infrastrukture","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-12-01T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53442","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-24 07:23:42","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:25:27","updated":"2026-01-24 07:23:42","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/53442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=53442"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/53442\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/53443"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=53442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=53442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=53442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}