Mengelola Peluncuran Layanan

Halaman ini menjelaskan cara menggunakan Infrastruktur Layanan untuk melakukan peluncuran konfigurasi layanan secara bertahap.

Mengupdate konfigurasi layanan untuk layanan produksi berisiko dan dapat berpotensi menyebabkan pemadaman layanan. Dengan Service Management API, Anda dapat meluncurkan perubahan konfigurasi secara bertahap, sehingga mengurangi dampak yang disebabkan oleh konfigurasi layanan yang buruk.

Anda dapat men-deploy beberapa versi konfigurasi layanan dan menentukan cara versi ini akan digunakan pada runtime, semuanya dengan memanggil metode services.rollouts.create untuk memulai Peluncuran. Maksimal 5 konfigurasi layanan yang dapat diluncurkan sekaligus.

Sebelum memulai

Untuk menjalankan contoh dalam panduan ini, pastikan Anda terlebih dahulu mengikuti petunjuk untuk menyelesaikan penyiapan awal di artikel Mulai Menggunakan Service Management API.

Menjalankan peluncuran

Dengan asumsi bahwa Anda memiliki endpointsapis.appspot.com layanan terkelola yang dibangun di Service Management API, Anda dapat melakukan langkah-langkah berikut untuk meluncurkan perubahan konfigurasi layanan secara bertahap dan terkontrol.

Misalnya, endpointsapis.appspot.com saat ini menggunakan konfigurasi layanan old, dan Anda ingin mengubahnya untuk menggunakan konfigurasi layanan new. Daripada menggunakan konfigurasi layanan baru secara instan oleh semua traffic produksi, Anda dapat membuat peluncuran untuk menguji konfigurasi layanan baru dengan 10% dari total traffic:

# 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"
  }
}

Setelah peluncuran dibuat, Anda bisa mendapatkan status peluncuran dengan menjalankan perintah berikut, dengan mengganti ID peluncuran Anda sendiri:

# 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"
  }
}

Setelah memastikan peluncuran canary telah selesai dan konfigurasi layanan baru berfungsi dengan baik, Anda dapat membuat peluncuran agar dapat melayani 100% traffic:

# 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"
  }
}

Jika ada masalah yang diamati selama tahap pengujian, Anda dapat melakukan roll back ke konfigurasi lama dengan melakukan:

# 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"
 }

}

Melihat histori peluncuran

Service Management API menyimpan histori peluncuran. Untuk melihat histori peluncuran endpointsapis.appspot.com, Anda dapat melakukan:

# 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"
    },
    ...
  ]
}