Circuit Breaker
Tổng Quan
Chính sách Circuit Breaker được thiết kế để ngăn chặn các lỗi lan truyền trong kiến trúc microservices bằng cách theo dõi tình trạng của các dịch vụ upstream và chặn các yêu cầu khi một dịch vụ trở nên không ổn định. Điều này đảm bảo tính ổn định của hệ thống, cải thiện trải nghiệm người dùng và phục hồi nhanh hơn từ các lỗi.
Circuit Breaker chuyển đổi giữa three states:
- Closed: Các yêu cầu được xử lý bình thường.
- Open: Các yêu cầu bị chặn do tỷ lệ lỗi cao.
- Half-Open: Một số lượng hạn chế các yêu cầu thử nghiệm được gửi để kiểm tra xem dịch vụ đã phục hồi hay chưa.
Chính sách này giúp prevent excessive retries, reduce latency, và ensure fault tolerance trong các hệ thống phân tán.
Chi Tiết Cấu Hình


Cấu Hình Trường
Chính sách Circuit Breaker cung cấp một số configurable parameters xác định khi nào và cách thức các yêu cầu bị chặn dựa trên các lỗi của hệ thống.
| Field name | Key | Type | Required | Description |
|---|---|---|---|---|
| Thời gian đo lường lỗi (s) | window_time | number | true | Kích thước cửa sổ tính bằng giây |
| Tỷ lệ lỗi (%) | failure_percent_threshold | number | true | % của các yêu cầu mà nên thất bại để mở mạch |
| Số lượng yêu cầu tối thiểu* | min_calls_in_window | number | true | Số lượng cuộc gọi tối thiểu phải có trong cửa sổ để bắt đầu tính toán |
| Cài đặt thời gian chờ API (ms) | api_call_timeout_ms | number | true | Thời gian chờ trước khi yêu cầu bị hết thời gian và được tính là lỗi |
| Thời gian trạng thái mở (s) | wait_duration_in_open_state | số | đúng | Thời gian (giây) để chờ trước khi tự động chuyển từ trạng thái mở sang trạng thái nửa mở |
| Thời gian trạng thái nửa mở (s) | wait_duration_in_half_open_state | số | đúng | Thời gian (giây) để chờ trong trạng thái nửa mở trước khi tự động chuyển sang trạng thái đóng |
| Số lượng yêu cầu tối thiểu (min) trong trạng thái nửa mở* | half_open_min_calls_in_window | số | đúng | Số lượng cuộc gọi tối thiểu cần có trong trạng thái nửa mở để bắt đầu tính toán |
| Số lượng yêu cầu tối đa trong trạng thái nửa mở* | half_open_max_calls_in_window | số | đúng | Số cuộc gọi tối đa cho phép trong trạng thái nửa mở |
| Đặt mã lỗi phản hồi* | error_status_code | số | sai | Ghi đè mã trạng thái phản hồi trong trường hợp có lỗi (circuit-breaker chặn yêu cầu) |
| Đặt thông điệp lỗi phản hồi* | error_msg_override | chuỗi | sai | Ghi đè bằng thông điệp tùy chỉnh trong trường hợp có lỗi |
| Đặt tiêu đề phản hồi* | response_header_override | chuỗi | sai | Ghi đè tiêu đề phản hồi "Content-Type" trong trường hợp có lỗi |
| Đặt đường dẫn ngoại lệ* | excluded_apis | chuỗi | đúng | JSON đã được chuyển đổi thành chuỗi để ngăn chặn việc chạy circuit-breaker trên các API này. Có thể thêm hoặc xóa các đường dẫn bổ sung bằng cách nhấp vào nút cộng hoặc trừ trên mỗi đường dẫn. |
| Đường dẫn dự phòng hoạt động | fallback path | chuỗi | sai | Một đường dẫn dự phòng được định nghĩa để xử lý các yêu cầu khi dịch vụ chính không khả dụng. |
Ghi chú bổ sung về hành vi của Circuit Breaker
Circuit Breaker hoạt động dựa trên chu kỳ phát hiện lỗi và chuyển qua ba trạng thái:
- Closed: Trạng thái bình thường nơi lưu lượng truy cập đi qua và tỷ lệ lỗi được theo dõi.
- Open: Bị kích hoạt khi ngưỡng tỷ lệ lỗi bị vượt qua, chặn tất cả lưu lượng truy cập đến tạm thời.
- Half-Open: Sau một khoảng thời gian đã cấu hình, lưu lượng hạn chế được cho phép để kiểm tra sự phục hồi của hệ thống.
- Recovery: Nếu lưu lượng kiểm tra vượt qua mà không gặp vấn đề gì, hệ thống sẽ trở lại trạng thái bình thường (Đã đóng).
Mỗi cài đặt góp phần kiểm soát vòng đời này:
| Field | Description |
|---|---|
| Yêu cầu tối thiểu | Số lượng yêu cầu tối thiểu trong khoảng thời gian đơn vị để bắt đầu đo lường lỗi. |
| Thời gian chờ API | Nếu một yêu cầu vượt quá ngưỡng này, nó sẽ được coi là một thất bại. |
| Thời gian trạng thái mở | Thời gian (tính bằng giây) mà mạch vẫn mở. |
| Thời gian nửa mở | Thời gian (tính bằng giây) mà mạch vẫn ở trạng thái nửa mở. |
| Yêu cầu tối thiểu trong nửa mở | Lưu lượng tối thiểu cần thiết trong trạng thái nửa mở để bắt đầu quan sát tỷ lệ lỗi một lần nữa. |
| Yêu cầu tối đa trong nửa mở | Số lượng yêu cầu kiểm tra tối đa để đánh giá khả năng phục hồi. |
Tùy chọn cấu hình phản hồi
- Custom Error Code: Mã lỗi được trả về khi lưu lượng bị chặn.
- Custom Error Message: Nội dung thông điệp được trả về khi lưu lượng bị chặn.
- Custom Error Content-Type: Content-Type của phản hồi lỗi.
Cấu hình đường dẫn ngoại lệ
Định nghĩa các đường dẫn cụ thể mà bộ ngắt mạch không nên được áp dụng.
Định dạng: PHƯƠNG THỨC + ĐƯỜNG DẪN
ví dụ: GET /example/v1
Cấu hình đường dẫn dự phòng
Nếu bộ ngắt mạch được kích hoạt, các yêu cầu có thể được chuyển hướng đến một trang thay thế:
- Đường dẫn dự phòng cho phép định nghĩa một lộ trình chuyển hướng tùy chỉnh cho các yêu cầu bị chặn.
- Đường dẫn mặc định sẽ được sử dụng trừ khi một Đường dẫn dự phòng được định nghĩa.
- Để chuyển hướng đến một đường dẫn cụ thể trong cùng một API, hãy chỉ định ĐƯỜNG DẪN API mong muốn làm Đường dẫn dự phòng.

Một số câu hỏi thường gặp khi cấu hình bộ ngắt mạch APIM
- Các tham số nào thực sự xác định khi nào Bộ ngắt mạch được kích hoạt (Đóng → Mở)?
Bộ ngắt mạch được kích hoạt only when these threshold parameters work together:
- Error measurement unit time (window_time)
- Minimum number of requests (min_calls_in_window)
- Error rate (%) (failure_percent_threshold)
- API timeout setting (api_call_timeout_ms)
Mạch mở khi all conditions below are met within the configured time window:
- Số lượng yêu cầu nhận được trong window_time ≥ min_calls_in_window
- Các yêu cầu thất bại (bao gồm cả thời gian chờ) khiến tỷ lệ thất bại đạt hoặc vượt quá failure_percent_threshold
- Các tham số nào KHÔNG ảnh hưởng đến việc kích hoạt nhưng thường bị nhầm lẫn với ngưỡng?
Các tham số sau do not participate in activation và chỉ được sử dụng after the circuit is already Open:
- wait_duration_in_open_state
- wait_duration_in_half_open_state
- half_open_min_calls_in_window
- half_open_max_calls_in_window
- Bộ ngắt mạch có kích hoạt ngay lập tức khi xảy ra thất bại không?
Không.
Việc kích hoạt phụ thuộc vào both volume and error rate:
- Phải có đủ yêu cầu xảy ra (min_calls_in_window)
- Các thất bại phải vượt quá ngưỡng (failure_percent_threshold)
- Tất cả các đánh giá diễn ra trong window_time
Chỉ khi all activation conditions are satisfied thì mạch mới chuyển từ Closed → Open.
Các nhóm tham số và trách nhiệm của chúng
- Tham số Kích hoạt / Ngưỡng (Đóng → Mở)
Các tham số này được đánh giá cùng nhau để quyết định when the circuit opens:
- window_time
- min_calls_in_window
- failure_percent_threshold
- api_call_timeout_ms
- Tham số Kiểm soát Khôi phục (Mở → Nửa Mở → Đóng)
Các tham số này kiểm soát how and when traffic is restored, không phải kích hoạt:
- wait_duration_in_open_state
- half_open_min_calls_in_window
- half_open_max_calls_in_window
- wait_duration_in_half_open_state
- Tham số Tùy chỉnh Phản hồi
Các tham số này ảnh hưởng đến phản hồi được trả về cho khách hàng nhưng không ảnh hưởng đến các chuyển trạng thái.
- error_status_code
- error_msg_override
- response_header_override
Một số cấu hình sai phổ biến
| Case | Reason |
|---|---|
| Mạch không bao giờ mở | min_calls_in_window quá cao |
| Mạch mở quá thường xuyên | window_time quá ngắn hoặc ngưỡng quá thấp |
| Khôi phục không bao giờ xảy ra | số cuộc gọi tối đa trong trạng thái nửa mở quá thấp |
| Kiểm tra sức khỏe kích hoạt trạng thái mở | thiếu excluded_apis |