Freigeben über


Verteilungsmodi

Beim Erstellen einer Verteilungsrichtlinie geben wir einen der folgenden Verteilungsmodi an, um die Strategie zu definieren, die beim Verteilen von Aufträgen an Worker verwendet werden soll:

Roundrobinmodus

Aufträge werden in zirkulärer Weise verteilt, sodass jeder verfügbare Worker Aufträge in Folge erhält.

Längster Leerlauf-Modus

Aufträge werden zuerst an den Worker vergeben, der am wenigsten genutzt wird. Wenn es einen Gleichstand gibt, wählen wir den Worker aus, der länger verfügbar ist. Die Auslastung wird durch den folgenden Algorithmus als eine Load Ratio berechnet:

Lastenverhältnis = Aggregat der Kapazität, die von allen Aufträgen verbraucht wird, die dem Worker zugewiesen sind / Gesamtkapazität des Workers

Beispiel

Gehen Sie von der Annahme aus, dass jeder chat-Auftrag so konfiguriert wurde, dass eine Kapazität für einen Worker verbraucht wird. Ein neuer Chatauftrag wird in die Warteschlange des Auftragsrouters eingestellt, und die folgenden Worker stehen zur Verfügung, um den Auftrag zu übernehmen:

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

Worker D hat das niedrigste Lastenverhältnis (0), sodass der Auftrag zuerst Worker D angeboten wird. Bei den Workern A und C herrscht Gleichstand beim Lastenverhältnis (0,6). Worker C ist jedoch für längere Zeit (vor 7 Minuten) als Worker A (vor 5 Minuten) verfügbar, sodass Worker C vor Worker A zugeordnet wird. Schließlich wird Worker B zuletzt zugeordnet, da Worker B das höchste Lastenverhältnis (0,75) aufweist.

Bester Worker-Modus

Die Worker, die am besten geeignet sind, den Auftrag zu übernehmen, werden zuerst ausgewählt. Die Logik zum Bewerten von Workern kann durch Angeben einer Bewertungsregel mit einem Ausdruck oder einer Azure-Funktion angepasst werden, um zwei Worker zu vergleichen. Hier finden Sie ein Beispiel.

Wenn keine Bewertungsregel angegeben wird, verwendet dieser Verteilungsmodus stattdessen die Standardbewertungsmethode, die Worker anhand der Übereinstimmung von Bezeichnungen und Selektoren des Auftrags mit den Bezeichnungen des Workers bewertet. Die Algorithmen werden unten beschrieben.

Standardbezeichnungsabgleich

Für die Berechnung einer Bewertung auf der Grundlage der Bezeichnungen des Auftrags erhöhen wir den Match Score für jede Workerbezeichnung, die mit einer entsprechenden Bezeichnung im Auftrag übereinstimmt, um 1 und dividieren ihn dann durch die Gesamtzahl der Bezeichnungen für den Auftrag. Daher ist der Match Score eines Workers umso höher, je mehr Bezeichnungen übereinstimmen. Bei dem endgültigen Match Score handelt es sich in jedem Fall um einen Wert zwischen 0 und 1.

Beispiel

Auftrag 1:

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

Worker A:

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

Worker B:

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

Worker C:

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

Kalkulation:

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

Worker A würde zuerst zugeordnet. Als Nächstes würden Worker B oder Worker C zugeordnet, abhängig davon, welcher für einen längeren Zeitraum verfügbar war, da die Abgleichsbewertung unentschieden ist.

Standardzuordnung mit Workerselektoren

Falls der Auftrag außerdem Workerselektoren enthält, berechnen wir den Match Score auf der Grundlage des LabelOperator des betreffenden Workerselektors.

Bezeichnungsoperatoren Equal/notEqual

Wenn der Workerselektor den LabelOperatorEqual oder NotEqual aufweist, erhöhen wir den Punktestand für jede Auftragsbezeichnung, die mit dem betreffenden Workerselektor übereinstimmt, um 1, ähnlich wie oben beim Label Matching.

Beispiel

Auftrag 2:

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

Worker D:

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

Worker E:

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

Worker F:

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

Kalkulation:

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

Worker E würde zuerst zugeordnet. Als Nächstes würden Worker D oder Worker F zugeordnet, abhängig davon, welcher für einen längeren Zeitraum verfügbar war, da die Abgleichsbewertung unentschieden ist.

Weitere Bezeichnungsoperatoren

Für Workerselektoren, die Operatoren mit Größenvergleich (GreaterThan/GreaterThanEqual/LessThan/LessThanEqual) verwenden, erhöhen wir den Match Score des Workers um einen Betrag, der mithilfe der Logistikfunktion berechnet wird (siehe Abb. 1). Die Berechnung basiert darauf, wie stark der Bezeichnungswert des Workers den Wert des Workerselektors überschreitet, oder einen kleineren Betrag, wenn er den Wert des Workerselektors nicht überschreitet. Daher ist die Bewertung eines Workers umso höher, je mehr Werte von Workerselektoren der Worker überschreitet und in je höherem Maß er dies tut.

Diagram that shows logistic function.

Abb. 1 Logistikfunktion

Die folgende Funktion wird für die Operatoren „GreaterThan“ oder „GreaterThanEqual“ verwendet:

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

Die folgende Funktion wird für die Operatoren „LessThan“ oder „LessThanEqual“ verwendet:

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

Beispiel

Auftrag 3:

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

Worker G:

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

Worker H:

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

Worker I:

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

Kalkulation:

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

Alle drei Worker stimmen mit den Workerselektoren im Auftrag überein und qualifizieren sich für die Arbeit daran. Wir können jedoch sehen, dass Worker H den „sales“-Wert des Workerselektors um die Marge 5 überschreitet. Zugleich überschreitet Worker I den „cost“-Wert des Workerselektors nur um die Marge 1. Worker G überschreitet keinen der Werte der Workerselektoren. Daher würde Worker H zuerst zugeordnet, gefolgt von Worker I und schließlich Worker G.