Condividi tramite


Elaborazione di database serverless con Azure Cosmos DB e Funzioni di Azure

L'elaborazione serverless riguarda la capacità di concentrarsi su singole funzioni logiche che sono ripetibili e prive di stato. Questi componenti non richiedono alcuna gestione dell'infrastruttura e usano risorse solo per i secondi o i millisecondi per cui vengono eseguiti. Al centro dello spostamento di elaborazione serverless sono funzioni rese disponibili nell'ecosistema di Azure da Funzioni di Azure. Per informazioni su altri ambienti di esecuzione serverless in Azure, vedere la pagina serverless in Azure .

Con l'integrazione nativa tra Azure Cosmos DB e Funzioni di Azure, è possibile creare trigger di database, associazioni di input e associazioni di output direttamente dall'account Azure Cosmos DB. Usando Funzioni di Azure e Azure Cosmos DB, è possibile creare e distribuire app serverless guidate dagli eventi con accesso a bassa latenza ai dati avanzati per una base di utenti globale.

Azure Functions può creare connessioni di database isolate per ogni invocazione se il client di database non è gestito correttamente, ciò potrebbe influire sulle prestazioni di connessione sotto alta concorrenza, in particolare nel piano di consumo. Tuttavia, quando si usano associazioni o trigger di Cosmos DB, Funzioni di Azure riutilizza internamente un client di Cosmos DB SDK condiviso, garantendo un pool efficiente di connessioni tra più chiamate. Azure Cosmos DB supporta sia modalità di connettività basate su HTTP che basate su TCP. Questa architettura supporta carichi di lavoro scalabili e ad alte prestazioni che richiedono l'accesso ai dati dinamici.

Informazioni generali

Azure Cosmos DB e Funzioni di Azure consentono di integrare i database e le app serverless nei modi seguenti:

  • Creare un trigger di Funzioni di Azure basato su eventi per Azure Cosmos DB. Questo trigger si basa sui flussi del feed di modifiche per monitorare il contenitore di Azure Cosmos DB e rilevare le modifiche. Quando vengono apportate modifiche a un contenitore, il flusso del feed di modifiche viene inviato al trigger, che richiama la funzione di Azure.
  • In alternativa, associare una funzione di Azure a un contenitore di Azure Cosmos DB usando un'associazione di input. Le associazioni di input leggono i dati da un contenitore quando viene eseguita una funzione.
  • Associare una funzione a un contenitore di Azure Cosmos DB usando un'associazione di output. Le associazioni di output scrivono dati in un contenitore al termine di una funzione.

Annotazioni

Attualmente, i trigger di Funzioni di Azure, le associazioni di input e le associazioni di output per Azure Cosmos DB sono supportati solo per l'uso con l'API per NoSQL. Per tutte le altre API di Azure Cosmos DB, è necessario accedere al database dalla funzione usando il client statico per l'API.

Il diagramma seguente illustra ognuna di queste tre integrazioni:

Integrazione di Azure Cosmos DB e Funzioni di Azure

Il trigger delle Azure Functions, l'associazione di input e l'associazione di output per Azure Cosmos DB possono essere utilizzati nelle seguenti combinazioni:

  • Un trigger di Funzioni di Azure per Azure Cosmos DB può essere utilizzato con un'associazione di output a un contenitore Azure Cosmos DB diverso. Dopo che una funzione esegue un'azione su un elemento nel feed di modifiche, è possibile scriverla in un altro contenitore ( scrivendola nello stesso contenitore da cui proviene in modo efficace creerebbe un ciclo ricorsivo). In alternativa, è possibile usare un trigger di Funzioni di Azure per Azure Cosmos DB per eseguire in modo efficace la migrazione di tutti gli elementi modificati da un contenitore a un contenitore diverso, con l'uso di un'associazione di output.
  • Le associazioni di input e le associazioni di output per Azure Cosmos DB possono essere usate nella stessa funzione di Azure. Ciò funziona bene nei casi in cui si vogliono trovare determinati dati con l'associazione di input, modificarli nella funzione di Azure e quindi salvarli nello stesso contenitore o in un contenitore diverso, dopo la modifica.
  • Un'associazione di input a un contenitore di Azure Cosmos DB può essere usata nella stessa funzione di un trigger di Funzioni di Azure per Azure Cosmos DB e può essere usata anche con o senza un'associazione di output. È possibile usare questa combinazione per applicare informazioni aggiornate sul tasso di cambio, inserite con un'associazione di input in un contenitore di cambio di valuta, per il feed di modifiche dei nuovi ordini nel servizio carrello. Il totale del carrello aggiornato, applicando la conversione valuta corrente, può essere scritto in un terzo contenitore usando un'associazione di output.

Casi d'uso

I casi d'uso seguenti illustrano alcuni modi per sfruttare al meglio i dati di Azure Cosmos DB, connettendo i dati a Funzioni di Azure basate su eventi.

Caso d'uso IoT - Trigger e associazione di output delle Funzioni di Azure per Azure Cosmos DB

Nelle implementazioni IoT è possibile richiamare una funzione quando la luce del motore di controllo viene visualizzata in un'auto connessa.

Implementazione: Utilizzare un trigger di Azure Functions e un binding di output per Azure Cosmos DB

  1. Il trigger di Azure Functions per Azure Cosmos DB viene usato per attivare gli eventi relativi agli avvisi dell'auto, ad esempio quando la luce del motore di controllo entra in un'automobile collegata.
  2. Quando arriva la luce del motore di controllo, i dati del sensore vengono inviati ad Azure Cosmos DB.
  3. Azure Cosmos DB crea o aggiorna nuovi documenti di dati del sensore, quindi queste modifiche vengono trasmessi al trigger di Funzioni di Azure per Azure Cosmos DB.
  4. Il trigger viene richiamato a ogni cambiamento nei dati nella raccolta dati del sensore, perché tutte le modifiche vengono trasmesse tramite il feed di modifiche.
  5. Una condizione di soglia viene usata nella funzione per inviare i dati del sensore al reparto garanzia.
  6. Se anche la temperatura supera un determinato valore, viene inviato un avviso al proprietario.
  7. L'associazione di output nella funzione aggiorna il record dell'auto in un altro contenitore di Azure Cosmos DB per archiviare le informazioni relative all'evento del motore di controllo.

L'immagine seguente mostra il codice scritto nel portale di Azure per questo trigger.

Creare un trigger di Funzioni di Azure per Azure Cosmos DB nel portale di Azure

Caso d'uso finanziario: trigger timer e associazione di input

Nelle implementazioni finanziarie, è possibile richiamare una funzione quando un saldo del conto bancario è inferiore a un determinato importo.

Implementazione: trigger timer con un'associazione di input di Azure Cosmos DB

  1. Usando un trigger timer, è possibile recuperare le informazioni di saldo del conto bancario archiviate in un contenitore di Azure Cosmos DB a intervalli di tempo usando un'associazione di input.
  2. Se il saldo è inferiore alla soglia di saldo più bassa impostata dall'utente, intervenire con un'azione di Funzioni di Azure.
  3. L'associazione di output può essere un'integrazione di SendGrid che invia un messaggio di posta elettronica da un account del servizio agli indirizzi di posta elettronica identificati per ognuno dei conti con saldo basso.

Le immagini seguenti mostrano il codice nel portale di Azure per questo scenario.

Il file Index.js per un trigger Timer per uno scenario finanziario

File Run.csx di un trigger timer per uno scenario finanziario

Caso d'uso Giochi - Trigger e associazione di output delle Funzioni di Azure per Azure Cosmos DB

Nei giochi, quando viene creato un nuovo utente, è possibile cercare altri utenti che potrebbero conoscerli usando Azure Cosmos DB per Gremlin. È quindi possibile scrivere i risultati in un database AZURE Cosmos DB o SQL per semplificare il recupero.

Implementazione: Utilizzare un trigger di Azure Functions e un binding di output per Azure Cosmos DB

  1. Usando un database a grafo di Azure Cosmos DB per archiviare tutti gli utenti, è possibile creare una nuova funzione con un trigger di Funzioni di Azure per Azure Cosmos DB.
  2. Ogni volta che viene inserito un nuovo utente, la funzione viene richiamata e quindi il risultato viene archiviato usando un'associazione di output.
  3. La funzione esegue una query sul database del grafo per cercare tutti gli utenti direttamente correlati al nuovo utente e restituisce il set di dati alla funzione.
  4. Questi dati vengono quindi archiviati in Azure Cosmos DB, che possono quindi essere facilmente recuperati da qualsiasi applicazione front-end che mostra il nuovo utente i propri amici connessi.

Caso d'uso retail - Più funzioni

Nelle implementazioni di vendita al dettaglio, quando un utente aggiunge un elemento al carrello, è ora possibile creare e richiamare funzioni per i componenti facoltativi della pipeline aziendale.

Implementazione: Più trigger Azure Functions per Azure Cosmos DB in ascolto di un solo contenitore

  1. È possibile creare più funzioni di Azure aggiungendo a ciascuna di esse i trigger di funzioni di Azure per Azure Cosmos DB, ognuno dei quali ascolta lo stesso feed di modifiche dei dati del carrello. Si noti che quando più funzioni sono in ascolto dello stesso feed di modifiche, è necessaria una nuova raccolta di lease per ogni funzione. Per altre informazioni sulle raccolte di lease, vedere Informazioni sulla libreria del processore dei feed delle modifiche.
  2. Ogni volta che un nuovo elemento viene aggiunto a un carrello acquisti degli utenti, ogni funzione viene richiamata in modo indipendente dal feed di modifiche dal contenitore del carrello acquisti.
    • Una funzione può usare il contenuto del carrello corrente per modificare la visualizzazione di altri elementi a cui l'utente potrebbe essere interessato.

    • Un'altra funzione può aggiornare i totali dell'inventario.

    • Un'altra funzione può inviare informazioni sui clienti per determinati prodotti al reparto marketing, che li invia un mailer promozionale.

      Qualsiasi reparto può creare una Funzione di Azure per Azure Cosmos DB ascoltando il feed di modifiche, assicurandosi che non ritardino gli eventi critici di elaborazione degli ordini.

In tutti questi casi d'uso, poiché la funzione ha disaccoppiato l'app stessa, non è necessario attivare temporaneamente nuove istanze dell'app. Funzioni di Azure attiva invece singole funzioni per completare i processi discreti in base alle esigenze.

Tooling

L'integrazione nativa tra Azure Cosmos DB e Funzioni di Azure è disponibile nel portale di Azure e in Visual Studio.

Perché scegliere l'integrazione di Azure Functions per l'elaborazione serverless?

Funzioni di Azure offre la possibilità di creare unità di lavoro scalabili o parti concise della logica che possono essere eseguite su richiesta, senza effettuare il provisioning o la gestione dell'infrastruttura. Usando Funzioni di Azure, non è necessario creare un'app completa per rispondere alle modifiche nel database di Azure Cosmos DB, è possibile creare piccole funzioni riutilizzabili per attività specifiche. È anche possibile usare i dati di Azure Cosmos DB come input o output in una funzione di Azure in risposta a eventi come richieste HTTP o trigger a tempo.

Azure Cosmos DB è il database consigliato per l'architettura di elaborazione serverless per i motivi seguenti:

  • Accesso immediato a tutti i dati: si ha accesso granulare a ogni valore archiviato perché Azure Cosmos DB indicizza automaticamente tutti i dati per impostazione predefinita e rende immediatamente disponibili tali indici. Ciò significa che è possibile eseguire costantemente query, aggiornare e aggiungere nuovi elementi al database e avere accesso immediato tramite Funzioni di Azure.

  • Senza schema. Azure Cosmos DB è senza schema, quindi è in grado di gestire in modo univoco qualsiasi output di dati da una funzione di Azure. Questo approccio "gestire qualsiasi cosa" semplifica la creazione di varie Funzioni che generano tutti output su Azure Cosmos DB.

  • Velocità effettiva scalabile. La larghezza di banda può essere ridimensionata verso l'alto e verso il basso immediatamente in Azure Cosmos DB. Se si dispone di centinaia o migliaia di funzioni che eseguono query e scrivono nello stesso contenitore, è possibile aumentare le UR/sec per gestire il carico. Tutte le funzioni possono funzionare in parallelo usando le UR/s allocate e i dati sono sicuramente coerenti.

  • Replica globale. È possibile replicare i dati di Azure Cosmos DB in tutto il mondo per ridurre la latenza, individuando i dati più vicini a dove si trovano gli utenti. Come per tutte le query di Azure Cosmos DB, i dati dei trigger basati su eventi vengono letti dai dati di Azure Cosmos DB più vicini all'utente.

Se si vuole eseguire l'integrazione con Funzioni di Azure per archiviare i dati e non è necessaria un'indicizzazione approfondita o se è necessario archiviare allegati e file multimediali, il trigger di Archiviazione BLOB di Azure può essere un'opzione migliore.

Vantaggi di Funzioni di Azure:

  • Guidato dagli eventi. Azure Functions è basato su eventi e può ascoltare un feed di modifiche da Azure Cosmos DB. Ciò significa che non è necessario creare la logica di ascolto, ma solo controllare le modifiche per cui si è in ascolto.

  • Nessun limite. Le funzioni vengono eseguite in parallelo e il servizio ne crea la quantità necessaria. I parametri sono impostati.

  • Buono per le attività rapide. Il servizio attiva nuove istanze di funzioni ogni volta che viene generato un evento e le chiude non appena la funzione viene completata. Si paga solo per il tempo in cui le funzioni sono in esecuzione.

Se non si è certi che Flow, App per la logica, Funzioni di Azure o Processi Web siano ottimali per l'implementazione, vedere Scegliere tra Flow, App per la logica, Funzioni e Processi Web.

Passaggi successivi

A questo punto colleghiamo davvero Azure Cosmos DB e Azure Functions: