2016-07-22 19 views
5

Tôi đang cố gắng triển khai hystrix cho ứng dụng của mình bằng hystrix-javanica.Cấu hình Hystrix

Tôi đã cấu hình như sau hystrix-configuration.properties

hystrix.command.default.execution.isolation.strategy=SEMAPHORE 
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000  
hystrix.command.default.fallback.enabled=true 
hystrix.command.default.circuitBreaker.enabled=true 
hystrix.command.default.circuitBreaker.requestVolumeThreshold=3  
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=50000 
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50 

mẫu ngắn mạch đang làm việc tốt nhưng tôi có một nghi ngờ trong này hystrix.command.default.circuitBreaker.requestVolumeThreshold=3

  1. Is it nêu mở mạch sau 3 thất bại hoặc
  2. Mở mạch sau 3 lỗi đồng thời.

Cuốn qua các tài liệu

Ai có thể trả lời?

Trả lời

19

Làm thế nào Hystrix Circuit-Breaker hoạt động: Hystrix không đưa ra một ngắt mạch mà phá vỡ sau một số lần nhất định thất bại. Các mạch Hystrix sẽ phá vỡ nếu:

trong vòng một khoảng thời gian của thời gian metrics.rollingStats.timeInMilliseconds, tỷ lệ phần trăm của các hành động dẫn đến một ngoại lệ xử lý vượt quá errorThresholdPercentage, với điều kiện cũng rằng số lượng của các hành động thông qua các mạch trong khoảng thời gian ít nhất là requestVolumeThreshold


Yêu cầuVolumeThreshold là gì? requestVolumeThreshold là ngưỡng tối thiểu cho số lượng khối lượng (số) của cuộc gọi qua mạch phải được đáp ứng (trong cửa sổ cuộn), trước khi mạch tính tỷ lệ lỗi phần trăm. Chỉ khi khối lượng tối thiểu này (trong mỗi cửa sổ thời gian) được đáp ứng, mạch sẽ so sánh tỷ lệ lỗi của các cuộc gọi của bạn với số errorThresholdPercentage mà bạn đã định cấu hình.

Hãy tưởng tượng không có ngưỡng tần số nhỏ nhất qua mạch này. Hãy tưởng tượng cuộc gọi đầu tiên trong một lỗi cửa sổ thời gian. Bạn sẽ có 1 trong số 1 cuộc gọi là lỗi, = 100% tỷ lệ lỗi, cao hơn ngưỡng 50% bạn đã đặt. Vì vậy, các mạch sẽ phá vỡ ngay lập tức.

Hiện có requestVolumeThreshold để điều này không xảy ra. Nó có hiệu quả nói rằng, tỷ lệ lỗi thông qua mạch của bạn không phải là có ý nghĩa thống kê (và sẽ không được so sánh với errorThresholdPercentage) cho đến khi ít nhất requestVolumeThreshold cuộc gọi đã nhận được trong mỗi cửa sổ thời gian.

+0

Bit nhầm lẫn với cửa sổ cuộn. Bạn có thể giải thích thêm chút nữa không? Theo mạch cấu hình của tôi nên được mở sau 3 thất bại? Phải không? – Jay

+0

Xem https://github.com/Netflix/Hystrix/wiki/How-it-Works#circuit-breaker để biết thêm chi tiết về cách bộ ngắt mạch hoạt động. 3 bạn đã cấu hình không phải là một số thất bại mà trên đó để phá vỡ. Bộ ngắt Hystrix phá vỡ _percentage_ của các lỗi ('errorThresholdPercentage = 50'% bạn đã cấu hình), được xem xét qua các cuộc gọi trong một cửa sổ thời gian nhất định. 'RequestVolumeThreshold = 3' là (theo câu trả lời ban đầu của tôi) một ngưỡng số lượng tối thiểu của các cuộc gọi, mà phải được đáp ứng trong cùng một cửa sổ thời gian, để làm cho các tính toán% age có ý nghĩa thống kê. –

+0

Xem https://github.com/Netflix/Hystrix/wiki/Configuration#metricsrollingstatstimeinmilli giây để biết thời gian các cửa sổ được định cấu hình. –

-1

tôi khá mới mẻ để hystrix nhưng tôi đoán tôi có thể giúp bạn, Nói chung hystrix.command.default.circuitBreaker.requestVolumeThreshold được một tài sản mà bộ số lượng tối thiểu các yêu cầu trong một cửa sổ lăn rằng sẽ vấp sự mạch và giá trị mặc định của nó là 20 và giá trị của nó có thể được thay đổi trong tệp thuộc tính hoặc trong phương thức chú thích @HystrixCommand được chú thích của chúng tôi.

Ví dụ, nếu giá trị thuộc tính đó là 20, thì nếu chỉ nhận được 19 yêu cầu trong cửa sổ cuộn (nói một cửa sổ 10 giây), mạch sẽ không mở ngay cả khi tất cả 19 không thành công. nếu giá trị yêu cầu thất bại đạt 20, thì mạch sẽ được mở và các cuộc gọi tương ứng sẽ được gửi đến dự phòng ngay cả khi cuộc gọi thành công, cho đến khi khoảng thời gian cửa sổ ngủ hoàn tất.

khoảng thời gian cửa sổ ngủ đặt khoảng thời gian, sau khi vấp mạch, để từ chối yêu cầu trước khi cho phép thử lại để xác định xem mạch có bị đóng lại hay không. Giá trị mặc định là 5000 mili giây, điều này có thể được thay đổi bằng cách ghi đè circuitBreaker.sleepWindowInMilliseconds thuộc tính.

bạn có thể tìm thấy tất cả các thuộc tính và mô tả của nó here

+0

Bạn có thể muốn xem: https://github.com/Netflix/Hystrix/wiki/Configuration#circuitbreakererrorthresholdpercentage. Câu trả lời của bạn không chính xác, không tính đến 'errorThresholdPercentage'. Hi vọng điêu nay co ich. Xem https://github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L191 và https://github.com/Netflix/Hystrix /blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L196 –

+0

Có cách nào để xác minh các thuộc tính cấu hình đó để đảm bảo các thuộc tính này thực sự được áp dụng để định cấu hình HystrixCommand không? – pijushcse