Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Suggerimento
Questo contenuto è un estratto dell'eBook Architecting Cloud Native .NET Applications for Azure, disponibile in .NET Docs o come PDF scaricabile gratuito che può essere letto offline.
Nello spettro dalla gestione dei computer fisici all'uso delle funzionalità cloud, il serverless vive all'estremità estrema. L'unica responsabilità è il codice e si paga solo quando viene eseguito il codice. Funzioni di Azure consente di creare funzionalità serverless nelle applicazioni native del cloud.
Che cos'è serverless?
Serverless è un modello di servizio relativamente nuovo del cloud computing. Non significa che i server siano facoltativi. Il codice viene comunque eseguito in un server da qualche parte. La distinzione è che il team dell'applicazione non si occupa più della gestione dell'infrastruttura server. Al contrario, il fornitore del cloud è proprietario di questa responsabilità. Il team di sviluppo aumenta la produttività offrendo soluzioni aziendali ai clienti, non idraulica.
L'elaborazione serverless utilizza contenitori senza stato basati su eventi per ospitare i tuoi servizi. Possono aumentare o diminuire il numero di istanze per soddisfare la domanda in base alle esigenze. Le piattaforme serverless come Azure Functions hanno una stretta integrazione con altri servizi di Azure, come code, eventi e archiviazione.
Quali problemi vengono risolti da serverless?
Le piattaforme serverless rispondono a molti problemi dispendiosi e costosi in termini di tempo:
- Acquisto di computer e licenze software
- Alloggi, protezione, configurazione e manutenzione dei computer e dei relativi requisiti di rete, alimentazione e A/C
- Applicazione di patch e aggiornamento di sistemi operativi e software
- Configurazione di server Web o servizi computer per ospitare il software dell'applicazione
- Configurazione del software dell'applicazione all'interno della piattaforma
Molte aziende allocano budget di grandi dimensioni per supportare le problematiche dell'infrastruttura hardware. Il passaggio al cloud può contribuire a ridurre questi costi; il passaggio delle applicazioni a serverless può essere utile per eliminarle.
Qual è la differenza tra un microservizio e una funzione serverless?
In genere, un microservizio incapsula una funzionalità aziendale, ad esempio un carrello acquisti per un sito di e-commerce online. Espone più operazioni che consentono a un utente di gestire l'esperienza di acquisto. Una funzione, tuttavia, è un piccolo blocco di codice leggero che esegue un'operazione a scopo singolo in risposta a un evento. I microservizi vengono in genere costruiti per rispondere alle richieste, spesso da un'interfaccia. Le richieste possono essere basate su REST HTTP o gRPC. I servizi serverless rispondono agli eventi. L'architettura basata su eventi è ideale per l'elaborazione di attività in background a esecuzione breve.
Quali scenari sono appropriati per le tecnologie serverless?
Serverless espone singole funzioni a esecuzione breve richiamate in risposta a un trigger. Ciò li rende ideali per l'elaborazione delle attività in background.
Un'applicazione potrebbe dover inviare un messaggio di posta elettronica come passaggio in un flusso di lavoro. Anziché inviare la notifica come parte di una richiesta di microservizio, inserire i dettagli del messaggio in una coda. Una funzione di Azure può annullare la coda del messaggio e inviare in modo asincrono il messaggio di posta elettronica. In questo modo è possibile migliorare le prestazioni e la scalabilità del microservizio. Il livellamento del carico basato su coda può essere implementato per evitare colli di bottiglia nell'invio delle email. Inoltre, questo servizio autonomo può essere riutilizzato come utilità in molte applicazioni diverse.
La messaggistica asincrona da code e temi è un modello comune per attivare funzioni serverless. Tuttavia, le Funzioni Azure possono essere attivate da altri eventi, come le modifiche all'Azure Blob Storage. Un servizio che supporta i caricamenti di immagini potrebbe avere una funzione di Azure responsabile dell'ottimizzazione delle dimensioni dell'immagine. La funzione può essere attivata direttamente da inserimenti in Azure Blob Storage, riducendo la complessità delle operazioni del microservizio.
Molti servizi hanno processi a esecuzione prolungata come parte dei flussi di lavoro. Spesso queste attività vengono eseguite come parte dell'interazione dell'utente con l'applicazione. Queste attività possono forzare l'attesa dell'utente, con effetti negativi sull'esperienza. L'elaborazione serverless offre un ottimo modo per spostare attività più lente all'esterno del ciclo di interazione dell'utente. Queste attività possono essere ridimensionate con richiesta senza richiedere la scalabilità dell'intera applicazione.
Quando dovresti evitare il serverless?
La fornitura e la scalabilità delle soluzioni serverless su richiesta. Quando viene richiamata una nuova istanza, gli avvii a freddo sono un problema comune. Un avvio a freddo è il periodo di tempo necessario per effettuare il provisioning di questa istanza. In genere, questo ritardo potrebbe essere di alcuni secondi, ma può essere più lungo a seconda di vari fattori. Dopo il provisioning, una singola istanza viene mantenuta attiva finché riceve richieste periodiche. Tuttavia, se un servizio viene chiamato meno frequentemente, Azure può rimuoverlo dalla memoria e richiedere un avvio a freddo quando viene richiamato. Gli avvii a freddo sono necessari anche quando una funzione viene ridimensionata in una nuova istanza.
La figura 3-9 mostra un modello di avvio a freddo. Si notino i passaggi aggiuntivi necessari quando l'app è fredda.
Figura 3-9. Inizio a freddo rispetto all'avvio a caldo.
Per evitare completamente l'avvio a freddo, puoi passare da un piano a consumo a un piano dedicato. È anche possibile configurare una o più istanze pre-riscaldate con l'aggiornamento del piano Premium. In questi casi, quando è necessario aggiungere un'altra istanza, è già operativa. Queste opzioni consentono di attenuare il problema di avvio a freddo associato all'elaborazione serverless.
I provider di servizi cloud fatturano i costi serverless in base al tempo di esecuzione del calcolo e alla memoria usata. Le operazioni a esecuzione prolungata o i carichi di lavoro a consumo elevato di memoria non sono sempre i migliori candidati per serverless. Le funzioni serverless favoriscono piccoli blocchi di lavoro che possono essere completati rapidamente. La maggior parte delle piattaforme serverless richiede il completamento di singole funzioni entro pochi minuti. Per impostazione predefinita, Funzioni di Azure ha una durata di timeout di 5 minuti, che può essere configurata fino a 10 minuti. Il piano Premium di Funzioni di Azure può attenuare anche questo problema, impostando i timeout di default a 30 minuti con un limite superiore illimitato che può essere configurato. L'ora di calcolo non è l'ora del calendario. Le funzioni più avanzate che usano il framework di Funzioni permanenti di Azure possono sospendere l'esecuzione in un corso di diversi giorni. La fatturazione si basa sul tempo di esecuzione effettivo: quando la funzione viene riattivata e riprende l'elaborazione.
Infine, l'uso di Funzioni di Azure per le attività dell'applicazione aggiunge complessità. È consigliabile progettare prima di tutto l'applicazione con un design modulare ad accoppiamento libero. In seguito, identificare se ci sono vantaggi derivanti dall'approccio serverless che giustificano la complessità aggiuntiva.