Introduzione alle sottoscrizioni

Spesso, in ambienti distribuiti, si desidera che le applicazioni o i lavori reagiscano ai messaggi (eventi) generati da altri componenti, generalmente denominati produttori di eventi. Con Code Engine, le applicazioni o i lavori possono ricevere eventi di interesse sottoscrivendo i produttori di eventi. Le informazioni sugli eventi vengono ricevute come richieste POST HTTP per le applicazioni e come variabili d'ambiente per i lavori.

Code Engine supporta i seguenti tipi di produttori di eventi.

Cron
Il produttore di eventi cron è basato su cron e genera un evento a intervalli regolari. Utilizzare un produttore di eventi cron quando un'azione deve essere eseguita a intervalli ben definiti o in momenti specifici.
IBM Cloud Object Storage
Il produttore evento Object Storage genera eventi quando vengono apportate modifiche agli oggetti nei tuoi bucket di archiviazione oggetti. Ad esempio, quando gli oggetti vengono aggiunti a un bucket, un'applicazione può ricevere un evento e quindi eseguire un'azione in base a tale modifica, forse utilizzando il nuovo oggetto.
Kafka
Il produttore eventi Kafka controlla la presenza di nuovi messaggi in un'istanza Kafka. Quando crei una sottoscrizione Code Engine Kafka per una serie di argomenti, la tua applicazione o lavoro riceve un evento separato per ogni nuovo messaggio che viene visualizzato in uno degli argomenti.
Webhook
Puoi utilizzare i webhook GitHub per inviare gli eventi da un repository GitHub al tuo carico di lavoro Code Engine. L'evento viene inviato come una richiesta POST in uno dei tipi di contenuto supportati. Devi utilizzare un'applicazione con un endpoint pubblico per ricevere l'evento GitHub ; i lavori non sono supportati. Per ulteriori informazioni, vedi Invio di eventi GitHub a un'applicazione.

Per ulteriori informazioni sulle API di sottoscrizione, consultare Metodi CRD di sottoscrizione.

Sottoscrizioni per applicazioni e ridimensionamento delle applicazioni

Le applicazioni possono sottoscrivere più produttori di eventi, ma solo una app può ricevere eventi da ciascuna sottoscrizione. Tenere presente che le sottoscrizioni possono influire sul modo in cui un'applicazione viene ridimensionata. Ad esempio, se prevedi che la tua applicazione riceva molti eventi allo stesso tempo e l'elaborazione di ogni evento richiede diversi minuti, potresti aver bisogno di un valore di scala massimo superiore rispetto a quello che si avrebbe se ogni evento potesse essere elaborato rapidamente. Per ulteriori informazioni, vedi Configurazione del ridimensionamento dell'applicazione.

Tutti gli eventi consegnati alle applicazioni vengono ricevuti come messaggi HTTP. Gli eventi contengono alcune intestazioni di HTTP che aiutano a determinare rapidamente le informazioni chiave sugli eventi senza esaminare il corpo (la logica aziendale) dell'evento. Per ulteriori informazioni, vedere l'esempio HTTP intestazioni per un evento IBM Cloud Object Storage inviato a un'applicazione.

Sottoscrizioni per lavori e limitazioni di esecuzione lavori

Le sottoscrizioni possono influire sul numero di lavori avviati. Ad esempio, se il tuo lavoro effettua la sottoscrizione per eliminare le modifiche su un bucket Object Storage e tale bucket viene eliminato, viene eseguito un lavoro per ogni oggetto che si trovava in tale bucket e puoi raggiungere rapidamente la tua limitazione di 100 esecuzioni di lavori. Inoltre, devi considerare il runtime per ogni esecuzione di lavoro attivata da un evento. Ad esempio, se il produttore di eventi attiva 10 o più eventi al secondo e ogni lavoro viene eseguito per circa 20 secondi, il limite di esecuzione del job di 100 viene raggiunto in circa 10 secondi e tutte le successive esecuzioni del job vengono perse fino a quando non vengono completate le esecuzioni del job avviate in precedenza. Scegliere un lavoro come destinazione di sottoscrizione di eventi solo se il numero di eventi in arrivo è generalmente basso e il numero di picchi di eventi previsti in un periodo di tempo specifico è abbastanza basso da mantenere il numero di lavori in esecuzione al di sotto del limite della quota. Per ulteriori informazioni, vedi Limiti e quote per Code Engine.

Dopo 10 minuti, le esecuzioni di lavori create dalle sottoscrizioni vengono eliminate. Per ulteriori informazioni, consultare Dove viene eseguito il lavoro?.

Tutti gli eventi consegnati ai lavori vengono ricevuti come variabili di ambiente. Per maggiori informazioni, vedi Variabili di ambiente di esempio per un evento IBM Cloud Object Storage inviato a un lavoro.

Metadati di eventi

Gli eventi gestiti da Code Engine quando crei una sottoscrizione vengono modificati in modo che aderiscano al CloudEvents specifica. Questa specifica definisce una serie di attributi comuni che possono essere inclusi con ogni evento per fornire una serie comune di metadati. Esaminando i metadati, è possibile comprendere rapidamente le parti chiave del messaggio senza analizzare e comprendere l'intero payload dell'evento. Ad esempio, ogni evento consegnato a un'applicazione include un'intestazione HTTP chiamata ce-type, che indica il significato semantico (o "motivo") dell'evento. Un evento da un database potrebbe includere un ce-type valore di com.example.row.deleted, che indica che l'evento è stato generato perché una riga è stata eliminata nel database.

La seguente tabella elenca alcuni attributi comuni chiave. Ogni attributo indica se si tratta di un attributo obbligatorio sull'evento in ingresso o se è facoltativo.

Attributi comuni di CloudEvent
Intestazione Descrizione
ID Questo attributo richiesto è un ID univoco per l'evento. Due eventi dello stesso produttore di eventi non sono assegnati allo stesso valore.
Origine Questo attributo obbligatorio specifica il contesto in cui si è verificato l'evento. Ad esempio, per un sistema di archiviazione oggetti, questo valore potrebbe essere il bucket in cui risiede l'oggetto in questione.
Specversione Questo attributo obbligatorio indica la versione della specifica CloudEvents utilizzata dall'evento.
Immettere Questo attributo obbligatorio descrive il tipo di evento. Ad esempio, il tipo di evento potrebbe essere che una risorsa sia stata creata o eliminata.
Oggetto Questo attributo facoltativo indica la risorsa a cui è correlato l'evento. Ad esempio, in un sistema di archiviazione oggetti, questo valore potrebbe essere l'oggetto del bucket che è stato modificato.
Ora Questo attributo facoltativo è la data e l'ora in cui si è verificata la ricorrenza.

Per ulteriori informazioni sull'elenco completo di attributi, consultare la specifica CloudEvents.

In Code Engine, quando gli eventi vengono consegnati alle applicazioni, gli attributi di CloudEvent appaiono come intestazioni di HTTP, precedute da ce-. Quando gli eventi vengono consegnati ai lavori batch, gli attributi vengono visualizzati come variabili di ambiente, preceduti da CE_ e il nome dell'intera variabile è in maiuscolo.

Esempio HTTP per un evento IBM Cloud Object Storage inviato a un'applicazione

ce-id: 3fb2c04e-a660-4640-8899-b82efb8169b6
ce-source: https://cloud.ibm.com/catalog/services/cloud-object-storage/mybucket
ce-specversion: 1.0
ce-subject: object-69-144
ce-time: 2021-08-17T20:22:02.917Z
ce-type: com.ibm.cloud.cos.document.delete

Variabili di ambiente di esempio per un evento IBM Cloud Object Storage inviato a un lavoro

CE_DATA={"bucket":"mybucket","endpoint":"","key":"Notes.rtf","notification":{"bucket_name":"mybucket","content_type":"text/rtf","event_type":"Object:Delete","format":"2.0","object_length":"4642","object_name":"Notes.rtf","request_id":"b59727ee-9c4e-446a-9261-5616f6d1283b","request_time":"2021-04-13T20:10:37.631Z"},"operation":"Object:Delete"}  
CE_ID=b59727ee-9c4e-446a-9261-5616f6d1283b  
CE_SOURCE=https://cloud.ibm.com/catalog/services/cloud-object-storage/mybucket  
CE_SPECVERSION=1.0  
CE_TIME=2021-08-17T20:22:02.917Z  
CE_TYPE=com.ibm.cloud.cos.document.delete  

Cosa succede quando creo un abbonamento?

Per impostazione predefinita, il comando subscription cron create, subscription cos create e i comandi subscription kafka create controllano prima se l'applicazione o il job di destinazione esiste. Se il controllo della destinazione non riesce perché l'applicazione o il job non esistono nel progetto, i comandi per la creazione della sottoscrizione restituiscono un errore. Se si desidera creare una sottoscrizione senza prima creare l'applicazione, utilizzare l'opzione --force. Utilizzando l'opzione --force, il comando ignora il controllo di destinazione. Notare che il campo Ready della sottoscrizione mostra il valore false fino a quando non viene creato il lavoro o l'applicazione di destinazione. Quindi, la sottoscrizione passa automaticamente allo stato Ready: true.

Una volta creata la sottoscrizione, viene eseguito ripetutamente il polling dello stato per verificarne la disponibilità. Per impostazione predefinita, questo polling dura 15 secondi prima del timeout. È possibile modificare la quantità di tempo prima del timeout del comando utilizzando l'opzione --wait-timeout. È anche possibile ignorare il polling dello stato impostando l'opzione --no-wait su false.

Puoi visualizzare lo stato della tua sottoscrizione utilizzando i comandi della CLI subscription cron get, subscription cos get o subscription kafka get.