Mẫu vách ngăn được sử dụng bởi Hystrix là gì?


104

Hystrix, một API Netflix cho độ trễ và khả năng chịu lỗi trong các hệ thống phân tán phức tạp sử dụng kỹ thuật Bulkhead Pattern để cách ly luồng. Ai đó có thể xin vui lòng giải thích về nó.

Câu trả lời:


193

Chung

Nói chung, mục tiêu của mẫu vách ngăn là tránh những lỗi xảy ra ở một bộ phận của hệ thống để đưa toàn bộ hệ thống xuống. Thuật ngữ này xuất phát từ những con tàu mà tàu được chia thành các khoang kín nước riêng biệt để tránh một vết thủng thân tàu gây ngập toàn bộ tàu; nó sẽ chỉ làm ngập một vách ngăn.

Việc triển khai mô hình vách ngăn có thể có nhiều dạng tùy thuộc vào loại lỗi nào bạn muốn bảo vệ hệ thống. Tôi sẽ chỉ thảo luận về các loại lỗi mà Hystrix xử lý trong câu trả lời này.

Tôi nghĩ rằng mẫu vách ngăn đã được phổ biến bởi cuốn sách Release It! của Michael T. Nygard.

Hystrix giải quyết được gì

Việc triển khai vách ngăn trong Hystrix giới hạn số lượng cuộc gọi đồng thời đến một thành phần . Bằng cách này, số lượng tài nguyên (thường là các luồng) đang chờ phản hồi từ thành phần bị giới hạn.

Giả sử bạn có một yêu cầu có trụ sở, đa ứng dụng ren (ví dụ như một ứng dụng web điển hình) mà sử dụng ba thành phần khác nhau, Một , B , và C . Nếu yêu cầu thành phần C bắt đầu treo, cuối cùng tất cả các xử lý yêu cầu đề sẽ treo trên chờ đợi một câu trả lời từ C . Điều này sẽ làm cho ứng dụng hoàn toàn không phản hồi. Nếu các yêu cầu tới C được xử lý chậm, chúng ta sẽ gặp sự cố tương tự nếu tải đủ cao.

Việc triển khai mẫu vách ngăn của Hystrix giới hạn số lượng lệnh gọi đồng thời đến một thành phần và có thể đã lưu ứng dụng trong trường hợp này. Giả sử chúng ta có 30 chủ đề yêu cầu xử lý và có một giới hạn của 10 cuộc gọi đồng thời để C . Sau đó, tại hầu hết các đề xử lý 10 yêu cầu có thể treo khi gọi C , 20 chủ đề khác vẫn có thể xử lý các yêu cầu và các thành phần sử dụng MộtB .

Phương pháp tiếp cận Hystrix '

Hystrix 'có hai cách tiếp cận khác nhau đối với vách ngăn, cách ly luồng và cách ly semaphore.

Cách ly chuỗi

Cách tiếp cận tiêu chuẩn là chuyển giao tất cả các yêu cầu đến thành phần C đến một nhóm luồng riêng biệt với một số luồng cố định và không có (hoặc một số ít) hàng đợi yêu cầu.

Semaphore Isolation

Cách tiếp cận khác là phải có tất cả những người gọi có được một giấy phép (với 0 timeout) trước khi yêu cầu C . Nếu không thể lấy được giấy phép từ semaphore, các lệnh gọi tới C sẽ không được chuyển qua.

Sự khác biệt

Ưu điểm của cách tiếp cận nhóm luồng là các yêu cầu được chuyển đến C có thể hết thời gian chờ, điều không thể xảy ra khi sử dụng semaphores.


10
Ngoài ra, trong wiki Hystrix gốc hiện có mô tả chi tiết về cả hai cách tiếp cận: github.com/Netflix/Hystrix/wiki/How-it-Works
Dmitry

1
sự khác biệt giữa cầu dao và vách ngăn là gì?
voipp

4
@voipp bộ ngắt mạch là một thứ hoàn toàn khác. Họ phát hiện khi một dịch vụ ở trạng thái không lành mạnh và chuyển người gọi sang trạng thái "không hoạt động nhanh", nơi họ không gọi dịch vụ không lành mạnh, nhưng thay vào đó trả lại mã lỗi cho đến khi dịch vụ ổn trở lại. Điều này tránh làm quá tải dịch vụ không lành mạnh để nó có thể phục hồi và ngăn chặn lỗi xếp tầng vì người gọi không bị chậm lại.
K Erlandsson

1

Đây là một ví dụ điển hình với giải thích thời gian chạy cho vách ngăn trong Resilience4j được lấy cảm hứng từ Netflix Hystrix.

Các cấu hình ví dụ dưới đây có thể cung cấp một số cách sử dụng rõ ràng.

Cấu hình ví dụ: Cho phép tối đa 5 cuộc gọi đồng thời tại bất kỳ thời điểm nào. Giữ các cuộc gọi khác chờ cho đến khi một trong 5 cuộc gọi đồng thời trong quá trình kết thúc hoặc cho đến khi tối đa là 2 giây.

Ý tưởng là không tạo gánh nặng cho bất kỳ hệ thống nào có tải nhiều hơn mức chúng có thể tiêu thụ. Nếu tải đến lớn hơn mức tiêu thụ, thì hãy đợi thời gian hợp lý hoặc chỉ hết thời gian chờ và chuyển sang đường dẫn thay thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.