AverageLatencySchedulingPolicy adalah Custom Resource Definition (CRD) yang mengonfigurasi penjadwalan beban adaptif berbasis latensi di Alibaba Cloud Service Mesh (ASM). CRD ini menggunakan algoritma Additive Increase Multiplicative Decrease (AIMD) untuk mengendalikan laju permintaan berdasarkan latensi yang diamati, melindungi layanan dari kelebihan beban sekaligus memaksimalkan throughput selama pemulihan.
Referensi ini menjelaskan setiap bidang dalam CRD, dikelompokkan berdasarkan jenis objek.
AverageLatencySchedulingPolicySpec
Spesifikasi tingkat atas untuk resource kebijakan.
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
load_scheduling_core | LoadSchedulingCore | Ya | Konfigurasi penjadwal inti. |
LoadSchedulingCore
Kontainer untuk konfigurasi algoritma penjadwalan beban.
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
aimd_load_scheduler | AimdLoadScheduler | Ya | Konfigurasi penjadwal beban berbasis AIMD. |
Selector
Menentukan aliran traffic yang dipengaruhi oleh kebijakan berdasarkan titik kendali, label aliran, kelompok agen, dan identitas layanan.
control_point: ingress
label_matcher:
match_labels:
user_tier: gold
match_expressions:
- key: query
operator: In
values:
- insert
- delete
expression:
label_matches:
- label: user_agent
regex: ^(?!.*Chrome).*Safari| Bidang | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
control_point | string | Tidak | ingress | Lokasi dalam layanan tempat kebijakan diterapkan. Nilai yang valid: ingress, egress, listener tertentu, atau rantai filter tertentu. |
label_matcher | LabelMatcher | Tidak | -- | Mencocokkan aliran traffic berdasarkan label aliran. |
service | string | Tidak | any | Fully Qualified Domain Name (FQDN) layanan target. |
LabelMatcher
Mencocokkan aliran traffic menggunakan salah satu atau lebih dari tiga metode berikut:
Match labels — pencocokan nilai kunci secara eksak.
Match expressions — pencocokan berbasis operator (
In,NotIn,Exists,DoesNotExist).Arbitrary expression — kombinasi logis dengan dukungan ekspresi reguler.
Jika beberapa metode ditentukan, semuanya digabungkan dengan logika AND. LabelMatcher kosong akan mencocokkan semua permintaan.
Contoh berikut mengecualikan endpoint pemeriksaan kesehatan dan metrik dari penjadwalan karena tidak merepresentasikan traffic pengguna sesungguhnya dan dapat mengganggu perhitungan latensi:
label_matcher:
match_list:
- key: http.target
operator: NotIn
values:
- /health
- /live
- /ready
- /metrics| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
expression | Expression | Tidak | Ekspresi logis yang dievaluasi pada label aliran. |
match_labels | map[string]string | Tidak | Pasangan kunci-nilai untuk pencocokan label eksak. |
match_list | []MatchRequirement | Tidak | Daftar persyaratan pencocokan berbasis operator. |
Expression
Ekspresi logis yang dapat disusun. Hanya satu bidang yang dapat diisi dalam setiap objek Expression.
# Mencocokkan aliran di mana label "foo" ada DAN label "app" bernilai "frobnicator"
all:
of:
- label_exists: foo
- label_equals:
label: app
value: frobnicator| Bidang | Tipe | Deskripsi |
|---|---|---|
all | ExpressionList | Benar jika semua subekspresi bernilai benar (logika AND). |
any | ExpressionList | Benar jika salah satu subekspresi bernilai benar (logika OR). |
label_equals | EqualExpression | Benar jika label yang ditentukan sama dengan nilai yang diberikan. |
label_exists | string | Benar jika label dengan nama yang diberikan ada. |
label_matches | MatchesExpression | Benar jika label yang ditentukan cocok dengan ekspresi reguler yang diberikan. |
not | Expression | Membalik hasil subekspresi. |
ExpressionList
| Bidang | Tipe | Deskripsi |
|---|---|---|
of | []Expression | Daftar subekspresi. |
EqualExpression
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
label | string | Ya | Kunci label. |
value | string | Tidak | Nilai label yang dicocokkan. |
MatchesExpression
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
label | string | Ya | Kunci label yang akan dicocokkan. |
regex | string | Ya | Pola ekspresi reguler. Menggunakan sintaks Go RE2. |
MatchRequirement
Pencocokan label berbasis operator, mengikuti pola yang sama dengan pemilih label Kubernetes.
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
key | string | Ya | Kunci label. |
operator | enum | Ya | Operator pencocokan. Nilai yang valid: In, NotIn, Exists, DoesNotExist. |
values | []string | Bersyarat | Nilai string yang dicocokkan. Wajib diisi untuk In dan NotIn. Harus kosong untuk Exists dan DoesNotExist. |
AimdLoadScheduler
Penjadwal beban AIMD menggunakan pengendali gradien untuk menyesuaikan laju token berdasarkan penyimpangan sinyal latensi yang diamati dari titik setel. Saat sistem kelebihan beban, laju token dikurangi secara multiplikatif; selama pemulihan, laju tersebut dinaikkan secara linear hingga sistem mencapai kondisi stabil.
| Bidang | Tipe | Wajib | Default | Batasan | Deskripsi |
|---|---|---|---|---|---|
gradient | GradientControllerParameters | Ya | -- | -- | Parameter pengendali gradien. Lihat GradientControllerParameters. |
load_multiplier_linear_increment | float64 | Tidak | 0.025 | Minimum: 0 | Peningkatan linear yang diterapkan pada pengali beban setiap 10 detik selama sistem tidak kelebihan beban, hingga mencapai max_load_multiplier. |
load_scheduler | LoadSchedulerParameters | Ya | -- | -- | Konfigurasi penjadwal beban kerja dan pemilih. Lihat LoadSchedulerParameters. |
max_load_multiplier | float64 | Tidak | 2 | Minimum: 0 | Pengali beban maksimum selama pemulihan dari kondisi kelebihan beban. Saat nilai ini tercapai, penjadwal masuk ke Mode pass-through — permintaan melewati penjadwal dan langsung menuju layanan. Mode pass-through dinonaktifkan jika sistem kembali mengalami kelebihan beban. Bidang ini melindungi layanan dari lonjakan permintaan selama pemulihan. |
GradientControllerParameters
Pengendali gradien menyesuaikan pengali beban berdasarkan rasio antara sinyal yang diamati terhadap titik setel. Bidang slope merupakan eksponen yang diterapkan pada rasio tersebut dan mengatur tingkat agresivitas respons pengendali.
| Bidang | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
max_gradient | float64 | Tidak | 1 | Batas atas untuk nilai gradien. |
min_gradient | float64 | Tidak | 0.1 | Batas bawah untuk nilai gradien. |
slope | float64 | Tidak | -1 | Eksponen pada rasio sinyal terhadap titik setel. Mengatur arah dan tingkat agresivitas respons. |
Cara kerja slope:
| Nilai | Perilaku |
|---|---|
1 | Sinyal terlalu tinggi --> tingkatkan variabel kendali. |
-1 | Sinyal terlalu tinggi --> kurangi variabel kendali. |
-0.5 | Sinyal terlalu tinggi --> kurangi variabel kendali secara bertahap. |
Pertahankan nilai absolut slope pada atau di bawah 1.
LoadSchedulerParameters
Mengonfigurasi penjadwal beban kerja berbasis Weighted Fair Queuing (WFQ) dan menentukan aliran traffic yang dikenai kebijakan.
| Bidang | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
scheduler | Scheduler | Tidak | -- | Konfigurasi penjadwal beban kerja berbasis WFQ. |
selectors | []Selector | Ya | -- | Pemilih yang menentukan cakupan aliran traffic yang dikelola oleh penjadwal. |
workload_latency_based_tokens | bool | Tidak | false | Secara otomatis memperkirakan biaya token per aliran berdasarkan latensi historis. Token diatur ke latensi rata-rata aliran dalam setiap workload selama beberapa detik terakhir. Berguna untuk pembatasan konkurensi, di mana concurrency = average latency x in-flight flows. Token eksplisit dalam label aliran memiliki prioritas tertinggi, diikuti oleh token dalam definisi workload, lalu token perkiraan. |
Scheduler
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
workloads | []SchedulerWorkload | Ya | Definisi workload untuk penjadwal WFQ. |
SchedulerWorkload
Menentukan sebuah workload—kelompok aliran traffic yang berbagi parameter penjadwalan yang sama.
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
label_matcher | LabelMatcher | Tidak | Mencocokkan aliran traffic ke workload ini berdasarkan label aliran. |
Name | string | Ya | Nama workload. |
Parameters | SchedulerWorkloadParameters | Ya | Parameter penjadwalan untuk aliran yang sesuai dengan pemilih label. |
SchedulerWorkloadParameters
Mengatur cara aliran traffic dalam suatu workload diprioritaskan dan diantrekan.
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
priority | float64 | Tidak | Prioritas. |
queue_timeout | string | Tidak | Timeout untuk aliran traffic dalam workload. |
tokens | float64 | Tidak | Biaya untuk menerima satu aliran. Biasanya didefinisikan sebagai milidetik dari latensi yang diharapkan (waktu hingga respons), atau diatur ke 1 ketika sumber daya dibatasi oleh jumlah aliran (misalnya, rate limiter pihak ketiga). Nilai ini hanya digunakan jika token tidak ditentukan dalam label aliran. |