Modalità di distribuzione
Quando si crea un criterio di distribuzione, si specifica una delle modalità di distribuzione seguenti per definire la strategia da usare durante la distribuzione dei processi ai ruoli di lavoro:
Modalità round robin
I processi verranno distribuiti in modo circolare in modo che ogni lavoratore disponibile riceverà i processi in sequenza.
Modalità di inattività più lunga
I processi verranno distribuiti al ruolo di lavoro meno utilizzato per primo. Se è presente una cravatta, verrà scelto il lavoratore disponibile per più tempo. L'utilizzo viene calcolato come da un Load Ratio
algoritmo seguente:
Rapporto di carico = Aggregazione della capacità utilizzata da tutti i processi assegnati al ruolo di lavoro/Capacità totale del lavoratore
Esempio
Si supponga che ogni chat
processo sia stato configurato per utilizzare una capacità per un ruolo di lavoro. Un nuovo processo di chat viene accodato in Router processo e i ruoli di lavoro seguenti sono disponibili per l'esecuzione del processo:
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
Il ruolo di lavoro D ha il rapporto di carico più basso (0), quindi il ruolo di lavoro D verrà offerto per primo. I lavoratori A e C sono collegati con lo stesso rapporto di carico (0,6). Tuttavia, Il ruolo di lavoro C è disponibile per un periodo di tempo più lungo (7 minuti fa) rispetto al ruolo di lavoro A (5 minuti fa), quindi il ruolo di lavoro C verrà confrontato prima del ruolo di lavoro A. Infine, il ruolo di lavoro B verrà confrontato per ultimo poiché il ruolo di lavoro B ha il rapporto di carico più elevato (0,75).
Modalità di lavoro migliore
I ruoli di lavoro che sono in grado di gestire al meglio il processo vengono scelti per primi. La logica per classificare i ruoli di lavoro può essere personalizzata, con un'espressione o una funzione di Azure per confrontare due ruoli di lavoro specificando una regola di assegnazione dei punteggi. Vedere l'esempio
Quando non viene specificata una regola di assegnazione dei punteggi, questa modalità di distribuzione userà invece il metodo di assegnazione dei punteggi predefinito, che valuta i ruoli di lavoro in base al modo in cui le etichette e i selettori del processo corrispondono alle etichette del ruolo di lavoro. Gli algoritmi sono descritti di seguito.
Corrispondenza dell'etichetta predefinita
Per calcolare un punteggio in base alle etichette del processo, viene incrementato di Match Score
1 per ogni etichetta di lavoro che corrisponde a un'etichetta corrispondente nel processo e quindi si divide per il numero totale di etichette nel processo. Pertanto, più etichette corrispondenti, maggiore è il valore di un ruolo di Match Score
lavoro. L'ultima Match Score
sarà sempre un valore compreso tra 0 e 1.
Esempio
Processo 1:
{
"labels": {
{ "language": "english" },
{ "department": "sales" }
}
}
Ruolo di lavoro A:
{
"labels": {
{ "language": "english" },
{ "department": "sales" }
}
}
Ruolo di lavoro B:
{
"labels": {
{ "language": "english" }
}
}
Ruolo di lavoro C:
{
"labels": {
{ "language": "english" },
{ "department": "support" }
}
}
Calcolo:
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
Il ruolo di lavoro A verrebbe confrontato per primo. Successivamente, il ruolo di lavoro B o Il ruolo di lavoro C verrebbe confrontato, a seconda di chi era disponibile per un periodo di tempo più lungo, poiché il punteggio di corrispondenza è associato.
Corrispondenza del selettore di lavoro predefinito
Nel caso in cui il processo contenga anche selettori di lavoro, verrà calcolato in Match Score
base al LabelOperator
selettore del ruolo di lavoro.
Operatori di etichetta equal/notEqual
Se il selettore di lavoro ha o LabelOperator
Equal
NotEqual
, il punteggio viene incrementato di 1 per ogni etichetta di processo corrispondente al selettore del ruolo di lavoro, in modo analogo a Label Matching
quello precedente.
Esempio
Processo 2:
{
"workerSelectors": [
{ "key": "department", "labelOperator": "equals", "value": "billing" },
{ "key": "segment", "labelOperator": "notEquals", "department": "vip" }
]
}
Ruolo di lavoro D:
{
"labels": {
{ "department": "billing" },
{ "segment": "vip" }
}
}
Ruolo di lavoro E:
{
"labels": {
{ "department": "billing" }
}
}
Ruolo di lavoro F:
{
"labels": {
{ "department": "sales" },
{ "segment": "new" }
}
}
Calcolo:
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
Il ruolo di lavoro E verrebbe confrontato per primo. Successivamente, il ruolo di lavoro D o Worker F verrebbe confrontato, a seconda di chi era disponibile per un periodo di tempo più lungo, poiché il punteggio di corrispondenza è associato.
Altri operatori di etichetta
Per i selettori di lavoro che usano operatori che confrontano in base alla grandezza (GreaterThan
LessThan
///GreaterThanEqual
LessThanEqual
), il lavoratore Match Score
verrà incrementato in base a un importo calcolato usando la funzione logistica (vedere la figura 1). Il calcolo si basa sulla quantità di valore dell'etichetta del ruolo di lavoro superiore al valore del selettore di lavoro o su un importo minore se non supera il valore del selettore di lavoro. Pertanto, maggiore è il numero di valori del selettore di lavoro che il ruolo di lavoro supera e maggiore sarà il grado di esecuzione, maggiore sarà il punteggio di un ruolo di lavoro.
Fig 1. Funzione logistica
La funzione seguente viene usata per gli operatori GreaterThan o GreaterThanEqual:
MatchScore(x) = 1 / (1 + e^(-x)) where x = (labelValue - selectorValue) / selectorValue
La funzione seguente viene usata per gli operatori LessThan o LessThanEqual:
MatchScore(x) = 1 / (1 + e^(-x)) where x = (selectorValue - labelValue) / selectorValue
Esempio
Processo 3:
{
"workerSelectors": [
{ "key": "language", "operator": "equals", "value": "french" },
{ "key": "sales", "operator": "greaterThanEqual", "value": 10 },
{ "key": "cost", "operator": "lessThanEqual", "value": 10 }
]
}
Ruolo di lavoro G:
{
"labels": {
{ "language": "french" },
{ "sales": 10 },
{ "cost": 10 }
}
}
Ruolo di lavoro H:
{
"labels": {
{ "language": "french" },
{ "sales": 15 },
{ "cost": 10 }
}
}
Ruolo di lavoro I:
{
"labels": {
{ "language": "french" },
{ "sales": 10 },
{ "cost": 9 }
}
}
Calcolo:
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
Tutti e tre i lavoratori corrispondono ai selettori di lavoro sul lavoro e sono idonei a lavorare su di esso. Tuttavia, è possibile notare che Worker H supera il valore del selettore di lavoro "sales" di un margine pari a 5. Nel frattempo, il ruolo di lavoro supera solo il valore del selettore di lavoro dei costi di un margine pari a 1. Worker G non supera affatto i valori del selettore di lavoro. Pertanto, il ruolo di lavoro H verrebbe confrontato per primo, seguito da Worker I e infine Worker G sarebbe stato abbinato per ultimo.