Penyeimbangan metrik sub-klaster

Apa itu sub-klaster?

Sub-klaster terjadi saat layanan dengan batasan penempatan yang berbeda memiliki metrik yang sama dan keduanya melaporkan bebannya. Jika beban yang dilaporkan oleh layanan berbeda secara signifikan, total beban pada node akan memiliki deviasi standar yang besar dan akan terlihat seperti klaster tidak seimbang, bahkan ketika ia memiliki keseimbangan terbaik.

Bagaimana sub-klaster mempengaruhi keseimbangan beban

Jika beban yang dilaporkan oleh layanan pada node yang berbeda berbeda secara signifikan, mungkin terlihat seperti ada ketidakseimbangan besar yang sebenarnya tidak ada. Selain itu, jika ketidakseimbangan palsu yang disebabkan oleh sub-klaster lebih besar dari ketidakseimbangan yang sebenarnya, hal itu berpotensi membingungkan algoritma penyeimbangan Resource Manager dan menghasilkan keseimbangan yang kurang optimal di klaster.

Misalnya, kita memiliki empat layanan dan semuanya melaporkan beban untuk metrik Metric1:

  • Layanan A - memiliki batasan penempatan "NodeType==Frontend", melaporkan beban 10
  • Layanan B - memiliki batasan penempatan "NodeType==Frontend", melaporkan beban 10
  • Layanan C - memiliki batasan penempatan "NodeType==Frontend", melaporkan beban 100
  • Layanan D - memiliki batasan penempatan "NodeType==Frontend", melaporkan beban 100
  • Dan kita memiliki empat node. Dua di antaranya memiliki NodeType yang disetel sebagai "Frontend" dan dua lainnya adalah "Backend"

Dan kita memiliki penempatan berikut:

Contoh penempatan subkluster

Klaster mungkin terlihat tidak seimbang, kita memiliki beban besar pada node 3 dan 4, tetapi penempatan ini menciptakan keseimbangan terbaik dalam situasi ini.

Resource Manager dapat mengenali situasi sub-klaster dan dalam hampir semua kasus dapat menghasilkan keseimbangan optimal untuk situasi yang diberikan.

Untuk beberapa situasi tertentu, ketika Resource Manager tidak dapat secara optimal menyeimbangkan metrik subklaster, Resource Manager masih akan mendeteksi subklaster dan akan menghasilkan laporan kesehatan yang akan menyarankan Anda untuk memperbaiki masalah.

Jenis subklaster dan cara penanganannya

Situasi subklaster dapat diklasifikasikan ke dalam tiga kategori yang berbeda. Kategori situasi subklaster tertentu menentukan bagaimana hal itu akan ditangani oleh Resource Manager.

Kategori pertama - subklaster datar dengan grup node terputus-putus

Kategori ini memiliki bentuk subklaster paling sederhana di mana node dapat dipisahkan ke dalam grup yang berbeda dan setiap layanan hanya dapat ditempatkan ke node di salah satu grup tersebut. Setiap node hanya dimiliki oleh satu grup saja. Situasi yang dijelaskan di atas termasuk dalam kategori ini seperti halnya sebagian besar situasi subklaster.

Untuk situasi dalam kategori ini, Resource Manager dapat menghasilkan keseimbangan optimal dan tidak diperlukan intervensi lebih lanjut.

Kategori kedua – subklaster dengan grup node hierarkis

Situasi ini terjadi ketika sekelompok node yang diizinkan untuk satu layanan merupakan bagian dari grup node yang diizinkan untuk layanan lain. Contoh paling umum dari situasi ini adalah ketika beberapa layanan memiliki batasan penempatan yang ditentukan dan layanan lain tidak memiliki batasan penempatan dan dapat ditempatkan pada node mana pun.

Contoh:

  • Layanan A: tidak ada batasan penempatan
  • Layanan B: batasan penempatan "NodeType==Frontend"
  • Layanan C: batasan penempatan "NodeType==Backend"

Konfigurasi ini menciptakan hubungan subset-superset antara grup node untuk layanan yang berbeda.

Subkluster superset subset

Dalam situasi ini, ada kemungkinan tercipta keseimbangan yang kurang optimal.

Resource Manager akan mengenali situasi ini dan membuat laporan kesehatan yang menyarankan Anda untuk membagi Layanan A menjadi dua layanan - Layanan A1 yang dapat ditempatkan pada node Frontend dan Layanan A2 yang dapat ditempatkan pada node Backend. Ini akan membawa kita kembali ke situasi kategori pertama yang dapat diseimbangkan secara optimal.

Kategori ketiga - subklaster dengan tumpang tindih parsial antara kumpulan node

Situasi ini terjadi ketika ada tumpang tindih parsial antara kumpulan node tempat beberapa layanan dapat ditempatkan.

Misalnya, jika kita memiliki properti node yang disebut NodeColor dan kita memiliki tiga node:

  • Node 1: NodeColor=Red
  • Node 2: NodeColor=Blue
  • Node 3: NodeColor=Green

Dan kita memiliki dua layanan:

  • Layanan B: dengan batasan penempatan "Color==Blue || Color==Green"
  • Layanan A: dengan batasan penempatan "Color==Red || Color==Blue"

Karena itu, Layanan A dapat ditempatkan pada node 1 dan 2 dan Layanan B dapat ditempatkan pada node 2 dan 3.

Dalam situasi ini, ada kemungkinan tercipta keseimbangan yang kurang optimal.

Resource Manager akan mengenali situasi ini dan membuat laporan kesehatan yang menyarankan Anda untuk membagi beberapa layanan.

Untuk situasi ini, Resource Manager tidak dapat memberikan proposal mengenai cara membagi layanan, karena beberapa pemisahan dapat dilakukan dan tidak ada cara untuk memperkirakan cara mana yang paling optimal untuk membagi layanan.

Mengonfigurasi subklaster

Perilaku Resource Manager tentang subklaster dapat dimodifikasi dengan mengubah parameter konfigurasi berikut:

  • SubclusteringEnabled - parameter menentukan apakah Resource Manager akan mempertimbangkan subklaster saat melakukan penyeimbangan beban. Jika parameter ini dinonaktifkan, Resource Manager akan mengabaikan subklaster dan mencoba mencapai keseimbangan optimal di tingkat global. Nilai default parameter ini adalah false.
  • SubclusteringReportingPolicy - menentukan bagaimana Resource Manager akan mengeluarkan laporan kesehatan untuk subklaster hierarkis dan tumpang tindih parsial. Nilai nol berarti bahwa laporan kesehatan tentang subklaster dinonaktifkan, "1" berarti bahwa laporan kesehatan peringatan akan dibuat untuk situasi subklaster yang kurang optimal dan nilai "2" akan menghasilkan laporan kesehatan "OK". Nilai default untuk parameter ini adalah "1".

ClusterManifest.xml:

        <Section Name="PlacementAndLoadBalancing">
            <Parameter Name="SubclusteringEnabled" Value="true" />
            <Parameter Name="SubclusteringReportingPolicy" Value="1" />
        </Section>

melalui ClusterConfig.json untuk penyebaran Mandiri atau Template.json untuk klaster yang dihosting Azure:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "SubclusteringEnabled",
          "value": "true"
      },
      {
          "name": "SubclusteringReportingPolicy",
          "value": "1"
      },
    ]
  }
]

Langkah berikutnya

  • Untuk mengetahui tentang bagaimana Cluster Resource Manager mengelola dan menyeimbangkan beban dalam klaster, lihat artikel tentang menyeimbangkan beban
  • Untuk mengetahui tentang bagaimana layanan Anda dapat dibatasi hanya untuk ditempatkan pada node tertentu, lihat Properti node dan batasan penempatan