Sdílet prostřednictvím


Způsoby distribuce

Při vytváření distribučních zásad určíme jeden z následujících režimů distribuce, který definuje strategii, která se má použít při distribuci úloh pracovníkům:

Režim kruhového dotazování

Úlohy budou distribuovány cyklickým způsobem tak, aby každý dostupný pracovní proces postupně přijímal úlohy.

Nejdelší nečinný režim

Úlohy se nejprve distribuují pracovnímu procesu, který je nejméně využitý. Pokud existuje vazba, vybereme pracovníka, který je k dispozici delší dobu. Využití se vypočítá jako Load Ratio následující algoritmus:

Poměr zatížení = agregace kapacity spotřebované všemi úlohami přiřazenými k pracovnímu procesu / celkové kapacitě pracovního procesu

Příklad

Předpokládejme, že každá chat úloha je nakonfigurovaná tak, aby spotřebovala jednu kapacitu pracovního procesu. Nová úloha chatu se zařadí do fronty do směrovače úloh a pro převzetí úlohy jsou k dispozici následující pracovní procesy:

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

Pracovní proces D má nejnižší poměr zatížení (0), takže pracovní proces D bude nabízen jako první. Pracovní procesy A a C jsou svázané se stejným poměrem zatížení (0,6). Pracovní proces C je však k dispozici delší dobu (před 7 minutami) než pracovní proces A (před 5 minutami), takže před pracovním procesem A bude pracovní proces C spárován. Nakonec se pracovní proces B bude shodovat jako poslední, protože pracovní proces B má nejvyšší poměr zatížení (0,75).

Nejlepší pracovní režim

Pracovní procesy, které jsou nejlépe schopny zpracovat úlohu, jsou vybrány jako první. Logiku řazení pracovních procesů lze přizpůsobit pomocí výrazu nebo funkce Azure pro porovnání dvou pracovních procesů zadáním pravidla bodování. Viz příklad

Pokud není zadané pravidlo bodování, použije tento režim distribuce výchozí metodu bodování, která vyhodnotí pracovní procesy na základě toho, jak se popisky a selektory úlohy shodují s popisky pracovního procesu. Algoritmy jsou popsány níže.

Výchozí porovnávání popisků

Při výpočtu skóre na základě popisků úlohy zvýšíme Match Score hodnotu 1 pro každý popisek pracovního procesu, který odpovídá odpovídajícímu popisku úlohy, a pak vydělíme celkovým počtem popisků v úloze. Proto čím více popisků odpovídá, tím vyšší je pracovní proces Match Score. Konečné Match Score bude vždy hodnota v rozmezí od 0 do 1.

Příklad

Úloha 1:

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

Pracovní proces A:

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

Pracovní proces B:

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

Pracovní proces C:

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

Výpočet:

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

Nejprve by se shodoval pracovní proces A. Dále by se pracovní proces B nebo Pracovní proces C shodoval v závislosti na tom, kdo byl k dispozici delší dobu, protože skóre shody je svázané.

Výchozí porovnávání selektoru pracovních procesů

V případě, že úloha obsahuje také selektory pracovních procesů, vypočítáme Match Score na základě tohoto selektoru LabelOperator pracovního procesu.

Operátory popisku Equal/notEqual

Pokud má selektor LabelOperator Equal pracovního procesu hodnotu nebo NotEqual, zvýšíme skóre o 1 pro každý popisek úlohy, který odpovídá tomuto selektoru pracovního procesu, podobným způsobem jako výše Label Matching .

Příklad

Úloha 2:

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

Pracovní proces D:

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

Pracovní proces E:

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

Pracovní proces F:

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

Výpočet:

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

Nejprve by se shodoval pracovní proces E. Dále by se pracovní proces D nebo Pracovní proces F shodoval v závislosti na tom, kdo byl k dispozici delší dobu, protože skóre shody je svázané.

Další operátory popisků

U selektorů pracovních procesů používajících operátory, které porovnávají velikost (GreaterThanLessThan///GreaterThanEqualLessThanEqual), zvýšíme velikost pracovního procesu Match Score o částku vypočítanou pomocí logistické funkce (viz obr. 1). Výpočet vychází z toho, kolik hodnota popisku pracovního procesu překročí hodnotu selektoru pracovního procesu nebo menší množství, pokud nepřekročí hodnotu selektoru pracovního procesu. Čím více selektoru pracovních procesů tedy pracovní proces překročí, a čím větší je jeho stupeň, tím vyšší bude skóre pracovního procesu.

Diagram znázorňující logistickou funkci

Obr. 1. Logistická funkce

Následující funkce se používá pro operátory GreaterThan nebo GreaterThanEqual:

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

Následující funkce se používá pro operátory LessThan nebo LessThanEqual:

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

Příklad

Úloha 3:

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

Pracovní proces G:

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

Pracovní proces H:

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

Pracovní proces I:

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

Výpočet:

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

Všichni tři pracovníci odpovídají selektorům pracovních procesů v úloze a mají nárok na práci. Vidíme však, že pracovník H překračuje hodnotu selektoru "sales" pracovního procesu o 5. Mezitím pracovní proces překračuje hodnotu selektoru nákladového pracovníka pouze o hranici 1. Pracovní proces G nepřekračuje vůbec žádné hodnoty selektoru pracovního procesu. Proto by se pracovní proces H shodoval jako první, následuje pracovní proces I a nakonec pracovní proces G by se shodoval jako poslední.