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 }
);