Dağıtım modları
Dağıtım ilkesi oluştururken, işleri çalışanlara dağıtırken kullanılacak stratejiyi tanımlamak için aşağıdaki dağıtım modlarından birini belirtiriz:
Hepsini bir kez deneme modu
İşler, kullanılabilir her çalışanın sırayla iş alacağı şekilde döngüsel bir şekilde dağıtılır.
En uzun boşta kalma modu
İşler, önce en az kullanılan çalışana dağıtılır. Bir kravat varsa, daha uzun süre kullanılabilir olan çalışanı seçeceğiz. Kullanım, aşağıdaki algoritma tarafından hesaplanır Load Ratio
:
Yük Oranı = Çalışana atanan tüm işler tarafından tüketilen kapasitenin toplamı / Çalışanın toplam kapasitesi
Örnek
Her chat
işin bir çalışan için bir kapasite kullanacak şekilde yapılandırıldığını varsayalım. yeni bir sohbet işi İş Yönlendiricisi'ne kuyruğa alınır ve aşağıdaki çalışanlar işi alabilir:
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
Çalışan D en düşük yük oranına (0) sahip olduğundan önce çalışan D'ye iş sunulur. A ve C çalışanları aynı yük oranına (0,6) bağlıdır. Ancak, C Çalışanı A'dan (5 dakika önce) daha uzun bir süre (7 dakika önce) kullanılabilir olduğundan, C Çalışanı A'dan önce eşleştirilir. Son olarak, Çalışan B en yüksek yük oranına (0,75) sahip olduğundan çalışan B en son eşleştirilir.
En iyi çalışan modu
önce işi en iyi şekilde işleyebilen çalışanlar seçilir. Çalışanları derecelendirme mantığı, bir puanlama kuralı belirterek iki çalışanı karşılaştırmak için bir ifade veya Azure işleviyle özelleştirilebilir. Bkz. örnek
Puanlama Kuralı sağlanmadığında, bu dağıtım modu bunun yerine varsayılan puanlama yöntemini kullanır ve bu yöntem, iş etiketlerinin ve seçicilerinin çalışanın etiketleriyle nasıl eşleştiğine göre çalışanları değerlendirir. Algoritmalar aşağıda özetlenmiştir.
Varsayılan etiket eşleştirme
İşin etiketlerine göre bir puanı hesaplamak için, işte karşılık gelen bir etiketle eşleşen her çalışan etiketi için değerini 1 artırır Match Score
ve ardından işteki toplam etiket sayısına böleriz. Bu nedenle, eşleşen etiketler ne kadar fazla olursa, bir çalışanın değeri de o kadar yüksek olur Match Score
. Final Match Score
her zaman 0 ile 1 arasında bir değer olacaktır.
Örnek
İş 1:
{
"labels": {
{ "language": "english" },
{ "department": "sales" }
}
}
Çalışan A:
{
"labels": {
{ "language": "english" },
{ "department": "sales" }
}
}
Çalışan B:
{
"labels": {
{ "language": "english" }
}
}
Çalışan C:
{
"labels": {
{ "language": "english" },
{ "department": "support" }
}
}
Hesaplama:
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
A çalışanı önce eşleştirilir. Daha sonra, maç puanı bağlı olduğundan, daha uzun süre kimlerin uygun olduğuna bağlı olarak Çalışan B veya Çalışan C eşleştirilir.
Varsayılan çalışan seçici eşleştirmesi
İşin çalışan seçicileri de içerdiği durumlarda, bu çalışan seçicisine LabelOperator
göre hesaplama Match Score
yapacağız.
Equal/notEqual etiket işleçleri
Çalışan seçicisinde veya NotEqual
değeri LabelOperator
Equal
varsa, bu çalışan seçiciyle eşleşen her iş etiketi için puanı yukarıdakine Label Matching
benzer şekilde 1 artırırız.
Örnek
İş 2:
{
"workerSelectors": [
{ "key": "department", "labelOperator": "equals", "value": "billing" },
{ "key": "segment", "labelOperator": "notEquals", "department": "vip" }
]
}
Çalışan D:
{
"labels": {
{ "department": "billing" },
{ "segment": "vip" }
}
}
Çalışan E:
{
"labels": {
{ "department": "billing" }
}
}
Çalışan F:
{
"labels": {
{ "department": "sales" },
{ "segment": "new" }
}
}
Hesaplama:
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
Önce E çalışanı eşleştirilir. Ardından, maç puanı bağlı olduğundan, kimin daha uzun süre kullanılabilir olduğuna bağlı olarak Çalışan D veya Çalışan F eşleştirilir.
Diğer etiket işleçleri
Büyüklük () ile karşılaştıranGreaterThan
LessThan
///GreaterThanEqual
LessThanEqual
işleçleri kullanan çalışan seçicileri için, lojistik işlevi kullanılarak hesaplanan bir miktar artıracağız Match Score
(Bkz. Şekil 1). Hesaplama, çalışanın etiket değerinin çalışan seçicinin değerini ne kadar aştığına veya çalışan seçicinin değerini aşmaması durumunda daha az tutara bağlıdır. Bu nedenle, çalışan ne kadar çok çalışan seçici değerini aşarsa ve ne kadar büyük olursa, bir çalışanın puanı o kadar yüksek olur.
Şekil 1. Lojistik işlevi
GreaterThan veya GreaterThanEqual işleçleri için aşağıdaki işlev kullanılır:
MatchScore(x) = 1 / (1 + e^(-x)) where x = (labelValue - selectorValue) / selectorValue
LessThan veya LessThanEqual işleçleri için aşağıdaki işlev kullanılır:
MatchScore(x) = 1 / (1 + e^(-x)) where x = (selectorValue - labelValue) / selectorValue
Örnek
İş 3:
{
"workerSelectors": [
{ "key": "language", "operator": "equals", "value": "french" },
{ "key": "sales", "operator": "greaterThanEqual", "value": 10 },
{ "key": "cost", "operator": "lessThanEqual", "value": 10 }
]
}
Çalışan G:
{
"labels": {
{ "language": "french" },
{ "sales": 10 },
{ "cost": 10 }
}
}
Çalışan H:
{
"labels": {
{ "language": "french" },
{ "sales": 15 },
{ "cost": 10 }
}
}
Çalışan I:
{
"labels": {
{ "language": "french" },
{ "sales": 10 },
{ "cost": 9 }
}
}
Hesaplama:
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
Üç çalışan da işteki çalışan seçicileri eşleştiriyor ve bu konuda çalışmaya uygun. Ancak, H Çalışanının "satış" çalışan seçicisinin değerini 5 kenar boşluğuyla aştığını görebiliriz. Bu arada, Çalışan I yalnızca maliyet çalışanı seçicisinin değerini 1 kenar boşluğuyla aşıyor. Çalışan G, çalışan seçicisinin değerlerinin hiçbirini aşmaz. Bu nedenle, önce Çalışan H eşleştirilir, ardından Çalışan I ve son olarak Çalışan G en son eşleştirilir.