Esquema LoadBalancerProbe de definição dos Serviços de Nuvem do Azure
A sonda do balanceador de carga é uma sonda de integridade definida pelo cliente de pontos de extremidade UDP e pontos de extremidade em instâncias de função. O LoadBalancerProbe
não é um elemento autônomo, mas combinado com a função web ou de trabalho em um arquivo de definição de serviço. Mais de uma função podem usar uma LoadBalancerProbe
.
A extensão padrão do arquivo de definição de serviço é csdef.
A função de uma sonda do balanceador de carga
O Azure Load Balancer é responsável pelo roteamento de tráfego de entrada para as instâncias de função. O balanceador de carga determina quais instâncias podem receber tráfego investigando regularmente cada instância a fim de determinar a integridade dessa instância. O balanceador de carga investiga cada instância várias vezes por minuto. Há duas opções diferentes para oferecer integridade de instância ao balanceador de carga – a sonda padrão do ou uma sonda personalizada do balanceador de carga, implementada definindo LoadBalancerProbe no arquivo csdef.
A investigação do balanceador de carga padrão utiliza o Agente Convidado dentro da máquina virtual, que escuta e responde com uma resposta HTTP 200 OK somente quando a instância está no estado Pronta (como quando a instância não está nos estados Ocupada, Reciclando, Parando etc.). Se o agente convidado não responder com HTTP 200 OK, o Azure Load Balancer marcará a instância como sem resposta e interromperá o envio de tráfego para essa instância. O Azure Load Balancer continua executando ping na instância e se o agente convidado responder com um HTTP 200, o Azure Load Balancer enviará o tráfego para essa instância novamente. Ao usar uma função web, o código do seu site costuma ser executado em um w3wp.exe que não é monitorado pelo Azure Fabric nem pelo agente convidado, o que significa que as falhas no w3wp.exe (por exemplo, respostas HTTP 500) não são relatadas ao agente convidado e o balanceador de carga não sabe como retirar essa instância de rotação.
A sonda personalizada do balanceador de carga substitui a sonda padrão do agente convidado e permite criar sua própria lógica personalizada para determinar a integridade da instância de função. O balanceador de carga investiga regularmente seu ponto de extremidade (a cada 15 segundos, por padrão) e a instância é considerada como estando em rotação se responder com um ACK TCP ou HTTP 200 dentro do período de tempo limite (padrão de 31 segundos). Isso poderá ser útil para implementar sua própria lógica para remover instâncias da rotação do balanceador de carga, por exemplo, retornar um status diferente de 200 se a instância estiver acima de 90% da CPU. Para funções Web que usam o w3wp.exe, isso também significa que você obtém o monitoramento automático de seu site, uma vez que as falhas em seu código de site retornam um status diferente de 200 para a sonda do balanceador de carga. Se você não definir uma LoadBalancerProbe no arquivo csdef, o comportamento do balanceador de carga padrão (conforme descrito anteriormente) será usado.
Se você usar uma sonda personalizada do balanceador de carga, será necessário garantir que sua lógica leve em consideração o método RoleEnvironment.OnStop. Quando você usa a investigação do balanceador de carga padrão, a instância é retirada de rotação antes de o OnStop ser chamado, mas uma investigação do balanceador de carga personalizada pode continuar retornando um 200 OK durante o evento OnStop. Se estiver usando o evento OnStop para limpar o cache, parar o serviço ou fazer quaisquer outras alterações que possam afetar o comportamento do runtime do seu serviço, você precisará se certificar de que a lógica da sua investigação do balanceador de carga personalizada remova a instância de rotação.
Esquema de definição de serviço básico para uma sonda do balanceador de carga
O formato básico de um arquivo de definição de serviço que contém uma sonda de balanceador de carga é o seguinte.
<ServiceDefinition …>
<LoadBalancerProbes>
<LoadBalancerProbe name="<load-balancer-probe-name>" protocol="[http|tcp]" path="<uri-for-checking-health-status-of-vm>" port="<port-number>" intervalInSeconds="<interval-in-seconds>" timeoutInSeconds="<timeout-in-seconds>"/>
</LoadBalancerProbes>
</ServiceDefinition>
Elementos de esquema
O elemento LoadBalancerProbes
do arquivo de definição de serviço inclui os seguintes elementos:
Elemento LoadBalancerProbes
O elemento LoadBalancerProbes
descreve a coleção de sondas do balanceador de carga. Esse elemento é o pai do Elemento LoadBalancerProbe.
Elemento LoadBalancerProbe
O elemento LoadBalancerProbe
define a sonda de integridade de um modelo. É possível definir várias sondas do balanceador de carga.
A tabela a seguir descreve os atributos do elemento LoadBalancerProbe
:
Atributo | Tipo | Descrição |
---|---|---|
name |
string |
Obrigatórios. O nome da sonda do balanceador de carga. O nome deve ser exclusivo. |
protocol |
string |
Obrigatórios. Especifica o protocolo do ponto de extremidade. Os possíveis valores são http ou tcp . Se tcp for especificado, será necessário um ACK recebido para que a sonda tenha êxito. Se http for especificado, uma resposta 200 OK do URI especificado será necessária para que a sonda tenha êxito. |
path |
string |
O URI usado para solicitar o status de integridade da VM. path será necessário se protocol for definido como http . Caso contrário, isso não será permitido.Não há um valor padrão. |
port |
integer |
Opcional. A porta para se comunicar com a sonda. Esse atributo é opcional para qualquer ponto de extremidade, já que a mesma porta é usada para a investigação. É possível configurar uma porta diferente para sua investigação também. Os valores possíveis variam de 1 a 65535, inclusive. O valor padrão definido pelo ponto de extremidade. |
intervalInSeconds |
integer |
Opcional. O intervalo, em segundos, para a frequência de investigação do status de integridade no ponto de extremidade. Normalmente, o intervalo é ligeiramente menor do que a metade do período de tempo limite alocado (em segundos) que permite duas sondas completas antes de tirar a instância de rotação. O valor padrão é 15. O valor mínimo é cinco. |
timeoutInSeconds |
integer |
Opcional. O período de tempo limite, em segundos, aplicado à investigação em que nenhuma resposta resulta na interrupção da entrega de tráfego adicional ao ponto de extremidade. Este valor permite que pontos de extremidade sejam tirados de rotação mais rapidamente ou mais lentamente do que os tempos normais usados no Azure (os padrões). O valor padrão é 31. O valor mínimo é 11. |
Confira também
Esquema de Definição do Serviço de Nuvem (suporte estendido).