{"id":32196,"date":"2019-10-31T21:45:37","date_gmt":"2019-10-31T18:45:37","guid":{"rendered":"https:\/\/prohoster.info\/blog\/serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa\/"},"modified":"2019-10-31T21:45:37","modified_gmt":"2019-10-31T18:45:37","slug":"serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa","title":{"rendered":"Approccio Serverless per lo sviluppo rapido di un servizio video funzionante","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Approccio Serverless per lo sviluppo rapido di un servizio video funzionante\" src=\"\/wp-content\/uploads\/2019\/04\/8920670de611e8f2d237e0b4eef532f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLavoro in outsourcing, dove il principio principale pu\u00f2 essere descritto con la frase 'vendi molto, fai in fretta'. Pi\u00f9 velocemente facciamo, pi\u00f9 guadagniamo. Inoltre, \u00e8 importante che tutto funzioni senza problemi e con un livello di qualit\u00e0 accettabile. Racconter\u00f2 della mia esperienza quando, in un breve periodo, \u00e8 stato necessario sviluppare un servizio promozionale.<\/p>\n<p><b>Dati:<\/b> un account root su AWS, senza vincoli nella scelta dello stack tecnologico, un backend developer e un mese per lo sviluppo.<\/p>\n<p><b>Obiettivo:<\/b> realizzare un servizio promozionale in cui gli utenti caricano da uno a quattro video, della durata di uno a quattro secondi, che vengono poi integrati nel video originale.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Soluzione<\/h2>\n<p>\nScrivere il proprio servizio in tempi cos\u00ec ridotti \u00e8 una pessima idea. Inoltre, affinch\u00e9 il servizio possa gestire i carichi e tutti coloro che desiderano ricevere il video, sar\u00e0 necessaria un'infrastruttura. E sarebbe meglio che il costo non fosse eccessivo. Quindi ci orientiamo subito verso soluzioni pronte con una personalizzazione minima. <\/p>\n<p>La soluzione standard per il lavoro con video \u00e8 FFmpeg, un'utility da linea di comando multipiattaforma che consente di tagliare e sovrapporre audio tramite argomenti. Ora bisogna scrivere un wrapper e farlo funzionare. Creiamo un prototipo che unisce due video e\u2026 inizia la parte pi\u00f9 interessante. La libreria \u00e8 basata su .NET Core 2 e deve funzionare su qualsiasi virtual machine, quindi prendiamo un'istanza AWS EC2 e tutto funziona. <\/p>\n<p><b class=\"spoiler_title\">Testo nascosto<\/b>no, non funzioner\u00e0<br \/>\n.<br \/>\nFFmpeg, sebbene semplifichi il compito, richiede di creare un'istanza EC2, progettare l'infrastruttura di rete, inclusi i Load Balancer. Un semplice deployment da zero si complica un po', e l'infrastruttura inizia a richiedere denaro immediatamente \u2014 ogni ora si sottrae una somma dal conto del cliente per il runtime.<\/p>\n<p>Il nostro servizio non prevede processi Long-Running, non ha bisogno di un grande e pesante database relazionale e si adatta perfettamente a un'architettura basata su eventi con una catena di chiamate di microservizi. La soluzione sembra ovvia: possiamo rinunciare a EC2 e realizzare un'applicazione true-serverless, simile a standard Image Resizer basata su AWS Lambda. <\/p>\n<p>A proposito, nonostante l'evidente avversione degli sviluppatori AWS per .NET, supportano .NET Core 2.1 come runtime, il che offre un'ampia gamma di possibilit\u00e0 di sviluppo.<\/p>\n<p>E la ciliegina sulla torta: AWS offre un servizio dedicato per lavorare con i file video \u2014 AWS Elemental MediaConvert. <\/p>\n<p>Il funzionamento \u00e8 incredibilmente semplice: prendiamo un link S3 al video originale, tramite la Console AWS, il .NET SDK o semplicemente JSON, specifichiamo cosa vogliamo fare con il video e chiamiamo il servizio. Gestisce autonomamente le code per l'elaborazione delle richieste in arrivo, carica il risultato su S3 e, cosa pi\u00f9 importante, genera un evento CloudWatch per ogni cambio di stato. Questo ci consente di implementare trigger Lambda al termine dell'elaborazione video.<\/p>\n<p><img decoding=\"async\" alt=\"Approccio Serverless per lo sviluppo rapido di un servizio video funzionante\" src=\"\/wp-content\/uploads\/2019\/04\/4237992584ca25c45f77fdc8a37f899d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Circa cos\u00ec appare la variante finale dell'architettura. <\/i><\/p>\n<p>Tutto il backend \u00e8 ospitato in due Lambda. Un'altra sar\u00e0 dedicata alla rotazione dei video verticali, poich\u00e9 tale lavoro non pu\u00f2 essere eseguito in un unico passaggio.<\/p>\n<p>Il front-end sar\u00e0 un'applicazione SPA, scritta in JS e compilata tramite pug, ospitata in un bucket S3 pubblico. Per caricare i video non abbiamo bisogno di alcun codice server; \u00e8 sufficiente aprire i REST endpoint forniti da S3. L'unico punto importante \u00e8 non dimenticarsi di configurare le politiche e il CORS. <\/p>\n<h2>Problemi inaspettati<\/h2>\n<p><\/p>\n<ul>\n<li>AWS MediaConvert, per qualche ragione sconosciuta, applica l'audio solo a ciascun segmento video separatamente, mentre noi abbiamo bisogno della stessa canzone dall'introduzione.<\/li>\n<li>I video verticali devono essere elaborati separatamente. AWS non ama le barre nere e ruota i video di 90\u00b0. <\/li>\n<\/ul>\n<h2>Facile come bere un bicchier d'acqua.<\/h2>\n<p>\nNonostante tutta la bellezza dello Stateless, \u00e8 necessario tenere traccia di cosa deve essere fatto con il video: unire o sovrapporre l'audio al video gi\u00e0 pronto. Fortunatamente, MediaConvert supporta il passaggio di metadati tramite i propri Job, e possiamo sempre applicare una semplice flag del tipo 'isMasterSoundJob', eseguendo il parsing di questi metadati in qualsiasi fase.<\/p>\n<p>Serverless consente di lavorare in NoOps \u2014 un approccio che implica la mancanza di un team dedicato alla gestione dell'infrastruttura del progetto. Quindi, ci siamo limitati a implementare la soluzione su AWS senza il coinvolgimento di amministratori di sistema, che hanno sempre cose di cui occuparsi. <br \/>\nE per accelerare tutto questo, automatizziamo al massimo il deployment con uno script su AWS CloudFormation, che consente il deployment con un clic direttamente da VS. In definitiva, un file di 200 righe di codice consente di far partire una soluzione pronta, anche se la sintassi di CloudFormation pu\u00f2 sorprendere all'inizio.<\/p>\n<h2>Totale<\/h2>\n<p>\nServerless non \u00e8 una panacea. Ma render\u00e0 decisamente pi\u00f9 facile la vita in situazioni con tre limiti: 'risorse limitate \u2014 breve termine \u2014 pochi soldi'.<\/p>\n<p><b>Caratteristiche delle applicazioni adatte per Serverless.<\/b><\/p>\n<ul>\n<li>senza processi Long-Running. Limite hard dell'API Gateway \u2014 29 secondi, limite hard della lambdas \u2014 5 minuti;<\/li>\n<li>descritto dall'architettura Event-Driven;<\/li>\n<li>suddiviso in componenti debolmente accoppiati simili a SOA;<\/li>\n<li>non richiede un grande lavoro sul proprio stato;<\/li>\n<li>scritto in .NET Core. Per lavorare con .NET Framework sar\u00e0 comunque necessario almeno Docker con il runtime appropriato.<\/li>\n<\/ul>\n<p>\n<b>Vantaggi dell'approccio Serverless<\/b><\/p>\n<ul>\n<li>riduce i costi per l'infrastruttura;<\/li>\n<li>riduce i costi per la distribuzione della soluzione;<\/li>\n<li>scalabilit\u00e0 automatica;<\/li>\n<li>sviluppo all'avanguardia del progresso tecnico. <\/li>\n<\/ul>\n<p>\n<b>Svantaggi, con un esempio specifico<\/b><\/p>\n<ul>\n<li>Tracciamento distribuito e registrazione \u2014 risolto parzialmente tramite AWS X-Ray e AWS CloudWatch;<\/li>\n<li>debugging scomodo;<\/li>\n<li>Cold Start in assenza di carico;<\/li>\n<li>Interfaccia ostile per l'utente di AWS \u2014 un problema universale \ud83d\ude42<\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/448974\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0435, \u0433\u0434\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0440\u0430\u0437\u043e\u0439 \u00ab\u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0439 \u043c\u043d\u043e\u0433\u043e, \u0434\u0435\u043b\u0430\u0439 \u0431\u044b\u0441\u0442\u0440\u043e\u00bb. \u0427\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c. \u0418, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0435 \u043d\u0430 \u043a\u043e\u0441\u0442\u044b\u043b\u044f\u0445 \u0438 \u0441\u043e\u043f\u043b\u044f\u0445, \u0430 \u0441 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0441\u0432\u043e\u0451\u043c \u043e\u043f\u044b\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0440\u043e\u043a \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043e-\u0441\u0435\u0440\u0432\u0438\u0441. \u0414\u0430\u043d\u043e: root-\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 AWS, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24024,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32196","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.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0435, \u0433\u0434\u0435.\" \/>\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\/serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\udd47Serverless-\u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043e-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0435, \u0433\u0434\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa\" \/>\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:45:37+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:45:37+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\udd47Approccio serverless per lo sviluppo rapido di un servizio video operativo | ProHoster","description":"Lavoro nel settore dell'outsourcing, dove.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa","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\udd47Serverless-\u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043e-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 | ProHoster","og:description":"\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u0430\u0443\u0442\u0441\u043e\u0440\u0441\u0435, \u0433\u0434\u0435.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/serverless-podhod-dlya-bystroj-razrabotki-rabochego-video-servisa","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:45:37+00:00","article:modified_time":"2019-10-31T18:45:37+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32196","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-21 09:44:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:03:23","updated":"2026-01-21 09:44:19","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\/32196","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=32196"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32196\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/24024"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=32196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=32196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=32196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}