Pianificazione per Code Engine

IBM Cloud® Code Engine supporta questi tipi fondamentali di carichi di lavoro: applicazioni, processi, funzioni e flotte.

Un'applicazione, o app, esegue il codice per servire le richieste HTTP. Oltre alle richieste HTTP tradizionali, IBM Cloud® Code Engine supporta anche le applicazioni che utilizzano i WebSockets come protocollo di comunicazione. Il numero di istanze in esecuzione di un'applicazione viene automaticamente ridimensionato (fino a zero) in base alle richieste in entrata e alle tue impostazioni di configurazione. Un'app contiene una o più revisioni. Una revisione rappresenta una versione immutabile delle proprietà di configurazione dell'applicazione. Ogni aggiornamento di una proprietà di configurazione dell'app crea una nuova revisione dell'applicazione.

Un lavoro esegue una o più istanze del codice eseguibile in parallelo. A differenza delle applicazioni, che gestiscono le richieste HTTP, i lavori sono progettati per essere eseguiti una sola volta e poi terminare. Quando si crea un job, è possibile specificare le informazioni di configurazione del workload che vengono utilizzate ogni volta che il job viene eseguito.

Una funzione è un frammento di codice stateless che esegue compiti quando viene invocato da richieste HTTP. Con le funzioni di IBM Code Engine è possibile eseguire la logica aziendale in modo scalabile e senza server. Le funzioni di IBM Code Engine forniscono un ambiente di runtime ottimizzato per supportare scenari a bassa latenza e scale-out rapido. Il codice della funzione può essere scritto in un runtime gestito che include versioni specifiche di Node.js o Python.

Una flotta, detta anche flotta serverless, esegue una o più istanze di codice utente per completare una serie di compiti specifici. Le flotte sono in grado di elaborare grandi carichi di lavoro ad alta intensità di calcolo, consentono il controllo dei profili delle macchine e possono essere eseguite su risorse GPU. Le flotte sono single tenant, implementano l'accodamento dinamico delle attività e forniscono un controllo completo sulla configurazione del profilo della macchina. Inoltre, le flotte possono collegarsi a Virtual Private Cloud (VPC) per accedere in modo sicuro ai dati e ai servizi degli utenti.

Confronto tra le applicazioni, i lavori, le funzioni e le flotte di Code Engine
Caratteristica Applicazione Lavoro Funzione Flotta
Tempo di esecuzione (durata) Esecuzione prolungata (10 minuti per richiesta) Lunga durata (fino a 24 ore) Short - running (2 minuti o meno) Lunga durata (da pochi minuti a settimane)
Latenza di avvio Medio Inizio pianificato Basso Basso
Risoluzione Esegui - continuamente Esegui fino al completamento Esegui fino al completamento Esegui fino al completamento
Richiamo Su richiesta o in esecuzione permanente Pianificato Su richiesta, istantaneo Pianificato
Modello di programmazione Esecuzione e creazione basata sui contenitori Esecuzione e creazione basata sui contenitori File di codice sorgente specifici della lingua e metadati di dipendenza Esecuzione e creazione basata sui contenitori
Parallelismo Esecuzione parallela, flessibile Esecuzione parallela da bassa a media Esecuzione parallela elevata Esecuzione parallela e accodamento elevati
Ridimensionamento incrementale Basato sul numero di richieste Basato sulla definizione del carico di lavoro Basato su eventi o chiamate dirette In base al numero di attività e di istanze concorrenti
Isolamento Multi-tenant Multi-tenant Multi-tenant Tenant singolo
Supporto GPU No No No
Controllo della configurazione della macchina Nessun controllo Nessun controllo Nessun controllo Controllo completo
Connettività VPC Attraverso il Sentiero Privato Attraverso il Sentiero Privato Attraverso il Sentiero Privato Nativo (tramite pool di sottoreti)
Ottimizzato per Workload di lunga durata, estremamente complessi e scalabilità on - demand Carichi di lavoro pianificati o pianificati con elevate richieste di risorse Tempi di avvio e scalabilità rapida Carichi di lavoro su larga scala e ad alta intensità di calcolo

Casi di utilizzo di Code Engine

Mentre i casi di uso per Code Engine variano ampiamente, ecco alcuni esempi per iniziare.

Esperienza con i container, ma nessuna competenza o budget per la gestione dei cluster
Sei uno sviluppatore che conosce i contenitori. Tuttavia, non si desidera la complessità o il tempo di utilizzo della gestione di un cluster. Con Code Engine, non devi preoccuparti delle competenze richieste per gestire un cluster o del tempo necessario per farlo. Invece, Code Engine elimina queste complessità e il team di IBM gestisce la tua infrastruttura come parte del servizio IBM Cloud.
Carichi di lavoro con picchi intermittenti
Il tuo sito web è occupato nei fine settimana, ma sperimenta meno traffico durante la settimana. Dal momento che questo sito web sperimenta esplosioni di attività seguite da periodi di inattività, Code Engine è un'ottima soluzione. Con Code Engine, l'applicazione del sito web ridimensiona automaticamente le istanze dell'applicazione per l'incremento del traffico e quindi esegue nuovamente il back down per i periodi di inattività (anche fino a zero).
Carichi di lavoro batch integrati con lo spazio di archiviazione
Il lavoro batch elabora gli stipendi dei dipendenti alla fine di ogni mese. Poiché questo processo viene eseguito mensilmente, rimane inattivo per la maggior parte del tempo, ma quando viene eseguito consuma una quantità elevata di CPU e memoria. Il lavoro batch deve essere integrato con la memoria per memorizzare i risultati. Utilizzando Code Engine, puoi integrare il lavoro batch con IBM Cloud Object Storage e vengono addebitati solo per le risorse che il lavoro utilizza quando è in esecuzione. Quando il lavoro è inattivo, non sta consumando alcuna risorsa e quindi non sta incorrendo in addebiti. Tuttavia, il lavoro potrebbe avere dei costi con l'istanza IBM Cloud Object Storage.
Porta il tuo carico di lavoro
Parte del tuo lavoro è creare immagini e distribuirle. Hai esperienza con la creazione di immagini contenitore e con la loro distribuzione, ma vuoi semplificare questo processo in modo da poterti concentrare su altre attività. Con Code Engine, puoi creare immagini e distribuirle direttamente dalla stessa interfaccia, semplificando così le attività quotidiane e liberando tempo per sviluppare altro codice.
Test, proof - of - concepts o "tire-kicking"
Sei interessato a saperne di più sull'architettura basata sui contenitori. Il team ha sviluppato un'applicazione, ma desidera testarla prima che l'applicazione venga presentata agli stakeholder. Questa applicazione è piccola, quindi non vogliono pagare nemmeno un piccolo cluster dedicato. In questo caso, puoi testare l'applicazione e quindi fornire una prova di progettazione alle parti interessate senza il costo che un cluster dedicato potrebbe richiedere.

Quando utilizzare un'app, un lavoro o una funzione

Applicazioni e lavori sono molto simili, alla fine, entrambi semplicemente eseguono il codice. Tuttavia, ci sono alcuni aspetti fondamentali da considerare quando si decide di strutturare il proprio codice come app o job.

Il tuo codice ha bisogno di rispondere a un evento?

Nel contesto di Code Engine, qualsiasi richiesta HTTP in arrivo (anche la richiesta di caricare una pagina web) o una chiamata API REST è considerata un evento. Il concetto di event-driven è spesso il fattore chiave quando si sceglie tra un'applicazione e un lavoro perché, per definizione, le applicazioni vengono eseguite in seguito a una richiesta HTTP, mentre i lavori vengono eseguiti in seguito a un'invocazione.

Se si sa che il carico di lavoro risponde alle richieste HTTP in entrata, l'applicazione è la scelta giusta. Tuttavia, se il carico di lavoro viene eseguito e quindi eseguito, un lavoro è più adatto.

Come si ridimensiona il tuo codice?

Sia le app che i lavori sono scalabili. Le applicazioni vengono ridimensionate in base a criteri misurabili in tempo reale, ad esempio il numero di richieste in entrata attive, poiché ogni istanza della tua applicazione potrebbe essere in grado di elaborare solo un determinato numero di richieste simultanee alla volta. I lavori vengono ridimensionati in base a quante istanze vengono specificate quando il lavoro viene creato.

Se si sa che si vuole eseguire un numero specifico di istanze del codice e che ogni istanza può essere eseguita senza una richiesta HTTP in entrata, un lavoro è la scelta giusta. Tuttavia, se il numero di istanze deve scalare dinamicamente in base al carico HTTP in entrata, le app sono più adatte.

Scenari comuni per Code Engine

Leggere alcuni di questi scenari comuni per comprendere quando scegliere un tipo specifico di carico di lavoro.

Il carico di lavoro richiede una bassa latenza o è interattivo?
Se il tuo carico di lavoro richiede che un client o un utente attenda in modo sincrono la risposta della richiesta e la risposta deve essere disponibile entro pochi millisecondi, utilizza un'applicazione. Le applicazioni forniscono un endpoint raggiungibile esternamente e rispondono in modo sincrono alla richiesta. Esempi di tali carichi di lavoro sono siti Web, chatbot e applicazioni mobili. Utilizzare applicazioni.
Il calcolo è leggero e richiede poca CPU, memoria e I/O?
Se il carico di lavoro è leggero e richiede una bassa quantità di CPU, memoria e I/O, l'opzione di simultaneità disponibile per le applicazioni potrebbe essere utile. Un esempio tipico è un API Server che fornisce operazioni di base e viene supportato con un database NoSQL. Questi tipi di richieste in genere hanno una piccola quantità di dati e richiedono una memoria insufficiente o un numero inferiore di cicli CPU. Con una simultaneità più elevata, l'applicazione può elaborare i dati di una prima richiesta mentre la seconda è in attesa di I/O. Poiché i requisiti di CPU e memoria sono bassi, molte richieste possono essere eseguite contemporaneamente. Utilizzare applicazioni.
Il calcolo è collegato alla CPU, alla memoria o all'I/O?
Per elaborare una specifica quantità di dati, in cui ogni porzione di dati è grande e richiede una grande quantità di CPU e memoria, i lavori sono in genere la scelta migliore. Tuttavia, se il carico di lavoro richiede un modello di richiesta - risposta, è anche possibile utilizzare le applicazioni. In entrambi i casi, l'attività di calcolo viene eseguita con una singola simultaneità. Ogni istanza dell'applicazione o attività di lavoro elabora solo una richiesta o una porzione di dati contemporaneamente per sfruttare completamente le risorse configurate per l'istanza. Il parallelismo viene raggiunto dal numero di istanze o attività, in cui il costo di creazione di un'attività aggiuntiva è trascurabile a causa dei vincoli elevati delle risorse. Un esempio tipico è l'elaborazione dei dati immagine in un bucket Object Storage o che serve i modelli di machine learning. Utilizzare applicazioni o lavori.
Il calcolo viene eseguito per un lungo periodo di tempo?
Se il calcolo viene eseguito per durate più lunghe, i lavori sono la scelta migliore a causa della loro natura asincrona. La durata massima delle applicazioni è sempre limitata perché mantenere una connessione aperta su scala è costoso. I carichi di lavoro tipici sono i modelli di machine learning di addestramento o l'ottimizzazione iper - parametro. Utilizzare lavori.
È possibile specificare la simultaneità del calcolo in anticipo?
Se si conosce la quantità di calcolo da eseguire, è possibile eseguire un processo con il numero esatto di istanze fino al completamento. Esempi tipici sono l'ottimizzazione di iperparametri o l'addestramento di una rete neurale. Utilizzare lavori.
Il carico di lavoro reagisce ad un evento?
Se il tuo carico di lavoro è necessario per reagire a un evento, come un commit Git che viene inviato al tuo repository, un oggetto caricato in un bucket Object Storage o un documento modificato nel tuo database, utilizza le applicazioni. Le applicazioni forniscono un endpoint che può essere configurato per ricevere eventi dall'origine eventi. Utilizzare applicazioni.
È necessario elaborare una grande quantità di dati in breve tempo in risposta a eventi o richieste?
Se il tuo carico di lavoro richiede una risposta rapida a richieste o eventi non previsti, le applicazioni in genere si adattano meglio perché le applicazioni vengono ridimensionate dinamicamente, anche da zero. Utilizzare applicazioni.
Combinazione di app e lavori
È anche possibile combinare app e lavori, in cui un'applicazione può avviare un lavoro per esternalizzare calcoli specifici. I lavori possono anche interrogare un'applicazione. Un esempio tipico di una combinazione di lavori e applicazioni è la formazione e la fornitura di modelli di machine learning. I lavori vengono generalmente utilizzati per addestrare i modelli e le applicazioni vengono utilizzate per servire i modelli. Utilizzare applicazioni e lavori.