All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan pemutusan sirkuit untuk lalu lintas timur-barat

Last Updated:Jun 21, 2026

Service Mesh (ASM) memungkinkan Anda mengonfigurasi aturan pemutusan sirkuit untuk lalu lintas timur-barat antar layanan tertentu dan pada rute tertentu. Aturan ini memungkinkan proxy mesh secara aktif menolak permintaan ke layanan hulu yang bermasalah, sehingga menyediakan kemampuan pemutusan sirkuit trafik non-intrusif. Topik ini menjelaskan cara menggunakan CRD ASMCircuitBreaker untuk mengonfigurasi aturan pemutusan sirkuit bagi lalu lintas timur-barat.

Latar Belakang

Pemutusan sirkuit adalah mekanisme perlindungan terhadap beban berlebih yang mencegah sistem crash akibat lonjakan trafik mendadak. Di lingkungan cloud-native dengan lalu lintas timur-barat antar layanan, satu layanan yang gagal—misalnya, layanan yang merespons lambat atau memiliki tingkat error tinggi—dapat memicu reaksi berantai yang berujung pada kegagalan kaskade di seluruh rantai panggilan.

Aturan pemutusan sirkuit untuk lalu lintas timur-barat secara otomatis "memutus sirkuit" dan menolak permintaan ke layanan hulu ketika ambang batas tingkat error atau timeout respons terlampaui. Hal ini melindungi layanan hulu, mencegah penyebaran gangguan, serta membantu menghindari gangguan sistem secara keseluruhan.

Setelah Anda mengonfigurasi aturan pemutusan sirkuit, setiap proxy mesh secara independen menghitung tingkat error atau jumlah permintaan lambat dari trafik yang ditanganinya. Akibatnya, proxy mesh di sisi klien yang berbeda mungkin memutus sirkuit pada waktu yang sedikit berbeda untuk layanan hulu yang sama.

Prasyarat

Langkah 1: Konfigurasikan perutean berdasarkan path permintaan

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Buat layanan virtual dengan salah satu metode berikut.

    Gunakan konsol

    1. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Traffic Management Center > VirtualService. Pada halaman yang muncul, klik Create.

    2. Tentukan Namespace dan Host, lalu aktifkan Gateways > Apply To All Sidecars.

    3. Pada bagian Hosts, klik Add Host untuk menambahkan layanan httpbin.

    4. Pada bagian HTTP Route, klik Add Route dan konfigurasikan rute sebagai berikut.

    Atur nama rute menjadi error-route. Aktifkan Match Request URI, pilih Exact sebagai tipe pencocokan, lalu masukkan /status/500 sebagai konten pencocokan. Atur nama layanan tujuan menjadi httpbin.default.svc.cluster.local.

    Atur nama rute menjadi delay-route. Aktifkan Match Request URI, pilih Prefix sebagai tipe pencocokan, lalu masukkan /delay sebagai konten pencocokan. Atur nama layanan tujuan menjadi httpbin.default.svc.cluster.local.

    Atur nama rute menjadi default-route. Jangan tambahkan aturan pencocokan permintaan apa pun. Atur nama layanan tujuan menjadi httpbin.default.svc.cluster.local, dan biarkan kolom versi, bobot, serta port kosong.

    Gunakan YAML

    1. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Traffic Management Center > VirtualService. Pada halaman yang muncul, klik Create from YAML.

    2. Di editor YAML, tempel konten berikut lalu klik Create.

      Klik untuk melihat file YAML

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        hosts:
          - httpbin.default.svc.cluster.local
        http:
          - match:
              - uri:
                  exact: /status/500
            name: error-route
            route:
              - destination: 
                  host: httpbin.default.svc.cluster.local
          - match:
              - uri:
                  prefix: /delay
            name: delay-route
            route:
              - destination:
                  host: httpbin.default.svc.cluster.local
          - name: default-route
            route:
              - destination:
                  host: httpbin.default.svc.cluster.local

    Tabel berikut memetakan path permintaan ke rute.

    Path permintaan

    Tipe pencocokan

    Rute

    Deskripsi

    /status/500

    Exact

    error-route

    Selalu mengembalikan kode status 500.

    /delay

    Prefix

    delay-route

    Mengembalikan kode status 200 setelah penundaan tertentu. Untuk informasi selengkapnya tentang penggunaan path /delay, lihat delay.

    /*

    Path apa pun

    default-route

    Rute default.

Langkah 2: Konfigurasikan pemutusan sirkuit

Bagian ini menjelaskan cara mengonfigurasi dan menguji pemutusan sirkuit berbasis tingkat error serta pemutusan sirkuit berbasis permintaan lambat.

Tingkat error

Pemutusan sirkuit berbasis tingkat error memutus sirkuit ketika tingkat error dari respons server melebihi ambang batas dalam jendela waktu tertentu.

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Traffic Management Center > Circuit Breaking and Degradation.

  3. Pada halaman Create, tempel konten berikut ke editor YAML lalu klik Create.

    Klik untuk melihat file YAML

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMCircuitBreaker
    metadata:
      name: httpbin-error-circuitbreak
      namespace: default
    spec:
      configs:
        - breaker_config:
            break_duration: 60s
            custom_response:
              body: error break!
              header_to_add:
                x-envoy-overload: 'true'
              status_code: 499
            error_percent:
              value: 60
            min_request_amount: 5
            window_size: 10s
          match:
            vhost:
              name: httpbin.default.svc.cluster.local
              port: 8000
              route:
                name_match: error-route
      workloadSelector:
        labels:
          app: sleep
    

    Tabel berikut menjelaskan parameter dalam konfigurasi pemutusan sirkuit.

    Parameter

    Deskripsi

    workloadSelector.labels

    Beban kerja layanan downstream tempat aturan pemutusan sirkuit diterapkan. Dalam contoh ini, layanan downstream adalah layanan sleep, yang dipilih berdasarkan label app: sleep.

    break_duration

    Durasi sirkuit tetap terbuka setelah diputus. Dalam contoh ini, nilainya adalah 60s.

    window_size

    Jendela waktu untuk deteksi pemutusan sirkuit. Dalam contoh ini, nilainya adalah 10s. Artinya, jika tingkat error permintaan pada rute melebihi ambang batas yang ditentukan dalam 10 detik, pemutus sirkuit akan aktif dan menolak permintaan.

    error_percent

    Ambang batas tingkat error permintaan yang diperlukan untuk mengaktifkan pemutus sirkuit dalam jendela waktu tersebut. Dalam contoh ini, nilainya adalah 60. Artinya, jika tingkat error permintaan pada rute melebihi 60% dalam jendela waktu 10s, pemutus sirkuit akan aktif dan menolak permintaan.

    min_request_amount

    Jumlah minimum permintaan yang diperlukan untuk mengaktifkan pemutus sirkuit dalam jendela waktu tersebut. Parameter ini mencegah pemutus sirkuit aktif karena jumlah permintaan yang sangat sedikit.

    Dalam contoh ini, nilainya adalah 5. Artinya, pemutus sirkuit hanya akan aktif jika lebih dari 5 permintaan dikirim pada rute tersebut dalam jendela waktu 10s dan tingkat error melebihi 60%.

    custom_response

    Respons kustom yang dikembalikan oleh proxy mesh untuk permintaan yang ditolak setelah pemutus sirkuit aktif.

    • body diatur ke error break!. Badan respons adalah error break!.

    • header_to_add diatur ke x-envoy-overload: 'true'. Header x-envoy-overload: 'true' ditambahkan ke respons saat sirkuit terbuka.

    • status_code diatur ke 499. Kode respons untuk permintaan adalah 499 setelah sirkuit terbuka.

    match.vhost

    Entri rute tempat pemutusan sirkuit dikonfigurasi. Entri rute harus sesuai dengan entri rute tertentu yang dideklarasikan dalam layanan virtual.

    • name: Nama domain layanan hulu dalam rantai panggilan. Dalam contoh ini, parameter ini diatur ke httpbin.default.svc.cluster.local, yaitu nama domain layanan httpbin (layanan hulu dari layanan sleep).

    • port: Port layanan dari layanan hulu. Dalam contoh ini, parameter ini diatur ke 8000, yaitu port layanan dari layanan httpbin.

    • route.name_match: Nama aktual entri rute dalam layanan virtual. Konfigurasi pemutusan sirkuit berlaku pada rute ini. Dalam contoh ini, parameter ini diatur ke error-route, yaitu entri rute yang dibuat di Langkah 1. Permintaan yang sesuai dengan entri rute ini selalu mengembalikan kode status 500, sehingga memastikan pemutus sirkuit dapat aktif.

  4. Sambungkan ke kluster ACK menggunakan kubectl dan jalankan perintah berikut:

    for i in {1..100};  do kubectl exec -it deploy/sleep -- curl httpbin:8000/status/500 -I | grep 'HTTP';  echo ''; sleep 0.1; done;

    Output yang diharapkan:

    Klik untuk melihat detail

    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    ...

    Seperti yang ditunjukkan output, pemutus sirkuit aktif pada permintaan keenam. Permintaan berikutnya mengembalikan kode respons kustom 499. Sirkuit tetap terbuka selama 60 detik.

  5. Saat sirkuit terbuka, coba akses path lain dari layanan httpbin.

    for i in {1..100};  do kubectl exec -it deploy/sleep -- curl httpbin:8000/status/503 -I | grep 'HTTP';  echo ''; sleep 0.1; done;

    Output yang diharapkan:

    Klik untuk melihat detail

    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    HTTP/1.1 503 Service Unavailable
    ...

    Permintaan ke path lain layanan tidak terpengaruh oleh konfigurasi pemutusan sirkuit pada entri rute error-route dan masih dapat mengembalikan konten respons dari layanan httpbin.

Permintaan lambat

Pemutusan sirkuit berbasis permintaan lambat memutus sirkuit ketika jumlah "permintaan lambat"—permintaan yang melebihi ambang batas waktu respons—melampaui batas dalam jendela waktu tertentu.

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Traffic Management Center > Circuit Breaking and Degradation.

  3. Pada halaman Create, tempel konten berikut ke editor YAML lalu klik Create.

    Klik untuk melihat file YAML

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMCircuitBreaker
    metadata:
      name: httpbin-slow-circuitbreak
      namespace: default
    spec:
      configs:
        - breaker_config:
            break_duration: 60s
            custom_response:
              body: delay break!
              header_to_add:
                x-envoy-overload: 'true'
              status_code: 498
            slow_request_rt: 0.5s
            max_slow_requests: 5
            min_request_amount: 5
            window_size: 10s
          match:
            vhost:
              name: httpbin.default.svc.cluster.local
              port: 8000
              route:
                name_match: delay-route
      workloadSelector:
        labels:
          app: sleep

    Tabel berikut menjelaskan parameter dalam konfigurasi pemutusan sirkuit.

    Parameter

    Deskripsi

    workloadSelector.labels

    Beban kerja layanan downstream tempat aturan pemutusan sirkuit diterapkan. Dalam contoh ini, layanan downstream adalah layanan sleep, yang dipilih berdasarkan label app: sleep.

    break_duration

    Durasi sirkuit tetap terbuka setelah diputus. Dalam contoh ini, nilainya adalah 60s.

    window_size

    Jendela waktu untuk deteksi pemutusan sirkuit. Dalam contoh ini, nilainya adalah 10s. Artinya, jika jumlah permintaan lambat pada rute melebihi ambang batas yang ditentukan dalam 10 detik, pemutus sirkuit akan aktif dan menolak permintaan.

    slow_request_rt

    Ambang batas waktu respons untuk permintaan lambat. Dalam contoh ini, nilainya adalah 0.5s. Artinya, permintaan dengan waktu respons lebih dari 0.5s dianggap sebagai permintaan lambat.

    max_slow_requests

    Jumlah permintaan lambat yang diperlukan untuk mengaktifkan pemutus sirkuit dalam jendela waktu tersebut. Dalam contoh ini, nilainya adalah 5. Artinya, jika lebih dari 5 permintaan lambat terjadi dalam jendela waktu 10s, pemutus sirkuit akan aktif dan menolak permintaan.

    min_request_amount

    Jumlah minimum permintaan yang diperlukan untuk mengaktifkan pemutus sirkuit dalam jendela waktu tersebut. Parameter ini mencegah pemutus sirkuit aktif karena jumlah permintaan yang sangat sedikit.

    Dalam contoh ini, nilainya adalah 5. Artinya, pemutus sirkuit hanya akan aktif jika lebih dari 5 permintaan dikirim pada rute tersebut dalam jendela waktu 10s dan jumlah permintaan lambat melebihi 5.

    custom_response

    Respons kustom yang dikembalikan oleh proxy mesh untuk permintaan yang ditolak setelah pemutus sirkuit aktif.

    • body diatur ke delay break!. Badan respons adalah delay break!.

    • header_to_add diatur ke x-envoy-overload: 'true'. Header x-envoy-overload: 'true' ditambahkan ke respons saat sirkuit terbuka.

    • status_code diatur ke 498. Kode respons untuk permintaan adalah 498 setelah sirkuit terbuka.

    match.vhost

    Entri rute tempat pemutusan sirkuit dikonfigurasi. Entri rute harus sesuai dengan entri rute tertentu yang dideklarasikan dalam layanan virtual.

    • name: Nama domain layanan hulu dalam rantai panggilan. Dalam contoh ini, parameter ini diatur ke httpbin.default.svc.cluster.local, yaitu nama domain layanan httpbin (layanan hulu dari layanan sleep).

    • port: Port layanan dari layanan hulu. Dalam contoh ini, parameter ini diatur ke 8000, yaitu port layanan dari layanan httpbin.

    • route.name_match: Nama aktual entri rute dalam layanan virtual. Konfigurasi pemutusan sirkuit berlaku pada rute ini. Dalam contoh ini, parameter ini diatur ke delay-route, yaitu entri rute yang dibuat di Langkah 1. Anda dapat menentukan secara manual waktu respons lebih dari 0.5 detik untuk permintaan yang sesuai dengan rute ini. Hal ini memastikan pemutus sirkuit dapat aktif.

  4. Sambungkan ke kluster ACK menggunakan kubectl dan jalankan perintah berikut:

    for i in {1..100};  do kubectl exec -it deploy/sleep -- curl httpbin:8000/delay/1 -I | grep 'HTTP';  echo ''; sleep 0.1; done; 

    Output yang diharapkan:

    Klik untuk melihat detail

    HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    HTTP/1.1 498 Unknown
    ...

    Seperti yang ditunjukkan output, pemutus sirkuit aktif pada permintaan keenam. Permintaan berikutnya mengembalikan kode respons kustom 498. Sirkuit tetap terbuka selama 60 detik.

  5. Saat pemutus sirkuit berbasis permintaan lambat aktif, jalankan perintah berikut untuk menguji pemutus sirkuit berbasis tingkat error yang telah Anda konfigurasi di bagian sebelumnya.

    for i in {1..100};  do kubectl exec -it deploy/sleep -- curl httpbin:8000/status/500 -I | grep 'HTTP';  echo ''; sleep 0.1; done;

    Output yang diharapkan:

    Klik untuk melihat detail

    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 500 Internal Server Error
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    HTTP/1.1 499 Unknown
    ...

    Output menunjukkan bahwa aturan pemutusan sirkuit yang dikonfigurasi pada entri rute berbeda beroperasi secara independen. Hal ini memungkinkan Anda mengonfigurasi kebijakan pemutusan sirkuit spesifik untuk berbagai jenis lalu lintas timur-barat.

Operasi terkait

Lihat metrik pemutusan sirkuit tingkat layanan

Di ASM v1.22.6.28 dan versi lebih baru, Anda dapat melihat dan menggunakan metrik pemutusan sirkuit tingkat layanan untuk ASMCircuitBreaker.

Metrik

Tipe

Deskripsi

envoy_asm_circuit_breaker_total_broken_requests

Counter

Jumlah total permintaan yang ditolak oleh ASMCircuitBreaker.

Anda dapat mengonfigurasi proxyStatsMatcher untuk proxy sidecar agar melaporkan metrik tersebut.

  1. Saat mengonfigurasi proxyStatsMatcher, pilih Regular Expression Match dan atur nilainya ke .*circuit_breaker.*. Untuk informasi selengkapnya, lihat proxyStatsMatcher.

  2. Redeploy aplikasi httpbin untuk menerapkan konfigurasi proxy baru. Untuk informasi selengkapnya, lihat Redeploy workloads.

  3. Lakukan Langkah 1 dan Langkah 2 lagi untuk mengonfigurasi ulang pemutusan sirkuit.

  4. Jalankan perintah berikut untuk melihat metrik pemutusan sirkuit tingkat layanan untuk layanan httpbin:

    kubectl exec -it deploy/httpbin -c istio-proxy -- curl localhost:15090/stats/prometheus|grep asm_circuit_breaker

    Output yang diharapkan:

    # TYPE envoy_asm_circuit_breaker_total_broken_requests counter
    envoy_asm_circuit_breaker_total_broken_requests{cluster="outbound|8000||httpbin.default.svc.cluster.local",uuid="af7cf7ad-67e8-49c5-b5fe-xxxxxxxxx"} 1430
    # TYPE envoy_total_asm_circuit_breakers gauge
    envoy_total_asm_circuit_breakers{} 1

Konfigurasikan pengumpulan metrik dan peringatan

Setelah Anda mengonfigurasi pelaporan metrik pemutusan sirkuit tingkat layanan, Anda dapat mengumpulkan metrik ini di Prometheus dan membuat aturan peringatan untuk notifikasi tepat waktu mengenai kejadian pemutusan sirkuit. Contoh berikut menunjukkan cara mengonfigurasi pengumpulan metrik dan peringatan pemutusan sirkuit tingkat layanan menggunakan Managed Service for Prometheus.

  1. Di Managed Service for Prometheus, tambahkan komponen Alibaba Cloud ASM ke kluster bidang data atau upgrade komponen ke versi terbaru untuk memastikan Managed Service for Prometheus dapat mengumpulkan metrik pemutusan sirkuit yang diekspos. Untuk informasi selengkapnya tentang cara menambahkan komponen, lihat Manajemen komponen. Jika Anda telah mengintegrasikan instans Prometheus self-managed untuk memantau service mesh guna mengumpulkan metrik service mesh, Anda tidak perlu melakukan operasi tambahan.

  2. Buat aturan peringatan untuk pemutusan sirkuit tingkat layanan. Untuk informasi selengkapnya, lihat Buat aturan peringatan Prometheus menggunakan pernyataan PromQL kustom. Tabel berikut memberikan contoh cara mengonfigurasi parameter kunci untuk aturan peringatan. Anda dapat mengonfigurasi parameter lain berdasarkan kebutuhan bisnis seperti yang dijelaskan dalam dokumentasi.

    Parameter

    Contoh

    Deskripsi

    Custom PromQL statement

    (sum by(cluster, namespace) (increase(envoy_asm_circuit_breaker_total_broken_requests[1m]))) > 0

    Menanyakan jumlah permintaan yang ditolak dalam satu menit terakhir dan mengelompokkan hasil berdasarkan namespace dan nama layanan hulu. Peringatan dipicu ketika jumlah permintaan yang ditolak dalam satu menit lebih besar dari 0.

    Isi peringatan

    Pemutusan sirkuit tingkat layanan terjadi! Namespace: {{$labels.namespace}}, Layanan target tempat pemutusan sirkuit terjadi: {{$labels.cluster}}. Jumlah permintaan yang ditolak akibat pemutusan sirkuit dalam satu menit terakhir: {{ $value }}

    Format pesan peringatan. Pesan ini menampilkan namespace dan nama layanan yang terdampak, serta jumlah permintaan yang ditolak ke layanan tersebut dalam satu menit terakhir.