Menyebarkan dan menghapus aplikasi menggunakan PowerShell


Setelah dikemas, jenis aplikasi siap untuk penyebaran ke dalam kluster Azure Service Fabric. Penyebaran melibatkan tiga langkah berikut:

  1. Unggah paket aplikasi ke penyimpanan citra.
  2. Daftarkan jenis aplikasi dengan jalur relatif penyimpanan citra.
  3. Buat instans aplikasi.

Setelah aplikasi yang disebarkan tidak lagi diperlukan, Anda dapat menghapus instans aplikasi dan jenis aplikasinya. Untuk menghapus aplikasi dari kluster sepenuhnya langkah-langkah berikut diperlukan:

  1. Hapus (atau singkirkan) instans aplikasi yang sedang berjalan.
  2. Batalkan pendaftaran jenis aplikasi jika Anda tidak lagi membutuhkannya.
  3. Hapus paket aplikasi dari penyimpanan citra.

Jika Anda menggunakan Visual Studio untuk menyebarkan dan men-debug aplikasi di kluster pengembangan lokal Anda, semua langkah sebelumnya ditangani secara otomatis melalui skrip PowerShell. Skrip ini ditemukan di folder Skrip proyek aplikasi. Artikel ini menyediakan latar belakang tentang apa yang dilakukan skrip sehingga Anda dapat melakukan operasi yang sama di luar Visual Studio.

Cara lain untuk menyebarkan aplikasi adalah dengan menggunakan penyediaan eksternal. Paket aplikasi dapat dikemas sebagai sfpkg dan diunggah ke penyimpanan eksternal. Dalam hal ini, unggah ke penyimpanan citra tidak diperlukan. Penyebaran membutuhkan langkah-langkah berikut:

  1. Mengunggah sfpkg ke penyimpanan eksternal. Penyimpanan eksternal dapat menjadi penyimpanan apa pun yang mengekspos titik akhir REST http atau https.
  2. Mendaftarkan jenis aplikasi menggunakan URI unduhan eksternal dan informasi jenis aplikasi.
  3. Buat instans aplikasi.

Untuk pembersihan, hapus instans aplikasi dan batalkan pendaftaran jenis aplikasi. Karena paket tidak disalin ke penyimpanan citra, tidak ada lokasi sementara untuk dibersihkan. Penyediaan dari penyimpanan eksternal tersedia dimulai dengan Service Fabric versi 6.1.

Catatan

Visual Studio saat ini tidak mendukung penyediaan eksternal.

Menyambungkan ke kluster

Sebelum Anda menjalankan perintah PowerShell apa pun di artikel ini, selalu mulai dengan menggunakan Connect-ServiceFabricCluster untuk menyambungkan ke kluster Service Fabric. Untuk menyambungkan ke kluster pengembangan lokal, jalankan hal berikut:

Connect-ServiceFabricCluster

Untuk contoh menyambungkan ke kluster jarak jauh atau kluster yang diamankan menggunakan ID Microsoft Entra, sertifikat X509, atau Windows Active Directory, lihat Koneksi ke kluster yang aman.

Mengunggah paket aplikasi

Mengunggah paket aplikasi menempatkannya di lokasi yang dapat diakses oleh komponen Service Fabric internal. Jika Anda ingin memverifikasi paket aplikasi secara lokal, gunakan cmdlet Test-ServiceFabricApplicationPackage.

Perintah Copy-ServiceFabricApplicationPackage mengunggah paket aplikasi ke penyimpanan citra kluster.

Misalkan Anda membangun dan mengemas aplikasi bernama MyApplication di Visual Studio 2015. Secara default, nama jenis aplikasi yang tercantum dalam ApplicationManifest.xml adalah "MyApplicationType". Paket aplikasi, yang berisi manifes aplikasi, manifes layanan, dan kode/konfig/paket data, terletak di C:\Users<namapengguna>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

Perintah berikut mencantumkan isi paket aplikasi:

$path = 'C:\Users\<user\>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug'
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
│   ApplicationManifest.xml
│
└───Stateless1Pkg
    │   ServiceManifest.xml
    │
    ├───Code
    │       Microsoft.ServiceFabric.Data.dll
    │       Microsoft.ServiceFabric.Data.Interfaces.dll
    │       Microsoft.ServiceFabric.Internal.dll
    │       Microsoft.ServiceFabric.Internal.Strings.dll
    │       Microsoft.ServiceFabric.Services.dll
    │       ServiceFabricServiceModel.dll
    │       Stateless1.exe
    │       Stateless1.exe.config
    │       Stateless1.pdb
    │       System.Fabric.dll
    │       System.Fabric.Strings.dll
    │
    └───Config
            Settings.xml

Jika paket aplikasi besar dan/atau memiliki banyak file, Anda dapat memadatkannya. Pemadatan mengurangi ukuran dan jumlah file. Ini menghasilkan pendaftaran dan pembatalan pendaftaran jenis aplikasi yang lebih cepat. Saat ini waktu pengunggahan mungkin lebih lambat, terutama jika Anda menyertakan waktu untuk memadatkan paket.

Untuk memadatkan paket, gunakan perintah Copy-ServiceFabricApplicationPackage yang sama. Pemadatan dapat dilakukan terpisah dari pengunggahan, dengan menggunakan bendera SkipCopy, atau bersama-sama dengan operasi pengunggahan. Menerapkan pemadatan pada paket terkompresi adalah no-op. Untuk membuka pemadatan paket terkompresi, gunakan perintah Copy-ServiceFabricApplicationPackage yang sama dengan sakelar UncompressPackage.

Cmdlet berikut mengompresi paket tanpa menyalinnya ke penyimpanan citra. Paket sekarang termasuk file zip untuk paket Code dan Config. Aplikasi dan manifes layanan tidak di-zip, karena diperlukan untuk banyak operasi internal (seperti berbagi paket, nama jenis aplikasi, dan ekstraksi versi untuk validasi tertentu). Melakukan zip manifes akan membuat operasi ini tidak efisien.

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -CompressPackage -SkipCopy
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
|   ApplicationManifest.xml
|
└───Stateless1Pkg
       Code.zip
       Config.zip
       ServiceManifest.xml

Untuk paket aplikasi besar, pemadatan membutuhkan waktu. Untuk hasil terbaik, gunakan drive SSD cepat. Waktu kompresi dan ukuran paket terkompresi juga berbeda berdasarkan isi paket. Misalnya, berikut adalah statistik pemadatan untuk beberapa paket, yang menunjukkan ukuran paket awal dan terkompresi, dengan waktu pemadatan.

Ukuran awal (MB) Jumlah file Waktu Pemadatan Ukuran paket terkompresi (MB)
100 100 00:00:03.3547592 60
512 100 00:00:16.3850303 307
1024 500 00:00:32.5907950 615
2048 1000 00:01:04.3775554 1231
5012 100 00:02:45.2951288 3074

Setelah paket dikompresi, paket dapat diunggah ke satu atau beberapa kluster Service Fabric sesuai kebutuhan. Mekanisme penyebaran sama untuk paket terkompresi dan tidak terkompresi. Paket terkompresi disimpan seperti itu di penyimpanan citra kluster. Paket tidak dikompresi pada node, sebelum aplikasi dijalankan.

Contoh berikut mengunggah paket ke penyimpanan citra, ke folder bernama "MyApplicationV1":

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800

Jika Anda tidak menentukan parameter -ApplicationPackagePathInImageStore, paket aplikasi disalin ke dalam folder "Debug" di penyimpanan citra.

Catatan

Copy-ServiceFabricApplicationPackage akan secara otomatis mendeteksi string koneksi penyimpanan citra yang sesuai jika sesi PowerShell tersambung ke kluster Service Fabric. Untuk versi Service Fabric yang lebih lama dari 5.6, argumen -ImageStoreConnectionString harus disediakan secara eksplisit.

PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800

Cmdlet Get-ImageStoreConnectionStringFromClusterManifest, yang merupakan bagian dari modul Service Fabric SDK PowerShell, digunakan untuk mendapatkan string koneksi penyimpanan citra. Untuk mengimpor modul SDK, jalankan:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

Lihat Memahami string koneksi penyimpanan citra untuk informasi tambahan tentang string koneksi penyimpanan citra dan penyimpanan citra.

Waktu yang diperlukan untuk mengunggah paket berbeda bergantung pada beberapa faktor. Beberapa faktor ini adalah jumlah file dalam paket, ukuran paket, dan ukuran file. Kecepatan jaringan antara komputer sumber dan kluster Service Fabric juga berdampak pada waktu pengunggahan. Waktu habis default untuk Copy-ServiceFabricApplicationPackage adalah 30 menit. Tergantung faktor-faktor yang dijelaskan, Anda mungkin harus meningkatkan waktu habis. Jika Anda mengompresi paket dalam panggilan salin, Anda juga perlu mempertimbangkan waktu pemadatan.

Mendaftarkan paket aplikasi

Jenis aplikasi dan versi yang dideklarasikan dalam manifes aplikasi tersedia untuk digunakan ketika paket aplikasi terdaftar. Sistem membaca paket yang diunggah pada langkah sebelumnya, memverifikasi paket, memproses konten paket, dan menyalin paket yang diproses ke lokasi sistem internal.

Jalankan cmdlet Register-ServiceFabricApplicationType untuk mendaftarkan jenis aplikasi di kluster dan membuatnya tersedia untuk penyebaran:

Mendaftarkan paket aplikasi yang disalin ke penyimpanan citra

Ketika paket sebelumnya disalin ke penyimpanan citra, operasi daftar menentukan jalur relatif di penyimpanan citra.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

"MyApplicationV1" adalah folder di penyimpanan citra tempat paket aplikasi berada. Jenis aplikasi dengan nama "MyApplicationType" dan versi "1.0.0" (keduanya ditemukan dalam manifes aplikasi) sekarang terdaftar di kluster.

Mendaftarkan paket aplikasi yang disalin ke toko eksternal

Dimulai dengan Service Fabric versi 6.1, penyediaan mendukung pengunduhan paket dari penyimpanan eksternal. URI unduhan mewakili jalur ke sfpkg paket aplikasi tempat paket aplikasi dapat diunduh menggunakan protokol HTTP atau HTTPS. Paket harus telah diunggah sebelumnya ke lokasi eksternal ini. URI harus mengizinkan akses BACA sehingga Service Fabric dapat mengunduh file. File sfpkg harus memiliki ekstensi ".sfpkg". Operasi penyediaan harus mencakup informasi jenis aplikasi, seperti yang ditemukan dalam manifes aplikasi.

Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async

Perintah Register-ServiceFabricApplicationType kembali hanya setelah sistem berhasil mendaftarkan paket aplikasi. Berapa lama pendaftaran bergantung pada ukuran dan isi paket aplikasi. Jika diperlukan, parameter -TimeoutSec dapat digunakan untuk memberikan waktu habis yang lebih lama (waktu habis default adalah 60 detik).

Jika Anda memiliki paket aplikasi besar atau jika Anda mengalami waktu habis, gunakan parameter -Async. Perintah akan kembali ketika kluster menerima perintah register. Operasi register berlanjut sesuai kebutuhan. Perintah Get-ServiceFabricApplicationType mencantumkan versi jenis aplikasi dan status pendaftarannya. Anda dapat menggunakan perintah ini untuk menentukan kapan pendaftaran selesai.

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Menghapus paket aplikasi dari penyimpanan citra

Jika paket disalin ke penyimpanan citra, Anda harus menghapusnya dari lokasi sementara setelah aplikasi berhasil didaftarkan. Menghapus paket aplikasi dari penyimpanan citra akan membebaskan sumber daya sistem. Menyimpan paket aplikasi yang tidak digunakan akan menggunakan penyimpanan disk dan menyebabkan masalah performa aplikasi.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

Buat aplikasi

Anda dapat membuat contoh aplikasi dari versi jenis aplikasi apa pun yang telah berhasil didaftarkan dengan menggunakan cmdlet New-ServiceFabricApplication. Nama setiap aplikasi harus dimulai dengan skema "fabric:" dan harus unik untuk setiap instans aplikasi. Setiap layanan default yang ditentukan dalam manifes aplikasi dari jenis aplikasi target juga dibuat.

New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters  : {}

Beberapa instans aplikasi dapat dibuat untuk versi tertentu dari jenis aplikasi terdaftar. Setiap instans aplikasi berjalan dalam isolasi, dengan direktori dan proses kerjanya sendiri.

Untuk melihat aplikasi dan layanan bernama mana yang berjalan di kluster, jalankan cmdlet Get-ServiceFabricApplication dan Get-ServiceFabricService:

Get-ServiceFabricApplication  
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationStatus      : Ready
HealthState            : Ok
ApplicationParameters  : {}
Get-ServiceFabricApplication | Get-ServiceFabricService
ServiceName            : fabric:/MyApp/Stateless1
ServiceKind            : Stateless
ServiceTypeName        : Stateless1Type
IsServiceGroup         : False
ServiceManifestVersion : 1.0.0
ServiceStatus          : Active
HealthState            : Ok

Menghapus aplikasi

Ketika instans aplikasi tidak lagi diperlukan, Anda dapat menghapusnya secara permanen dengan nama menggunakan cmdlet Remove-ServiceFabricApplication. Remove-ServiceFabricApplication secara otomatis menghapus semua layanan yang termasuk dalam aplikasi juga, secara permanen menghapus semua status layanan.

Peringatan

Operasi ini tidak dapat dibalik, dan status aplikasi tidak dapat dipulihkan.

Remove-ServiceFabricApplication fabric:/MyApp
Confirm
Continue with this operation?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):
Remove application instance succeeded
Get-ServiceFabricApplication

Membatalkan pendaftaran jenis aplikasi

Ketika versi tertentu dari jenis aplikasi tidak lagi diperlukan, Anda harus membatalkan pendaftaran jenis aplikasi menggunakan cmdlet Unregister-ServiceFabricApplicationType. Membatalkan pendaftaran jenis aplikasi yang tidak digunakan akan melepaskan ruang penyimpanan yang digunakan oleh penyimpanan citra dengan menghapus file jenis aplikasi. Membatalkan pendaftaran jenis aplikasi tidak menghapus paket aplikasi yang disalin ke lokasi sementara penyimpanan citra, jika salin ke penyimpanan citra digunakan. Jenis aplikasi dapat dibatalkan pendaftarannya selama tidak ada aplikasi yang dibuat untuknya dan tidak ada peningkatan aplikasi tertunda yang mereferensikannya.

Jalankan Get-ServiceFabricApplicationType untuk melihat jenis aplikasi yang saat ini terdaftar di kluster:

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Jalankan Unregister-ServiceFabricApplicationType untuk membatalkan pendaftaran jenis aplikasi tertentu:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

Pemecahan Masalah

Copy-ServiceFabricApplicationPackage meminta ImageStoreConnectionString

Lingkungan Service Fabric SDK harus sudah memiliki pengaturan default yang benar. Tetapi jika diperlukan, ImageStoreConnectionString untuk semua perintah harus sesuai dengan nilai yang digunakan kluster Service Fabric. Anda dapat menemukan ImageStoreConnectionString dalam manifes kluster, diambil menggunakan perintah Get-ServiceFabricClusterManifest dan Get-ImageStoreConnectionStringFromClusterManifest:

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

Cmdlet Get-ImageStoreConnectionStringFromClusterManifest, yang merupakan bagian dari modul Service Fabric SDK PowerShell, digunakan untuk mendapatkan string koneksi penyimpanan citra. Untuk mengimpor modul SDK, jalankan:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

ImageStoreConnectionString ditemukan dalam manifes kluster:

<ClusterManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="Server-Default-SingleNode" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">

    [...]

    <Section Name="Management">
      <Parameter Name="ImageStoreConnectionString" Value="file:D:\ServiceFabric\Data\ImageStore" />
    </Section>

    [...]

Lihat Memahami string koneksi penyimpanan citra untuk informasi tambahan tentang string koneksi penyimpanan citra dan penyimpanan citra.

Menyebarkan paket aplikasi besar

Masalah: Waktu habis Copy-ServiceFabricApplicationPackage untuk paket aplikasi besar (urutan GB). Coba:

  • Tentukan waktu habis yang lebih besar untuk perintah Copy-ServiceFabricApplicationPackage dengan parameter TimeoutSec. Batas waktu default adalah 30 menit.
  • Periksa koneksi jaringan antara komputer sumber dan kluster Anda. Jika koneksi lambat, pertimbangkan untuk menggunakan komputer dengan koneksi jaringan yang lebih baik. Jika komputer klien berada di wilayah lain daripada kluster, pertimbangkan untuk menggunakan komputer klien di wilayah yang lebih dekat atau sama dengan kluster.
  • Periksa apakah Anda mencapai pembatasan eksternal. Misalnya, saat penyimpanan citra dikonfigurasi untuk menggunakan penyimpanan azure, pengunggahan dapat dibatasi.

Masalah: Pengunggahan paket berhasil diselesaikan, tetapi waktu habis Register-ServiceFabricApplicationType. Coba:

  • Padatkan paket sebelum menyalin ke penyimpanan citra. Pemadatan mengurangi ukuran dan jumlah file, yang pada gilirannya mengurangi jumlah lalu lintas dan pekerjaan yang harus dilakukan Service Fabric. Operasi pengunggahan mungkin lebih lambat (terutama jika Anda menyertakan waktu pemadatan), tetapi mendaftar dan membatalkan pendaftaran jenis aplikasi lebih cepat.
  • Tentukan waktu habis yang lebih besar untuk Register-ServiceFabricApplicationType dengan parameter TimeoutSec.
  • Tentukan sakelar Async untuk Register-ServiceFabricApplicationType. Perintah kembali ketika kluster menerima perintah dan pendaftaran jenis aplikasi berlanjut secara asinkron. Untuk alasan ini, tidak perlu menentukan waktu habis yang lebih tinggi dalam kasus ini. Perintah Get-ServiceFabricApplicationType mencantumkan semua versi jenis aplikasi yang berhasil terdaftar dan status pendaftarannya. Anda dapat menggunakan perintah ini untuk menentukan kapan pendaftaran selesai.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Menyebarkan paket aplikasi dengan banyak file

Masalah: Waktu habis Register-ServiceFabricApplicationType untuk paket aplikasi dengan banyak file (urutan ribuan). Coba:

  • Padatkan paket sebelum menyalin ke penyimpanan citra. Pemadatan mengurangi jumlah file.
  • Tentukan waktu habis yang lebih besar untuk Register-ServiceFabricApplicationType dengan parameter TimeoutSec.
  • Tentukan sakelar Async untuk Register-ServiceFabricApplicationType. Perintah kembali ketika kluster menerima perintah dan pendaftaran jenis aplikasi berlanjut secara asinkron. Untuk alasan ini, tidak perlu menentukan waktu habis yang lebih tinggi dalam kasus ini. Perintah Get-ServiceFabricApplicationType mencantumkan semua versi jenis aplikasi yang berhasil terdaftar dan status pendaftarannya. Anda dapat menggunakan perintah ini untuk menentukan kapan pendaftaran selesai.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Langkah berikutnya

Mengemas aplikasi

Peningkatan aplikasi Service Fabric

Pengantar kesehatan Service Fabric

Mendiagnosis dan memecahkan masalah layanan Service Fabric

Membuat model aplikasi di Service Fabric