All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan service mesh untuk pemulihan bencana tingkat layanan

Last Updated:Aug 29, 2026

Kegagalan tingkat layanan dapat menyebabkan ketidaktersediaan atau degradasi aplikasi cloud-native. Dengan mengombinasikan model penyebaran peer multi-wilayah dan multi-kluster, Alibaba Service Mesh (ASM) mengalihkan lalu lintas ke workload yang tersedia dalam hitungan detik saat terjadi kegagalan layanan, secara transparan bagi pengguna. Topik ini menjelaskan cara menggunakan ASM untuk pemulihan bencana tingkat layanan.

Disaster recovery architecture

Failover mechanism: locality-aware failover in a service mesh

ASM menyediakan mekanisme failover yang mempertimbangkan lokasi (locality-aware). Proxy sidecar dari setiap workload terus memantau apakah workload tujuan mengembalikan respons error berurutan dalam rentang waktu yang dapat dikonfigurasi. Ketika proxy sidecar mendeteksi kegagalan pada suatu workload, workload tersebut akan dihapus dari pool load balancing dan lalu lintas dialihkan ke workload lain yang sehat.

Contoh berikut menggunakan dua kluster di dua wilayah berbeda, dengan dua set peer aplikasi yang diterapkan di kedua wilayah tersebut. Di setiap kluster, workload setiap layanan didistribusikan secara merata di berbagai zona menggunakan topology spread constraints.

  • Normal traffic topology

    Saat semua layanan dalam kondisi sehat, service mesh menjaga lalu lintas tetap berada dalam zona yang sama untuk meminimalkan dampak lokasi tujuan terhadap latensi permintaan.
  • Automatic failover based on locality planning when a workload becomes faulty

    Ketika proxy sidecar mendeteksi respons error berurutan dari suatu workload, workload tersebut dihapus dari pool load balancing dan permintaan dialihkan ke workload sehat lainnya. Failover lalu lintas mengikuti urutan prioritas berikut:
  • Other workloads in the same zone

  • Workloads in a different zone within the same region

    Untuk memberi tahu kontak bisnis saat terjadi failover, konfigurasikan instans Prometheus untuk mengumpulkan metrik service mesh dan atur peringatan (alert).
  • Cross-region traffic failover

    Jika tidak ada workload sehat yang tersedia di semua zona dalam suatu wilayah, lalu lintas dialihkan ke layanan yang sama yang diterapkan sebagai peer di kluster di wilayah lain. Service mesh menangani proses ini secara otomatis. Failover lintas wilayah memerlukan konektivitas jaringan antar-kluster. Untuk metode yang tersedia beserta pertimbangan trade-off-nya, lihat Application deployment topologies.

Application deployment topologies: supported cluster topologies and a comparison

Mekanisme failover locality-aware ASM berlaku untuk berbagai topologi penyebaran aplikasi. Setiap topologi mencakup dimensi kegagalan yang berbeda serta memiliki perbedaan dalam biaya sumber daya dan kompleksitas O&M.

Compare deployment topologies

Tabel berikut membandingkan empat topologi penyebaran yang didukung berdasarkan dimensi pengambilan keputusan utama untuk membantu Anda memilih topologi yang tepat sesuai kebutuhan bisnis:

Topology Failure coverage Resource cost O&M complexity
Single-cluster, multi-zone Kegagalan tingkat zona. Tidak dapat menangani kesalahan konfigurasi Kubernetes atau kegagalan ketergantungan aplikasi. Rendah. Satu kluster ACK, satu set sumber daya cloud dalam satu wilayah. Rendah
Single-region, multi-zone, multi-cluster Kegagalan tingkat zona dengan cakupan lebih luas melalui isolasi kluster. Tidak dapat menangani kegagalan tingkat wilayah. Sedang. Beberapa kluster dan infrastruktur cloud dalam satu wilayah. Sedang. Layanan diterapkan di beberapa kluster.
Multi-region, multi-cluster Kegagalan tingkat zona, wilayah, dan kluster. Tinggi. Beberapa kluster lintas wilayah, ditambah konektivitas jaringan lintas wilayah. Diperlukan dua instans service mesh untuk latensi push konfigurasi yang lebih baik. Tinggi. Perencanaan jaringan lintas wilayah dan O&M multi-kluster.
Multi-region, multi-cluster (multicloud) Kegagalan tingkat zona, wilayah, kluster, dan penyedia cloud. Paling tinggi. Beberapa kluster lintas penyedia cloud dan wilayah. Paling tinggi. Masalah kompatibilitas lintas-cloud dan masalah tak terduga akibat perbedaan infrastruktur serta kemampuan layanan cloud.

Cara memilih:

  • Mulai dengan single-cluster, multi-zone jika Anda memerlukan pemulihan bencana dasar tingkat zona dengan biaya dan kompleksitas minimal.

  • Gunakan multi-region, multi-cluster ketika Anda memerlukan ketersediaan tinggi yang mencakup kegagalan tingkat wilayah. Ini adalah topologi yang direkomendasikan untuk workload HA produksi.

  • Gunakan multi-region, multi-cluster (multicloud) ketika Anda perlu bertahan dari kegagalan seluruh penyedia cloud.

  • Single-region, multi-zone, multi-cluster meningkatkan kompleksitas penyebaran dan O&M tanpa menyediakan failover tingkat wilayah. Pertimbangkan penyebaran multi-region, multi-cluster sebagai gantinya jika Anda memerlukan cakupan kegagalan yang lebih luas.

Single-cluster, multi-zone deployment

Ini adalah mode penyebaran paling sederhana untuk pemulihan bencana. Konfigurasikan node pool multi-zona, pilih vSwitch dari beberapa zona untuk node pool tersebut, dan pilih kebijakan distribusi seimbang saat mengonfigurasi kebijakan penskalaan. Instans ECS kemudian akan didistribusikan secara merata di zona-zona yang ditentukan untuk grup penskalaan.

Pros Cons
Hanya memerlukan satu kluster ACK yang berisi node pool multi-zona, dengan aplikasi yang diterapkan secara merata di berbagai zona menggunakan topology spread constraints. Tidak dapat menangani kegagalan akibat kesalahan konfigurasi Kubernetes atau ketergantungan aplikasi.
Sumber daya cloud seperti load balancing, database, kluster Kubernetes, dan service mesh hanya perlu disiapkan sekali dalam satu wilayah. Tidak dapat menangani kegagalan tingkat wilayah.

Single-region, multi-zone, multi-cluster deployment

Mode ini memperluas kluster tunggal dari penyebaran single-cluster, multi-zone menjadi beberapa kluster, masing-masing dengan konfigurasinya sendiri. Saat terjadi failover, ASM pertama-tama mencari workload lain di zona yang sama, lalu memilih salah satu workload sehat di zona berbeda dalam wilayah yang sama sebagai tujuan failover. Pilih zona yang terpisah untuk kedua kluster tersebut. Jika zona kedua kluster tumpang tindih, workload di zona yang sama mungkin memiliki prioritas lebih tinggi daripada workload di kluster yang sama, yang bisa berdampak tak terduga bagi bisnis Anda.

Pros Cons
Dibandingkan dengan penyebaran single-cluster, topologi ini mencakup lebih banyak penyebab kegagalan dan lebih meningkatkan ketersediaan sistem secara keseluruhan. Layanan harus diterapkan sebagai peer di dua lingkungan kluster Kubernetes, sehingga membuat penyebaran dan O&M lebih kompleks. Sumber daya infrastruktur cloud seperti load balancing dan kluster Kubernetes harus diterapkan beberapa kali, sehingga meningkatkan biaya.
Kedua kluster hanya perlu berada dalam VPC yang sama. Topologi ini memiliki biaya konektivitas antar-kluster yang rendah saat lalu lintas harus dialihkan ke layanan di kluster lain. Tidak dapat menangani kegagalan tingkat wilayah. Memerlukan perencanaan jaringan untuk menghindari konflik antar-konfigurasi kluster. Untuk informasi selengkapnya, lihatPlan CIDR blocks for multiple clusters.

Multi-region, multi-cluster deployment

Mode ini mengubah penyebaran single-region dari arsitektur multi-kluster menjadi penyebaran multi-wilayah. Mode ini menjaga penyebaran setiap layanan tersebar di semua dimensi: zona, wilayah, kluster, dan ketergantungan. Dengan demikian, workload sehat tetap melayani lalu lintas saat terjadi kegagalan karena alasan apa pun.

Pros Cons
Mendistribusikan workload layanan yang sama di berbagai wilayah, zona, dan kluster untuk meningkatkan ketersediaan layanan. Layanan harus diterapkan sebagai peer di dua lingkungan kluster Kubernetes. Untuk latensi push konfigurasi yang lebih baik, juga diperlukan dua instans service mesh.
Arsitektur lapisan kontrol multi-master secara efektif mengontrol latensi. Konektivitas jaringan lintas wilayah kompleks.

Untuk kebutuhan ketersediaan tinggi, penyebaran multi-region, multi-kluster menyediakan tingkat ketersediaan layanan tertinggi di antara opsi topologi yang dikelola ASM. Jika Anda perlu menghubungkan jaringan lintas kluster, gunakan salah satu metode berikut:

  • Gunakan Cloud Enterprise Network (CEN) untuk menghubungkan langsung jaringan dasar kluster di wilayah berbeda. Pertama, rencanakan konfigurasi jaringan kluster untuk menghindari konflik jaringan. Untuk informasi selengkapnya, lihatPlan CIDR blocks for multiple clusters. Kemudian, gunakan CEN untuk menghubungkan jaringan lintas wilayah. Untuk informasi selengkapnya, lihatCreate a cross-region connection. Metode ini cocok untuk pelanggan dengan kebutuhan lalu lintas lintas wilayah berkualitas tinggi.

  • Gunakan proxy jaringan lintas-kluster ASM untuk menghubungkan jaringan lintas kluster dan menerapkan failover. Metode ini mengoptimalkan biaya sumber daya dan menyelesaikan masalah kompleksitas konektivitas jaringan. Dengan metode ini, jaringan kedua kluster tidak perlu dihubungkan secara langsung, dan tidak diperlukan perencanaan jaringan kluster. Proxy tersebut membuat saluran aman berbasis mTLS antar-kluster untuk komunikasi lintas-kluster yang diperlukan dan failover lalu lintas lintas wilayah yang aman. Karena metode ini bergantung pada komunikasi jaringan publik dengan kualitas terbatas, metode ini cocok untuk skenario yang tidak memiliki persyaratan ketat terhadap komunikasi antar-kluster atau saat jaringan fisik kluster tidak dapat dihubungkan. Untuk informasi selengkapnya tentang proxy mesh lintas-kluster ASM, lihatDisaster recovery for multiple ACK clusters in different VPCs (using ASM cross-cluster mesh proxy).

Multi-region, multi-cluster deployment across a multicloud environment

Ini adalah topologi penyebaran paling canggih. ASM sepenuhnya mendukung pengelolaan kluster Kubernetes dari penyedia cloud mana pun dan pusat data on-premises. Jalankan dua lingkungan kluster Kubernetes di penyedia cloud berbeda, atau jalankan satu di cloud dan satu di on-premises. Jika salah satu infrastruktur gagal, infrastruktur lainnya tetap menyediakan layanan Anda.

Seperti halnya penyebaran multi-region, multi-kluster, penyebaran multi-cloud, multi-region, multi-kluster juga memerlukan konektivitas jaringan antar-kluster. Namun, ASM tidak dapat menyediakan lapisan kontrol terkelola di lingkungan non-Alibaba Cloud. Gunakan lapisan kontrol remote ASM untuk mengatasi latensi push konfigurasi service mesh dalam skenario lintas-cloud. Untuk informasi selengkapnya, lihatUse a remote control plane to reduce push latency.

Pros Cons
Mendistribusikan workload layanan yang sama di berbagai wilayah, zona, kluster, dan penyedia cloud untuk meningkatkan ketersediaan layanan. Layanan harus diterapkan sebagai peer di dua lingkungan kluster Kubernetes. Karena infrastruktur dan kemampuan layanan cloud berbeda antar-penyedia cloud, penyebaran multi-cloud mungkin menghadapi banyak masalah kompatibilitas dan masalah tak terduga lainnya.
Arsitektur lapisan kontrol multi-master secara efektif mengontrol latensi. Konektivitas jaringan lintas wilayah kompleks.

Prerequisites

Sebelum mengonfigurasi pemulihan bencana tingkat layanan dengan ASM, pastikan Anda telah memiliki sumber daya dan izin berikut:

  • ACK clusters — Buat kluster Kubernetes di masing-masing dua wilayah atau lebih. Konfigurasikan beberapa zona untuk setiap kluster dan aktifkan Expose API server with EIP. Untuk informasi selengkapnya, lihatCreate an ACK managed cluster.

  • ASM instances — Buat instans ASM di setiap wilayah tempat Anda memiliki kluster ACK. Pilih vSwitch di zona yang sama dengan kluster ACK yang sesuai. Untuk informasi selengkapnya, lihat Step 1, Step 2, and Step 3 dalamImplement multi-cluster disaster recovery with an ASM multi-master control plane architecture.

  • NLB ingress gateways — Buat gerbang masuk tipe NLB di setiap instans ASM. Pilih zona yang sama dengan instans ASM dan kluster ACK untuk NLB tersebut. Untuk informasi selengkapnya, lihatUse an NLB instance for an ASM ingress gateway.

  • Sidecar injection — Aktifkan injeksi sidecar otomatis untuk namespace default di setiap kluster. Ini dikonfigurasi sebagai bagian dari manajemen namespace global di ASM. Untuk informasi selengkapnya, lihatManage global namespaces.

  • Network planning — Untuk penyebaran multi-wilayah, rencanakan blok CIDR kluster Anda untuk menghindari konflik jaringan. Untuk informasi selengkapnya, lihatPlan CIDR blocks for multiple clusters.

  • GTM configuration — Konfigurasikan Global Traffic Manager (GTM) dengan instans NLB untuk menerapkan pemulihan bencana aktif-aktif untuk gerbang masuk. Untuk informasi selengkapnya, lihatHow GTM implements active-active disaster recovery.

Configure disaster recovery

Contoh berikut menggunakan penyebaran multi-wilayah, multi-kluster untuk menunjukkan proses pemulihan bencana tingkat layanan.

Step 1: Prepare the environment

Lengkapi sub-langkah berikut secara berurutan untuk menyiapkan lingkungan demonstrasi pemulihan bencana.

  1. Buat kluster Kubernetes di masing-masing dua wilayah dan beri nama cluster-1 dan cluster-2. Konfigurasikan beberapa zona untuk kedua kluster dan aktifkan Expose API server with EIP. Untuk informasi selengkapnya, lihatCreate an ACK managed cluster.

  2. Di dua wilayah yang sama dengan kluster ACK, buat instans ASM mesh-1 dan mesh-2. Saat membuat instans, pastikan Anda memilih vSwitch di zona yang sama dengan kluster ACK. Untuk informasi selengkapnya, lihat Step 1, Step 2, and Step 3 dalamImplement multi-cluster disaster recovery with an ASM multi-master control plane architecture.

  3. Di mesh-1 dan mesh-2, buat gerbang masuk tipe NLB bernama ingressgateway. Untuk zona NLB, pilih dua zona yang sama dengan instans ASM dan kluster ACK. Untuk informasi selengkapnya, lihatUse an NLB instance for an ASM ingress gateway.

  4. Di mesh-1 dan mesh-2, aktifkan injeksi sidecar otomatis untuk namespace default dari kedua kluster. Ini dikonfigurasi sebagai bagian dari manajemen namespace global di ASM. Untuk informasi selengkapnya, lihatManage global namespaces.

  5. Terapkan aplikasi contoh sebagai peer di kedua kluster ACK. Contoh ini menggunakan dua zona: cn-hangzhou-h dan cn-hangzhou-k. Sesuaikan zona dalam YAML berdasarkan lingkungan aktual Anda.

    Catatan

    Gambar kontainer dalam YAML berikut diambil dari registri China (Hangzhou) (registry-cn-hangzhou.ack.aliyuncs.com). Jika Anda menerapkan lintas wilayah, pastikan gambar tersebut tersedia di semua wilayah target. Anda mungkin perlu mengonfigurasi sinkronisasi gambar lintas wilayah melalui Container Registry.

    Expand to view the command

    kubectl apply -f- <<EOF
    apiVersion: v1
    kind: Service
    metadata:
      name: mocka
      labels:
        app: mocka
        service: mocka
    spec:
      ports:
      - port: 8000
        name: http
      selector:
        app: mocka
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mocka-cn-hangzhou-h
      labels:
        app: mocka
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mocka
      template:
        metadata:
          labels:
            app: mocka
            locality: cn-hangzhou-h
        spec:
          nodeSelector:      
            topology.kubernetes.io/zone: cn-hangzhou-h  
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: cn-hangzhou-h 
            - name: app
              value: mocka
            - name: upstream_url
              value: "http://mockb:8000/"
            ports:
            - containerPort: 8000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mocka-cn-hangzhou-k
      labels:
        app: mocka
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mocka
      template:
        metadata:
          labels:
            app: mocka
            locality: cn-hangzhou-k
        spec:
          nodeSelector:      
            topology.kubernetes.io/zone: cn-hangzhou-k
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: cn-hangzhou-k
            - name: app
              value: mocka
            - name: upstream_url
              value: "http://mockb:8000/"
            ports:
            - containerPort: 8000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mockb
      labels:
        app: mockb
        service: mockb
    spec:
      ports:
      - port: 8000
        name: http
      selector:
        app: mockb
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mockb-cn-hangzhou-h
      labels:
        app: mockb
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mockb
      template:
        metadata:
          labels:
            app: mockb
            locality: cn-hangzhou-h
        spec:
          nodeSelector:      
            topology.kubernetes.io/zone: cn-hangzhou-h
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: cn-hangzhou-h
            - name: app
              value: mockb
            - name: upstream_url
              value: "http://mockc:8000/"
            ports:
            - containerPort: 8000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mockb-cn-hangzhou-k
      labels:
        app: mockb
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mockb
      template:
        metadata:
          labels:
            app: mockb
            locality: cn-hangzhou-k
        spec:
          nodeSelector:      
            topology.kubernetes.io/zone: cn-hangzhou-k
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: cn-hangzhou-k
            - name: app
              value: mockb
            - name: upstream_url
              value: "http://mockc:8000/"
            ports:
            - containerPort: 8000
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mockc
      labels:
        app: mockc
        service: mockc
    spec:
      ports:
      - port: 8000
        name: http
      selector:
        app: mockc
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mockc-cn-hangzhou-h
      labels:
        app: mockc
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mockc
      template:
        metadata:
          labels:
            app: mockc
            locality: cn-hangzhou-h
        spec:
          nodeSelector:      
            topology.kubernetes.io/zone: cn-hangzhou-h
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: cn-hangzhou-h
            - name: app
              value: mockc
            ports:
            - containerPort: 8000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mockc-cn-hangzhou-k
      labels:
        app: mockc
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mockc
      template:
        metadata:
          labels:
            app: mockc
            locality: cn-hangzhou-k
        spec:
          nodeSelector:      
            topology.kubernetes.io/zone: cn-hangzhou-k
          containers:
          - name: default
            image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/go-http-sample:tracing
            imagePullPolicy: IfNotPresent
            env:
            - name: version
              value: cn-hangzhou-k
            - name: app
              value: mockc
            ports:
            - containerPort: 8000
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: mocka
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: test
            number: 80
            protocol: HTTP
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: demoapp-vs
      namespace: default
    spec:
      gateways:
        - mocka
      hosts:
        - '*'
      http:
        - name: test
          route:
            - destination:
                host: mocka
                port:
                  number: 8000
    EOF
    Setelah menjalankan perintah di atas di kedua kluster, layanan mocka, mockb, dan mockc diterapkan sebagai peer di kedua kluster. Setiap layanan berisi dua penyebaran tanpa status dengan masing-masing satu replika. Pengaturan nodeSelector yang berbeda mendistribusikan penyebaran ke node di zona berbeda, dan variabel lingkungan membuat setiap penyebaran mengembalikan zona tempatnya berada.

    Untuk demonstrasi yang sederhana, contoh ini menggunakan field nodeSelector untuk memilih zona setiap pod secara manual. Saat membangun lingkungan ketersediaan tinggi yang sesungguhnya, konfigurasikan topology spread constraints untuk mendistribusikan pod di berbagai zona sebanyak mungkin. Untuk informasi selengkapnya, lihatConfigure high availability for workloads.

  6. Konfigurasikan Global Traffic Manager (GTM) dengan instans NLB untuk menerapkan pemulihan bencana aktif-aktif untuk gerbang masuk. Untuk informasi selengkapnya, lihatHow GTM implements active-active disaster recovery.

Step 2: Enable locality-aware failover

ASM mengaktifkan failover locality-aware secara default, tetapi fitur ini hanya berlaku bersamaan dengan aturan circuit breaking tingkat host yang dikonfigurasi dalam destination rule.

  1. Terapkan aturan circuit breaking tingkat host di kluster cluster-1 dan cluster-2.

    kubectl apply -f- <<EOF
    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: mocka
    spec:
      host: mocka
      trafficPolicy:
        outlierDetection:
          splitExternalLocalOriginErrors: true
          consecutiveLocalOriginFailures: 1
          baseEjectionTime: 5m
          consecutive5xxErrors: 1
          interval: 30s
          maxEjectionPercent: 100
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: mockb
    spec:
      host: mockb
      trafficPolicy:
        outlierDetection:
          splitExternalLocalOriginErrors: true
          consecutiveLocalOriginFailures: 1
          baseEjectionTime: 5m
          consecutive5xxErrors: 1
          interval: 30s
          maxEjectionPercent: 100
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: mockc
    spec:
      host: mockc
      trafficPolicy:
        outlierDetection:
          splitExternalLocalOriginErrors: true
          consecutiveLocalOriginFailures: 1
          baseEjectionTime: 5m
          consecutive5xxErrors: 1
          interval: 30s
          maxEjectionPercent: 100
    EOF
    outlierDetection adalah mekanisme yang digunakan service mesh untuk deteksi kegagalan layanan dan pengeluaran endpoint yang rusak. Tabel berikut menjelaskan item konfigurasi:

    Configuration item Description
    interval Interval pelaksanaan deteksi kegagalan.
    baseEjectionTime Waktu tunggu sebelum suatu endpoint dikeluarkan dari pool load balancing setelah endpoint tersebut ditentukan mengalami kegagalan.
    maxEjectionPercent Persentase maksimum endpoint yang dapat dikeluarkan.
    consecutive5xxErrors Jumlah error 5xx berurutan yang dikembalikan suatu endpoint sebelum endpoint tersebut ditentukan mengalami kegagalan.
    splitExternalLocalOriginErrors Menentukan apakah kegagalan koneksi dan timeout koneksi dihitung sebagai kegagalan.
    consecutiveLocalOriginFailures Jumlah error non-5xx berurutan, seperti kegagalan koneksi dan timeout koneksi, yang dihasilkan suatu endpoint sebelum endpoint tersebut ditentukan mengalami kegagalan.
  2. Verifikasi status layanan.

    Kirim permintaan ke nama domain layanan.

    curl mock.asm-demo.work/mock -v

    * Host mock.asm-demo.work:80 was resolved.
    * IPv6: (none)
    * IPv4: 8.xxx.xxx.47, 8.xxx.xxx.42
    *   Trying 8.xxx.xxx.47:80...
    * Connected to mock.asm-demo.work (8.209.XXX.XX) port 80
    > GET /mock HTTP/1.1
    > Host: mock.asm-demo.work
    > User-Agent: curl/8.7.1
    > Accept: */*
    > 
    * Request completely sent off
    < HTTP/1.1 200 OK
    < date: Wed, 11 Dec 2024 12:10:56 GMT
    < content-length: 153
    < content-type: text/plain; charset=utf-8
    < x-envoy-upstream-service-time: 3
    < server: istio-envoy
    < 
    * Connection #0 to host mock.asm-demo.work left intact
    -> mocka(version: cn-hangzhou-k, ip: 10.1.225.40)-> mockb(version: cn-hangzhou-k, ip: 10.1.225.31)-> mockc(version: cn-hangzhou-k, ip: 10.1.225.32)%

    Rantai panggilan layanan tetap berada pada workload di zona yang sama.

Step 3: Perform a failure drill

Contoh berikut mensimulasikan kegagalan workload dengan mengganti gambar kontainer layanan mockb di salah satu zona secara manual.

  1. Ganti gambar mockb-cn-hangzhou-h di cluster-2 untuk mensimulasikan kegagalan.

    1. Masuk keACK console. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

    3. Di daftar, temukan workload mockb-cn-hangzhou-h. Di kolom Actions di sebelah kanan, klik Edit. Ubah gambar menjadi registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2, dan tambahkan ["sleep","3600"] ke command di field Start agar kontainer dapat dimulai dengan benar. Klik Update.

  2. Akses terus-menerus nama domain aplikasi untuk melihat jalur permintaan setelah kegagalan terjadi.

    curl mock.asm-demo.work/mock -v
    Expected result 1: Permintaan dikirim ke zona selain cn-hangzhou-h.

    * Host mock.asm-demo.work:80 was resolved.
    * IPv6: (none)
    * IPv4: 8.209.XXX.XX, 8.221.XXX.XX
    *   Trying 8.209.247.47:80...
    * Connected to mock.asm-demo.work (8.209.247.47) port 80
    > GET /mock HTTP/1.1
    > Host: mock.asm-demo.work
    > User-Agent: curl/8.7.1
    > Accept: */*
    > 
    * Request completely sent off
    < HTTP/1.1 200 OK
    < date: Wed, 11 Dec 2024 12:10:56 GMT
    < content-length: 153
    < content-type: text/plain; charset=utf-8
    < x-envoy-upstream-service-time: 3
    < server: istio-envoy
    < 
    * Connection #0 to host mock.asm-demo.work left intact
    -> mocka(version: cn-hangzhou-k, ip: 10.1.225.40)-> mockb(version: cn-hangzhou-k, ip: 10.1.225.31)-> mockc(version: cn-hangzhou-k, ip: 10.1.225.32)%

    Permintaan tetap berada di zona yang sehat.

    Expected result 2: Permintaan dikirim ke zona cn-hangzhou-h untuk pertama kalinya.

    * Host mock.asm-demo.work:80 was resolved.
    * IPv6: (none)
    * IPv4: 112.124.XX.XXX, 121.41.XXX.XXX
    *   Trying 112.124.65.120:80...
    * Connected to mock.asm-demo.work (112.124.65.120) port 80
    > GET /mock HTTP/1.1
    > Host: mock.asm-demo.work
    > User-Agent: curl/8.7.1
    > Accept: */*
    > 
    * Request completely sent off
    < HTTP/1.1 200 OK
    < date: Wed, 11 Dec 2024 12:08:45 GMT
    < content-length: 220
    < content-type: text/plain; charset=utf-8
    < x-envoy-upstream-service-time: 48
    < server: istio-envoy
    < 
    * Connection #0 to host mock.asm-demo.work left intact
    -> mocka(version: cn-hangzhou-h, ip: 192.168.122.135)upstream connect error or disconnect/reset before headers. reset reason: remote connection failure, transport failure reason: delayed connect error: Connection refused%
    Koneksi ditolak saat permintaan mencapai layanan mockb.

    Expected result 3: Permintaan dikirim ke zona cn-hangzhou-h lagi setelah proxy sidecar mendeteksi kegagalan.

    * Host mock.asm-demo.work:80 was resolved.
    * IPv6: (none)
    * IPv4: 8.209.XXX.XX, 8.221.XXX.XX
    *   Trying 8.209.247.47:80...
    * Connected to mock.asm-demo.work (8.209.247.47) port 80
    > GET /mock HTTP/1.1
    > Host: mock.asm-demo.work
    > User-Agent: curl/8.7.1
    > Accept: */*
    > 
    * Request completely sent off
    < HTTP/1.1 200 OK
    < date: Wed, 11 Dec 2024 12:10:59 GMT
    < content-length: 154
    < content-type: text/plain; charset=utf-8
    < x-envoy-upstream-service-time: 4
    < server: istio-envoy
    < 
    * Connection #0 to host mock.asm-demo.work left intact
    -> mocka(version: cn-hangzhou-h, ip: 10.0.239.141)-> mockb(version: cn-hangzhou-k, ip: 10.1.225.31)-> mockc(version: cn-hangzhou-k, ip: 10.1.225.32)%
    Lalu lintas mockb dialihkan ke cn-hangzhou-k, zona berbeda dalam wilayah yang sama.

(Optional) Step 4: Configure alerts for service-level failures

  1. Konfigurasikan proxy sidecar untuk melaporkan metrik circuit breaking melalui proxyStatsMatcher. Saat mengonfigurasi proxyStatsMatcher, pilih Regular Expression Match dan atur nilainya menjadi .*outlier_detection.*. Untuk informasi selengkapnya, lihatproxyStatsMatcher.

    Tabel berikut menjelaskan beberapa metrik circuit breaking:

    Metric Metric type Description
    envoy_cluster_outlier_detection_ejections_active Gauge Jumlah host yang saat ini dikeluarkan.
    envoy_cluster_outlier_detection_ejections_enforced_total Counter Jumlah kejadian pengeluaran host.
    envoy_cluster_outlier_detection_ejections_overflow Counter Jumlah kali pengeluaran host dilewati karena persentase pengeluaran maksimum telah terlampaui.
    ejections_detected_consecutive_5xx Counter Jumlah kali suatu host terdeteksi mengembalikan error 5xx berurutan.
  2. Terapkan ulang workload tanpa status (mocka, mockb, dan mockc) untuk menerapkan konfigurasi proxyStatsMatcher yang telah diperbarui. Untuk informasi selengkapnya, lihatRedeploy the workload.

  3. Buat aturan peringatan untuk circuit breaking tingkat host.

    1. Integrasikan komponen Alibaba Cloud ASM dengan kluster bidang data atau tingkatkan komponen tersebut ke versi terbaru, sehingga Managed Service for Prometheus dapat mengumpulkan metrik circuit breaking yang diekspos. Untuk informasi selengkapnya tentang cara memperbarui komponen integrasi, lihatManage integrations. (Jika Anda sudah mengumpulkan metrik service mesh dengan instans Prometheus yang dikelola sendiri seperti yang dijelaskan dalamIntegrate a self-managed Prometheus instance for mesh monitoring, lewati langkah ini.)

    2. Buat aturan peringatan untuk circuit breaking tingkat host. Untuk informasi selengkapnya, lihatCreate an alert rule for a Prometheus instance.

      Tabel berikut memberikan contoh parameter kunci aturan peringatan: Konfigurasikan parameter lainnya sesuai kebutuhan Anda dengan merujuk pada dokumen di atas.
    Parameter Example Description
    Custom PromQL statement (sum (envoy_cluster_outlier_detection_ejections_active) by (cluster_name, namespace)) > 0 Contoh ini melakukan kueri terhadap metrik envoy_cluster_outlier_detection_ejections_active untuk menentukan apakah ada host yang sedang dikeluarkan di kluster, dan mengelompokkan hasil kueri berdasarkan namespace dan nama layanan.
    Alert content Host-level circuit breaking is triggered. A workload returned consecutive errors and was ejected from the service load balancing pool! Namespace: {{$labels.namespace}}. Service where the ejection occurred: {{$labels.cluster_name}}. Number of ejections: {{ $value }} Contoh pesan peringatan ini menunjukkan namespace dan nama layanan yang memicu circuit breaking, serta jumlah host yang sedang dikeluarkan untuk layanan tersebut.