2012-12-19 6 views
8

byłem błahy z błękitem opcji zapewnia zrównoważenie obciążenia między wieloma webroles.dlaczego mam używać LoadBalancerProbe zamiast subskrybowania RoleEnvironment.StatusCheck Event?

Znalazłem trzy możliwe sposoby, aby to zrobić.

pierwsze byłoby w ogóle nic nie robić i niech domyślny (round robin) wdrażanie do pracy.

Drugą możliwością byłoby zdefiniowanie niestandardowego LoadBalancerProbe w pliku ServiceDefinitionFile, który próbowałem i nie uzyskałem dostępu do pracy: Z mojego punktu widzenia niestandardowa strona aspx jest wywoływana za każdym razem, gdy sprawdzana jest status tej roli. W zależności od kodu odpowiedzi HTTP rola zmienia swój status na zajęty. - ale to się nigdy nie zdarza. Ponadto, nie mogłem znaleźć żadnych przykładów definiowania niestandardowego LoadBalancingProbe.

Dlatego szukałem alternatywny sposób to zrobić.

Teraz iam subskrybowania RoleEnvironment.StatusCheck imprezy, która pozwala mi realizować jakąś logikę i w zależności od wyników ustawić stan rolę zajęty i dostępne.

Moje pytania: 1) Przypuśćmy, że niestandardowy LoadBalancerProbe działa tak, jak opisano w MSDN, jaka jest różnica między subskrybowaniem StatusCheckEvent a użyciem niestandardowej sondy?

2) Dlaczego mój zwyczaj sonda równoważenia obciążenia nie działa? - IAM właśnie testowanie z lazurowego emulatora teraz i iam dobrze wie, że ruch nadal dostaje kierowane do wystąpień webrole allthough są ustawione na zajęty w emulatorze. Ale moja niestandardowa sonda nie zmienia w ogóle statusu webroleinstances.

Oto kod bardzo szczątkowe, które powinny - aby moja wiedza ustawić status webrole instance_n_0 zajęty.

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 configered również mój servicedefinitionfile i ustawić trasę przekierować do tego kontrolera/akcji przy wywołaniu healthcheck.aspx zdefiniowany w sondzie niestandardowej.

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

trasy:

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

     ); 

Odpowiedz

0

Nie wiem, dlaczego sonda zwyczaj nie działa, ale dla różnic: Impreza health-check pozwala ogłosić, czy instancja jest dostępna, ale don nie mają żadnej elastyczności w zakresie tego, jak często się to nazywa. Ponadto nie można uruchomić oddzielnej usługi, która nasłuchuje na niestandardowym porcie (lub typie portu).

mieć znacznie większą elastyczność z sondami niestandardowych, ponieważ można utworzyć dowolny typ portu nasłuchiwania w celu określenia stanu zdrowia, a nawet osobny exe.

z wirtualnymi maszynami, jest to jedyna metoda sond zdrowotnych, ponieważ maszyny wirtualne nie mają przebieg agenta gość i nie zapewniają zdarzenie health-check.

Powiązane problemy