All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan fitur pemutusan sirkuit tingkat rute ASM

Last Updated:Jul 02, 2025

Service Mesh (ASM) memungkinkan Anda mengonfigurasi sumber daya seperti layanan virtual dan aturan tujuan untuk menerapkan tata kelola lalu lintas non-intrusif pada layanan mikro. Contohnya termasuk pengarahan lalu lintas, pembatasan, pemutusan sirkuit, dan pencermatan lalu lintas. Topik ini menjelaskan cara menggunakan fitur pemutusan sirkuit tingkat rute ASM.

Prasyarat

  • File konfigurasi yang diperlukan dalam topik ini telah diunduh.

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

  • Cluster telah ditambahkan ke instance ASM.

  • Gateway masuk telah diterapkan. Untuk informasi lebih lanjut, lihat Buat Gateway Masuk.

  • Layanan Bookinfo dan NGINX telah dibuat. Untuk informasi lebih lanjut, lihat Terapkan Aplikasi dalam Instance ASM.

  • kubectl terhubung ke instance ASM. Untuk informasi lebih lanjut, lihat Gunakan kubectl pada Control Plane untuk Mengakses Sumber Daya Istio.

  • Gateway Istio telah diterapkan. Untuk informasi lebih lanjut, lihat Kelola Gateway Istio.

    Tampilkan Kode YAML dari Gateway Istio

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - bf2.example.com
        port:
          name: http
          number: 80
          protocol: http
  • Layanan virtual telah dibuat. Untuk informasi lebih lanjut, lihat Kelola Layanan Virtual.

    Tampilkan Kode YAML dari Layanan Virtual

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: bookinfo
      namespace: default
    spec:
      gateways:
      - bookinfo-gateway
      hosts:
      - bf2.example.com
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        name: productpage-route-name1
        route:
        - destination:
            host: productpage
            port:
              number: 9080
      - match:
        - uri:
            prefix: /httpbin
        name: httpbin-route-name1
        rewrite:
          uri: /
        route:
        - destination:
            host: httpbin.foo.svc.cluster.local
            port:
              number: 80
  • Alat pembangkit lalu lintas hey telah diinstal. Untuk informasi lebih lanjut, kunjungi hey di GitHub.

Informasi Latar Belakang

ASM memungkinkan Anda mengonfigurasi fitur pemutusan sirkuit di bidang trafficPolicy. Jika jumlah permintaan akses mencapai ambang batas pemutusan sirkuit, permintaan baru akan ditolak. Saat mengonfigurasi aturan tujuan, Anda dapat menyetel dua item berikut dari fitur pemutusan sirkuit di bidang trafficPolicy:

  • ConnectionPoolSettings: Menentukan jumlah maksimum koneksi ke layanan. Jika jumlah permintaan mencapai nilai ini, permintaan baru akan masuk ke status tertunda, habis waktu, atau dicoba ulang.

  • OutlierDetection: Menentukan aturan untuk menghapus instans tidak sehat dari pool penyeimbangan beban.

Istio menyediakan konfigurasi pemutusan sirkuit berikut untuk aturan tujuan. Untuk informasi lebih lanjut, lihat Destination Rule.

Tampilkan Kode YAML dari Aturan Tujuan

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1
    outlierDetection:
      consecutive5xxErrors: 1
      interval: 1s
      baseEjectionTime: 3m
      maxEjectionPercent: 100
                

Fitur pemutusan sirkuit Istio open source bekerja sebagai berikut: Envoy secara berkala memindai host di cluster upstream untuk memeriksa apakah ada pengecualian yang terjadi. Host tempat pengecualian terjadi dikeluarkan dari pool koneksi. Dengan cara ini, pemutusan sirkuit dilakukan pada host upstream. Mekanisme ini memiliki beberapa kelemahan:

  • Pemutusan sirkuit berbasis layanan diimplementasikan alih-alih pemutusan sirkuit berbasis API.

  • Fitur ini hanya berlaku untuk lalu lintas yang dimaksudkan untuk layanan setelah perutean terjadi.

Untuk mengatasi kekurangan tersebut, ASM memperluas rantai filter Envoy pada bidang data dan menyediakan com.aliyun.break filter untuk mendukung pemutusan sirkuit tingkat rute. Pada bidang kontrol, ASM memungkinkan Anda menggunakan ASMCircuitBreaker CustomResourceDefinition (CRD) untuk menerapkan pemutusan sirkuit tanpa perlu fokus pada implementasi dasar.

Dalam contoh ini, layanan Bookinfo dan HTTPBin digunakan untuk mensimulasikan permintaan lambat dan permintaan kesalahan. Layanan Bookinfo diterapkan di namespace default. Layanan HTTPBin diterapkan di namespace foo. Gateway masuk diterapkan di namespace istio-system. Layanan HTTPBin diterapkan di layanan uji backend namespace foo untuk memverifikasi ruang lingkup pemutusan sirkuit.场景示例

Skenario

Anda dapat mengaktifkan fitur pemutusan sirkuit tingkat rute untuk gateway ASM. Fitur ini mendukung protokol HTTP dan Google Remote Procedure Call (gRPC). Anda dapat menambahkan konfigurasi gateway Istio ke file YAML CRD ASMCircuitBreaker. Dalam contoh ini, aturan pemutusan sirkuit dikonfigurasikan untuk rute httpbin-route-name1 yang mengarahkan permintaan ke /httpbin.

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMCircuitBreaker
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      app: istio-ingressgateway
  isGateway: true
  configs:
    - match:
        vhost:
          name: "bf2.example.com"
          port: 80
          route:
            name_match: nginx-route-name1
      breaker_config:
        slow_request_rt: 0.1s
        break_duration: 90s
        window_size: 10s
        max_slow_requests: 10
        min_request_amount: 3
        error_percent:
          value: 60
        custom_response:
          header_to_add:
            x-envoy-circuitbreak: "true"
          body: "hello, break!"
          status_code: 499

Tabel berikut menjelaskan beberapa bidang. Untuk deskripsi lebih banyak bidang dalam CRD ASMCircuitBreaker, lihat Deskripsi Bidang ASMCircuitBreaker.

Bidang

Deskripsi

isGateway: true

Menentukan apakah akan menerapkan konfigurasi ke gateway. Nilai default: false.

value: 60

Persentase maksimum permintaan kesalahan yang diizinkan. Jika persentase melebihi nilai ini yaitu 60% dan jumlah permintaan sama dengan atau lebih besar dari tiga, permintaan baru akan ditolak.

max_slow_requests: 10

Jumlah maksimum permintaan lambat yang diizinkan. Jika jumlahnya melebihi nilai ini yaitu 10, permintaan baru akan ditolak.

Catatan

Jika waktu respons permintaan melebihi nilai bidang slow_request_rt, permintaan tersebut dianggap sebagai permintaan lambat.

break_duration: 90s

Periode pemutusan sirkuit selama permintaan baru ditolak. Unit: detik. Dalam contoh ini, periode pemutusan sirkuit diatur menjadi 90 detik.

Konfigurasikan dan verifikasi aturan pemutusan sirkuit

Dalam contoh ini, aturan pemutusan sirkuit dikonfigurasikan untuk rute httpbin-route-name1 dari host virtual bf2.example.com:80 untuk menerapkan throttling.

  1. Buat file asmcircuitbreaker-test-gw.yaml dan tambahkan konten berikut ke file:

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMCircuitBreaker
    metadata:
      name: ingressgateway
      namespace: istio-system
    spec:
      workloadSelector:
        labels:
          app: istio-ingressgateway
      isGateway: true
      configs:
        - match:
            vhost:
              name: "bf2.example.com"
              port: 80
              route:
                name_match: httpbin-route-name1
          breaker_config:
            slow_request_rt: 0.1s
            break_duration: 90s
            window_size: 10s
            max_slow_requests: 10
            min_request_amount: 3
            error_percent:
              value: 60
            custom_response:
              header_to_add:
                x-envoy-overload: "true"
              body: "hello, break!"
              status_code: 499
  2. Jalankan perintah berikut untuk membuat ASMCircuitBreaker:

    kubectl apply -f asmcircuitbreaker-test-gw.yaml
  3. Simulasikan latensi satu detik dalam merespons permintaan atau kesalahan respons 500 dari layanan Httpbin. Ulangi operasi sepuluh kali.

    • Jalankan perintah berikut untuk mensimulasikan latensi satu detik dalam merespons permintaan:

      curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/httpbin/delay/1 -v
    • Jalankan perintah berikut untuk mensimulasikan kesalahan respons 500 dari layanan HTTPBin:

      curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/httpbin/status/500 -v

    Output yang diharapkan:

    < HTTP/1.1 499 Unknown
    < Content-Length: 12
    < Content-Type: text/plain
    < x-envoy-overload: true
    < Date: Thu, 13 Jan 2022 03:03:09 GMT
    < Server: istio-envoy
    <
    Hello,Break!

    Jika Hello,Break! dikembalikan, permintaan ditolak.

  4. Jalankan perintah berikut untuk mengakses antarmuka /productpage dari layanan Bookinfo:

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/productpage -v

    Jika HTTP 200 dikembalikan di halaman Productpage, permintaan tidak ditolak.

Referensi

Deskripsi Bidang ASMCircuitBreaker