全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan mekanisme fallback ASM

更新时间:Jul 02, 2025

Mekanisme fallback menyediakan jalur panggilan alternatif ketika panggilan layanan gagal. Jika layanan mikro tidak tersedia, mekanisme ini memanggil layanan alternatif untuk memproses permintaan, memastikan stabilitas dan ketersediaan sistem. Contohnya, jika titik akhir layanan tidak dapat diakses, fallback dapat meneruskan permintaan ke layanan alternatif sehingga permintaan klien tetap diproses tanpa gangguan. Service Mesh (ASM) memungkinkan Anda mendefinisikan parameter fallback dalam layanan virtual agar fallback dapat dilakukan saat layanan yang diminta gagal. Topik ini menjelaskan cara menggunakan mekanisme fallback ASM.

Prasyarat

  • Sebuah instance ASM Edisi Enterprise atau Edisi Ultimate telah dibuat, dengan versi 1.17.2.22 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat instance ASM.

    Catatan

    Jika versi instance ASM Anda lebih lama dari 1.17, perbarui instance tersebut ke versi 1.17.2.22 atau lebih baru, atau submit a ticket untuk mendapatkan dukungan teknis. Informasi lebih lanjut tentang pembaruan instance ASM dapat ditemukan di Perbarui instance ASM.

  • Sebuah kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance ASM. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.

  • Aplikasi sampel bernama Bookinfo telah diterapkan. Untuk informasi lebih lanjut, lihat Terapkan aplikasi di instance ASM.

  • Versi proxy sidecar pada bidang data harus 1.17 atau lebih baru.

    Catatan

    Anda dapat melihat versi proxy sidecar di setiap pod aplikasi pada halaman Instances Status di Konsol ASM. Untuk informasi lebih lanjut, lihat Manajemen Peningkatan.

Deskripsi Konfigurasi

Dalam contoh ini, layanan reviews di aplikasi Bookinfo digunakan. Ketika layanan productpage mengakses layanan reviews dengan tiga versi (v1, v2, dan v3), jika v3 tidak tersedia, fallback akan mengarahkan permintaan ke v2, dan kode status HTTP 503 tidak dikembalikan.

Unduh file YAML yang digunakan dalam contoh ini dengan mengklik File Konfigurasi.

Langkah 1: Akses aplikasi Bookinfo

  1. Buat file 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. Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi di file KubeConfig, lalu jalankan perintah berikut untuk menerapkan aturan tujuan:

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

    • Metode 1: Jalankan perintah berikut untuk mendapatkan alamat IP gateway masuk:

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

    ${YourGatewayIp} adalah alamat IP gateway masuk yang diperoleh di langkah sebelumnya. Versi layanan reviews dapat ditentukan berdasarkan nilai Reviews served by atau bintang. Versi v1 tidak memiliki bintang, v2 memiliki bintang hitam, dan v3 memiliki bintang merah.

    Sebagai contoh, pada gambar berikut, nilai reviews-v2 menunjukkan versi v2 dengan bintang hitam. Contoh versi v2.png

    Segarkan halaman secara berkala. Anda dapat melihat bahwa permintaan layanan diseimbangkan ke versi v1, v2, dan v3 dari layanan reviews.

Langkah 2: Tentukan aturan routing dan fallback untuk mengakses layanan reviews

  1. Buat file 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. Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi di file KubeConfig, lalu jalankan perintah berikut untuk menerapkan aturan routing dan fallback untuk mengakses layanan reviews:

    kubectl apply -f reviews-route-fallback-sample1.yaml
  3. Kunjungi http://${YourGatewayIp}/productpage di browser dan segarkan halaman secara berkala.

    Anda dapat melihat bahwa permintaan layanan selalu dirutekan ke versi v3 dari layanan reviews. v3版本..png

  4. Jalankan perintah berikut untuk mensimulasikan kegagalan di reviews-v3 dengan mengubah jumlah instansinya menjadi 0:

    kubectl scale deployment reviews-v3 --replicas=0
  5. Kunjungi http://${YourGatewayIp}/productpage di browser dan segarkan halaman secara berkala.

    Anda dapat melihat bahwa permintaan layanan jatuh kembali ke versi v2 dari layanan reviews. Anda dapat menambahkan bidang terkait fallback ke format log akses kustom, lalu melihat log untuk memverifikasi apakah fallback dilakukan.

    Perluas untuk memeriksa apakah fallback dilakukan

    1. Tambahkan bidang berikut ke format log akses kustom. Untuk informasi lebih lanjut, lihat Langkah 2: Sesuaikan bidang log akses.

      Bidang

      Nilai

      Deskripsi

      fallback_path

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

      Jalur spesifik fallback. Sebagai contoh, A:B menunjukkan bahwa permintaan jatuh kembali dari A ke B; A:B:C menunjukkan bahwa permintaan jatuh kembali dari A ke B dan kemudian ke C jika B juga tidak sehat.

      fallback_final_cluster_name

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

      Nama cluster tujuan fallback jika fallback berhasil dilakukan. Sebagai contoh, jika service1|v1 tidak ada, permintaan jatuh kembali ke service|base.

      fallback_result

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

      Hasil fallback. Jika fallback gagal, hasil fallback dikirim ke cluster rute asli.

      自定义日志格式..png

    2. Lihat log produpage-v1 istio-proxy.

      Log sampel berikut dihasilkan ketika permintaan jatuh kembali 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 melihat bidang baru berikut dalam log:

      "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 menunjukkan bahwa tujuan rute asli adalah v3. Karena instansi v3 tidak tersedia, permintaan jatuh kembali ke reviews-v2.

Langkah 3: Konfigurasikan aturan fallback di bawah rute berbobot

  1. Jalankan perintah berikut untuk mengatur reviews-v3 agar tersedia:

    kubectl scale deployment reviews-v3 --replicas=1
  2. Buat file 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 aturan routing dan fallback baru untuk layanan reviews:

    kubectl apply -f reviews-route-fallback-sample1.yaml
  4. Kunjungi http://${YourGatewayIp}/productpage di browser dan segarkan halaman secara berkala.

    Anda dapat melihat bahwa permintaan dirutekan ke reviews-v2 dan reviews-v3 dengan rasio 50:50. Retry dinonaktifkan dalam contoh ini untuk memudahkan pengamatan hasil.

  5. Jalankan perintah berikut untuk mengubah jumlah instansi reviews-v3 menjadi 0 dan periksa apakah aturan fallback reviews-v3 sesuai harapan:

    kubectl scale deployment reviews-v3 --replicas=0

    Segarkan halaman secara berkala. Anda dapat melihat bahwa permintaan selalu dirutekan ke reviews-v2, sesuai harapan.

  6. Jalankan perintah berikut untuk mengubah jumlah instansi reviews-v2 menjadi 0:

    kubectl scale deployment reviews-v2 --replicas=0

    Segarkan halaman secara berkala. Halaman serupa dengan gambar berikut muncul, menunjukkan bahwa layanan productpage gagal mengakses layanan reviews. Probabilitas halaman ini muncul adalah 50%, dan probabilitas lainnya 50% adalah bahwa permintaan dirutekan ke reviews-v2. Karena reviews-v2 tidak sehat, permintaan jatuh kembali ke reviews-v1. productpage页面..png

  7. Jalankan perintah berikut untuk menanyakan 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 bahwa log serupa dengan kode status HTTP 503 di atas ada di productpage-v1. Berdasarkan konfigurasi routing berbobot dari reviews-route, layanan productpage memiliki probabilitas 50% untuk meminta reviews-v3. Karena reviews-v3 tidak tersedia, proxy sidecar (istio-proxy) mencoba fallback dari reviews-v3 ke reviews-v2 berdasarkan aturan fallback. Permintaan dikirim ke reviews-v3 karena reviews-v2 tidak sehat. Anda dapat mengonfirmasi fallback berdasarkan bidang "upstream_cluster":"outbound|9080|v3|reviews.default.svc.cluster.local".