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.
| 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.