Aracılığıyla paylaş


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 NotEqualdeğ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ıranGreaterThanLessThan///GreaterThanEqualLessThanEqual 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.

Lojistik işlevi gösteren diyagram.

Ş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.