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 sự ổ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 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 một 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 thử nghiệm 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 |
---|---|
Số 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ở. |
Số 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. |
Số yêu cầu tối đa trong nửa mở | Số lượng yêu cầu thử nghiệm 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.