Udostępnij za pośrednictwem


Tryby dystrybucji

Podczas tworzenia zasad dystrybucji określamy jeden z następujących trybów dystrybucji, aby zdefiniować strategię używaną podczas dystrybucji zadań do procesów roboczych:

Tryb działania okrężnego

Zadania będą dystrybuowane w sposób okrągły, tak aby każdy dostępny proces roboczy otrzymywał zadania w sekwencji.

Najdłuższy tryb bezczynności

Zadania będą dystrybuowane do procesu roboczego, który jest najmniej wykorzystywany jako pierwszy. Jeśli istnieje krawat, wybierzemy proces roboczy, który był dostępny przez dłuższy czas. Użycie jest obliczane jako Load Ratio algorytm następujący:

Współczynnik obciążenia = agregacja pojemności zużywanej przez wszystkie zadania przypisane do procesu roboczego / Łączna pojemność procesu roboczego

Przykład

Załóżmy, że każde chat zadanie zostało skonfigurowane do korzystania z jednej pojemności dla procesu roboczego. Nowe zadanie czatu jest umieszczane w kolejce do routera zadań, a następujący pracownicy są dostępni do podjęcia zadania:

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

Proces roboczy D ma najniższy współczynnik obciążenia (0), więc najpierw zostanie zaproponowane zadanie robocze D. Procesy robocze A i C są powiązane z tym samym współczynnikiem obciążenia (0,6). Jednak proces roboczy C był dostępny przez dłuższy czas (7 minut temu) niż proces roboczy A (5 minut temu), więc proces roboczy C zostanie dopasowany przed procesem roboczym A. Na koniec proces roboczy B zostanie dopasowany ostatnio, ponieważ proces roboczy B ma najwyższy współczynnik obciążenia (0,75).

Najlepszy tryb roboczy

Pracownicy, którzy są najlepiej w stanie obsłużyć pracę, są wybierane jako pierwsze. Logika klasyfikacji procesów roboczych można dostosować z wyrażeniem lub funkcją platformy Azure w celu porównania dwóch procesów roboczych, określając regułę oceniania. Zobacz przykład

Jeśli reguła oceniania nie zostanie podana, ten tryb dystrybucji będzie używać domyślnej metody oceniania, która ocenia procesy robocze na podstawie tego, jak etykiety i selektory zadania są zgodne z etykietami procesu roboczego. Algorytmy zostały opisane poniżej.

Domyślne dopasowywanie etykiet

Aby obliczyć wynik na podstawie etykiet zadania, zwiększamy Match Score wartość o 1 dla każdej etykiety procesu roboczego, która pasuje do odpowiedniej etykiety w zadaniu, a następnie dzielimy przez łączną liczbę etykiet w zadaniu. W związku z tym im więcej etykiet pasuje, tym wyższa wartość procesu roboczego Match Scoreto . Finał Match Score zawsze będzie wartością z zakresu od 0 do 1.

Przykład

Zadanie 1:

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

Proces roboczy A:

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

Proces roboczy B:

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

Proces roboczy C:

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

Obliczenie:

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

Proces roboczy A zostanie dopasowany jako pierwszy. Następnie proces roboczy B lub proces roboczy C będzie zgodny, w zależności od tego, kto był dostępny przez dłuższy czas, ponieważ wynik dopasowania jest powiązany.

Domyślne dopasowanie selektora procesów roboczych

W przypadku, gdy zadanie zawiera również selektory procesów roboczych, obliczymy wartość Match Score na LabelOperator podstawie selektora tego procesu roboczego.

Operatory etykiet równości/notEqual

Jeśli selektor procesów roboczych ma LabelOperator Equal wartość lub NotEqual, zwiększamy wynik o 1 dla każdej etykiety zadania zgodnej z selektorem procesu roboczego Label Matching w podobny sposób, jak powyżej.

Przykład

Zadanie 2:

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

Proces roboczy D:

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

Proces roboczy E:

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

Proces roboczy F:

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

Obliczenie:

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

Najpierw zostanie dopasowany proces roboczy E. Następnie element Roboczy D lub Proces roboczy F będzie zgodny, w zależności od tego, kto był dostępny przez dłuższy czas, ponieważ wynik dopasowania jest powiązany.

Inne operatory etykiet

W przypadku selektorów procesów roboczych używających operatorów, które porównują wielkość (GreaterThanLessThan///GreaterThanEqualLessThanEqual), zwiększamy wartość procesu roboczego Match Score o kwotę obliczoną przy użyciu funkcji logistycznej (zobacz Rysunek 1). Obliczenie jest oparte na tym, ile wartość etykiety procesu roboczego przekracza wartość selektora procesu roboczego lub mniejszą, jeśli nie przekracza wartości selektora procesu roboczego. W związku z tym im więcej wartości selektora procesów roboczych przekracza, a im większy stopień, w jakim to robi, tym wyższy będzie wynik procesu roboczego.

Diagram przedstawiający funkcję logistyczną.

Rys. 1. Funkcja logistyczna

Następująca funkcja jest używana dla operatorów GreaterThan lub GreaterThanEqual:

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

Następująca funkcja jest używana dla operatorów LessThan lub LessThanEqual:

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

Przykład

Zadanie 3:

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

Proces roboczy G:

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

Proces roboczy H:

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

Proces roboczy I:

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

Obliczenie:

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

Wszyscy trzej pracownicy są zgodni z selektorami procesów roboczych w zadaniu i kwalifikują się do pracy nad nim. Widać jednak, że wartość selektora procesu roboczego H przekracza wartość selektora "sprzedaży" o margines 5. Tymczasem pracownik przekracza tylko wartość selektora kosztu o margines 1. Proces roboczy G nie przekracza żadnych wartości selektora procesów roboczych. W związku z tym proces roboczy H zostanie dopasowany jako pierwszy, a następnie proces roboczy I i wreszcie Pracownik G zostanie dopasowany ostatnio.