Questa pagina descrive come utilizzare Service Infrastructure per eseguire un implementazione graduale della configurazione del servizio.
L'aggiornamento della configurazione del servizio di un servizio di produzione è rischioso e può potrebbero causare un'interruzione del servizio. L'API Service Management ti consente di implementare gradualmente le modifiche alla configurazione, mitigando così l'impatto causato da configurazioni errate dei servizi.
Puoi implementare più versioni di configurazione del servizio e
definire come verranno utilizzate queste versioni in fase di esecuzione, il tutto tramite la chiamata al
metodo
services.rollouts.create
per avviare un
rollout.
Possono essere implementate al massimo 5 configurazioni di servizio alla volta.
Prima di iniziare
Per eseguire gli esempi in questa guida, assicurati innanzitutto di seguire le istruzioni per completare la configurazione iniziale in Introduzione all'API Service Management.
Esecuzione dell'implementazione
Supponendo di avere un servizio gestito
endpointsapis.appspot.com
basato sull'API Service Management, puoi eseguire i seguenti passaggi per implementare una modifica alla configurazione del servizio in modo graduale e controllato.
Ad esempio, endpointsapis.appspot.com
sta attualmente utilizzando il servizio
configurazione old
e vuoi modificarla per utilizzare la configurazione del servizio
new
. Anziché utilizzare istantaneamente la nuova configurazione del servizio
per tutto il traffico di produzione, puoi creare un'implementazione per testare il nuovo servizio
con il 10% del traffico totale:
# Create rollout to test the new configuration with 10% traffic.
$ gcurl -d '{
"rolloutId": "canary-rollout",
"serviceName": "endpointsapis.appspot.com",
"trafficPercentStrategy": {
"percentages": {
"new": 10,
"old": 90
}
}
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
"name": "operations/rollouts.endpointsapis.appspot.com:canary-rollout"
"metadata": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
"resourceNames": [
"services/endpointsapis.appspot.com/rollouts/canary-rollout"
],
"startTime": ...
},
"response": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
"rolloutId": "canary-rollout",
"createTime": ...
"trafficPercentStrategy": {
"percentages": {
"old": 90,
"new": 10,
}
},
"serviceName": "endpointsapis.appspot.com"
}
}
Una volta creata l'implementazione, puoi ottenere lo stato dell'implementazione eseguendo il seguente comando, sostituendo il tuo ID implementazione:
# Get rollout status of `operations/rollouts.endpointsapis.appspot.com:canary-rollout`.
$ gcurl https://servicemanagement.googleapis.com/v1/operations/rollouts.endpointsapis.appspot.com:canary-rollout
{
"name": "operations/rollouts.endpointsapis.appspot.com:canary-rollout",
"metadata": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
"resourceNames": [
"services/endpointsapis.appspot.com/rollouts/canary-rollout"
],
"steps": [
{
"description": "update Service Controller",
"status": "DONE"
}
],
"progressPercentage": 100,
"startTime": ...
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
"rolloutId": "canary-rollout",
"createTime": ...
"status": "SUCCESS",
"trafficPercentStrategy": {
"percentages": {
"old": 90,
"new": 10,
}
},
"serviceName": "endpointsapis.appspot.com"
}
}
Dopo aver verificato che l'implementazione canary sia stata completata e che la configurazione del nuovo servizio sia corretta, puoi creare un'implementazione per consentire il servizio al 100% del traffico:
# Create rollout to let new configuration serve 100% traffic.
$ gcurl -d '{
"rolloutId": "full-rollout",
"serviceName": "endpointsapis.appspot.com",
"trafficPercentStrategy": {
"percentages": {
"new": 100,
}
}
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
"name": "operations/rollouts.endpointsapis.appspot.com:full-rollout",
"metadata": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
"resourceNames": [
"services/endpointsapis.appspot.com/rollouts/full-rollout"
],
"startTime": ...
},
"response": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
"rolloutId": "full-rollout",
"createTime": ...
"trafficPercentStrategy": {
"percentages": {
"new": 100,
}
},
"serviceName": "endpointsapis.appspot.com"
}
}
Se si osservano problemi durante la fase di test, puoi eseguire il rollback configurazione precedente:
# Rollback to the old configuration.
$ gcurl -d '{
"rolloutId": "rollout-to-old",
"serviceName": "endpointsapis.appspot.com",
"trafficPercentStrategy": {
"percentages": {
"old": 100,
}
}
}' https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
"name": "operations/rollouts.endpointsapis.appspot.com:rollout-to-old",
"metadata": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
"resourceNames": [
"services/endpointsapis.appspot.com/rollouts/rollout-to-old"
],
"startTime": ...
},
"response": {
"@type": "type.googleapis.com/google.api.servicemanagement.v1.Rollout",
"rolloutId": "rollout-to-old",
"createTime": ...
"trafficPercentStrategy": {
"percentages": {
"old": 100,
}
},
"serviceName": "endpointsapis.appspot.com"
}
}
Visualizzazione della cronologia dell'implementazione
L'API Service Management conserva una cronologia delle implementazioni. Per visualizzare
cronologia di implementazione per endpointsapis.appspot.com
, puoi:
# List rollout history for `endpointsapis.appspot.com`.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/rollouts
{
"rollouts": [
{
"rolloutId": "canary-rollout",
"createTime": ...
"status": "IN_PROGRESS",
"trafficPercentStrategy": {
"percentages": {
"old": 90,
"new": 10
}
},
"serviceName": "endpointsapis.appspot.com"
},
{
"rolloutId": "old-rollout",
"createTime": ...
"status": "SUCCESS",
"trafficPercentStrategy": {
"percentages": {
"old": 100
}
},
"serviceName": "endpointsapis.appspot.com"
},
...
]
}