Mevcut yürütülebilir dosyayı paketleme ve Service Fabric'e dağıtma

Var olan bir yürütülebilir dosyayı konuk yürütülebilir dosyası olarak paketlerken Visual Studio proje şablonu kullanmayı veya uygulama paketini el ile oluşturmayı seçebilirsiniz. Visual Studio kullanılarak, uygulama paketi yapısı ve bildirim dosyaları sizin için yeni proje şablonu tarafından oluşturulur.

İpucu

Var olan bir Windows yürütülebilir dosyasını bir hizmete paketlemenin en kolay yolu, Yeoman kullanmak için Visual Studio ve Linux'ı kullanmaktır

Visual Studio'yu kullanarak mevcut yürütülebilir dosyayı paketleme ve dağıtma

Visual Studio, bir Service Fabric kümesine konuk yürütülebilir dosyası dağıtmanıza yardımcı olacak bir Service Fabric hizmet şablonu sağlar.

  1. Dosya>Yeni Proje'yi seçin ve bir Service Fabric uygulaması oluşturun.
  2. Hizmet şablonu olarak Konuk Yürütülebilir Dosyası'nı seçin.
  3. Yürütülebilir dosyanızın olduğu klasörü seçmek için Gözat'a tıklayın ve hizmeti oluşturmak için parametrelerin geri kalanını doldurun.
    • Kod Paketi Davranışı. Klasörünüzün tüm içeriğini Visual Studio Projesi'ne kopyalanacak şekilde ayarlanabilir. Bu, yürütülebilir dosya değişmezse kullanışlıdır. Yürütülebilir dosyanın değişmesini bekliyorsanız ve yeni derlemeleri dinamik olarak alabilmeyi istiyorsanız, bunun yerine klasöre bağlanmayı seçebilirsiniz. Visual Studio'da uygulama projesi oluştururken bağlı klasörleri kullanabilirsiniz. Bu, projenin içinden kaynak konuma bağlanır ve konuk yürütülebilir dosyasını kaynak hedefinde güncelleştirmenizi mümkün hale getirir. Bu güncelleştirmeler derlemedeki uygulama paketinin bir parçası haline gelir.
    • Program , hizmeti başlatmak için çalıştırılması gereken yürütülebilir dosyayı belirtir.
    • Bağımsız değişkenler yürütülebilir dosyaya geçirilmesi gereken bağımsız değişkenleri belirtir. Bağımsız değişkenler içeren parametrelerin listesi olabilir.
    • WorkingFolder , başlatılacak işlem için çalışma dizinini belirtir. Üç değer belirtebilirsiniz:
      • CodeBase çalışma dizininin uygulama paketindeki kod dizinine (Code önceki dosya yapısında gösterilen dizin) ayarlandığını belirtir.
      • CodePackage çalışma dizininin uygulama paketinin köküne (GuestService1Pkg önceki dosya yapısında gösterilen) ayarlandığını belirtir.
      • Work dosyaların work adlı bir alt dizine yerleştirildiğini belirtir.
  4. Hizmetinize bir ad verin ve Tamam’a tıklayın.
  5. Hizmetinizin iletişim için bir uç noktaya ihtiyacı varsa, artık protokolü, bağlantı noktasını ve türü ServiceManifest.xml dosyasına ekleyebilirsiniz. Örneğin: <Endpoint Name="NodeAppTypeEndpoint" Protocol="http" Port="3000" UriScheme="http" PathSuffix="myapp/" Type="Input" />.
  6. Artık Visual Studio'da çözümün hatalarını ayıklayarak paket ve yayımlama eylemini yerel kümenizde kullanabilirsiniz. Hazır olduğunuzda, uygulamayı uzak bir kümede yayımlayabilir veya çözümü kaynak denetimine iade edebilirsiniz.
  7. Service Fabric Explorer'de çalışan konuk yürütülebilir hizmetinizi nasıl görüntüleyebileceğinizi görmek için çalışan uygulamanızı denetleyin bölümünü okuyun.

Örnek bir kılavuz için bkz. Visual Studio kullanarak ilk konuk yürütülebilir uygulamanızı oluşturma.

Visual Studio ile birden çok yürütülebilir dosyayı paketleme

Visual Studio'yu kullanarak birden çok konuk yürütülebilir dosyası içeren bir uygulama paketi oluşturabilirsiniz. İlk konuk yürütülebilir dosyasını ekledikten sonra uygulama projesine sağ tıklayın ve Add-New> Service Fabric hizmetini seçerek çözüme ikinci konuk yürütülebilir projesini ekleyin.

Not

Visual Studio projesindeki kaynağı bağlamayı seçerseniz, Visual Studio çözümünü derlemek, uygulama paketinizin kaynaktaki değişikliklerle güncel olduğundan emin olur.

Linux'ta var olan bir yürütülebilir dosyayı paketlemek ve dağıtmak için Yeoman kullanma

Linux'ta konuk yürütülebilir dosyası oluşturma ve dağıtma yordamı, C# veya Java uygulaması dağıtmakla aynıdır.

  1. Bir terminal penceresinde yo azuresfguest yazın.
  2. Uygulamanızı adlandırın.
  3. Hizmetinizi adlandırın ve yürütülebilir dosyanın yolu ve çağrılması gereken parametreler de dahil olmak üzere ayrıntıları sağlayın.

Yeoman, uygun uygulama ve bildirim dosyalarıyla birlikte yükleme ve kaldırma betikleriyle birlikte bir uygulama paketi oluşturur.

Linux üzerinde Yeoman kullanarak birden çok yürütülebilir dosyayı paketleme

yo kullanılarak oluşturulmuş bir uygulamaya başka bir hizmet eklemek için aşağıdaki adımları uygulayın:

  1. Dizini mevcut uygulamanın kök dizinine değiştirin. Örneğin Yeoman tarafından oluşturulan uygulama MyApplication ise cd ~/YeomanSamples/MyApplication olacaktır.
  2. komutunu çalıştırın yo azuresfguest:AddService ve gerekli ayrıntıları sağlayın.

Mevcut yürütülebilir dosyayı el ile paketleme ve dağıtma

Konuk yürütülebilir dosyasını el ile paketleme işlemi aşağıdaki genel adımları temel alır:

  1. Paket dizini yapısını oluşturun.
  2. Uygulamanın kodunu ve yapılandırma dosyalarını ekleyin.
  3. Hizmet bildirim dosyasını düzenleyin.
  4. Uygulama bildirim dosyasını düzenleyin.

Paket dizini yapısını oluşturma

Azure Service Fabric Uygulamasını Paketleme bölümünde açıklandığı gibi dizin yapısını oluşturarak başlayabilirsiniz.

Uygulamanın kodunu ve yapılandırma dosyalarını ekleme

Dizin yapısını oluşturduktan sonra, uygulamanın kodunu ve yapılandırma dosyalarını kod ve yapılandırma dizinlerinin altına ekleyebilirsiniz. Kod veya yapılandırma dizinleri altında ek dizinler veya alt dizinler de oluşturabilirsiniz.

Service Fabric, uygulama kök dizininin içeriğinin bir xcopy kısmını yapar, bu nedenle kod ve ayarlar olmak üzere iki üst dizin oluşturmaktan başka kullanılacak önceden tanımlanmış bir yapı yoktur. (İsterseniz farklı adlar seçebilirsiniz. Diğer ayrıntılar sonraki bölümde yer almaktadır.)

Not

Uygulamanın ihtiyaç duyduğu tüm dosyaları ve bağımlılıkları eklediğinizden emin olun. Service Fabric, uygulama paketinin içeriğini, uygulama hizmetlerinin dağıtılacağı kümedeki tüm düğümlere kopyalar. Paket, uygulamanın çalışması için gereken tüm kodu içermelidir. Bağımlılıkların zaten yüklü olduğunu varsaymayın.

Hizmet bildirim dosyasını düzenleme

Sonraki adım, hizmet bildirim dosyasını aşağıdaki bilgileri içerecek şekilde düzenlemektir:

  • Hizmet türünün adı. Bu, Service Fabric'in bir hizmeti tanımlamak için kullandığı bir kimliktir.
  • Uygulamayı başlatmak için kullanılacak komut (ExeHost).
  • Uygulamayı ayarlamak için çalıştırılması gereken tüm betikler (SetupEntrypoint).

Aşağıda bir dosya örneği verilmiştir 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>

Aşağıdaki bölümler, dosyanın güncelleştirmeniz gereken farklı bölümlerinin üzerinden geçer.

ServiceTypes'i güncelleştirme

<ServiceTypes>
  <StatelessServiceType ServiceTypeName="NodeApp" UseImplicitHost="true" />
</ServiceTypes>
  • için ServiceTypeNameistediğiniz herhangi bir adı seçebilirsiniz. değeri, hizmeti tanımlamak için dosyasında kullanılır ApplicationManifest.xml .
  • UseImplicitHost="true" belirtin. Bu öznitelik Service Fabric'e hizmetin kendi içinde bulunan bir uygulamayı temel aldığı konusunda bilgi sağlar, bu nedenle Service Fabric'in tek yapması gereken bunu bir işlem olarak başlatmak ve sistem durumunu izlemektir.

CodePackage'i Güncelleştirme

CodePackage öğesi, hizmet kodunun konumunu (ve sürümünü) belirtir.

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

Name öğesi, hizmet kodunu içeren uygulama paketindeki dizinin adını belirtmek için kullanılır. CodePackage özniteliğine version de sahiptir. Bu, kodun sürümünü belirtmek için kullanılabilir ve service Fabric'teki uygulama yaşam döngüsü yönetim altyapısını kullanarak hizmetin kodunu yükseltmek için de kullanılabilir.

İsteğe bağlı: Kurulumu GüncelleştirmeEntrypoint

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

SetupEntryPoint öğesi, hizmetin kodu başlatılmadan önce yürütülmesi gereken yürütülebilir veya toplu iş dosyasını belirtmek için kullanılır. bu isteğe bağlı bir adımdır, bu nedenle başlatma gerekmiyorsa eklenmesi gerekmez. Hizmet her yeniden başlatıldığında SetupEntryPoint yürütülür.

Tek bir SetupEntryPoint olduğundan, uygulamanın kurulumu birden çok betik gerektiriyorsa kurulum betiklerinin tek bir toplu iş dosyasında gruplanması gerekir. SetupEntryPoint herhangi bir dosya türünü yürütebilir: yürütülebilir dosyalar, toplu iş dosyaları ve PowerShell cmdlet'leri. Diğer ayrıntılar için bkz. SetupEntryPoint'i yapılandırma.

Yukarıdaki örnekte, SetupEntryPoint kod dizininin scripts alt dizininde bulunan adlı LaunchConfig.cmd bir toplu iş dosyası çalıştırır (WorkingFolder öğesinin CodeBase olarak ayarlandığı varsayılır).

EntryPoint'i Güncelleştirme

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

EntryPoint Hizmet bildirim dosyasındaki öğesi, hizmetin nasıl başlatılacağını belirtmek için kullanılır.

öğesi, ExeHost hizmeti başlatmak için kullanılması gereken yürütülebilir dosyayı (ve bağımsız değişkenleri) belirtir. İsteğe bağlı olarak, programın kod paketinin dışında bir dış yürütülebilir dosya olduğunu belirtmek için ExeHost özniteliğini ekleyebilirsinizIsExternalExecutable="true". Örneğin, <ExeHost IsExternalExecutable="true">.

  • Program hizmeti başlatması gereken yürütülebilir dosyanın adını belirtir.
  • Arguments yürütülebilir dosyaya geçirilmesi gereken bağımsız değişkenleri belirtir. Bağımsız değişkenler içeren parametrelerin listesi olabilir.
  • WorkingFolder başlatılacak işlemin çalışma dizinini belirtir. Üç değer belirtebilirsiniz:
    • CodeBase çalışma dizininin uygulama paketindeki kod dizinine (Code önceki dosya yapısındaki dizin) ayarlandığını belirtir.
    • CodePackage çalışma dizininin uygulama paketinin köküne (GuestService1Pkg önceki dosya yapısında) ayarlandığını belirtir.
      • Work dosyaların work adlı bir alt dizine yerleştirildiğini belirtir.

WorkingFolder, göreli yolların uygulama veya başlatma betikleri tarafından kullanılabilmesi için doğru çalışma dizinini ayarlamak için kullanışlıdır.

Uç Noktaları güncelleştirme ve iletişim için Adlandırma Hizmeti'ne kaydolma

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

Yukarıdaki örnekte öğesi, Endpoint uygulamanın dinleyebileceği uç noktaları belirtir. Bu örnekte, Node.js uygulaması 3000 numaralı bağlantı noktasında http'yi dinler.

Ayrıca, diğer hizmetlerin bu hizmette uç nokta adresini bulabilmesi için Service Fabric'in bu uç noktayı Adlandırma Hizmeti'ne yayımlamasını isteyebilirsiniz. Bu, konuk yürütülebilir dosyaları olan hizmetler arasında iletişim kurabilmenizi sağlar. Yayımlanan uç nokta adresi biçimindedir UriScheme://IPAddressOrFQDN:Port/PathSuffix. UriScheme ve PathSuffix isteğe bağlı özniteliklerdir. IPAddressOrFQDN , bu yürütülebilir dosyanın yerleştirildiği düğümün IP adresi veya tam etki alanı adıdır ve sizin için hesaplanır.

Aşağıdaki örnekte, hizmet dağıtıldıktan sonra, Service Fabric Explorer hizmet örneği için yayımlanana http://10.1.4.92:3000/myapp/ benzer bir uç nokta görürsünüz. Veya bu yerel bir makineyse öğesini görürsünüz http://localhost:3000/myapp/.

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

Hizmetler arasında iletişim kurmak için bu adresleri ters proxy ile kullanabilirsiniz.

Uygulama bildirim dosyasını düzenleme

Dosyayı yapılandırdıktan Servicemanifest.xml sonra, doğru hizmet türünün ve adının kullanıldığından emin olmak için dosyada bazı değişiklikler ApplicationManifest.xml yapmanız gerekir.

<?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

öğesinde ServiceManifestImport , uygulamaya eklemek istediğiniz bir veya daha fazla hizmeti belirtebilirsiniz. Hizmetlere, dosyanın bulunduğu ServiceManifest.xml dizinin adını belirten ile ServiceManifestNamebaşvurulur.

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

Günlüğe kaydetmeyi ayarlama

Konuk yürütülebilir dosyaları için, uygulama ve yapılandırma betiklerinin herhangi bir hata gösterip göstermediğini öğrenmek için konsol günlüklerini görebilmek yararlıdır. Konsol yeniden yönlendirmesi, öğesi kullanılarak dosyada ServiceManifest.xmlConsoleRedirection yapılandırılabilir.

Uyarı

Bu, uygulama yük devretmesini etkileyebileceğinden, üretimde dağıtılan bir uygulamada konsol yeniden yönlendirme ilkesini hiçbir zaman kullanmayın. Bunu yalnızca yerel geliştirme ve hata ayıklama amacıyla kullanın.

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

ConsoleRedirection konsol çıkışını (stdout ve stderr) bir çalışma dizinine yeniden yönlendirmek için kullanılabilir. Bu, Service Fabric kümesinde uygulamanın kurulumu veya yürütülmesi sırasında hata olmadığını doğrulama olanağı sağlar.

FileRetentionCount çalışma dizinine kaç tane dosya kaydedildiğini belirler. Örneğin 5 değeri, önceki beş yürütmenin günlük dosyalarının çalışma dizininde depolandığı anlamına gelir.

FileMaxSizeInKb günlük dosyalarının en büyük boyutunu belirtir.

Günlük dosyaları hizmetin çalışma dizinlerinden birine kaydedilir. Dosyaların nerede bulunduğunu belirlemek için Service Fabric Explorer kullanarak hizmetin hangi düğümde çalıştığını ve hangi çalışma dizininin kullanıldığını belirleyin. Bu işlem, bu makalenin devamında ele alınmıştır.

Dağıtım

Son adım uygulamanızı dağıtmaktır. Aşağıdaki PowerShell betiği, uygulamanızı yerel geliştirme kümesine dağıtmayı ve yeni bir Service Fabric hizmetini başlatmayı gösterir.


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

İpucu

Paket büyükse veya çok fazla dosyası varsa görüntü deposuna kopyalamadan önce paketi sıkıştırın. Daha fazla bilgi için buraya bakabilirsiniz.

Bir Service Fabric hizmeti çeşitli "yapılandırmalarda" dağıtılabilir. Örneğin, tek veya birden çok örnek olarak dağıtılabilir veya Service Fabric kümesinin her düğümünde hizmetin bir örneği olacak şekilde dağıtılabilir.

InstanceCount Cmdlet'in New-ServiceFabricService parametresi, Service Fabric kümesinde hizmetin kaç örneğinin başlatılması gerektiğini belirtmek için kullanılır. Dağıttığınız InstanceCount uygulamanın türüne bağlı olarak değeri ayarlayabilirsiniz. En yaygın iki senaryo şunlardır:

  • InstanceCount = "1". Bu durumda, kümede hizmetin yalnızca bir örneği dağıtılır. Hizmetin hangi düğümde dağıtılacağı Service Fabric'in zamanlayıcısı tarafından belirlenir.
  • InstanceCount ="-1". Bu durumda hizmetin bir örneği Service Fabric kümesindeki her düğüme dağıtılır. Sonuç, kümedeki her düğüm için hizmetin bir (ve yalnızca bir) örneğine sahip olmaktır.

İstemci uygulamalarının uç noktayı kullanmak için kümedeki düğümlerden herhangi birine "bağlanması" gerektiğinden, bu, ön uç uygulamalar (örneğin rest uç noktası) için kullanışlı bir yapılandırmadır. Bu yapılandırma, örneğin Service Fabric kümesinin tüm düğümleri bir yük dengeleyiciye bağlandığında da kullanılabilir. İstemci trafiği daha sonra kümedeki tüm düğümlerde çalışan hizmet arasında dağıtılabilir.

Çalışan uygulamanızı denetleme

Service Fabric Explorer'da hizmetin çalıştığı düğümü belirleyin. Bu örnekte Node1 üzerinde çalışır:

Hizmetin çalıştığı düğüm

Düğüme gidip uygulamaya göz atarsanız, disk üzerindeki konumu da dahil olmak üzere temel düğüm bilgilerini görürsünüz.

Disk üzerindeki konum

Sunucu Gezgini'ni kullanarak dizine göz atarsanız, aşağıdaki ekran görüntüsünde gösterildiği gibi çalışma dizinini ve hizmetin günlük klasörünü bulabilirsiniz:

Günlüğün konumu

Sonraki adımlar

Bu makalede, konuk yürütülebilir dosyasını paketlemeyi ve Service Fabric'e dağıtmayı öğrendiniz. İlgili bilgiler ve görevler için aşağıdaki makalelere bakın.