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 na distribuição de trabalhos aos trabalhadores:

Modo round robin

Os postos de trabalho serão distribuídos de forma circular, de modo a que cada trabalhador disponível receba os postos de trabalho em sequência.

Modo inativo mais longo

Os postos de trabalho serão distribuídos ao trabalhador menos utilizado primeiro. Se houver empate, escolheremos o trabalhador que está disponível há mais tempo. A utilização é calculada como um Load Ratio pelo seguinte algoritmo:

Load Ratio = Agregado da capacidade consumida por todos os trabalhos atribuídos ao trabalhador / Capacidade total do trabalhador

Exemplo

Suponha que cada chat trabalho foi configurado para consumir uma capacidade para um trabalhador. Um novo trabalho de chat é enfileirado no Job Router e os seguintes trabalhadores 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

O trabalhador D tem a taxa de ocupação mais baixa (0), pelo que o trabalhador D receberá a oferta de emprego primeiro. Os trabalhadores A e C estão empatados com a mesma relação de carga (0,6). No entanto, o Trabalhador C esteve disponível por mais tempo (7 minutos atrás) do que o Trabalhador A (5 minutos atrás), portanto, o Trabalhador C será correspondido antes do Trabalhador A. Finalmente, o Trabalhador B será correspondido em último lugar, uma vez que o Trabalhador B tem a maior taxa de carga (0,75).

Melhor modo de trabalho

Os trabalhadores mais aptos a lidar com o trabalho são escolhidos primeiro. A lógica para classificar Trabalhadores pode ser personalizada, com uma expressão ou função do Azure para comparar dois trabalhadores especificando uma Regra de Pontuação. Ver exemplo

Quando uma Regra de Pontuação não é fornecida, esse modo de distribuição usará o método de pontuação padrão, que avalia os trabalhadores com base em como os rótulos e seletores do trabalho correspondem aos rótulos do trabalhador. 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 o Match Score por 1 para cada rótulo de trabalhador que corresponde a um rótulo correspondente no trabalho e, em seguida, dividimos pelo número total de rótulos no trabalho. Portanto, quanto mais rótulos corresponderem, maior será a do Match Scoretrabalhador. O final Match Score será sempre um valor entre 0 e 1.

Exemplo

Emprego 1:

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

Trabalhador A:

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

Trabalhador B:

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

Trabalhador 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

O trabalhador A seria correspondido primeiro. Em seguida, o Trabalhador B ou o Trabalhador C seriam correspondidos, dependendo de quem estivesse disponível por mais tempo, uma vez que o placar da partida está empatado.

Correspondência padrão do seletor de trabalhadores

No caso em que o trabalho também contém seletores de trabalhadores, calcularemos com Match Score base no LabelOperator seletor desse trabalhador.

Operadores de rótulo Igual/nãoIgual

Se o seletor de trabalhador tiver o LabelOperatorEqual ou NotEqual, incrementaremos a pontuação em 1 para cada rótulo de trabalho que corresponda a esse seletor de trabalhador, de maneira semelhante à Label Matching acima.

Exemplo

Emprego 2:

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

Trabalhador D:

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

Trabalhador E:

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

Trabalhador 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

O trabalhador E seria correspondido primeiro. Em seguida, o Trabalhador D ou o Trabalhador F seriam correspondidos, dependendo de quem estivesse disponível por mais tempo, já que o placar da partida está empatado.

Outros operadores de rótulos

Para seletores de trabalhadores usando operadores que comparam por magnitude (), incrementaremos o trabalhador em uma quantidade calculada usando a função logística (GreaterThanLessThan///GreaterThanEqualLessThanEqualVer Fig. 1).Match Score O cálculo é baseado em quanto o valor do rótulo do trabalhador excede o valor do seletor de trabalhador ou um valor menor se não exceder o valor do seletor de trabalhador. Portanto, quanto mais valores do seletor de trabalhadores o trabalhador exceder, e quanto maior o grau em que o fizer, maior será a pontuação de um trabalhador.

Diagram that shows logistic function.

Fig. 1. Função logística

A função a seguir é usada para operadores GreaterThan ou GreaterThanEqual:

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

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

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

Exemplo

Emprego 3:

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

Trabalhador G:

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

Trabalhador H:

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

Trabalhador 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

Todos os três trabalhadores correspondem aos seletores de trabalhadores no trabalho e são elegíveis para trabalhar nele. No entanto, podemos ver que o Trabalhador H excede o valor do seletor de trabalhadores "vendas" por uma margem de 5. Enquanto isso, o Trabalhador I só excede o valor do seletor de trabalhador de custo por uma margem de 1. O trabalhador G não excede nenhum dos valores do seletor de trabalhador. Portanto, o Trabalhador H seria correspondido primeiro, seguido pelo Trabalhador I e, finalmente, o Trabalhador G seria correspondido em último.