Bagikan melalui


Menyebarkan dan menghapus aplikasi menggunakan PowerShell


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

  1. Unggah paket aplikasi ke penyimpanan gambar.
  2. Daftarkan jenis aplikasi dengan jalur relatif penyimpanan gambar.
  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 melibatkan langkah-langkah berikut:

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

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 tersebut sehingga Anda dapat melakukan operasi yang sama di luar Visual Studio.

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

  1. Unggah ke sfpkg penyimpanan eksternal. Toko eksternal dapat berupa toko apa pun yang mengekspos titik akhir http atau https REST.
  2. Daftarkan 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. Provisi dari penyimpanan eksternal tersedia dimulai dengan Service Fabric versi 6.1.

Nota

Visual Studio saat ini tidak mendukung provisi eksternal.

Menyambungkan ke kluster

Sebelum Anda menjalankan perintah PowerShell apa pun dalam 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 Menyambungkan ke kluster yang aman.

Unggah 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 gambar kluster.

Misalkan Anda membuat 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 yang diperlukan, manifes layanan, dan paket kode/konfigurasi/data, terletak di C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

Perintah berikut mencantumkan konten 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 mengompresinya. Pemadatan mengurangi ukuran dan jumlah file. Ini menghasilkan pendaftaran dan pencabutan jenis aplikasi yang lebih cepat. Waktu pengunggahan mungkin lebih lambat saat ini, terutama jika Anda menyertakan waktu untuk mengompres paket.

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

Cmdlet berikut mengompresi paket tanpa menyalinnya ke penyimpanan gambar. Paket sekarang mencakup file zip untuk Code paket 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). Mengompres manifold 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 pemadatan dan ukuran paket terkompresi juga berbeda berdasarkan konten paket. Misalnya, berikut adalah statistik kompresi 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 dikompresi. Paket terkompresi disimpan dalam bentuknya yang asli di penyimpanan citra kluster. Paket-paket didekompresi pada simpul, sebelum aplikasi dijalankan.

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

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

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

Nota

Copy-ServiceFabricApplicationPackage akan secara otomatis mendeteksi string koneksi penyimpanan gambar yang sesuai jika sesi PowerShell terhubung 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 gambar. Untuk mengimpor modul SDK, jalankan:

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

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

Waktu yang diperlukan untuk mengunggah paket berbeda tergantung 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 unggahan. Batas waktu default untuk Copy-ServiceFabricApplicationPackage adalah 30 menit. Tergantung pada faktor-faktor yang dijelaskan, Anda mungkin harus meningkatkan batas waktu. Jika Anda mengompresi paket dalam panggilan salin, Anda juga perlu mempertimbangkan waktu kompresi.

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:

Daftarkan paket aplikasi yang disalin ke penyimpanan gambar

Ketika paket sebelumnya disalin ke penyimpanan gambar, operasi register menentukan jalur relatif di penyimpanan gambar.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

"MyApplicationV1" adalah folder di penyimpanan gambar 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 penyimpanan eksternal

Dimulai dengan Service Fabric versi 6.1, penyediaan mendukung pengunduhan paket dari penyimpanan eksternal. URI unduhan mewakili jalur ke sfpkg paket aplikasi dari mana paket aplikasi dapat diunduh menggunakan protokol HTTP atau HTTPS. Paket harus telah diunggah sebelumnya ke lokasi eksternal ini. URI harus mengizinkan akses READ sehingga Service Fabric dapat mengunduh file. File sfpkg harus memiliki ekstensi ".sfpkg". Operasi provisi harus menyertakan 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 hanya mengembalikan setelah sistem berhasil mendaftarkan paket aplikasi. Berapa lama waktu yang dibutuhkan pendaftaran tergantung pada ukuran dan konten paket aplikasi. Jika diperlukan, parameter -TimeoutSec dapat digunakan untuk menyediakan batas waktu yang lebih lama (batas waktu default adalah 60 detik).

Jika Anda memiliki paket aplikasi besar atau jika Anda mengalami batas waktu, gunakan parameter -Async . Perintah mengembalikan kontrol ketika kluster menerima perintah mendaftarkan. 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 gambar

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

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

Buat aplikasi

Anda dapat membuat instans 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 berdasarkan nama menggunakan cmdlet Remove-ServiceFabricApplication . Remove-ServiceFabricApplication secara otomatis menghapus semua layanan milik aplikasi juga, menghapus semua status layanan secara permanen.

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 . Melepaskan pendaftaran jenis-jenis aplikasi yang tidak digunakan akan membebaskan ruang penyimpanan yang digunakan oleh toko gambar dengan menghapus file jenis aplikasi. Membatalkan registrasi jenis aplikasi tidak menghapus paket aplikasi yang disalin ke lokasi sementara pada penyimpanan image, jika opsi salin ke penyimpanan image digunakan. Jenis aplikasi dapat tidak terdaftar selama tidak ada aplikasi yang dibuat terhadapnya dan tidak ada peningkatan aplikasi yang tertunda yang merujuknya.

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 sebuah ImageStoreConnectionString

Lingkungan Service Fabric SDK seharusnya sudah diatur dengan pengaturan default yang benar. Tetapi jika diperlukan, ImageStoreConnectionString untuk semua perintah harus cocok dengan nilai yang digunakan kluster Service Fabric. Anda dapat menemukan ImageStoreConnectionString dalam manifes kluster, yang 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 gambar. 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 gambar untuk informasi tambahan tentang penyimpanan gambar dan string koneksi penyimpanan gambar.

Menyebarkan paket aplikasi besar

Masalah: Copy-ServiceFabricApplicationPackage kedaluwarsa untuk paket aplikasi besar (berukuran GB). Coba:

  • Tentukan batas waktu yang lebih besar untuk perintah Copy-ServiceFabricApplicationPackage , dengan TimeoutSec parameter. Secara default, batas waktu 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 mengalami pembatasan eksternal. Misalnya, ketika penyimpanan gambar dikonfigurasi untuk menggunakan penyimpanan azure, unggahan mungkin dibatasi.

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

  • Kompres paket sebelum menyalin ke penyimpanan citra. Kompresi 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 daftarkan dan batalkan pendaftaran jenis aplikasi lebih cepat.
  • Tentukan batas waktu yang lebih besar untuk Register-ServiceFabricApplicationType dengan TimeoutSec parameter.
  • Tentukan Async sakelar untuk Register-ServiceFabricApplicationType. Perintah akan kembali ketika kluster menerima perintah, dan pendaftaran jenis aplikasi akan berlanjut secara asinkron. Untuk alasan ini, tidak perlu menentukan batas waktu yang lebih tinggi dalam kasus ini. Perintah Get-ServiceFabricApplicationType mencantumkan semua versi jenis aplikasi yang berhasil didaftarkan 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 Register-ServiceFabricApplicationType habis untuk paket aplikasi dengan banyak file (urutan ribuan). Coba:

  • Kompres paket sebelum menyalin ke penyimpanan citra. Pemadatan mengurangi jumlah file.
  • Tentukan batas waktu yang lebih besar untuk Register-ServiceFabricApplicationType dengan TimeoutSec parameter.
  • Tentukan Async sakelar untuk Register-ServiceFabricApplicationType. Perintah mengirim balik saat kluster menerima perintah, dan registrasi tipe aplikasi dilanjutkan secara asinkron. Untuk alasan ini, tidak perlu menentukan batas waktu yang lebih tinggi dalam kasus ini. Perintah Get-ServiceFabricApplicationType mencantumkan semua versi jenis aplikasi yang berhasil didaftarkan 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

Pengenalan kesehatan Service Fabric

Mendiagnosis dan memecahkan masalah layanan Service Fabric

Memodelkan aplikasi di Service Fabric