Mengemas dan menyebarkan executable yang ada ke Service Fabric

Saat mengemas executable yang ada sebagai guest executable, Anda dapat memilih untuk menggunakan templat proyek Visual Studio atau untuk membuat paket aplikasi secara manual. Dengan menggunakan Visual Studio, struktur paket aplikasi dan file manifes dibuat oleh templat proyek baru untuk Anda.

Tip

Cara termudah untuk mengemas executable Windows yang sudah ada ke dalam layanan adalah dengan menggunakan Visual Studio dan linux untuk menggunakan Yeoman

Menggunakan Visual Studio untuk mengemas dan menerapkan executable yang sudah ada

Visual Studio menyediakan templat layanan Service Fabric untuk membantu Anda menyebarkan guest executable ke kluster Service Fabric.

  1. Pilih File>Proyek Baru dan buat aplikasi Service Fabric.
  2. Pilih Guest Executable sebagai templat layanan.
  3. Klik Telusuri untuk memilih folder dengan executable Anda dan isi parameter lainnya untuk membuat layanan.
    • Perilaku Paket Kode. Dapat diatur untuk menyalin semua konten folder Anda ke Proyek Visual Studio, yang berguna jika executable tidak berubah. Jika Anda mengharapkan executable berubah dan ingin kemampuan untuk mengambil build baru secara dinamis, Anda dapat memilih untuk menautkan ke folder sebagai gantinya. Anda dapat menggunakan folder tertaut saat membuat proyek aplikasi di Visual Studio. Ini menatukan ke lokasi sumber dari dalam proyek, memungkinkan Anda memperbarui guest executable di tujuan sumbernya. Pembaruan tersebut menjadi bagian dari paket aplikasi saat membangun.
    • Program menentukan file executable yang harus dijalankan untuk memulai layanan.
    • Argumen menentukan argumen yang akan diteruskan ke executable. Ini bisa berupa daftar parameter dengan argumen.
    • WorkingFolder menentukan direktori kerja untuk proses yang akan dimulai. Anda bisa menentukan tiga nilai:
      • CodeBase menentukan bahwa direktori kerja akan diatur ke direktori kode dalam paket aplikasi (direktori Code yang ditunjukkan dalam struktur file sebelumnya).
      • CodePackage menentukan bahwa direktori kerja akan diatur ke akar paket aplikasi (GuestService1Pkg ditunjukkan dalam struktur file sebelumnya).
      • Work menentukan bahwa file ditempatkan dalam subdirektori yang disebut pekerjaan.
  4. Beri nama layanan Anda, dan klik OK.
  5. Jika layanan Anda memerlukan titik akhir untuk komunikasi, Anda sekarang dapat menambahkan protokol, port, dan jenis ke file ServiceManifest.xml Anda. Contoh: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.
  6. Sekarang Anda dapat menggunakan paket dan menerbitkan tindakan terhadap kluster lokal dengan mendebug solusi di Visual Studio. Setelah siap, Anda dapat menerbitkan aplikasi ke kluster jarak jauh atau memeriksa solusi untuk kontrol sumber.
  7. Baca periksa aplikasi Anda yang sedang berjalan untuk melihat cara melihat guest executable di Service Fabric Explorer.

Sebagai contoh panduan, lihat Membuat guest executable pertama Anda menggunakan Visual Studio.

Mengemas beberapa executable dengan Visual Studio

Anda dapat menggunakan Visual Studio untuk menghasilkan paket aplikasi yang berisi beberapa guest executable. Setelah menambahkan guest executable pertama, klik kanan pada proyek aplikasi dan pilih Tambah->layanan Service Fabric Baru untuk menambahkan proyek guest executable kedua ke solusi.

Catatan

Jika Anda memilih untuk menautkan sumber di proyek Visual Studio, membangun solusi Visual Studio, akan memastikan bahwa paket aplikasi Anda sudah diperbarui dengan perubahan di sumbernya.

Menggunakan Yeoman untuk mengemas dan menyebarkan executable yang ada di Linux

Prosedur untuk membuat dan menyebarkan executable guest di Linux sama dengan menyebarkan aplikasi C# atau Java.

  1. Di terminal, ketik yo azuresfguest.
  2. Beri nama aplikasi Anda.
  3. Beri nama layanan Anda, dan berikan detail yang mencakup jalur executable dan parameter yang harus dipanggil.

Yeoman membuat paket aplikasi dengan aplikasi yang sesuai dan file manifes bersama skrip instal dan bongkar.

Mengemas beberapa executable menggunakan Yeoman di Linux

Untuk menambahkan layanan lain ke aplikasi yang sudah dibuat menggunakan yo, lakukan langkah-langkah berikut:

  1. Ubah direktori ke akar aplikasi yang ada. Contohnya, cd ~/YeomanSamples/MyApplication, jika MyApplication adalah aplikasi yang dibuat oleh Yeoman.
  2. Jalankan yo azuresfguest:AddService dan berikan detail yang diperlukan.

Mengemas dan menyebarkan executable yang ada secara manual

Proses pengemasan secara manual guest executable didasarkan pada langkah-langkah umum berikut:

  1. Buat struktur direktori paket.
  2. Tambahkan kode aplikasi dan file konfigurasi.
  3. Edit file manifes layanan.
  4. Edit file manifes aplikasi.

Membuat struktur direktori paket

Anda dapat memulai dengan membuat struktur direktori, seperti yang dijelaskan dalam Mengemas Aplikasi Azure Service Fabric.

Menambahkan kode aplikasi dan file konfigurasi

Setelah membuat struktur direktori, Anda dapat menambahkan kode aplikasi dan file konfigurasi pada direktori kode dan konfigurasi. Anda juga dapat membuat direktori atau subdirektori tambahan di bawah kode atau direktori konfigurasi.

Service Fabric melakukan xcopy isi direktori root aplikasi, sehingga tidak ada struktur yang ditentukan untuk digunakan selain membuat dua direktori teratas, kode dan pengaturan. (Anda dapat memilih nama yang berbeda jika diperlukan. Detail selengkapnya ada di bagian berikutnya.)

Catatan

Pastikan Anda menyertakan semua file dan dependensi yang dibutuhkan aplikasi. Service Fabric menyalin konten paket aplikasi pada semua node di kluster tempat layanan aplikasi akan digunakan. Paket tersebut akan berisi semua kode yang perlu dijalankan aplikasi. Jangan berasumsi bahwa dependensi sudah diinstal.

Mengedit file manifes layanan

Langkah selanjutnya adalah mengedit file manifes layanan untuk menyertakan informasi berikut:

  • Nama jenis layanan. Ini adalah ID yang digunakan Service Fabric untuk mengidentifikasi layanan.
  • Perintah yang digunakan untuk meluncurkan aplikasi (ExeHost).
  • Skrip apa pun yang perlu dijalankan untuk menyiapkan aplikasi (SetupEntrypoint).

Berikut ini adalah contoh file ServiceManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="NodeApp" Version="1.0.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceTypes>
      <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true"/>
   </ServiceTypes>
   <CodePackage Name="code" Version="1.0.0.0">
      <SetupEntryPoint>
         <ExeHost>
             <Program>scripts\launchConfig.cmd</Program>
         </ExeHost>
      </SetupEntryPoint>
      <EntryPoint>
         <ExeHost>
            <Program>node.exe</Program>
            <Arguments>bin/www</Arguments>
            <WorkingFolder>CodePackage</WorkingFolder>
         </ExeHost>
      </EntryPoint>
   </CodePackage>
   <Resources>
      <Endpoints>
         <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
      </Endpoints>
   </Resources>
</ServiceManifest>

Bagian berikut ini masuk ke berbagai bagian file yang perlu Anda perbarui.

Memperbarui ServiceTypes

<ServiceTypes>
  <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
  • Anda dapat memilih nama apa pun yang Anda inginkan untuk ServiceTypeName. Nilai digunakan dalam file ApplicationManifest.xml untuk mengidentifikasi layanan.
  • Tentukan UseImplicitHost="true". Atribut ini memberi tahu Service Fabric bahwa layanan ini didasarkan pada aplikasi mandiri, sehingga yang perlu dilakukan oleh Service Fabric adalah meluncurkannya sebagai proses dan memantau kesehatannya.

Memperbarui CodePackage

Elemen CodePackage menentukan lokasi (dan versi) kode layanan.

<CodePackage Name="Code" Version="1.0.0.0">

Elemen Name ini digunakan untuk menentukan nama direktori dalam paket aplikasi yang berisi kode layanan. CodePackage juga memiliki atribut version. Ini dapat digunakan untuk menentukan versi kode, dan juga dapat berpotensi digunakan untuk meningkatkan kode layanan menggunakan infrastruktur manajemen siklus hidup aplikasi di Service Fabric.

Opsional: Perbarui SetupEntrypoint

<SetupEntryPoint>
   <ExeHost>
       <Program>scripts\launchConfig.cmd</Program>
   </ExeHost>
</SetupEntryPoint>

Elemen SetupEntryPoint digunakan untuk menentukan file executable atau batch yang harus dijalankan sebelum kode layanan diluncurkan. Ini adalah langkah opsional, sehingga tidak perlu dimasukkan jika tidak ada inisialisasi yang diperlukan. SetupEntryPoint dijalankan setiap kali layanan dimulai ulang.

Hanya ada satu SetupEntryPoint, sehingga skrip penyiapan perlu dikelompokkan dalam satu file batch jika penyiapan aplikasi memerlukan beberapa skrip. SetupEntryPoint bisa mengeksekusi semua jenis file: file executable, file batch, dan cmdlet PowerShell. Untuk detail selengkapnya, lihat Mengonfigurasi SetupEntryPoint.

Dalam contoh sebelumnya, SetupEntryPoint menjalankan file batch yang disebut LaunchConfig.cmd yang terletak di subdirektori scripts dari direktori kode (dengan asumsi bahwa elemen WorkingFolder diatur ke CodeBase).

Perbarui EntryPoint

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
  </ExeHost>
</EntryPoint>

Elemen EntryPoint dalam file manifes layanan digunakan untuk menentukan cara meluncurkan layanan.

Elemen ExeHost menentukan executable (dan argumen) yang akan digunakan untuk meluncurkan layanan. Anda dapat secara opsional menambahkan atribut IsExternalExecutable="true" ke ExeHost untuk menunjukkan bahwa program tersebut adalah executable eksternal di luar paket kode. Contohnya:<ExeHost IsExternalExecutable="true">

  • Program menentukan nama executable yang akan memulai layanan.
  • Arguments menentukan argumen yang akan diteruskan ke executable. Ini bisa berupa daftar parameter dengan argumen.
  • WorkingFolder menentukan direktori kerja untuk proses yang akan dimulai. Anda bisa menentukan tiga nilai:
    • CodeBase menentukan bahwa direktori kerja akan diatur ke direktori kode dalam paket aplikasi (direktori Code dalam struktur file sebelumnya).
    • CodePackage menentukan bahwa direktori kerja akan diatur ke akar paket aplikasi (GuestService1Pkg dalam struktur file sebelumnya).
      • Work menentukan bahwa file ditempatkan dalam subdirektori yang disebut pekerjaan.

WorkingFolder berguna untuk mengatur direktori kerja yang benar, sehingga jalur relatif dapat digunakan oleh aplikasi atau skrip inisialisasi.

Memperbarui titik akhir dan daftar di Naming Service untuk komunikasi

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" Type="Input" />
</Endpoints>

Dalam contoh sebelumnya, elemen Endpoint menentukan titik akhir yang dapat didengarkan oleh aplikasi. Dalam contoh ini, aplikasi Node.js mendengarkan di http pada port 3000.

Selain itu, Anda dapat meminta Service Fabric untuk menerbitkan titik akhir ini ke Naming Service sehingga layanan lain dapat menemukan alamat titik akhir untuk layanan ini. Ini memungkinkan Anda untuk dapat berkomunikasi antara layanan yang merupakan guest executable. Alamat titik akhir yang diterbitkan adalah formulir UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme dan PathSuffix merupakan atribut opsional. IPAddressOrFQDN adalah alamat IP atau nama domain node yang sepenuhnya memenuhi syarat yang akan ditempatkan oleh executable ini, dan itu dihitung untuk Anda.

Dalam contoh berikut, setelah layanan diterapkan, di Service Fabric Explorer Anda melihat titik akhir yang mirip dengan http://10.1.4.92:3000/myapp/ yang diterbitkan untuk instans layanan. Atau jika ini adalah komputer lokal, Anda melihat http://localhost:3000/myapp/.

<Endpoints>
   <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000"  UriScheme="http" PathSuffix="myapp/" Type="Input" />
</Endpoints>

Anda dapat menggunakan alamat ini dengan proksi terbalik untuk berkomunikasi antar layanan.

Mengedit file manifes aplikasi

Setelah mengonfigurasi file Servicemanifest.xml, Anda perlu membuat beberapa perubahan pada file ApplicationManifest.xml untuk memastikan bahwa Anda menggunakan jenis dan nama layanan yang benar.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="NodeAppType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
   </ServiceManifestImport>
</ApplicationManifest>

ServiceManifestImport

Dalam elemen ServiceManifestImport, Anda dapat menentukan satu atau beberapa layanan yang ingin Anda sertakan dalam aplikasi. Layanan direferensikan dengan ServiceManifestName, yang menentukan nama direktori tempat file ServiceManifest.xml berada.

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="NodeApp" ServiceManifestVersion="1.0.0.0" />
</ServiceManifestImport>

Menyiapkan pengelogan

Untuk guest executable, berguna untuk dapat melihat log konsol untuk mengetahui apakah skrip aplikasi dan konfigurasi menunjukkan kesalahan. Pengalihan konsol dapat dikonfigurasi dalam file ServiceManifest.xml menggunakan elemen ConsoleRedirection.

Peringatan

Jangan pernah menggunakan kebijakan pengalihan konsol dalam aplikasi yang disebarkan dalam produksi karena ini dapat memengaruhi kegagalan aplikasi. Hanya gunakan ini untuk tujuan pengembangan dan penelusuran kesalahan lokal.

<EntryPoint>
  <ExeHost>
    <Program>node.exe</Program>
    <Arguments>bin/www</Arguments>
    <WorkingFolder>CodeBase</WorkingFolder>
    <ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048"/>
  </ExeHost>
</EntryPoint>

ConsoleRedirection dapat digunakan untuk mengalihkan output konsol (baik stdout maupun stderr) ke direktori kerja. Ini memberikan kemampuan untuk memverifikasi bahwa tidak ada kesalahan selama pengaturan atau eksekusi aplikasi di kluster Service Fabric.

FileRetentionCount menentukan seberapa banyak file yang disimpan dalam direktori kerja. Nilai 5, misalnya, berarti bahwa file log untuk lima eksekusi sebelumnya disimpan di direktori kerja.

FileMaxSizeInKb menentukan ukuran maksimum file log.

File log disimpan di salah satu direktori kerja layanan. Untuk menentukan di mana file berada, gunakan Service Fabric Explorer untuk menentukan node mana yang dijalankan layanan, dan direktori kerja mana yang sedang digunakan. Proses ini dibahas kemudian dalam artikel ini.

Penyebaran

Langkah terakhir adalah menyebarkan aplikasi Anda. Skrip PowerShell berikut menunjukkan cara menggunakan aplikasi Anda ke kluster pengembangan lokal, dan memulai layanan Service Fabric baru.


Connect-ServiceFabricCluster localhost:19000

Write-Host 'Copying application package...'
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath 'C:\Dev\MultipleApplications' -ImageStoreConnectionString 'file:C:\SfDevCluster\Data\ImageStoreShare' -ApplicationPackagePathInImageStore 'nodeapp'

Write-Host 'Registering application type...'
Register-ServiceFabricApplicationType -ApplicationPathInImageStore 'nodeapp'

New-ServiceFabricApplication -ApplicationName 'fabric:/nodeapp' -ApplicationTypeName 'NodeAppType' -ApplicationTypeVersion 1.0

New-ServiceFabricService -ApplicationName 'fabric:/nodeapp' -ServiceName 'fabric:/nodeapp/nodeappservice' -ServiceTypeName 'NodeApp' -Stateless -PartitionSchemeSingleton -InstanceCount 1

Tip

Kompresi paket sebelum menyalin ke penyimpanan gambar jika paketnya besar atau memiliki banyak file. Baca selengkapnya di sini.

Layanan Service Fabric dapat disebarkan dalam berbagai "konfigurasi". Misalnya, dapat disebarkan dalam satu atau beberapa instans, atau dapat disebarkan sedemikian rupa sehingga ada satu instans layanan pada setiap simpul kluster Service Fabric.

Parameter InstanceCount dari cmdlet New-ServiceFabricService digunakan untuk menentukan berapa banyak instans layanan yang harus diluncurkan dalam kluster Service Fabric. Anda dapat mengatur nilai InstanceCount, tergantung jenis aplikasi yang Anda sebarkan. Dua skenario yang paling umum adalah:

  • InstanceCount = "1". Dalam hal ini, hanya satu instans layanan yang digunakan dalam kluster. Penjadwal Service Fabric menentukan pada node mana layanan akan disebarkan.
  • InstanceCount ="-1". Dalam hal ini, satu instans layanan diterapkan pada setiap node di kluster Service Fabric. Hasilnya adalah memiliki satu (dan hanya satu) instans layanan untuk setiap node dalam kluster.

Ini adalah konfigurasi yang berguna untuk aplikasi front-end (misalnya, titik akhir REST), karena aplikasi klien perlu "terhubung" ke salah satu node di kluster tersebut untuk menggunakan titik akhir. Konfigurasi ini juga dapat digunakan ketika, misalnya, semua node kluster Service Fabric terhubung ke load balancer. Lalu lintas klien kemudian dapat didistribusikan di seluruh layanan yang berjalan pada semua node di kluster.

Memeriksa aplikasi yang sedang berjalan

Di Service Fabric Explorer, identifikasi node tempat layanan berjalan. Dalam contoh ini, layanan berjalan pada Node1:

Node tempat layanan berjalan

Jika Anda membuka node dan menelusuri aplikasi, Anda melihat informasi node penting, termasuk lokasinya di disk.

Lokasi pada diska

Jika Anda menelusuri ke direktori dengan menggunakan Server Explorer, Anda bisa menemukan direktori kerja dan folder log layanan, seperti yang diperlihatkan dalam tangkapan layar berikut ini:

Lokasi log

Langkah berikutnya

Dalam artikel ini, Anda telah mempelajari cara mengemas guest executable dan menyebarkannya ke Service Fabric. Lihat artikel berikut ini untuk informasi dan tugas terkait.