2012-12-19 37 views
8

Tôi đã không hài lòng với các tùy chọn mà Azure cung cấp để cân bằng tải giữa nhiều webroles.Tại sao tôi nên sử dụng LoadBalancerProbe thay vì đăng ký vào sự kiện RoleEnvironment.StatusCheck?

Tôi đã tìm thấy ba cách có thể để thực hiện việc này.

trước tiên sẽ không làm gì cả và cho phép triển khai mặc định (round robin) thực hiện công việc.

khả năng thứ hai là xác định LoadBalancerProbe tùy chỉnh trong ServiceDefinitionFile, mà tôi đã thử và không hoạt động: Từ sự hiểu biết của tôi, trang aspx tùy chỉnh được gọi mỗi khi kiểm tra trạng thái được thực hiện trên vai trò. Tùy thuộc vào mã phản hồi http mà vai trò thay đổi trạng thái của nó thành bận. - nhưng điều này không bao giờ xảy ra. Ngoài ra, tôi không thể tìm thấy bất kỳ ví dụ nào để xác định LoadBalancingProbe tùy chỉnh.

Vì vậy, tôi đã tìm cách thay thế để thực hiện việc này.

Bây giờ, tôi đang đăng ký sự kiện RoleEnvironment.StatusCheck, cho phép tôi thực hiện một số logic và tùy thuộc vào kết quả đặt trạng thái vai trò thành bận và khả dụng.

Câu hỏi của tôi: 1) Giả sử LoadBalancerProbe tùy chỉnh hoạt động như được mô tả trong MSDN, sự khác nhau giữa đăng ký với StatusCheckEvent và sử dụng một thăm dò tùy chỉnh là gì?

2) Tại sao đầu dò cân bằng tải tùy chỉnh của tôi không hoạt động? - iam chỉ cần thử nghiệm với bộ mô phỏng azure cho bây giờ và iam cũng nhận thức được rằng lưu lượng truy cập vẫn được chuyển đến các trường hợp webrole mặc dù họ được thiết lập để bận rộn trong giả lập. Nhưng Thăm dò Tùy chỉnh của tôi không thay đổi trạng thái của các webroleinstances cả.

Đây là mã rất thô sơ, mà nên - với kiến ​​thức của tôi đặt trạng thái của webrole instance_n_0 thành bận.

public class LoadBalanceController : Controller 
{ 

    public ActionResult Index() 
    { 

     WebOperationContext woc = WebOperationContext.Current; 
     if(RoleEnvironment.CurrentRoleInstance.Id.ToLower().Contains("_0")) 
     { 
      woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.ServiceUnavailable; 
     }else 
     { 
      woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; 

     }   

     return View(); //not relevant 
    } 

Ive cũng đã định cấu hình servicedefinitionfile và đặt Tuyến đường để chuyển hướng đến bộ điều khiển/hành động này khi gọi healthcheck.aspx được xác định trong đầu dò tùy chỉnh.

<LoadBalancerProbes> 
    <LoadBalancerProbe name="WebRoleBalancerProbeHttp" protocol="http" path="healthcheck.aspx" intervalInSeconds="5" timeoutInSeconds="100"/> 
</LoadBalancerProbes> 
... 
<InputEndpoint name="EndpointWeb" protocol="http" port="80" loadBalancerProbe="WebRoleBalancerProbeHttp"/> 

Các Route:

routes.MapRoute(
      name: "HealhCheck", 
      url: "healthcheck.aspx", 
      defaults: new { controller = "LoadBalance", action = "Index", id = UrlParameter.Optional } 

     ); 

Trả lời

0

Không chắc lý do tại sao các đầu dò tùy chỉnh không hoạt động, nhưng đối với sự khác biệt: Sự kiện kiểm tra sức khoẻ cho phép bạn bố xem một ví dụ có sẵn, nhưng bạn don không có bất kỳ sự linh hoạt về mức độ thường xuyên này được gọi là. Ngoài ra, bạn không thể khởi chạy một dịch vụ riêng biệt mà lắng nghe trên một cổng tùy chỉnh (hoặc loại cổng).

Bạn linh hoạt hơn nhiều với đầu dò tùy chỉnh, vì bạn có thể tạo bất kỳ loại trình lắng nghe cổng nào để xác định tình trạng sức khỏe, thậm chí là một exe riêng biệt.

Với máy ảo, đây là phương pháp duy nhất của thiết bị thăm dò sức khỏe, vì Máy ảo không có tác nhân khách đang chạy và không cung cấp sự kiện kiểm tra sức khỏe.

Các vấn đề liên quan