All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan mekanisme fallback ASM

Last Updated:Jun 22, 2026

Mekanisme fallback menentukan aksi alternatif ketika panggilan layanan gagal. Jika sebuah layanan mikro gagal atau tidak tersedia, mekanisme ini memanggil layanan cadangan untuk menangani permintaan, sehingga menjamin stabilitas dan ketersediaan sistem. Misalnya, jika titik akhir layanan tidak tersedia, Anda dapat menggunakan mekanisme fallback untuk meneruskan permintaan ke versi layanan cadangan, memastikan permintaan klien ditangani tanpa error atau gangguan. ASM mendukung mekanisme ini melalui parameter fallback dalam VirtualService. Topik ini menjelaskan cara menggunakan mekanisme fallback di ASM.

Prasyarat

  • Anda memiliki instans ASM Edisi Perusahaan atau Edisi Ultimate versi 1.17.2.22 atau yang lebih baru. Untuk informasi selengkapnya, lihat Buat instans ASM.

    Catatan

    Jika instans ASM Anda versi sebelum 1.17, perbarui instans tersebut ke versi 1.17.2.22 atau yang lebih baru, atau submit a ticket untuk dukungan teknis. Untuk informasi selengkapnya tentang cara memperbarui instans, lihat Tingkatkan instans ASM.

  • Kluster ACK telah ditambahkan ke instans ASM. Untuk informasi selengkapnya, lihat Tambahkan kluster ke instans ASM.

  • Contoh Bookinfo telah diterapkan. Untuk informasi selengkapnya, lihat Terapkan aplikasi di kluster yang terkait dengan instans ASM.

  • Versi sidecar pada bidang data adalah 1.17 atau yang lebih baru.

    Catatan

    Anda dapat melihat versi sidecar setiap Pod bisnis di halaman Instances Status pada ASM console. Untuk informasi selengkapnya, lihat Upgrade management.

Konfigurasi

Topik ini menggunakan layanan reviews dari aplikasi contoh Bookinfo sebagai contoh. Ketika layanan productpage mengakses versi v1, v2, dan v3 dari layanan reviews, jika versi v3 tidak tersedia, mekanisme fallback mengarahkan permintaan ke versi v2, sehingga mencegah layanan mengembalikan error 503.

Anda dapat mengklik Configuration file untuk mengunduh file YAML yang digunakan dalam topik ini.

Langkah 1: Akses contoh Bookinfo

  1. Buat file bernama reviews.yaml dengan konten berikut untuk mendeklarasikan versi v1, v2, dan v3 dari layanan reviews.

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
  2. Di lingkungan KubeConfig Anda, jalankan perintah berikut untuk menerapkan DestinationRule.

    kubectl apply -f reviews.yaml
  3. Gunakan salah satu metode berikut untuk mendapatkan alamat IP gerbang masuk.

    • Metode 1: Jalankan perintah berikut.

    kubectl get svc -n istio-system  istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
  4. Di browser, kunjungi http://${YourGatewayIp}/productpage.

    ${YourGatewayIp} adalah IP gateway yang Anda peroleh pada langkah sebelumnya. Anda dapat mengidentifikasi versinya berdasarkan nilai Reviews served by atau bentuk bintangnya. Versi v1 tidak memiliki bintang, versi v2 memiliki bintang hitam, dan versi v3 memiliki bintang merah.

    Sebagai contoh, nilai reviews-v2 menunjukkan versi v2, yang menampilkan bintang hitam.v2版本示例..png

    Refresh halaman beberapa kali. Permintaan kini diseimbangkan secara load-balanced di antara versi v1, v2, dan v3 dari layanan reviews.

Langkah 2: Definisikan rute dan aturan fallback

  1. Buat file bernama reviews-route-fallback-sample1.yaml dengan konten berikut.

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: reviews-route
      namespace: default
    spec:
      hosts:
        - reviews
      http:
        - route:
            - destination:
                host: reviews
                subset: v3
              fallback:
                target:
                  host: reviews
                  subset: v2
    
  2. Di lingkungan KubeConfig Anda untuk instans ASM, jalankan perintah berikut untuk menerapkan rute dan aturan fallback untuk layanan reviews.

    kubectl apply -f reviews-route-fallback-sample1.yaml
  3. Di browser web, kunjungi http://${YourGatewayIp}/productpage dan terus refresh halaman.

    Anda akan melihat bahwa permintaan secara konsisten diarahkan ke versi v3 dari layanan reviews. Setelah direfresh, halaman menunjukkan bahwa layanan ulasan buku disediakan oleh reviews-v3, dan ulasan tersebut mencakup peringkat bintang merah.

  4. Simulasikan kegagalan versi reviews-v3 dengan mengatur jumlah replikanya menjadi 0:

    kubectl scale deployment reviews-v3 --replicas=0
  5. Di browser Anda, kunjungi http://${YourGatewayIp}/productpage dan refresh halaman berulang kali.

    Anda akan melihat bahwa permintaan berhasil dialihkan ke versi v2 dari layanan reviews. Anda dapat memverifikasi bahwa fallback terjadi dengan menambahkan bidang terkait fallback ke format log akses kustom, lalu memeriksa log tersebut.

    Verifikasi fallback

    1. Tambahkan bidang berikut ke format log akses kustom. Untuk informasi selengkapnya, lihat Sesuaikan konten log akses bidang data.

      Field

      Value

      Description

      fallback_path

      %DYNAMIC_METADATA(com.aliyun.fallback:fallback-path)%

      Jalur spesifik fallback. Misalnya, A:B menunjukkan bahwa permintaan dialihkan dari A ke B. A:B:C menunjukkan bahwa permintaan dialihkan dari A ke B, lalu dari B ke C jika B juga tidak sehat.

      fallback_final_cluster_name

      %DYNAMIC_METADATA(com.aliyun.fallback:final-cluster)%

      Jika fallback terjadi, ini adalah kluster tujuan. Misalnya, jika service1|v1 tidak ada, permintaan dialihkan ke service|base.

      fallback_result

      %DYNAMIC_METADATA(com.aliyun.fallback:fallback-result)%

      Hasil fallback. Jika fallback gagal, kegagalan permintaan dikaitkan dengan kluster tujuan asli.

    2. Lihat log istio-proxy untuk productpage-v1.

      Log berikut menunjukkan fallback dari reviews-v3 ke reviews-v2:

      {
          "authority":"reviews:9080",
          "authority_for":"reviews:9080",
          "bytes_received":"0",
          "bytes_sent":"442",
          "downstream_local_address":"192.168.255.46:9080",
          "downstream_remote_address":"172.16.0.252:57238",
          "duration":"10",
          "fallback_path":"outbound|9080|v3|reviews.default.svc.cluster.local:outbound|9080|v2|reviews.default.svc.cluster.local",
          "fallback_final_cluster_name":"outbound|9080|v2|reviews.default.svc.cluster.local",
          "fallback_result":"fallback successful",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/reviews/0",
          "protocol":"HTTP/1.1",
          "request_id":"15b2dffc-5f3f-4060-b9fa-898eab08****",
          "requested_server_name":"-",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"-",
          "start_time":"2023-05-30T07:02:26.990Z",
          "trace_id":"18b3aed8af41****",
          "upstream_cluster":"outbound|9080|v2|reviews.default.svc.cluster.local",
          "upstream_host":"172.16.0.11:9080",
          "upstream_local_address":"172.16.0.252:44448",
          "upstream_service_time":"9",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"-"
      }

      Anda dapat menemukan bidang baru berikut dalam log tersebut.

      "fallback_path":"outbound|9080|v3|reviews.default.svc.cluster.local:outbound|9080|v2|reviews.default.svc.cluster.local"
      "fallback_final_cluster_name":"outbound|9080|v2|reviews.default.svc.cluster.local"
      "fallback_result":"fallback successful"

      Log tersebut menunjukkan tujuan awal adalah v3. Karena instans v3 tidak tersedia, permintaan dialihkan ke v2.

Langkah 3: Konfigurasikan fallback dengan routing berbobot

  1. Jalankan perintah berikut untuk membuat versi reviews-v3 tersedia kembali.

    kubectl scale deployment reviews-v3 --replicas=1
  2. Buat file bernama reviews-route-fallback-sample2.yaml dengan konten berikut untuk memodifikasi definisi reviews-route.

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: reviews-route
      namespace: default
    spec:
      hosts:
        - reviews 
      http:
        - route:
            - destination:
                host: reviews 
                subset: v3
              fallback:
                target:
                  host: reviews 
                  subset: v2
              weight: 50
            - destination:
                host: reviews 
                subset: v2
              fallback:
                target:
                  host: reviews 
                  subset: v1
              weight: 50
          retries:
            attempts: 0
  3. Jalankan perintah berikut untuk menerapkan rute dan aturan fallback baru untuk layanan reviews.

    kubectl apply -f reviews-route-fallback-sample2.yaml
  4. Di browser Anda, kunjungi http://${YourGatewayIp}/productpage dan refresh halaman berulang kali.

    Anda akan melihat bahwa permintaan diarahkan ke versi v2 dan v3 dari layanan reviews dengan rasio 50:50. Pada contoh ini, retry dinonaktifkan agar hasilnya lebih jelas.

  5. Jalankan perintah berikut untuk mengatur jumlah replika v3 menjadi 0 dan verifikasi bahwa aturan fallback-nya bekerja sesuai harapan.

    kubectl scale deployment reviews-v3 --replicas=0

    Refresh halaman productpage beberapa kali. Anda akan melihat bahwa permintaan secara konsisten diarahkan ke versi v2, yang merupakan perilaku yang diharapkan.

  6. Jalankan perintah berikut untuk mengatur jumlah replika v2 menjadi 0.

    kubectl scale deployment reviews-v2 --replicas=0

    Jika Anda terus-menerus merefresh halaman productpage, Anda akan menemukan bahwa sekitar 50% waktu akses ke layanan reviews gagal. Sisanya 50%, permintaan dikirim ke versi v2. Karena versi v2 tidak sehat, permintaan tersebut dialihkan ke versi v1. Setelah menjalankan perintah tersebut dan mengakses halaman produk aplikasi BookInfo, bagian reviews menampilkan judul error merah Error fetching product reviews! dan pesan Sorry, product reviews are currently unavailable for this book.. Hal ini menunjukkan bahwa layanan ulasan produk menjadi tidak tersedia setelah replika reviews-v2 diatur ke 0.

  7. Jalankan perintah berikut untuk melihat log.

    kubectl logs -f  deployment/productpage-v1  -c istio-proxy --tail=10

    Output yang diharapkan:

    {
        "authority":"reviews:9080",
        "authority_for":"reviews:9080",
        "bytes_received":"0",
        "bytes_sent":"19",
        "downstream_local_address":"192.168.255.46:9080",
        "downstream_remote_address":"172.16.0.252:47738",
        "duration":"0",
        "fallback_path":"outbound|9080|v3|reviews.default.svc.cluster.local:outbound|9080|v2|reviews.default.svc.cluster.local",
        "fallback_final_cluster_name":"-",
        "fallback_result":"fallback cluster is unhealthy",
        "istio_policy_status":"-",
        "method":"GET",
        "path":"/reviews/0",
        "protocol":"HTTP/1.1",
        "request_id":"b207a764-b6d7-4ef8-bc71-59f264c3****",
        "requested_server_name":"-",
        "response_code":"503",
        "response_flags":"UH",
        "route_name":"-",
        "start_time":"2023-05-30T07:32:08.999Z",
        "trace_id":"a40c32a7b2cf****",
        "upstream_cluster":"outbound|9080|v3|reviews.default.svc.cluster.local",
        "upstream_host":"-",
        "upstream_local_address":"-",
        "upstream_service_time":"-",
        "upstream_transport_failure_reason":"-",
        "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
        "x_forwarded_for":"-"
    }

    Anda dapat melihat log 503 untuk productpage-v1. Berdasarkan konfigurasi routing berbobot reviews-route, 50% permintaan dari productpage diarahkan ke versi v3 layanan reviews. Karena versi v3 tidak tersedia, sidecar (istio-proxy) mencoba melakukan fallback dari v3 ke versi v2 berdasarkan aturan fallback. Karena versi v2 juga tidak sehat, permintaan dikirim kembali ke versi v3. Anda dapat mengonfirmasi hal ini dengan memeriksa bidang "upstream_cluster":"outbound|9080|v3|reviews.default.svc.cluster.local".