Bagikan melalui


Pengenalan Grup Aplikasi

Cluster Resource Manager Service Fabric biasanya mengelola sumber daya klaster dengan menyebarkan beban (diwakili melalui Metrik)secara merata di seluruh klaster. Service Fabric mengelola kapasitas node dalam klaster dan klaster secara keseluruhan melalui kapasitas. Metrik dan kapasitas bekerja sangat baik untuk banyak beban kerja, tetapi pola yang memanfaatkan instans Aplikasi Kain Layanan yang berbeda terkadang membawa persyaratan tambahan. Misalnya, Anda mungkin ingin:

  • Pesan beberapa kapasitas pada node dalam klaster untuk layanan dalam beberapa instans aplikasi bernama
  • Batasi jumlah total node yang dijalankan layanan dalam instans aplikasi bernama (alih-alih menyebarkannya ke seluruh klaster)
  • Tentukan kapasitas pada instans aplikasi bernama itu sendiri untuk membatasi jumlah layanan atau total konsumsi sumber daya layanan di dalamnya

Untuk memenuhi persyaratan ini, Cluster Resource Manager Kain Layanan mendukung fitur yang disebut Grup Aplikasi.

Membatasi jumlah maksimum node

Kasus penggunaan paling sederhana untuk kapasitas Aplikasi adalah ketika instans aplikasi perlu dibatasi pada jumlah node maksimum tertentu. Ini mengkonsolidasikan semua layanan dalam instans aplikasi tersebut ke sejumlah mesin yang ditetapkan. Konsolidasi berguna saat Anda mencoba memprediksi atau menutup penggunaan sumber daya fisik oleh layanan dalam instans aplikasi bernama tersebut.

Gambar berikut menunjukkan instans aplikasi dengan dan tanpa jumlah maksimum node yang ditentukan:

Instans Aplikasi Mendefinisikan Jumlah Maksimum Simpul

Di contoh sebelah kiri, aplikasi tidak memiliki jumlah maksimum node yang ditentukan, dan memiliki tiga layanan. Cluster Resource Manager telah menyebarkan semua replika di enam node yang tersedia untuk mencapai keseimbangan terbaik dalam klaster (perilaku default). Dalam contoh sebelah kanan, kita melihat aplikasi yang sama terbatas pada tiga node.

Parameter yang mengontrol perilaku ini disebut MaximumNodes. Parameter ini dapat diatur selama pembuatan aplikasi, atau diperbarui untuk instans aplikasi yang sudah berjalan.

PowerShell

New-ServiceFabricApplication -ApplicationName fabric:/AppName -ApplicationTypeName AppType1 -ApplicationTypeVersion 1.0.0.0 -MaximumNodes 3
Update-ServiceFabricApplication –ApplicationName fabric:/AppName –MaximumNodes 5

C#

ApplicationDescription ad = new ApplicationDescription();
ad.ApplicationName = new Uri("fabric:/AppName");
ad.ApplicationTypeName = "AppType1";
ad.ApplicationTypeVersion = "1.0.0.0";
ad.MaximumNodes = 3;
await fc.ApplicationManager.CreateApplicationAsync(ad);

ApplicationUpdateDescription adUpdate = new ApplicationUpdateDescription(new Uri("fabric:/AppName"));
adUpdate.MaximumNodes = 5;
await fc.ApplicationManager.UpdateApplicationAsync(adUpdate);

Dalam kumpulan node, Cluster Resource Manager tidak menjamin objek layanan mana yang ditempatkan bersama-sama atau node mana yang digunakan.

Metrik, Beban, dan Kapasitas Aplikasi

Grup Aplikasi juga memungkinkan Anda menentukan metrik yang terkait dengan instans aplikasi bernama tertentu, dan kapasitas instans aplikasi tersebut untuk metrik tersebut. Metrik aplikasi memungkinkan Anda melacak, memesan, dan membatasi konsumsi sumber daya layanan di dalam instans aplikasi tersebut.

Untuk setiap metrik aplikasi, ada dua nilai yang dapat ditetapkan:

  • Total Kapasitas Aplikasi - Pengaturan ini menunjukkan kapasitas total aplikasi untuk metrik tertentu. Cluster Resource Manager melarang pembuatan layanan baru apa pun dalam instans aplikasi ini yang akan menyebabkan beban total melebihi nilai ini. Misalnya, instans aplikasi memiliki kapasitas 10 dan sudah memiliki beban lima. Pembuatan layanan dengan total beban default 10 akan dilarang.
  • Kapasitas Node Maksimum - Pengaturan ini menentukan total beban maksimum untuk aplikasi pada satu node. Jika beban melebihi kapasitas ini, Cluster Resource Manager memindahkan replika ke node lain sehingga beban menurun.

PowerShell:

New-ServiceFabricApplication -ApplicationName fabric:/AppName -ApplicationTypeName AppType1 -ApplicationTypeVersion 1.0.0.0 -Metrics @("MetricName:Metric1,MaximumNodeCapacity:100,MaximumApplicationCapacity:1000")

C#:

ApplicationDescription ad = new ApplicationDescription();
ad.ApplicationName = new Uri("fabric:/AppName");
ad.ApplicationTypeName = "AppType1";
ad.ApplicationTypeVersion = "1.0.0.0";

var appMetric = new ApplicationMetricDescription();
appMetric.Name = "Metric1";
appMetric.TotalApplicationCapacity = 1000;
appMetric.MaximumNodeCapacity = 100;
ad.Metrics.Add(appMetric);
await fc.ApplicationManager.CreateApplicationAsync(ad);

Memesan Kapasitas

Penggunaan umum lainnya untuk grup aplikasi adalah untuk memastikan bahwa sumber daya dalam klaster dicadangkan untuk instans aplikasi tertentu. Ruang selalu dicadangkan ketika instans aplikasi dibuat.

Mencadangkan ruang di klaster untuk aplikasi terjadi seketika bahkan saat:

  • instance aplikasi dibuat tetapi belum memiliki layanan apa pun di dalamnya
  • jumlah layanan dalam instans aplikasi berubah setiap saat
  • layanan ada tetapi tidak mengkonsumsi sumber daya

Mencadangkan sumber daya untuk instans aplikasi memerlukan dua ketentuan parameter tambahan: MinimumNodes dan NodeReservationCapacity

  • MinimumNodes - Mendefinisikan jumlah minimum node yang harus dijalankan oleh instans aplikasi.
  • NodeReservationCapacity - Pengaturan ini per metrik untuk aplikasi. Nilainya adalah jumlah metrik yang dicadangkan untuk aplikasi pada node mana pun di mana layanan dalam aplikasi tersebut berjalan.

Menggabungkan MinimumNodes dan NodeReservationCapacity menjamin reservasi beban minimum untuk aplikasi dalam klaster. Jika ada kapasitas yang kurang tersisa dalam klaster daripada total reservasi yang diperlukan, pembuatan aplikasi gagal.

Mari kita lihat contoh reservasi kapasitas:

Instans Aplikasi Menentukan Kapasitas Yang Dipesan

Dalam contoh sebelah kiri, aplikasi tidak memiliki Kapasitas Aplikasi yang ditentukan. Cluster Resource Manager menyeimbangkan semuanya sesuai dengan aturan normal.

Dalam contoh di sebelah kanan, katakanlah Application1 dibuat dengan pengaturan berikut:

  • MinimumNode diatur ke dua
  • Metrik aplikasi yang ditentukan dengan
    • NodeReservationCapacity 20

PowerShell

New-ServiceFabricApplication -ApplicationName fabric:/AppName -ApplicationTypeName AppType1 -ApplicationTypeVersion 1.0.0.0 -MinimumNodes 2 -Metrics @("MetricName:Metric1,NodeReservationCapacity:20")

C#

ApplicationDescription ad = new ApplicationDescription();
ad.ApplicationName = new Uri("fabric:/AppName");
ad.ApplicationTypeName = "AppType1";
ad.ApplicationTypeVersion = "1.0.0.0";
ad.MinimumNodes = 2;

var appMetric = new ApplicationMetricDescription();
appMetric.Name = "Metric1";
appMetric.NodeReservationCapacity = 20;

ad.Metrics.Add(appMetric);

await fc.ApplicationManager.CreateApplicationAsync(ad);

Service Fabric mencadangkan kapasitas pada dua node untuk Application1, dan tidak mengizinkan layanan dari Application2 untuk mengkonsumsi kapasitas itu bahkan jika tidak ada beban yang dikonsumsi oleh layanan di dalam Application1 pada saat itu. Kapasitas aplikasi yang dicadangkan ini dianggap dikonsumsi dan dihitung terhadap kapasitas yang tersisa pada node tersebut dan dalam kluster. Reservasi seketika dikurangi dari kapasitas klaster yang tersisa, namun konsumsi yang dicadangkan dikurangi dari kapasitas node tertentu hanya ketika setidaknya satu objek layanan ditempatkan di dalamnya. Reservasi ini kemudian memungkinkan fleksibilitas dan pemanfaatan sumber daya yang lebih baik karena sumber daya hanya dicadangkan pada node ketika diperlukan.

Mendapatkan informasi beban aplikasi

Untuk setiap aplikasi yang memiliki Kapasitas Aplikasi yang ditentukan untuk satu atau beberapa metrik, Anda dapat memperoleh informasi tentang beban agregat yang dilaporkan oleh replika layanannya.

PowerShell:

Get-ServiceFabricApplicationLoadInformation –ApplicationName fabric:/MyApplication1

C#

var v = await fc.QueryManager.GetApplicationLoadInformationAsync("fabric:/MyApplication1");
var metrics = v.ApplicationLoadMetricInformation;
foreach (ApplicationLoadMetricInformation metric in metrics)
{
    Console.WriteLine(metric.ApplicationCapacity);  //total capacity for this metric in this application instance
    Console.WriteLine(metric.ReservationCapacity);  //reserved capacity for this metric in this application instance
    Console.WriteLine(metric.ApplicationLoad);  //current load for this metric in this application instance
}

Kueri ApplicationLoad mengembalikan informasi dasar tentang Kapasitas Aplikasi yang ditentukan untuk aplikasi. Informasi ini mencakup info Node Minimum dan Node Maksimum, dan nomor yang saat ini ditempati aplikasi. Ini juga mencakup informasi tentang setiap metrik beban aplikasi, termasuk:

  • Nama Metrik: Nama metrik.
  • Kapasitas Reservasi: Kapasitas Klaster yang dicadangkan dalam klaster untuk Aplikasi ini.
  • Beban Aplikasi: Total Beban replika anak Aplikasi ini.
  • Kapasitas Aplikasi: Nilai maksimum yang diizinkan dari Beban Aplikasi.

Menghapus Kapasitas Aplikasi

Setelah parameter Kapasitas Aplikasi diatur untuk aplikasi, parameter tersebut dapat dihapus menggunakan Update Application APIs atau PowerShell cmdlets. Contohnya:

Update-ServiceFabricApplication –Name fabric:/MyApplication1 –RemoveApplicationCapacity

Perintah ini menghapus semua parameter manajemen kapasitas Aplikasi dari instans aplikasi. Ini termasuk MinimumNodes, MaximumNodes, dan metrik Aplikasi, jika ada. Efek perintah seketika. Setelah perintah ini selesai, Cluster Resource Manager menggunakan perilaku default untuk mengelola aplikasi. Parameter Kapasitas Aplikasi dapat ditentukan lagi melalui Update-ServiceFabricApplication/System.Fabric.FabricClient.ApplicationManagementClient.UpdateApplicationAsync().

Pembatasan Kapasitas Aplikasi

Ada beberapa batasan parameter Kapasitas Aplikasi yang harus dihormati. Jika ada kesalahan validasi, tidak ada perubahan yang terjadi.

  • Semua parameter bilangan bulat harus angka non-negatif.
  • MinimumNode tidak boleh lebih besar dari MaximumNodes.
  • Jika kapasitas untuk metrik beban ditentukan, maka mereka harus mengikuti aturan berikut:
    • Node Reservation Capacity tidak boleh lebih besar dari Maximum Node Capacity. Contohnya, Anda tidak dapat membatasi kapasitas untuk metrik “CPU” pada node menjadi dua unit dan mencoba memesan tiga unit pada setiap node.
    • Jika MaximumNodes ditentukan, maka produk MaximumNodes dan Maximum Node Capacity tidak boleh lebih besar dari Total Kapasitas Aplikasi. Contohnya, katakanlah Maximum Node Capacity untuk metrik beban “CPU” diatur ke delapan. Katakanlah Anda juga mengatur Maximum Nodes ke 10. Dalam hal ini, Total Kapasitas Aplikasi harus lebih besar dari 80 untuk metrik beban ini.

Pembatasan diberlakukan baik selama pembuatan dan pembaruan aplikasi.

Cara tidak menggunakan Kapasitas Aplikasi

  • Jangan mencoba menggunakan fitur Grup Aplikasi untuk membatasi aplikasi ke subset node tertentu. Dengan kata lain, Anda dapat menentukan bahwa aplikasi berjalan pada paling banyak lima node, tetapi bukan spesifik lima node dalam klaster. Membatasi aplikasi ke node tertentu dapat dicapai menggunakan batasan penempatan untuk layanan.
  • Jangan mencoba menggunakan Kapasitas Aplikasi untuk memastikan bahwa dua layanan dari aplikasi yang sama ditempatkan pada node yang sama. Sebaliknya gunakan afinitas atau batasan penempatan.

Langkah berikutnya