Compartilhar via


Modos de distribuição

Ao criar uma política de distribuição, especificamos um dos seguintes modos de distribuição para definir a estratégia a ser usada ao distribuir trabalhos para as funções de trabalho:

Modo de rodízio

Os trabalhos serão distribuídos de maneira circular de modo que cada função de trabalho disponível receba trabalhos em sequência.

Modo ocioso por mais tempo

Os trabalhos serão distribuídos primeiro para a função de trabalho menos utilizada. Se houver um empate, escolheremos a função de trabalho disponível há mais tempo. A utilização é calculada como Load Ratio pelo seguinte algoritmo:

Taxa de carga = agregação da capacidade consumida por todos os trabalhos atribuídos à função de trabalho/Capacidade total da função de trabalho

Exemplo

Suponha que cada trabalho chat tenha sido configurado para consumir uma capacidade para uma função de trabalho. Um novo trabalho de chat é enfileirado no Roteador de Trabalhos e as seguintes funções de trabalho estão disponíveis para assumir o trabalho:

Worker A:
Capacity = 5
ConsumedScore = 3 (Currently handling 3 chats)
LoadRatio = 3 / 5 = 0.6
LastAvailable: 5 mins ago

Worker B:
Capacity = 4
ConsumedScore = 3 (Currently handling 3 chats)
LoadRatio = 3 / 4 = 0.75
LastAvailable: 3 min ago

Worker C:
Capacity = 5
ConsumedScore = 3 (Currently handling 3 chats)
LoadRatio = 3 / 5 = 0.6
LastAvailable: 7 min ago

Worker D:
Capacity = 3
ConsumedScore = 0 (Currently idle)
LoadRatio = 0 / 4 = 0
LastAvailable: 2 min ago

Workers would be matched in order: D, C, A, B

A Função de trabalho D tem a menor taxa de carga (0), portanto, o trabalho será oferecido a ela primeiro. As Funções de trabalho A e C estão empatadas com a mesma taxa de carga (0,6). No entanto, A Função de trabalho C está disponível há mais tempo (7 minutos) do que A Função de trabalho A (5 minutos), portanto, a Função de trabalho C será correspondida antes da Função de trabalho A. Por fim, a Função de trabalho B será correspondida por último, uma vez que a Função de trabalho B tem a maior taxa de carga (0,75).

Modo de melhor função de trabalho

As funções de trabalho com maior capacidade de lidar com o trabalho são escolhidas primeiro. A lógica para classificar as funções de trabalho pode ser personalizada, com uma expressão ou função do Azure para comparar duas funções de trabalho especificando uma Regra de Pontuação. Confira o exemplo

Quando uma Regra de Pontuação não for fornecida, esse modo de distribuição usará o método de pontuação padrão, que avalia as funções de trabalho com base em como os rótulos e seletores do trabalho correspondem aos rótulos da função de trabalho. Os algoritmos são descritos abaixo.

Correspondência de rótulo padrão

Para calcular uma pontuação com base nos rótulos do trabalho, incrementamos Match Score em 1 para cada rótulo de função de trabalho correspondente a um rótulo correspondente no trabalho e dividimos pelo número total de rótulos no trabalho. Portanto, quanto mais rótulos corresponderem, maior será o Match Score de uma função de trabalho. O Match Score final sempre será um valor entre 0 e 1.

Exemplo

Trabalho 1:

{
  "labels": {
    { "language": "english" },
    { "department": "sales" }
  }
}

Função de trabalho A:

{
  "labels": {
    { "language": "english" },
    { "department": "sales" }
  }
}

Função de trabalho B:

{
  "labels": {
    { "language": "english" }
  }
}

Função de trabalho C:

{
  "labels": {
    { "language": "english" },
    { "department": "support" }
  }
}

Cálculo:

Worker A's match score = 1 (for matching english language label) + 1 (for matching department sales label) / 2 (total number of labels) = 1
Worker B's match score = 1 (for matching english language label) / 2 (total number of labels) = 0.5
Worker C's match score = 1 (for matching english language label) / 2 (total number of labels) = 0.5

A Função de trabalho A seria a primeira correspondência. Em seguida, haveria a correspondência com a Função de trabalho B ou C, dependendo de qual está disponível há mais tempo, uma vez que a pontuação está empatada.

Correspondência do seletor de função de trabalho padrão

No caso em que o trabalho também contém seletores de função de trabalho, calcularemos Match Score com base no LabelOperator do seletor de função de trabalho.

Operadores de rótulo Equal/notEqual

Se o seletor de função de trabalho tiver LabelOperatorEqual ou NotEqual, incrementamos a pontuação em 1 para cada rótulo de trabalho correspondente a esse seletor de trabalho, de maneira semelhante a Label Matching acima.

Exemplo

Trabalho 2:

{
  "workerSelectors": [
    { "key": "department", "labelOperator": "equals", "value": "billing" },
    { "key": "segment", "labelOperator": "notEquals", "department": "vip" }
  ]
}

Função de trabalho D:

{
  "labels": {
    { "department": "billing" },
    { "segment": "vip" }
  }
}

Função de trabalho E:

{
  "labels": {
    { "department": "billing" }
  }
}

Função de trabalho F:

{
  "labels": {
    { "department": "sales" },
    { "segment": "new" }
  }
}

Cálculo:

Worker D's match score = 1 (for matching department selector) / 2 (total number of worker selectors) = 0.5
Worker E's match score = 1 (for matching department selector) + 1 (for matching segment not equal to vip) / 2 (total number of worker selectors) = 1
Worker F's match score = 1 (for segment not equal to vip) / 2 (total number of labels) = 0.5

A Função de trabalho E seria a primeira correspondência. Em seguida, haveria a correspondência com a Função de trabalho D ou F, dependendo de qual está disponível há mais tempo, uma vez que a pontuação está empatada.

Outros operadores de rótulo

Para seletores de função de trabalho que usam operadores que comparam por magnitude (GreaterThan/GreaterThanEqual/LessThan/LessThanEqual), incrementaremos o Match Score da função de trabalho em um valor calculado usando a função logística (Consulte a Figura 1). O cálculo é baseado no quanto o valor do rótulo da função de trabalho excede o valor do seletor da função de trabalho ou em um valor menor caso ele não exceda o valor do seletor da função de trabalho. Portanto, quanto mais valores de seletor de trabalho a função de trabalho exceder, e quanto maior o grau em que faz isso, maior será a pontuação de uma função de trabalho.

Diagram that shows logistic function.

Figura 1. Função logística

A seguinte função é usada para os operadores GreaterThan ou GreaterThanEqual:

MatchScore(x) = 1 / (1 + e^(-x)) where x = (labelValue - selectorValue) / selectorValue

A seguinte função é usada para os operadores LessThan ou LessThanEqual:

MatchScore(x) = 1 / (1 + e^(-x)) where x = (selectorValue - labelValue) / selectorValue

Exemplo

Trabalho 3:

{
  "workerSelectors": [
    { "key": "language", "operator": "equals", "value": "french" },
    { "key": "sales", "operator": "greaterThanEqual", "value": 10 },
    { "key": "cost", "operator": "lessThanEqual", "value": 10 }
  ]
}

Função de trabalho G:

{
  "labels": {
    { "language": "french" },
    { "sales": 10 },
    { "cost": 10 }
  }
}

Função de trabalho H:

{
  "labels": {
    { "language": "french" },
    { "sales": 15 },
    { "cost": 10 }
  }
}

Função de trabalho I:

{
  "labels": {
    { "language": "french" },
    { "sales": 10 },
    { "cost": 9 }
  }
}

Cálculo:

Worker G's match score = (1 + 1 / (1 + e^-((10 - 10) / 10)) + 1 / (1 + e^-((10 - 10) / 10))) / 3 = 0.667
Worker H's match score = (1 + 1 / (1 + e^-((15 - 10) / 10)) + 1 / (1 + e^-((10 - 10) / 10))) / 3 = 0.707
Worker I's match score = (1 + 1 / (1 + e^-((10 - 10) / 10)) + 1 / (1 + e^-((10 - 9) / 10))) / 3 = 0.675

As três funções de trabalho correspondem aos seletores de função de trabalho no trabalho e estão qualificadas para trabalhar nele. No entanto, podemos ver que a Função de trabalho H excede o valor do seletor da função de trabalho "sales" por uma margem de 5. Enquanto isso, a Função de trabalho I só excede o valor do seletor da função de trabalho de custo por uma margem de 1. A Função de trabalho G não excede nenhum dos valores do seletor de função de trabalho. Portanto, a Função de trabalho H corresponderia primeiro, seguida pela Função de trabalho I e, por fim, a Função de trabalho G corresponderia por último.