בדף הזה נסביר איך משתמשים ב-Service Infrastructure כדי להשיק בצורה מדורגת את הגדרת השירות.
עדכון ההגדרות לשירות שפועל בסביבת הייצור עלול להיות מסוכן ולגרום להפסקה זמנית בשירות. באמצעות Service Management API אפשר להשיק בהדרגה את השינויים בהגדרות, כדי לצמצם את ההשפעה של הגדרות שגויות בשירות.
באמצעות השיטה services.rollouts.create אתם יכולים ליזום השקה של הגדרת השירות, כדי לפרוס כמה גרסאות של ההגדרות ולהחליט איך להשתמש בהן בסביבת זמן ריצה.
ניתן להשיק עד 5 הגדרות שירות לכל היותר בכל פעם.
לפני שמתחילים
כדי להפעיל את הדוגמאות במדריך הזה, צריך לבצע קודם את הפעולות שמוסברות בתחילת העבודה עם Service Management API.
השקה של הגדרת השירות
נניח שיש לכם שירות מנוהל בשם endpointsapis.appspot.com, שמבוסס על הממשק Service Management API. תוכלו לבצע את הפעולות הבאות כדי להשיק שינוי בהגדרת השירות באופן מדורג ומבוקר.
לדוגמה, נגיד שהשירות endpointsapis.appspot.com משתמש כרגע בהגדרה old, ואתם רוצים לשנות אותו כך שישתמש בהגדרה new. במקום שהשירות יתחיל להשתמש בהגדרה החדשה באופן מיידי לכל תעבורת הנתונים בסביבת הייצור, אתם יכולים ליצור השקה, כדי לבדוק את הגדרת השירות החדשה עם 10% מתעבורת הנתונים הכוללת:
# 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"
}
}
לאחר יצירת ההשקה, אתם יכולים לבדוק מה סטטוס ההשקה באמצעות הפקודה הבאה (אל תשכחו להחליף את מזהה ההשקה שבדוגמה במזהה שלכם):
# 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"
}
}
אחרי שווידאתם שהשקת הגרסה הראשונית (canary) הושלמה ושהגדרת השירות החדשה תקינה, תוכלו ליצור השקה ל-100% מתעבורת הנתונים:
# 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"
}
}
אם גיליתם בעיות בשלב הבדיקה, תוכלו לבצע את הפעולות הבאות כדי לחזור להגדרת השירות הקודמת:
# 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"
}
}
הצגת היסטוריית ההשקות
היסטוריית ההשקות נשמרת ב-Service Management API. כדי להציג את היסטוריית ההשקות של endpointsapis.appspot.com, תוכלו להריץ את הפקודה הבאה:
# 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"
},
...
]
}